Add marshalling for GLX 1.3 requests.

Also, hook up glXGetDrawableAttributes and glXQueryContext to existing
DoGetDrawableAttributes and __glXQueryContextInfoEXT.
This commit is contained in:
Kristian Høgsberg 2006-06-28 15:59:01 -04:00
parent eb35f812a5
commit eea8efe451
5 changed files with 207 additions and 38 deletions

View File

@ -47,7 +47,7 @@ __GLXdispatchSingleProcPtr __glXSingleTable[__GLX_SINGLE_TABLE_SIZE] = {
__glXMakeCurrent, __glXMakeCurrent,
__glXIsDirect, __glXIsDirect,
__glXQueryVersion, __glXQueryVersion,
__glXWaitGL, __glXWaitGL, /* 0x08 */
__glXWaitX, __glXWaitX,
__glXCopyContext, __glXCopyContext,
__glXSwapBuffers, __glXSwapBuffers,
@ -55,23 +55,23 @@ __GLXdispatchSingleProcPtr __glXSingleTable[__GLX_SINGLE_TABLE_SIZE] = {
__glXCreateGLXPixmap, __glXCreateGLXPixmap,
__glXGetVisualConfigs, __glXGetVisualConfigs,
__glXDestroyGLXPixmap, __glXDestroyGLXPixmap,
__glXVendorPrivate, __glXVendorPrivate, /* 0x10 */
__glXVendorPrivateWithReply, __glXVendorPrivateWithReply,
__glXQueryExtensionsString, __glXQueryExtensionsString,
__glXQueryServerString, __glXQueryServerString,
__glXClientInfo, __glXClientInfo,
__glXGetFBConfigs, __glXGetFBConfigs,
__glXCreatePixmap, __glXCreatePixmap,
__glXDestroyGLXPixmap, /* glXDestroyPixmap */ __glXDestroyPixmap,
__glXCreateNewContext, __glXCreateNewContext, /* 0x18 */
__glXNoSuchSingleOpcode, /* glXQueryContext */ __glXQueryContext,
__glXMakeContextCurrent, __glXMakeContextCurrent,
__glXNoSuchSingleOpcode, /* glXCreatePbuffer */ __glXCreatePbuffer,
__glXNoSuchSingleOpcode, /* glXDestroyPbuffer */ __glXDestroyPbuffer,
__glXNoSuchSingleOpcode, /* glXGetDrawableAttributes */ __glXGetDrawableAttributes,
__glXNoSuchSingleOpcode, /* glXChangeDrawableAttributes */ __glXChangeDrawableAttributes,
__glXNoSuchSingleOpcode, /* glXCreateWindow */ __glXCreateWindow,
__glXNoSuchSingleOpcode, /* glXDestroyWindow */ __glXDestroyWindow, /* 0x20 */
__glXNoSuchSingleOpcode, __glXNoSuchSingleOpcode,
__glXNoSuchSingleOpcode, __glXNoSuchSingleOpcode,
__glXNoSuchSingleOpcode, __glXNoSuchSingleOpcode,
@ -448,7 +448,7 @@ __GLXdispatchSingleProcPtr __glXSwapSingleTable[__GLX_SINGLE_TABLE_SIZE] = {
__glXSwapMakeCurrent, __glXSwapMakeCurrent,
__glXSwapIsDirect, __glXSwapIsDirect,
__glXSwapQueryVersion, __glXSwapQueryVersion,
__glXSwapWaitGL, __glXSwapWaitGL, /* 0x08 */
__glXSwapWaitX, __glXSwapWaitX,
__glXSwapCopyContext, __glXSwapCopyContext,
__glXSwapSwapBuffers, __glXSwapSwapBuffers,
@ -456,23 +456,23 @@ __GLXdispatchSingleProcPtr __glXSwapSingleTable[__GLX_SINGLE_TABLE_SIZE] = {
__glXSwapCreateGLXPixmap, __glXSwapCreateGLXPixmap,
__glXSwapGetVisualConfigs, __glXSwapGetVisualConfigs,
__glXSwapDestroyGLXPixmap, __glXSwapDestroyGLXPixmap,
__glXSwapVendorPrivate, __glXSwapVendorPrivate, /* 0x10 */
__glXSwapVendorPrivateWithReply, __glXSwapVendorPrivateWithReply,
__glXSwapQueryExtensionsString, __glXSwapQueryExtensionsString,
__glXSwapQueryServerString, __glXSwapQueryServerString,
__glXSwapClientInfo, __glXSwapClientInfo,
__glXSwapGetFBConfigs, __glXSwapGetFBConfigs,
__glXSwapCreatePixmap, __glXSwapCreatePixmap,
__glXSwapDestroyGLXPixmap, /* glXDestroyPixmap */ __glXSwapDestroyPixmap,
__glXSwapCreateNewContext, __glXSwapCreateNewContext, /* 0x18 */
__glXNoSuchSingleOpcode, /* glXQueryContext */ __glXSwapQueryContext,
__glXSwapMakeContextCurrent, __glXSwapMakeContextCurrent,
__glXNoSuchSingleOpcode, /* glXCreatePbuffer */ __glXSwapCreatePbuffer,
__glXNoSuchSingleOpcode, /* glXDestroyPbuffer */ __glXSwapDestroyPbuffer,
__glXNoSuchSingleOpcode, /* glXGetDrawableAttributes */ __glXSwapGetDrawableAttributes,
__glXNoSuchSingleOpcode, /* glXChangeDrawableAttributes */ __glXSwapChangeDrawableAttributes,
__glXNoSuchSingleOpcode, /* glXCreateWindow */ __glXSwapCreateWindow,
__glXNoSuchSingleOpcode, /* glXDestroyWindow */ __glXSwapDestroyWindow, /* 0x20 */
__glXNoSuchSingleOpcode, __glXNoSuchSingleOpcode,
__glXNoSuchSingleOpcode, __glXNoSuchSingleOpcode,
__glXNoSuchSingleOpcode, __glXNoSuchSingleOpcode,

View File

@ -60,8 +60,17 @@ extern int __glXQueryServerString(__GLXclientState*, GLbyte*);
extern int __glXClientInfo(__GLXclientState*, GLbyte*); extern int __glXClientInfo(__GLXclientState*, GLbyte*);
extern int __glXMakeContextCurrent(__GLXclientState*, GLbyte*); extern int __glXMakeContextCurrent(__GLXclientState*, GLbyte*);
extern int __glXGetFBConfigs(__GLXclientState*, GLbyte*); extern int __glXGetFBConfigs(__GLXclientState*, GLbyte*);
extern int __glXCreateNewContext(__GLXclientState*, GLbyte*);
extern int __glXCreatePixmap(__GLXclientState*, GLbyte*); extern int __glXCreatePixmap(__GLXclientState*, GLbyte*);
extern int __glXDestroyPixmap(__GLXclientState*, GLbyte*);
extern int __glXCreateNewContext(__GLXclientState*, GLbyte*);
extern int __glXQueryContext(__GLXclientState*, GLbyte*);
extern int __glXMakeContextCurrent(__GLXclientState*, GLbyte*);
extern int __glXCreatePbuffer(__GLXclientState*, GLbyte*);
extern int __glXDestroyPbuffer(__GLXclientState*, GLbyte*);
extern int __glXGetDrawableAttributes(__GLXclientState*, GLbyte*);
extern int __glXChangeDrawableAttributes(__GLXclientState*, GLbyte*);
extern int __glXCreateWindow(__GLXclientState*, GLbyte*);
extern int __glXDestroyWindow(__GLXclientState*, GLbyte*);
extern int __glXSwapRender(__GLXclientState*, GLbyte*); extern int __glXSwapRender(__GLXclientState*, GLbyte*);
extern int __glXSwapRenderLarge(__GLXclientState*, GLbyte*); extern int __glXSwapRenderLarge(__GLXclientState*, GLbyte*);
@ -88,8 +97,18 @@ extern int __glXSwapQueryServerString(__GLXclientState*, GLbyte*);
extern int __glXSwapClientInfo(__GLXclientState*, GLbyte*); extern int __glXSwapClientInfo(__GLXclientState*, GLbyte*);
extern int __glXSwapMakeContextCurrent(__GLXclientState*, GLbyte*); extern int __glXSwapMakeContextCurrent(__GLXclientState*, GLbyte*);
extern int __glXSwapGetFBConfigs(__GLXclientState*, GLbyte*); extern int __glXSwapGetFBConfigs(__GLXclientState*, GLbyte*);
extern int __glXSwapCreateNewContext(__GLXclientState*, GLbyte*);
extern int __glXSwapCreatePixmap(__GLXclientState*, GLbyte*); extern int __glXSwapCreatePixmap(__GLXclientState*, GLbyte*);
extern int __glXSwapDestroyPixmap(__GLXclientState*, GLbyte*);
extern int __glXSwapCreateNewContext(__GLXclientState*, GLbyte*);
extern int __glXSwapQueryContext(__GLXclientState*, GLbyte*);
extern int __glXSwapMakeContextCurrent(__GLXclientState*, GLbyte*);
extern int __glXSwapCreatePbuffer(__GLXclientState*, GLbyte*);
extern int __glXSwapDestroyPbuffer(__GLXclientState*, GLbyte*);
extern int __glXSwapGetDrawableAttributes(__GLXclientState*, GLbyte*);
extern int __glXSwapChangeDrawableAttributes(__GLXclientState*, GLbyte*);
extern int __glXSwapCreateWindow(__GLXclientState*, GLbyte*);
extern int __glXSwapDestroyWindow(__GLXclientState*, GLbyte*);
#define __GLX_MIN_GLXCMD_OPCODE 1 #define __GLX_MIN_GLXCMD_OPCODE 1
#define __GLX_MAX_GLXCMD_OPCODE 20 #define __GLX_MAX_GLXCMD_OPCODE 20

View File

@ -1299,16 +1299,9 @@ int __glXCreateGLXPixmapWithConfigSGIX(__GLXclientState *cl, GLbyte *pc)
} }
/** int DoDestroyPixmap(__GLXclientState *cl, XID glxpixmap)
* Destroy a GLX pixmap. This function is used for both
* \c glXDestroyGLXPixmap and \c glXDestroyPixmap.
*/
int __glXDestroyGLXPixmap(__GLXclientState *cl, GLbyte *pc)
{ {
ClientPtr client = cl->client; ClientPtr client = cl->client;
xGLXDestroyGLXPixmapReq *req = (xGLXDestroyGLXPixmapReq *) pc;
XID glxpixmap = req->glxpixmap;
/* /*
** Check if it's a valid GLX pixmap. ** Check if it's a valid GLX pixmap.
@ -1318,9 +1311,71 @@ int __glXDestroyGLXPixmap(__GLXclientState *cl, GLbyte *pc)
return __glXBadPixmap; return __glXBadPixmap;
} }
FreeResource(glxpixmap, FALSE); FreeResource(glxpixmap, FALSE);
return Success; return Success;
} }
int __glXDestroyGLXPixmap(__GLXclientState *cl, GLbyte *pc)
{
xGLXDestroyGLXPixmapReq *req = (xGLXDestroyGLXPixmapReq *) pc;
return DoDestroyPixmap(cl, req->glxpixmap);
}
int __glXDestroyPixmap(__GLXclientState *cl, GLbyte *pc)
{
xGLXDestroyPixmapReq *req = (xGLXDestroyPixmapReq *) pc;
return DoDestroyPixmap(cl, req->glxpixmap);
}
int __glXCreatePbuffer(__GLXclientState *cl, GLbyte *pc)
{
xGLXCreatePbufferReq *req = (xGLXCreatePbufferReq *) pc;
(void) req;
return BadRequest;
}
int __glXDestroyPbuffer(__GLXclientState *cl, GLbyte *pc)
{
xGLXDestroyPbufferReq *req = (xGLXDestroyPbufferReq *) pc;
(void) req;
return BadRequest;
}
int __glXChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
{
xGLXChangeDrawableAttributesReq *req =
(xGLXChangeDrawableAttributesReq *) pc;
(void) req;
return BadRequest;
}
int __glXCreateWindow(__GLXclientState *cl, GLbyte *pc)
{
xGLXCreateWindowReq *req = (xGLXCreateWindowReq *) pc;
(void) req;
return BadRequest;
}
int __glXDestroyWindow(__GLXclientState *cl, GLbyte *pc)
{
xGLXDestroyWindowReq *req = (xGLXDestroyWindowReq *) pc;
(void) req;
return BadRequest;
}
/*****************************************************************************/ /*****************************************************************************/
/* /*
@ -1419,20 +1474,18 @@ int __glXSwapBuffers(__GLXclientState *cl, GLbyte *pc)
} }
int __glXQueryContextInfoEXT(__GLXclientState *cl, GLbyte *pc) int DoQueryContext(__GLXclientState *cl, GLXContextID gcId)
{ {
ClientPtr client = cl->client; ClientPtr client = cl->client;
__GLXcontext *ctx; __GLXcontext *ctx;
xGLXQueryContextInfoEXTReq *req;
xGLXQueryContextInfoEXTReply reply; xGLXQueryContextInfoEXTReply reply;
int nProps; int nProps;
int *sendBuf, *pSendBuf; int *sendBuf, *pSendBuf;
int nReplyBytes; int nReplyBytes;
req = (xGLXQueryContextInfoEXTReq *)pc; ctx = (__GLXcontext *) LookupIDByType(gcId, __glXContextRes);
ctx = (__GLXcontext *) LookupIDByType(req->context, __glXContextRes);
if (!ctx) { if (!ctx) {
client->errorValue = req->context; client->errorValue = gcId;
return __glXBadContext; return __glXBadContext;
} }
@ -1466,6 +1519,19 @@ int __glXQueryContextInfoEXT(__GLXclientState *cl, GLbyte *pc)
return Success; return Success;
} }
int __glXQueryContextInfoEXT(__GLXclientState *cl, GLbyte *pc)
{
xGLXQueryContextInfoEXTReq *req = (xGLXQueryContextInfoEXTReq *) pc;
return DoQueryContext(cl, req->context);
}
int __glXQueryContext(__GLXclientState *cl, GLbyte *pc)
{
xGLXQueryContextReq *req = (xGLXQueryContextReq *) pc;
return DoQueryContext(cl, req->context);
}
int __glXBindTexImageEXT(__GLXclientState *cl, GLbyte *pc) int __glXBindTexImageEXT(__GLXclientState *cl, GLbyte *pc)
{ {
@ -1589,6 +1655,13 @@ int __glXGetDrawableAttributesSGIX(__GLXclientState *cl, GLbyte *pc)
return DoGetDrawableAttributes(cl, drawable); return DoGetDrawableAttributes(cl, drawable);
} }
int __glXGetDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
{
xGLXGetDrawableAttributesReq *req = (xGLXGetDrawableAttributesReq *)pc;
return DoGetDrawableAttributes(cl, req->drawable);
}
/************************************************************************/ /************************************************************************/
/* /*

View File

@ -315,6 +315,68 @@ int __glXSwapDestroyGLXPixmap(__GLXclientState *cl, GLbyte *pc)
return __glXDestroyGLXPixmap(cl, pc); return __glXDestroyGLXPixmap(cl, pc);
} }
int __glXSwapDestroyPixmap(__GLXclientState *cl, GLbyte *pc)
{
xGLXDestroyGLXPixmapReq *req = (xGLXDestroyGLXPixmapReq *) pc;
__GLX_DECLARE_SWAP_VARIABLES;
__GLX_SWAP_SHORT(&req->length);
__GLX_SWAP_INT(&req->glxpixmap);
return __glXDestroyGLXPixmap(cl, pc);
}
int __glXSwapQueryContext(__GLXclientState *cl, GLbyte *pc)
{
xGLXQueryContextReq *req = (xGLXQueryContextReq *) pc;
(void) req;
return BadRequest;
}
int __glXSwapCreatePbuffer(__GLXclientState *cl, GLbyte *pc)
{
xGLXCreatePbufferReq *req = (xGLXCreatePbufferReq *) pc;
(void) req;
return BadRequest;
}
int __glXSwapDestroyPbuffer(__GLXclientState *cl, GLbyte *pc)
{
xGLXDestroyPbufferReq *req = (xGLXDestroyPbufferReq *) req;
return BadRequest;
}
int __glXSwapChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
{
xGLXChangeDrawableAttributesReq *req =
(xGLXChangeDrawableAttributesReq *) req;
return BadRequest;
}
int __glXSwapCreateWindow(__GLXclientState *cl, GLbyte *pc)
{
xGLXCreateWindowReq *req = (xGLXCreateWindowReq *) pc;
(void) req;
return BadRequest;
}
int __glXSwapDestroyWindow(__GLXclientState *cl, GLbyte *pc)
{
xGLXDestroyWindowReq *req = (xGLXDestroyWindowReq *) pc;
(void) req;
return BadRequest;
}
int __glXSwapSwapBuffers(__GLXclientState *cl, GLbyte *pc) int __glXSwapSwapBuffers(__GLXclientState *cl, GLbyte *pc)
{ {
xGLXSwapBuffersReq *req = (xGLXSwapBuffersReq *) pc; xGLXSwapBuffersReq *req = (xGLXSwapBuffersReq *) pc;
@ -444,7 +506,19 @@ int __glXSwapGetDrawableAttributesSGIX(__GLXclientState *cl, GLbyte *pc)
__GLX_SWAP_INT(&req->contextTag); __GLX_SWAP_INT(&req->contextTag);
__GLX_SWAP_INT(data); __GLX_SWAP_INT(data);
return __glXGetDrawableAttributesSGIX(cl, (GLbyte *)pc); return __glXGetDrawableAttributesSGIX(cl, pc);
}
int __glXSwapGetDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
{
xGLXGetDrawableAttributesReq *req = (xGLXGetDrawableAttributesReq *)pc;
__GLX_DECLARE_SWAP_VARIABLES;
__GLX_SWAP_SHORT(&req->length);
__GLX_SWAP_INT(&req->drawable);
return __glXGetDrawableAttributes(cl, pc);
} }

View File

@ -87,6 +87,9 @@ extern int DoCreateContext(__GLXclientState *cl, GLXContextID gcId,
GLXContextID shareList, VisualID visual, GLuint screen, GLboolean isDirect); GLXContextID shareList, VisualID visual, GLuint screen, GLboolean isDirect);
extern int DoCreateGLXPixmap(__GLXclientState *cl, VisualID visual, extern int DoCreateGLXPixmap(__GLXclientState *cl, VisualID visual,
GLuint screenNum, XID pixmapId, XID glxpixmapId); GLuint screenNum, XID pixmapId, XID glxpixmapId);
extern int DoDestroyPixmap(__GLXclientState *cl, XID glxpixmapId);
extern int DoQueryContext(__GLXclientState *cl, GLXContextID gcId);
extern void GlxExtensionInit(void); extern void GlxExtensionInit(void);