summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2011-12-05 10:55:20 -0800
committerIan Romanick <ian.d.romanick@intel.com>2012-05-23 13:07:51 -0700
commit724176a87afdb9a79ce6307214bc2e869530aef3 (patch)
tree5f04d4a01c9cb91681977090a3e582b948d771f3
parent9bc53d8cb04af2be3feeebb1b10774c2d599a76b (diff)
glx: Fix mishandling of shared contexts
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Eric Anholt <eric@anholt.net> Reviewed-by: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
-rw-r--r--glx/glxcmds.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index 24fed8f63..6fa10fe66 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -251,20 +251,20 @@ DoCreateContext(__GLXclientState * cl, GLXContextID gcId,
&shareglxc, &err))
return err;
- if (shareglxc->isDirect) {
- /*
- ** NOTE: no support for sharing display lists between direct
- ** contexts, even if they are in the same address space.
- */
-#if 0
- /* Disabling this code seems to allow shared display lists
- * and texture objects to work. We'll leave it disabled for now.
- */
+ /* Page 26 (page 32 of the PDF) of the GLX 1.4 spec says:
+ *
+ * "The server context state for all sharing contexts must exist
+ * in a single address space or a BadMatch error is generated."
+ *
+ * If the share context is indirect, force the new context to also be
+ * indirect. If the shard context is direct but the new context
+ * cannot be direct, generate BadMatch.
+ */
+ if (shareglxc->isDirect && !isDirect) {
client->errorValue = shareList;
return BadMatch;
-#endif
}
- else {
+ else if (!shareglxc->isDirect) {
/*
** Create an indirect context regardless of what the client asked
** for; this way we can share display list space with shareList.