File mesa-chromium-opcode-fix.diff of Package Mesa

commit 0452343805a528b28d3110911dccbcc8a9d6b619
Author: David Reveman <davidr@novell.com>
Date:   Thu Apr 16 11:23:37 2009 -0400

    Don't call __glXSetupForCommand.

diff --git a/src/glx/x11/dricr_glx.c b/src/glx/x11/dricr_glx.c
index 2d2f1df..94c0f4d 100644
--- a/src/glx/x11/dricr_glx.c
+++ b/src/glx/x11/dricr_glx.c
@@ -118,6 +118,7 @@ struct __GLXDRIdisplayPrivateRec
 struct __GLXDRIscreenPrivateRec
 {
     __GLXDRIscreen                   base;
+    __GLXdisplayPrivate              *pd;
     struct __GLXDRIdisplayPrivateRec *pdp;
 };
 
@@ -482,21 +483,16 @@ driDestroyContext (__GLXDRIcontext    *context,
     __GLXDRIscreenPrivate  *psp = (__GLXDRIscreenPrivate *)
 	pcp->psc->driScreen;
     xGLXDestroyContextReq  *req;
-    CARD8                  opcode;
 
     (*psp->pdp->spu->dispatch_table.DestroyContext) (pcp->spuContext);
 
-    opcode = __glXSetupForCommand (dpy);
-    if (opcode)
-    {
-	LockDisplay (dpy);
-	GetReq (GLXDestroyContext, req);
-	req->reqType = opcode;
-	req->glxCode = X_GLXDestroyContext;
-	req->context = pcp->xid;
-	UnlockDisplay (dpy);
-	SyncHandle ();
-    }
+    LockDisplay (dpy);
+    GetReq (GLXDestroyContext, req);
+    req->reqType = psp->pd->majorOpcode;
+    req->glxCode = X_GLXDestroyContext;
+    req->context = pcp->xid;
+    UnlockDisplay (dpy);
+    SyncHandle ();
 
     if (currentGC && currentGC->driContext == context)
 	_glapi_set_dispatch (NULL);
@@ -543,7 +539,6 @@ driCreateContext (__GLXscreenConfigs     *psc,
     GLint                  spuShareContext = 0;
     xGLXCreateContextReq   *req;
     Display                *dpy;
-    CARD8                  opcode;
     GLuint                 value[2];
 
     if (!psc || !psp)
@@ -576,17 +571,9 @@ driCreateContext (__GLXscreenConfigs     *psc,
 	return NULL;
     }
 
-    opcode = __glXSetupForCommand (dpy);
-    if (!opcode)
-    {
-	(*psp->pdp->spu->dispatch_table.DestroyContext) (pcp->spuContext);
-	Xfree (pcp);
-	return NULL;
-    }
-
     LockDisplay (dpy);
     GetReq (GLXCreateContext, req);
-    req->reqType = opcode;
+    req->reqType = gc->majorOpcode;
     req->glxCode = X_GLXCreateContext;
     req->context = pcp->xid = XAllocID (dpy);
     req->visual = mode->visualID;
@@ -618,23 +605,16 @@ driDestroyDrawable (__GLXDRIdrawable *pdraw)
 	pdraw->psc->driScreen;
     xGLXDestroyPbufferReq   *req;
     Display                 *dpy = pdraw->psc->dpy;
-    CARD8                   opcode;
 
     (*psp->pdp->spu->dispatch_table.WindowDestroy) (pdp->spuDrawable);
 
-    opcode = __glXSetupForCommand (dpy);
-    if (opcode)
-    {
-	LockDisplay (dpy);
-
-	GetReqExtra(GLXDestroyPbuffer, 4, req);
-	req->reqType = opcode;
-	req->glxCode = X_GLXDestroyWindow;
-	req->pbuffer = (GLXPbuffer) pdp->xid;
-
-	UnlockDisplay (dpy);
-	SyncHandle ();
-    }
+    LockDisplay (dpy);
+    GetReqExtra(GLXDestroyPbuffer, 4, req);
+    req->reqType = psp->pd->majorOpcode;
+    req->glxCode = X_GLXDestroyWindow;
+    req->pbuffer = (GLXPbuffer) pdp->xid;
+    UnlockDisplay (dpy);
+    SyncHandle ();
 
     Xfree (pdp);
 }
@@ -649,15 +629,13 @@ driCreateDrawable (__GLXscreenConfigs     *psc,
     __GLXDRIscreenPrivate   *psp = (__GLXDRIscreenPrivate *) psc->driScreen;
     xGLXCreateWindowReq     *req;
     Display                 *dpy = psc->dpy;
-    CARD8                   opcode;
     GLuint                  value[2];
 
     if (mode->fbconfigID == GLX_DONT_CARE)
     {
-	__GLXdisplayPrivate *priv = __glXInitialize (dpy);
-	__GLcontextModes    *modes;
+	__GLcontextModes *modes;
 
-	for (modes = priv->screenConfigs[mode->screen].configs;
+	for (modes = psp->pd->screenConfigs[mode->screen].configs;
 	     modes != NULL;
 	     modes = modes->next)
 	    if (modes->fbconfigID != GLX_DONT_CARE &&
@@ -695,17 +673,9 @@ driCreateDrawable (__GLXscreenConfigs     *psc,
 	return NULL;
     }
 
-    opcode = __glXSetupForCommand (dpy);
-    if (!opcode)
-    {
-	(*psp->pdp->spu->dispatch_table.WindowDestroy) (pdp->spuDrawable);
-	Xfree (pdp);
-	return None;
-    }
-
     LockDisplay (dpy);
     GetReq (GLXCreateWindow, req);
-    req->reqType = opcode;
+    req->reqType = psp->pd->majorOpcode;
     req->glxCode = X_GLXCreateWindow;
     req->screen = (CARD32) mode->screen;
     req->fbconfig = mode->fbconfigID;
@@ -764,6 +734,7 @@ driCreateScreen (__GLXscreenConfigs *psc,
     psp->base.createDrawable = driCreateDrawable;
     psp->base.swapBuffers    = driSwapBuffers;
 
+    psp->pd  = pd;
     psp->pdp = pdp;
 
     return &psp->base;
openSUSE Build Service is sponsored by