Commit aef0b459 authored by Ian Romanick's avatar Ian Romanick Committed by Keith Packard
Browse files

glx: Track the reset notification strategy for a context



Also require that the reset notification for a new context and the other
context in the share group match.  There isn't yet any way to specify a
non-default reset notification strategy, but that will come.
Signed-off-by: default avatarIan Romanick <ian.d.romanick@intel.com>
Reviewed-by: default avatarDave Airlie <airlied@redhat.com>
Signed-off-by: Keith Packard's avatarKeith Packard <keithp@keithp.com>
parent f8198285
......@@ -90,6 +90,13 @@ __glXDisp_CreateContextAttribsARB(__GLXclientState * cl, GLbyte * pc)
__GLXconfig *config;
int err;
/* The GLX_ARB_create_context_robustness spec says:
*
* "The default value for GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB
* is GLX_NO_RESET_NOTIFICATION_ARB."
*/
int reset = GLX_NO_RESET_NOTIFICATION_ARB;
/* The GLX_ARB_create_context_profile spec says:
*
* "The default value for GLX_CONTEXT_PROFILE_MASK_ARB is
......@@ -259,6 +266,14 @@ __glXDisp_CreateContextAttribsARB(__GLXclientState * cl, GLbyte * pc)
return __glXError(GLXBadProfileARB);
}
/* The GLX_ARB_create_context_robustness spec says:
*
* "* If the reset notification behavior of <share_context> and the
* newly created context are different, BadMatch is generated."
*/
if (shareCtx != NULL && shareCtx->resetNotificationStrategy != reset)
return BadMatch;
/* There is no GLX protocol for desktop OpenGL versions after 1.4. There
* is no GLX protocol for any version of OpenGL ES. If the application is
* requested an indirect rendering context for a version that cannot be
......@@ -306,6 +321,7 @@ __glXDisp_CreateContextAttribsARB(__GLXclientState * cl, GLbyte * pc)
ctx->selectBufSize = 0;
ctx->drawPriv = NULL;
ctx->readPriv = NULL;
ctx->resetNotificationStrategy = reset;
/* Add the new context to the various global tables of GLX contexts.
*/
......
......@@ -308,6 +308,16 @@ DoCreateContext(__GLXclientState * cl, GLXContextID gcId,
glxc->drawPriv = NULL;
glxc->readPriv = NULL;
/* The GLX_ARB_create_context_robustness spec says:
*
* "The default value for GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB
* is GLX_NO_RESET_NOTIFICATION_ARB."
*
* Without using glXCreateContextAttribsARB, there is no way to specify a
* non-default reset notification strategy.
*/
glxc->resetNotificationStrategy = GLX_NO_RESET_NOTIFICATION_ARB;
/* Add the new context to the various global tables of GLX contexts.
*/
if (!__glXAddContext(glxc)) {
......
......@@ -104,6 +104,11 @@ struct __GLXcontext {
*/
GLenum renderMode;
/**
* Reset notification strategy used when a GPU reset occurs.
*/
GLenum resetNotificationStrategy;
/*
** Buffers for feedback and selection.
*/
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment