xserver/GL/glx g_disptab_EXT.c, 1.6, 1.7 g_disptab_EXT.h, 1.6, 1.7 g_single.c, 1.5, 1.6 g_singleswap.c, 1.5, 1.6 glxcmds.c, 1.13, 1.14 glxcmdsswap.c, 1.7, 1.8 glxdrawable.h, 1.4, 1.5 glxext.c, 1.6, 1.7 glxext.h, 1.5, 1.6 glxserver.h, 1.7, 1.8

David Reveman <xserver-commit-u7BhqnqprCWvj1b/[email protected]> Fri, 10 Jun 2005 05:30:41 -0700 (PDT)
Newsgroups gmane.comp.freedesktop.xserver.cvs
Message-ID <[email protected]>
Committed by: davidr

Update of /cvs/xserver/xserver/GL/glx
In directory gabe:/tmp/cvs-serv14008/GL/glx

Modified Files:
	g_disptab_EXT.c g_disptab_EXT.h g_single.c g_singleswap.c 
	glxcmds.c glxcmdsswap.c glxdrawable.h glxext.c glxext.h 
	glxserver.h 
Log Message:
New implementation of GLX_MESA_render_texture

Index: g_disptab_EXT.c
===================================================================
RCS file: /cvs/xserver/xserver/GL/glx/g_disptab_EXT.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- g_disptab_EXT.c	7 Jun 2005 15:25:02 -0000	1.6
+++ g_disptab_EXT.c	10 Jun 2005 12:30:39 -0000	1.7
@@ -2209,9 +2209,6 @@
 	__glXDisp_DeleteTexturesEXT, /* 12 */
 	__glXDisp_GenTexturesEXT, /* 13 */
 	__glXDisp_IsTextureEXT, /* 14 */
-	__glXDisp_BindTexImageMESA, /* 15 */
-	__glXDisp_ReleaseTexImageMESA, /* 16 */
-	__glXDisp_QueryDrawableMESA /* 17 */
 };
 
 
@@ -4392,8 +4389,5 @@
 	__glXDispSwap_DeleteTexturesEXT, /* 12 */
 	__glXDispSwap_GenTexturesEXT, /* 13 */
 	__glXDispSwap_IsTextureEXT, /* 14 */
-	__glXDispSwap_BindTexImageMESA, /* 15 */
-	__glXDispSwap_ReleaseTexImageMESA, /* 16 */
-	__glXDispSwap_QueryDrawableMESA /* 17 */
 };
 

Index: g_disptab_EXT.h
===================================================================
RCS file: /cvs/xserver/xserver/GL/glx/g_disptab_EXT.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- g_disptab_EXT.h	7 Jun 2005 15:25:02 -0000	1.6
+++ g_disptab_EXT.h	10 Jun 2005 12:30:39 -0000	1.7
@@ -142,17 +142,10 @@
 extern void __glXDispSwap_PointParameterfvARB(GLbyte*);
 extern void __glXDispSwap_ActiveStencilFaceEXT(GLbyte*);
 
-extern int __glXDisp_BindTexImageMESA(__GLXclientState*, GLbyte*);
-extern int __glXDisp_ReleaseTexImageMESA(__GLXclientState*, GLbyte*);
-extern int __glXDisp_QueryDrawableMESA(__GLXclientState*, GLbyte*);
-extern int __glXDispSwap_BindTexImageMESA(__GLXclientState*, GLbyte*);
-extern int __glXDispSwap_ReleaseTexImageMESA(__GLXclientState*, GLbyte*);
-extern int __glXDispSwap_QueryDrawableMESA(__GLXclientState*, GLbyte*);
-
 #define __GLX_MIN_RENDER_OPCODE_EXT 2053
 #define __GLX_MAX_RENDER_OPCODE_EXT 4222
 #define __GLX_MIN_VENDPRIV_OPCODE_EXT 11
-#define __GLX_MAX_VENDPRIV_OPCODE_EXT 17
+#define __GLX_MAX_VENDPRIV_OPCODE_EXT 14
 #define __GLX_VENDPRIV_TABLE_SIZE_EXT (__GLX_MAX_VENDPRIV_OPCODE_EXT - __GLX_MIN_VENDPRIV_OPCODE_EXT + 1)
 #define __GLX_RENDER_TABLE_SIZE_EXT (__GLX_MAX_RENDER_OPCODE_EXT - __GLX_MIN_RENDER_OPCODE_EXT + 1)
 extern __GLXdispatchRenderProcPtr __glXRenderTable_EXT[__GLX_RENDER_TABLE_SIZE_EXT];

Index: g_single.c
===================================================================
RCS file: /cvs/xserver/xserver/GL/glx/g_single.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- g_single.c	7 Jun 2005 15:25:02 -0000	1.5
+++ g_single.c	10 Jun 2005 12:30:39 -0000	1.6
@@ -1784,157 +1784,3 @@
 	__GLX_SEND_HEADER();
 	return Success;
 }
-
-int __glXDisp_BindTexImageMESA(__GLXclientState *cl, GLbyte *pc)
-{
-	GLboolean retval;
-	__GLXcontext *cx;
-	ClientPtr client = cl->client;
-	int error;
-	GLXDrawable drawId;
-	DrawablePtr pDraw;
-
-	cx = __glXForceCurrent(cl, __GLX_GET_VENDPRIV_CONTEXT_TAG(pc), &error);
-	if (!cx) {
-		return error;
-	}
-	
-	pc += __GLX_VENDPRIV_HDR_SIZE;
-
-	drawId = *((GLXDrawable *) pc);
-	
-	pDraw = (DrawablePtr) LookupDrawable (drawId, client);
-	if (pDraw)
-	{
-	    if (pDraw->type != DRAWABLE_WINDOW)
-	    {
-		client->errorValue = drawId;
-		return __glXBadDrawable;
-	    }
-	}
-	else
-	{
-	    __GLXpixmap *drawPixmap;
-	    
-	    drawPixmap = (__GLXpixmap *) LookupIDByType (drawId,
-							 __glXPixmapRes);
-	    if (!drawPixmap)
-	    {
-		client->errorValue = drawId;
-		return __glXBadDrawable;
-	    }
-	    pDraw = drawPixmap->pDraw;
-	}
-
-	retval = (*__glRenderTableEXT->BindTexImageMESA) (pDraw,
-							  *(int *)(pc + 4));
-	
-	__GLX_PUT_RETVAL(retval);
-	__GLX_BEGIN_REPLY(0);
-	__GLX_SEND_HEADER();
-	return Success;
-}
-
-int __glXDisp_ReleaseTexImageMESA(__GLXclientState *cl, GLbyte *pc)
-{
-	GLboolean retval;
-	__GLXcontext *cx;
-	ClientPtr client = cl->client;
-	int error;
-	GLXDrawable drawId;
-	DrawablePtr pDraw;
-
-	cx = __glXForceCurrent(cl, __GLX_GET_VENDPRIV_CONTEXT_TAG(pc), &error);
-	if (!cx) {
-		return error;
-	}
-	pc += __GLX_VENDPRIV_HDR_SIZE;
-
-	drawId = *((GLXDrawable *) pc);
-	
-	pDraw = (DrawablePtr) LookupDrawable (drawId, client);
-	if (pDraw)
-	{
-	    if (pDraw->type != DRAWABLE_WINDOW)
-	    {
-		client->errorValue = drawId;
-		return __glXBadDrawable;
-	    }
-	}
-	else
-	{
-	    __GLXpixmap *drawPixmap;
-	    
-	    drawPixmap = (__GLXpixmap *) LookupIDByType (drawId,
-							 __glXPixmapRes);
-	    if (!drawPixmap)
-	    {
-		client->errorValue = drawId;
-		return __glXBadDrawable;
-	    }
-	    pDraw = drawPixmap->pDraw;
-	}
-
-	retval = (*__glRenderTableEXT->ReleaseTexImageMESA) (pDraw,
-							     *(int *)(pc + 4));
-	
-	__GLX_PUT_RETVAL(retval);
-	__GLX_BEGIN_REPLY(0);
-	__GLX_SEND_HEADER();
-	return Success;
-}
-
-int __glXDisp_QueryDrawableMESA(__GLXclientState *cl, GLbyte *pc)
-{
-	GLboolean retval;
-	__GLXcontext *cx;
-	ClientPtr client = cl->client;
-	int error;
-	GLint answerBuffer[200];
-	char *answer;
-	GLXDrawable drawId;
-	DrawablePtr pDraw;
-	
-	cx = __glXForceCurrent(cl, __GLX_GET_VENDPRIV_CONTEXT_TAG(pc), &error);
-	if (!cx) {
-		return error;
-	}
-	pc += __GLX_VENDPRIV_HDR_SIZE;
-
-	drawId = *((GLXDrawable *) pc);
-	
-	pDraw = (DrawablePtr) LookupDrawable (drawId, client);
-	if (pDraw)
-	{
-	    if (pDraw->type != DRAWABLE_WINDOW)
-	    {
-		client->errorValue = drawId;
-		return __glXBadDrawable;
-	    }
-	}
-	else
-	{
-	    __GLXpixmap *drawPixmap;
-	    
-	    drawPixmap = (__GLXpixmap *) LookupIDByType (drawId,
-							 __glXPixmapRes);
-	    if (!drawPixmap)
-	    {
-		client->errorValue = drawId;
-		return __glXBadDrawable;
-	    }
-	    pDraw = drawPixmap->pDraw;
-	}
-
-	__GLX_GET_ANSWER_BUFFER(answer,cl,4,4);
-	retval = (*__glRenderTableEXT->QueryDrawableMESA) (pDraw,
-							   *(int *)(pc + 4),
-							   (unsigned int *)
-							   (answer));
-	
-	__GLX_PUT_RETVAL(retval);
-	__GLX_BEGIN_REPLY(4);
-	__GLX_SEND_HEADER();
-	__GLX_SEND_INT_ARRAY(1);
-	return Success;
-}

