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;