[PATCH 01/11] glx: Fix mishandling of shared contexts

Ian Romanick idr at freedesktop.org
Fri Dec 23 15:18:19 PST 2011


From: Ian Romanick <ian.d.romanick at intel.com>

Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
---
 glx/glxcmds.c |   22 +++++++++++-----------
 1 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index d5b764f..c5de60d 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -248,19 +248,19 @@ 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.
-- 
1.7.6.4



More information about the xorg-devel mailing list