Index: g_singleswap.c
===================================================================
RCS file: /cvs/xserver/xserver/GL/glx/g_singleswap.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- g_singleswap.c	7 Jun 2005 15:25:02 -0000	1.5
+++ g_singleswap.c	10 Jun 2005 12:30:39 -0000	1.6
@@ -2201,181 +2201,3 @@
 	__GLX_SEND_HEADER();
 	return Success;
 }
-
-int __glXDispSwap_BindTexImageMESA(__GLXclientState *cl, GLbyte *pc)
-{
-	GLboolean retval;
-	__GLXcontext *cx;
-	ClientPtr client = cl->client;
-	int error;
-	GLXDrawable drawId;
-	DrawablePtr pDraw;
-	__GLX_DECLARE_SWAP_VARIABLES;
-
-	__GLX_SWAP_INT(&((xGLXVendorPrivateReq *)pc)->contextTag);
-	cx = __glXForceCurrent(cl, __GLX_GET_VENDPRIV_CONTEXT_TAG(pc), &error);
-	if (!cx) {
-		return error;
-	}
-	pc += __GLX_VENDPRIV_HDR_SIZE;
-	__GLX_SWAP_INT(pc + 0);
-	__GLX_SWAP_INT(pc + 4);
-
-	drawId = *((GLXDrawable *) pc);
-	
-	pDraw = (DrawablePtr) LookupDrawable (drawId, client);
-	if (pDraw)
-	{
-	    if (pDraw->type != DRAWABLE_WINDOW)
-	    {
-		client->errorValue = drawId;
-		return __glXBadDrawable;
-	    }
-	}
-	else
-	{
-	    __GLXpixmap *drawPixmap;
-	    
-	    drawPixmap = (__GLXpixmap *) LookupIDByType (drawId,
-							 __glXPixmapRes);
-	    if (!drawPixmap)
-	    {
-		client->errorValue = drawId;
-		return __glXBadDrawable;
-	    }
-	    pDraw = drawPixmap->pDraw;
-	}
-
-	retval =
-	(*__glRenderTableEXT->BindTexImageMESA)( 
-	    pDraw,
-	    *(int         *)(pc + 4)
-	);
-	__GLX_PUT_RETVAL(retval);
-	__GLX_SWAP_REPLY_RETVAL();
-	__GLX_BEGIN_REPLY(0);
-	__GLX_SWAP_REPLY_HEADER();
-	__GLX_SEND_HEADER();
-	return Success;
-}
-
-int __glXDispSwap_ReleaseTexImageMESA(__GLXclientState *cl, GLbyte *pc)
-{
-	GLboolean retval;
-	__GLXcontext *cx;
-	ClientPtr client = cl->client;
-	int error;
-	GLXDrawable drawId;
-	DrawablePtr pDraw;
-	__GLX_DECLARE_SWAP_VARIABLES;
-
-	__GLX_SWAP_INT(&((xGLXVendorPrivateReq *)pc)->contextTag);
-	cx = __glXForceCurrent(cl, __GLX_GET_VENDPRIV_CONTEXT_TAG(pc), &error);
-	if (!cx) {
-		return error;
-	}
-	pc += __GLX_VENDPRIV_HDR_SIZE;
-	__GLX_SWAP_INT(pc + 0);
-	__GLX_SWAP_INT(pc + 4);
-
-	drawId = *((GLXDrawable *) pc);
-	
-	pDraw = (DrawablePtr) LookupDrawable (drawId, client);
-	if (pDraw)
-	{
-	    if (pDraw->type != DRAWABLE_WINDOW)
-	    {
-		client->errorValue = drawId;
-		return __glXBadDrawable;
-	    }
-	}
-	else
-	{
-	    __GLXpixmap *drawPixmap;
-	    
-	    drawPixmap = (__GLXpixmap *) LookupIDByType (drawId,
-							 __glXPixmapRes);
-	    if (!drawPixmap)
-	    {
-		client->errorValue = drawId;
-		return __glXBadDrawable;
-	    }
-	    pDraw = drawPixmap->pDraw;
-	}
-	
-	retval =
-	(*__glRenderTableEXT->ReleaseTexImageMESA)( 
-	    pDraw,
-	    *(int         *)(pc + 4)
-	);
-	__GLX_PUT_RETVAL(retval);
-	__GLX_SWAP_REPLY_RETVAL();
-	__GLX_BEGIN_REPLY(0);
-	__GLX_SWAP_REPLY_HEADER();
-	__GLX_SEND_HEADER();
-	return Success;
-}
-
-int __glXDispSwap_QueryDrawableMESA(__GLXclientState *cl, GLbyte *pc)
-{
-	GLboolean retval;
-	__GLXcontext *cx;
-	ClientPtr client = cl->client;
-	int error;
-	GLboolean answerBuffer[200];
-	char *answer;
-	GLXDrawable drawId;
-	DrawablePtr pDraw;
-	__GLX_DECLARE_SWAP_VARIABLES;
-	__GLX_DECLARE_SWAP_ARRAY_VARIABLES;
-
-	__GLX_SWAP_INT(&((xGLXVendorPrivateReq *)pc)->contextTag);
-	cx = __glXForceCurrent(cl, __GLX_GET_VENDPRIV_CONTEXT_TAG(pc), &error);
-	if (!cx) {
-		return error;
-	}
-	pc += __GLX_VENDPRIV_HDR_SIZE;
-	__GLX_SWAP_INT(pc + 0);
-	__GLX_SWAP_INT(pc + 4);
-
-	drawId = *((GLXDrawable *) pc);
-	
-	pDraw = (DrawablePtr) LookupDrawable (drawId, client);
-	if (pDraw)
-	{
-	    if (pDraw->type != DRAWABLE_WINDOW)
-	    {
-		client->errorValue = drawId;
-		return __glXBadDrawable;
-	    }
-	}
-	else
-	{
-	    __GLXpixmap *drawPixmap;
-	    
-	    drawPixmap = (__GLXpixmap *) LookupIDByType (drawId,
-							 __glXPixmapRes);
-	    if (!drawPixmap)
-	    {
-		client->errorValue = drawId;
-		return __glXBadDrawable;
-	    }
-	    pDraw = drawPixmap->pDraw;
-	}
-	
-	__GLX_GET_ANSWER_BUFFER(answer,cl,4,1);
-	retval =
-	(*__glRenderTableEXT->QueryDrawableMESA)( 
-	    pDraw,
-	    *(int          *)(pc + 4),
-	    (unsigned int *) (answer)
-	);
-	__GLX_SWAP_INT_ARRAY(answer, 1);
-	__GLX_PUT_RETVAL(retval);
-	__GLX_SWAP_REPLY_RETVAL();
-	__GLX_BEGIN_REPLY(4);
-	__GLX_SWAP_REPLY_HEADER();
-	__GLX_SEND_HEADER();
-	__GLX_SEND_INT_ARRAY(1);
-	return Success;
-}

