Skip to content

Commit

Permalink
Fix KHR_no_error support
Browse files Browse the repository at this point in the history
  • Loading branch information
flibitijibibo committed Aug 25, 2017
1 parent d8fc70e commit 685890a
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 26 deletions.
25 changes: 13 additions & 12 deletions src/video/SDL_egl.c
Expand Up @@ -463,18 +463,6 @@ SDL_EGL_ChooseConfig(_THIS)
attribs[i++] = _this->gl_config.multisamplesamples; attribs[i++] = _this->gl_config.multisamplesamples;
} }


if (_this->gl_config.no_error) {
#ifdef GL_KHR_no_error
if (SDL_EGL_HasExtension(_this, SDL_EGL_DISPLAY_EXTENSION, "GL_KHR_no_error")) {
attribs[i++] = EGL_CONTEXT_OPENGL_NO_ERROR_KHR;
attribs[i++] = _this->gl_config.no_error;
} else
#endif
{
return SDL_SetError("EGL implementation does not support no_error contexts");
}
}

if (_this->gl_config.framebuffer_srgb_capable) { if (_this->gl_config.framebuffer_srgb_capable) {
#ifdef EGL_KHR_gl_colorspace #ifdef EGL_KHR_gl_colorspace
if (SDL_EGL_HasExtension(_this, SDL_EGL_DISPLAY_EXTENSION, "EGL_KHR_gl_colorspace")) { if (SDL_EGL_HasExtension(_this, SDL_EGL_DISPLAY_EXTENSION, "EGL_KHR_gl_colorspace")) {
Expand Down Expand Up @@ -618,6 +606,19 @@ SDL_EGL_CreateContext(_THIS, EGLSurface egl_surface)
} }
} }


if (_this->gl_config.no_error) {
#ifdef EGL_KHR_create_context_no_error
if (SDL_EGL_HasExtension(_this, SDL_EGL_DISPLAY_EXTENSION, "EGL_KHR_create_context_no_error")) {
attribs[attr++] = EGL_CONTEXT_OPENGL_NO_ERROR_KHR;
attribs[attr++] = _this->gl_config.no_error;
} else
#endif
{
SDL_SetError("EGL implementation does not support no_error contexts");
return NULL;
}
}

attribs[attr++] = EGL_NONE; attribs[attr++] = EGL_NONE;


/* Bind the API */ /* Bind the API */
Expand Down
20 changes: 13 additions & 7 deletions src/video/windows/SDL_windowsopengl.c
Expand Up @@ -468,6 +468,11 @@ WIN_GL_InitExtensions(_THIS)
_this->gl_data->HAS_WGL_ARB_create_context_robustness = SDL_TRUE; _this->gl_data->HAS_WGL_ARB_create_context_robustness = SDL_TRUE;
} }


/* Check for WGL_ARB_create_context_no_error */
if (HasExtension("WGL_ARB_create_context_no_error", extensions)) {
_this->gl_data->HAS_WGL_ARB_create_context_no_error = SDL_TRUE;
}

_this->gl_data->wglMakeCurrent(hdc, NULL); _this->gl_data->wglMakeCurrent(hdc, NULL);
_this->gl_data->wglDeleteContext(hglrc); _this->gl_data->wglDeleteContext(hglrc);
ReleaseDC(hwnd, hdc); ReleaseDC(hwnd, hdc);
Expand Down Expand Up @@ -598,11 +603,6 @@ WIN_GL_SetupWindowInternal(_THIS, SDL_Window * window)
*iAttr++ = _this->gl_config.framebuffer_srgb_capable; *iAttr++ = _this->gl_config.framebuffer_srgb_capable;
} }


if (_this->gl_config.no_error) {
*iAttr++ = WGL_CONTEXT_OPENGL_NO_ERROR_ARB;
*iAttr++ = _this->gl_config.no_error;
}

/* We always choose either FULL or NO accel on Windows, because of flaky /* We always choose either FULL or NO accel on Windows, because of flaky
drivers. If the app didn't specify, we use FULL, because that's drivers. If the app didn't specify, we use FULL, because that's
probably what they wanted (and if you didn't care and got FULL, that's probably what they wanted (and if you didn't care and got FULL, that's
Expand Down Expand Up @@ -728,8 +728,8 @@ WIN_GL_CreateContext(_THIS, SDL_Window * window)
SDL_SetError("GL 3.x is not supported"); SDL_SetError("GL 3.x is not supported");
context = temp_context; context = temp_context;
} else { } else {
/* max 12 attributes plus terminator */ /* max 14 attributes plus terminator */
int attribs[13] = { int attribs[15] = {
WGL_CONTEXT_MAJOR_VERSION_ARB, _this->gl_config.major_version, WGL_CONTEXT_MAJOR_VERSION_ARB, _this->gl_config.major_version,
WGL_CONTEXT_MINOR_VERSION_ARB, _this->gl_config.minor_version, WGL_CONTEXT_MINOR_VERSION_ARB, _this->gl_config.minor_version,
0 0
Expand Down Expand Up @@ -764,6 +764,12 @@ WIN_GL_CreateContext(_THIS, SDL_Window * window)
WGL_NO_RESET_NOTIFICATION_ARB; WGL_NO_RESET_NOTIFICATION_ARB;
} }


