aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar kkinnunen <kkinnunen@nvidia.com>2015-12-08 23:52:40 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2015-12-08 23:52:40 -0800
commitef6a1ca531b58c725c42356c10d17cbf1930c40c (patch)
tree3f2341e6d44b377cd1eac33050a6c75ea5b76407
parent808ce2886d732b1055f89c8fb0f1b11b47fcb0ce (diff)
Use correct config variable in command buffer gl context
Use correct config variable in command buffer gl context. Before, the fConfig was errorneously used to initialize the local variable. eglChooseConfig would update the local variable and the fConfig member variable would never be updated. Also add error checks to all initialization function calls. BUG=skia: Review URL: https://codereview.chromium.org/1505233002
-rw-r--r--src/gpu/gl/command_buffer/SkCommandBufferGLContext.cpp61
1 files changed, 43 insertions, 18 deletions
diff --git a/src/gpu/gl/command_buffer/SkCommandBufferGLContext.cpp b/src/gpu/gl/command_buffer/SkCommandBufferGLContext.cpp
index 585f1d079e..61eab4bebf 100644
--- a/src/gpu/gl/command_buffer/SkCommandBufferGLContext.cpp
+++ b/src/gpu/gl/command_buffer/SkCommandBufferGLContext.cpp
@@ -185,46 +185,73 @@ void SkCommandBufferGLContext::initializeGLContext(void* nativeWindow, const int
const int* surfaceAttribs) {
LoadCommandBufferOnce();
if (!gfFunctionsLoadedSuccessfully) {
+ SkDebugf("Command Buffer: Could not load EGL functions.\n");
return;
}
- fDisplay = gfGetDisplay(static_cast<EGLNativeDisplayType>(EGL_DEFAULT_DISPLAY));
+ fDisplay = gfGetDisplay(EGL_DEFAULT_DISPLAY);
if (EGL_NO_DISPLAY == fDisplay) {
- SkDebugf("Could not create EGL display!");
+ SkDebugf("Command Buffer: Could not create EGL display.\n");
return;
}
EGLint majorVersion;
EGLint minorVersion;
- gfInitialize(fDisplay, &majorVersion, &minorVersion);
+ if (!gfInitialize(fDisplay, &majorVersion, &minorVersion)) {
+ SkDebugf("Command Buffer: Could not initialize EGL display.\n");
+ this->destroyGLContext();
+ return;
+ }
- EGLConfig surfaceConfig = static_cast<EGLConfig>(fConfig);
EGLint numConfigs;
- gfChooseConfig(fDisplay, configAttribs, &surfaceConfig, 1, &numConfigs);
+ if (!gfChooseConfig(fDisplay, configAttribs, static_cast<EGLConfig*>(&fConfig), 1,
+ &numConfigs) || numConfigs != 1) {
+ SkDebugf("Command Buffer: Could not choose EGL config.\n");
+ this->destroyGLContext();
+ return;
+ }
if (nativeWindow) {
- fSurface = gfCreateWindowSurface(fDisplay, surfaceConfig,
- (EGLNativeWindowType)nativeWindow, surfaceAttribs);
+ fSurface = gfCreateWindowSurface(fDisplay,
+ static_cast<EGLConfig>(fConfig),
+ (EGLNativeWindowType)nativeWindow,
+ surfaceAttribs);
} else {
- fSurface = gfCreatePbufferSurface(fDisplay, surfaceConfig, surfaceAttribs);
+ fSurface = gfCreatePbufferSurface(fDisplay,
+ static_cast<EGLConfig>(fConfig),
+ surfaceAttribs);
+ }
+ if (EGL_NO_SURFACE == fSurface) {
+ SkDebugf("Command Buffer: Could not create EGL surface.\n");
+ this->destroyGLContext();
+ return;
}
static const EGLint contextAttribs[] = {
EGL_CONTEXT_CLIENT_VERSION, 2,
EGL_NONE
};
- fContext = gfCreateContext(fDisplay, surfaceConfig, nullptr, contextAttribs);
+ fContext = gfCreateContext(fDisplay, static_cast<EGLConfig>(fConfig), nullptr, contextAttribs);
+ if (EGL_NO_CONTEXT == fContext) {
+ SkDebugf("Command Buffer: Could not create EGL context.\n");
+ this->destroyGLContext();
+ return;
+ }
- gfMakeCurrent(fDisplay, fSurface, fSurface, fContext);
+ if (!gfMakeCurrent(fDisplay, fSurface, fSurface, fContext)) {
+ SkDebugf("Command Buffer: Could not make EGL context current.\n");
+ this->destroyGLContext();
+ return;
+ }
SkAutoTUnref<const GrGLInterface> gl(GrGLCreateCommandBufferInterface());
if (nullptr == gl.get()) {
- SkDebugf("Could not create CommandBuffer GL interface!\n");
+ SkDebugf("Command Buffer: Could not create CommandBuffer GL interface.\n");
this->destroyGLContext();
return;
}
if (!gl->validate()) {
- SkDebugf("Could not validate CommandBuffer GL interface!\n");
+ SkDebugf("Command Buffer: Could not validate CommandBuffer GL interface.\n");
this->destroyGLContext();
return;
}
@@ -264,7 +291,7 @@ void SkCommandBufferGLContext::onPlatformMakeCurrent() const {
return;
}
if (!gfMakeCurrent(fDisplay, fSurface, fSurface, fContext)) {
- SkDebugf("Could not set the context.\n");
+ SkDebugf("Command Buffer: Could not make EGL context current.\n");
}
}
@@ -273,7 +300,7 @@ void SkCommandBufferGLContext::onPlatformSwapBuffers() const {
return;
}
if (!gfSwapBuffers(fDisplay, fSurface)) {
- SkDebugf("Could not complete gfSwapBuffers.\n");
+ SkDebugf("Command Buffer: Could not complete gfSwapBuffers.\n");
}
}
@@ -298,14 +325,12 @@ bool SkCommandBufferGLContext::makeCurrent() {
int SkCommandBufferGLContext::getStencilBits() {
EGLint result = 0;
- EGLConfig surfaceConfig = static_cast<EGLConfig>(fConfig);
- gfGetConfigAttrib(fDisplay, surfaceConfig, EGL_STENCIL_SIZE, &result);
+ gfGetConfigAttrib(fDisplay, static_cast<EGLConfig>(fConfig), EGL_STENCIL_SIZE, &result);
return result;
}
int SkCommandBufferGLContext::getSampleCount() {
EGLint result = 0;
- EGLConfig surfaceConfig = static_cast<EGLConfig>(fConfig);
- gfGetConfigAttrib(fDisplay, surfaceConfig, EGL_SAMPLES, &result);
+ gfGetConfigAttrib(fDisplay, static_cast<EGLConfig>(fConfig), EGL_SAMPLES, &result);
return result;
}