Index: glxcmds.c
===================================================================
RCS file: /cvs/xserver/xserver/GL/glx/glxcmds.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- glxcmds.c	7 Jun 2005 15:25:02 -0000	1.13
+++ glxcmds.c	10 Jun 2005 12:30:39 -0000	1.14
@@ -980,6 +980,7 @@
     __GLXscreenInfo *pGlxScreen;
     __GLXvisualConfig *pGlxVisual;
     int i;
+    __GLcontextModes modes;
 
     pDraw = (DrawablePtr) LookupDrawable(pixmapId, client);
     if (!pDraw || pDraw->type != DRAWABLE_PIXMAP) {
@@ -1052,6 +1053,21 @@
     */
     ((PixmapPtr) pDraw)->refcnt++;
 
+    __glXFormatGLModes (&modes, pGlxVisual);
+    
+    /*
+    ** Allocate buffers.
+    */
+    pGlxPixmap->glxPriv = __glXCreateDrawablePrivate (pDraw, glxpixmapId,
+						      &modes);
+    if (!pGlxPixmap->glxPriv)
+    {
+	FreeResource(glxpixmapId, FALSE);
+	return BadAlloc;
+    }
+
+    __glXRefDrawablePrivate (pGlxPixmap->glxPriv);
+
     return Success;
 }
 
@@ -1217,6 +1233,116 @@
     return Success;
 }
 
+int __glXGetDrawableAttributesSGIX(__GLXclientState *cl, GLbyte *pc)
+{
+    xGLXGetDrawableAttributesReply reply;
+    ClientPtr			   client = cl->client;
+    GLXDrawable			   drawId;
+    __GLXdrawablePrivate	   *glxPriv;
+    int				   numAttribs;
+    int				   *sendBuf, *pSendBuf;
+    int				   nReplyBytes;
+
+    pc += __GLX_VENDPRIV_HDR_SIZE;
+
+    drawId = *((GLXDrawable *) (pc));
+
+    glxPriv = __glXFindDrawablePrivate (drawId);
+    if (!glxPriv)
+    {
+	client->errorValue = drawId;
+	return __glXBadDrawable;
+    }
+
+    numAttribs = 1; /* XXX: Only GLX_TEXTURE_TARGET_EXT right now */
+    reply.length = numAttribs << 1;
+    reply.type = X_Reply;
+    reply.sequenceNumber = client->sequence;
+    reply.numAttribs = numAttribs;
+
+    nReplyBytes = reply.length << 2;
+    sendBuf = (int *) __glXMalloc ((size_t) nReplyBytes);
+    if (sendBuf == NULL)
+	return __glXBadContext;	/* XXX: Is this correct? */
+    
+    pSendBuf = sendBuf;
+    *pSendBuf++ = GLX_TEXTURE_TARGET_EXT;
+    *pSendBuf++ = (int) (glxPriv->texTarget);
+
+    if (client->swapped)
+    {
+	__glXSwapGetDrawableAttributesReply (client, &reply, sendBuf);
+    }
+    else
+    {
+	WriteToClient (client, sz_xGLXGetDrawableAttributesReply,
+		       (char *) &reply);
+	WriteToClient (client, nReplyBytes, (char *) sendBuf);
+    }
+    
+    __glXFree ((char *) sendBuf);
+    
+    return Success;
+}
+
+int __glXBindTexImageEXT(__GLXclientState *cl, GLbyte *pc)
+{
+    xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *) pc;
+    ClientPtr		 client = cl->client;
+    __GLXdrawablePrivate *glxPriv;
+    __GLXcontext	 *cx;
+    GLXDrawable		 drawId;
+    int			 buffer;
+    int			 error;
+
+    pc += __GLX_VENDPRIV_HDR_SIZE;
+
+    drawId = *((GLXDrawable *) (pc));
+    buffer = *((int *)	       (pc + 4));
+
+    cx = __glXForceCurrent (cl, req->contextTag, &error);
+    if (!cx)
+	return error;
+
+    glxPriv = __glXFindDrawablePrivate (drawId);
+    if (!glxPriv)
+    {
+	client->errorValue = drawId;
+	return __glXBadDrawable;
+    }
+    
+    return (*glxPriv->bindBuffers) (glxPriv, buffer);
+}
+
+int __glXReleaseTexImageEXT(__GLXclientState *cl, GLbyte *pc)
+{
+    xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *) pc;
+    ClientPtr		 client = cl->client;
+    __GLXdrawablePrivate *glxPriv;
+    __GLXcontext	 *cx;
+    GLXDrawable		 drawId;
+    int			 buffer;
+    int			 error;
+
+    pc += __GLX_VENDPRIV_HDR_SIZE;
+
+    drawId = *((GLXDrawable *) (pc));
+    buffer = *((int *)	       (pc + 4));
+    
+    cx = __glXForceCurrent (cl, req->contextTag, &error);
+    if (!cx)
+	return error;
+
+    glxPriv = __glXFindDrawablePrivate (drawId);
+    if (!glxPriv)
+    {
+	client->errorValue = drawId;
+	return __glXBadDrawable;
+    }
+    
+    return (*glxPriv->releaseBuffers) (glxPriv, buffer);
+}
+
 
 /************************************************************************/
 