/* only set if wgl extension is available */
if (_this->gl_data->HAS_WGL_ARB_create_context_no_error) {
attribs[iattr++] = WGL_CONTEXT_OPENGL_NO_ERROR_ARB;
attribs[iattr++] = _this->gl_config.no_error;
}

attribs[iattr++] = 0; attribs[iattr++] = 0;


/* Create the GL 3.x context */ /* Create the GL 3.x context */
Expand Down
1 change: 1 addition & 0 deletions src/video/windows/SDL_windowsopengl.h
Expand Up @@ -31,6 +31,7 @@ struct SDL_GLDriverData
SDL_bool HAS_WGL_EXT_swap_control_tear; SDL_bool HAS_WGL_EXT_swap_control_tear;
SDL_bool HAS_WGL_ARB_context_flush_control; SDL_bool HAS_WGL_ARB_context_flush_control;
SDL_bool HAS_WGL_ARB_create_context_robustness; SDL_bool HAS_WGL_ARB_create_context_robustness;
SDL_bool HAS_WGL_ARB_create_context_no_error;


/* Max version of OpenGL ES context that can be created if the /* Max version of OpenGL ES context that can be created if the
implementation supports WGL_EXT_create_context_es2_profile. implementation supports WGL_EXT_create_context_es2_profile.
Expand Down
20 changes: 13 additions & 7 deletions src/video/x11/SDL_x11opengl.c
Expand Up @@ -406,6 +406,11 @@ X11_GL_InitExtensions(_THIS)
if (HasExtension("GLX_ARB_create_context_robustness", extensions)) { if (HasExtension("GLX_ARB_create_context_robustness", extensions)) {
_this->gl_data->HAS_GLX_ARB_create_context_robustness = SDL_TRUE; _this->gl_data->HAS_GLX_ARB_create_context_robustness = SDL_TRUE;
} }

/* Check for GLX_ARB_create_context_no_error */
if (HasExtension("GLX_ARB_create_context_no_error", extensions)) {
_this->gl_data->HAS_GLX_ARB_create_context_no_error = SDL_TRUE;
}
} }


/* glXChooseVisual and glXChooseFBConfig have some small differences in /* glXChooseVisual and glXChooseFBConfig have some small differences in
Expand Down Expand Up @@ -501,11 +506,6 @@ X11_GL_GetAttributes(_THIS, Display * display, int screen, int * attribs, int si
attribs[i++] = True; /* always needed, for_FBConfig or not! */ attribs[i++] = True; /* always needed, for_FBConfig or not! */
} }


if (_this->gl_config.no_error) {
attribs[i++] = GLX_CONTEXT_OPENGL_NO_ERROR_ARB;
attribs[i++] = _this->gl_config.no_error;
}

if (_this->gl_config.accelerated >= 0 && if (_this->gl_config.accelerated >= 0 &&
_this->gl_data->HAS_GLX_EXT_visual_rating) { _this->gl_data->HAS_GLX_EXT_visual_rating) {
attribs[i++] = GLX_VISUAL_CAVEAT_EXT; attribs[i++] = GLX_VISUAL_CAVEAT_EXT;
Expand Down Expand Up @@ -638,8 +638,8 @@ X11_GL_CreateContext(_THIS, SDL_Window * window)
context = context =
_this->gl_data->glXCreateContext(display, vinfo, share_context, True); _this->gl_data->glXCreateContext(display, vinfo, share_context, True);
} else { } else {
/* max 12 attributes plus terminator */ /* max 14 attributes plus terminator */
int attribs[13] = { int attribs[15] = {
GLX_CONTEXT_MAJOR_VERSION_ARB, GLX_CONTEXT_MAJOR_VERSION_ARB,
_this->gl_config.major_version, _this->gl_config.major_version,
GLX_CONTEXT_MINOR_VERSION_ARB, GLX_CONTEXT_MINOR_VERSION_ARB,
Expand Down Expand Up @@ -678,6 +678,12 @@ X11_GL_CreateContext(_THIS, SDL_Window * window)
GLX_NO_RESET_NOTIFICATION_ARB; GLX_NO_RESET_NOTIFICATION_ARB;
} }


/* only set if glx extension is available */
if( _this->gl_data->HAS_GLX_ARB_create_context_no_error ) {
attribs[iattr++] = GLX_CONTEXT_OPENGL_NO_ERROR_ARB;
attribs[iattr++] = _this->gl_config.no_error;
}

attribs[iattr++] = 0; attribs[iattr++] = 0;


/* Get a pointer to the context creation function for GL 3.0 */ /* Get a pointer to the context creation function for GL 3.0 */
Expand Down
1 change: 1 addition & 0 deletions src/video/x11/SDL_x11opengl.h
Expand Up @@ -36,6 +36,7 @@ struct SDL_GLDriverData
SDL_bool HAS_GLX_EXT_swap_control_tear; SDL_bool HAS_GLX_EXT_swap_control_tear;
SDL_bool HAS_GLX_ARB_context_flush_control; SDL_bool HAS_GLX_ARB_context_flush_control;
SDL_bool HAS_GLX_ARB_create_context_robustness; SDL_bool HAS_GLX_ARB_create_context_robustness;
SDL_bool HAS_GLX_ARB_create_context_no_error;


/* Max version of OpenGL ES context that can be created if the /* Max version of OpenGL ES context that can be created if the
implementation supports GLX_EXT_create_context_es2_profile. implementation supports GLX_EXT_create_context_es2_profile.
Expand Down

0 comments on commit 685890a

Please sign in to comment.