summaryrefslogtreecommitdiff
path: root/glx
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2012-07-04 15:21:07 -0700
committerKeith Packard <keithp@keithp.com>2012-07-05 11:45:15 -0700
commitaef0b4593e165634ca7fa0745882dad12a54ebed (patch)
treefa6ec8bccb0fd8f7e8d86389963bc1cc8a3675c8 /glx
parentf8198285cfc4704bc4d56922e5a2e99030a83778 (diff)
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: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Dave Airlie <airlied@redhat.com> Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'glx')
-rw-r--r--glx/createcontext.c16
-rw-r--r--glx/glxcmds.c10
-rw-r--r--glx/glxcontext.h5
3 files changed, 31 insertions, 0 deletions
diff --git a/glx/createcontext.c b/glx/createcontext.c
index 205a91959..7d653e977 100644
--- a/glx/createcontext.c
+++ b/glx/createcontext.c
@@ -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.
*/
diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index d483bbf8a..d05421971 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -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)) {
diff --git a/glx/glxcontext.h b/glx/glxcontext.h
index b803a7fd1..4764e56f5 100644
--- a/glx/glxcontext.h
+++ b/glx/glxcontext.h
@@ -104,6 +104,11 @@ struct __GLXcontext {
*/
GLenum renderMode;
+ /**
+ * Reset notification strategy used when a GPU reset occurs.
+ */
+ GLenum resetNotificationStrategy;
+
/*
** Buffers for feedback and selection.
*/