@@ -1563,6 +1689,10 @@
     case X_GLvop_SamplePatternSGIS:
 	(*__glRenderTableEXT->SamplePatternSGIS)( *(GLenum *)(pc + 4));
 	return Success;
+    case X_GLXvop_BindTexImageMESA:
+	return __glXBindTexImageEXT(cl, pc);
+    case X_GLXvop_ReleaseTexImageMESA:
+	return __glXReleaseTexImageEXT(cl, pc);  
     }
 
 
@@ -1592,6 +1722,8 @@
 	return __glXQueryContextInfoEXT(cl, pc);
       case X_GLXvop_MakeCurrentReadSGI:
 	return __glXMakeCurrentReadSGI(cl, pc);
+      case X_GLXvop_GetDrawableAttributesSGIX:
+	return __glXGetDrawableAttributesSGIX(cl, pc);
       default:
 	break;
     }

Index: glxcmdsswap.c
===================================================================
RCS file: /cvs/xserver/xserver/GL/glx/glxcmdsswap.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- glxcmdsswap.c	7 Jun 2005 15:25:02 -0000	1.7
+++ glxcmdsswap.c	10 Jun 2005 12:30:39 -0000	1.8
@@ -368,6 +368,67 @@
     return __glXQueryContextInfoEXT(cl, (GLbyte *)pc);
 }
 
+int __glXSwapGetDrawableAttributesSGIX(__GLXclientState *cl, char *pc)
+{
+    xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *) pc;
+    GLXDrawable		 *drawId;
+    
+    __GLX_DECLARE_SWAP_VARIABLES;
+
+    pc += __GLX_VENDPRIV_HDR_SIZE;
+
+    drawId = ((GLXDrawable *) (pc));
+    
+    __GLX_SWAP_SHORT(&req->length);
+    __GLX_SWAP_INT(&req->contextTag);
+    __GLX_SWAP_INT(drawId);
+
+    return __glXGetDrawableAttributesSGIX(cl, (GLbyte *)pc);
+}
+
+int __glXSwapBindTexImageEXT(__GLXclientState *cl, GLchar *pc)
+{
+    xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *) pc;
+    GLXDrawable		 *drawId;
+    int			 *buffer;
+    
+    __GLX_DECLARE_SWAP_VARIABLES;
+
+    pc += __GLX_VENDPRIV_HDR_SIZE;
+
+    drawId = ((GLXDrawable *) (pc));
+    buffer = ((int *)	      (pc + 4));
+    
+    __GLX_SWAP_SHORT(&req->length);
+    __GLX_SWAP_INT(&req->contextTag);
+    __GLX_SWAP_INT(drawId);
+    __GLX_SWAP_INT(buffer);
+
+    return __glXBindTexImageEXT(cl, (GLbyte *)pc);
+}
+
+int __glXSwapReleaseTexImageEXT(__GLXclientState *cl, GLchar *pc)
+{
+    xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *) pc;
+    GLXDrawable		 *drawId;
+    int			 *buffer;
+    
+    __GLX_DECLARE_SWAP_VARIABLES;
+
+    pc += __GLX_VENDPRIV_HDR_SIZE;
+
+    drawId = ((GLXDrawable *) (pc));
+    buffer = ((int *)	      (pc + 4));
+    
+    __GLX_SWAP_SHORT(&req->length);
+    __GLX_SWAP_INT(&req->contextTag);
+    __GLX_SWAP_INT(drawId);
+    __GLX_SWAP_INT(buffer);
+
+    return __glXReleaseTexImageEXT(cl, (GLbyte *)pc);
+}
+
+
 /************************************************************************/
 
 /*
@@ -442,6 +503,19 @@
     WriteToClient(client, length << 2, (char *)buf);
 }
 
+void __glXSwapGetDrawableAttributesReply(ClientPtr client, xGLXGetDrawableAttributesReply *reply, int *buf)
+{
+    int length = reply->length;
+    __GLX_DECLARE_SWAP_VARIABLES;
+    __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+    __GLX_SWAP_SHORT(&reply->sequenceNumber);
+    __GLX_SWAP_INT(&reply->length);
+    __GLX_SWAP_INT(&reply->numAttribs);
+    WriteToClient(client, sz_xGLXGetDrawableAttributesReply, (char *)reply);
+    __GLX_SWAP_INT_ARRAY((int *)buf, length);
+    WriteToClient(client, length << 2, (char *)buf);
+}
+
 
 /************************************************************************/
 
@@ -802,6 +876,10 @@
 	__GLX_SWAP_INT(pc + 4);
 	(*__glRenderTableEXT->SamplePatternSGIS)( *(GLenum *)(pc + 4));
 	return Success;
+    case X_GLXvop_BindTexImageMESA:
+	return __glXSwapBindTexImageEXT(cl, pc);
+    case X_GLXvop_ReleaseTexImageMESA:
+	return __glXSwapReleaseTexImageEXT(cl, pc);  
     }
 
 
@@ -832,6 +910,8 @@
 	return __glXSwapQueryContextInfoEXT(cl, pc);
       case X_GLXvop_MakeCurrentReadSGI:
 	return __glXSwapMakeCurrentReadSGI(cl, pc);
+      case X_GLXvop_GetDrawableAttributesSGIX:
+	return __glXGetDrawableAttributesSGIX(cl, pc);
       default:
 	break;
     }

Index: glxdrawable.h
===================================================================
RCS file: /cvs/xserver/xserver/GL/glx/glxdrawable.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- glxdrawable.h	3 Jul 2003 18:05:13 -0000	1.4
+++ glxdrawable.h	10 Jun 2005 12:30:39 -0000	1.5
@@ -44,6 +44,7 @@
     __GLXscreenInfo *pGlxScreen;
     ScreenPtr pScreen;
     Bool idExists;
+    __GLXdrawablePrivate *glxPriv;
     int refcnt;
 
 } __GLXpixmap;
@@ -92,6 +93,13 @@
     void (*freeBuffers)(struct __GLXdrawablePrivateRec *);
     void (*updatePalette)(struct __GLXdrawablePrivateRec *);
     GLboolean (*swapBuffers)(struct __GLXdrawablePrivateRec *);
+    int (*bindBuffers)(struct __GLXdrawablePrivateRec *, int);
+    int (*releaseBuffers)(struct __GLXdrawablePrivateRec *, int);
+    
+    /*
+    ** Used by EXT_render_texture.
+    */
+    GLenum texTarget;
 
     /*
     ** The GL drawable (information shared between GLX and the GL core)

Index: glxext.c
===================================================================
RCS file: /cvs/xserver/xserver/GL/glx/glxext.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- glxext.c	3 Jul 2003 18:05:13 -0000	1.6
+++ glxext.c	10 Jun 2005 12:30:39 -0000	1.7
@@ -141,6 +141,7 @@
 
     pGlxPixmap->idExists = False;
     if (!pGlxPixmap->refcnt) {
+	__glXUnrefDrawablePrivate(pGlxPixmap->glxPriv);
 	/*
 	** The DestroyPixmap routine should decrement the refcount and free
 	** only if it's zero.

Index: glxext.h
===================================================================
RCS file: /cvs/xserver/xserver/GL/glx/glxext.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- glxext.h	18 Feb 2004 03:23:35 -0000	1.5
+++ glxext.h	10 Jun 2005 12:30:39 -0000	1.6
@@ -76,6 +76,14 @@
 extern int __glXMakeCurrentReadSGI(__GLXclientState *cl, GLbyte *pc);
 extern int __glXSwapMakeCurrentReadSGI(__GLXclientState *cl, GLbyte *pc);
 
+extern int __glXGetDrawableAttributesSGIX(__GLXclientState *cl, GLbyte *pc);
+extern int __glXSwapGetDrawableAttributesSGIX(__GLXclientState *cl, GLchar *pc);
+
+extern int __glXBindTexImageEXT(__GLXclientState *cl, GLbyte *pc);
+extern int __glXSwapBindTexImageEXT(__GLXclientState *cl, GLchar *pc);
+extern int __glXReleaseTexImageEXT(__GLXclientState *cl, GLbyte *pc);
+extern int __glXSwapReleaseTexImageEXT(__GLXclientState *cl, GLchar *pc);
+
 extern void GlxExtensionInit(void);
 
 extern Bool __glXCoreType(void);

Index: glxserver.h
===================================================================
RCS file: /cvs/xserver/xserver/GL/glx/glxserver.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- glxserver.h	7 Jun 2005 15:25:02 -0000	1.7
+++ glxserver.h	10 Jun 2005 12:30:39 -0000	1.8
@@ -61,6 +61,15 @@
 #include <GL/glxproto.h>
 #include <GL/glxint.h>
 
+/* XXX: should go into glxext.h */
+#ifndef GLX_EXT_render_texture
+#define GLX_TEXTURE_TARGET_EXT	  0x6001
+#define GLX_TEXTURE_2D_EXT	  0x6002
+#define GLX_TEXTURE_RECTANGLE_EXT 0x6003
+#define GLX_NO_TEXTURE_EXT	  0x6004
+#define GLX_FRONT_LEFT_EXT	  0x6005
+#endif
+
 /* For glxscreens.h */
 typedef struct __GLXdrawablePrivateRec __GLXdrawablePrivate;
 
@@ -213,6 +222,7 @@
 				xGLXQueryExtensionsStringReply *reply, char *buf);
 extern void glxSwapQueryServerStringReply(ClientPtr client,
 				xGLXQueryServerStringReply *reply, char *buf);
+extern void __glXSwapGetDrawableAttributesReply(ClientPtr client, xGLXGetDrawableAttributesReply *reply, int *buf);
 
 
 /*
@@ -719,10 +729,6 @@
     void (*PointParameteriNV) (GLenum pname, GLint params);
     void (*PointParameterivNV) (GLenum pname, const GLint *params);
     void (*ActiveStencilFaceEXT) (GLenum face);
-    int (*BindTexImageMESA) (DrawablePtr pDrawable, int buffer);
-    int (*ReleaseTexImageMESA) (DrawablePtr pDrawable, int buffer);
-    int (*QueryDrawableMESA) (DrawablePtr pDrawable, int attribute,
-			      unsigned int *value);
 } __glProcTableEXT;
 
 extern __glProcTable     *__glRenderTable;