You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
xserver/glx/vnd_dispatch_stubs.c

526 lines
16 KiB
C

#include <dix-config.h>
#include <dix.h>
#include "vndserver.h"
// HACK: The opcode in old glxproto.h has a typo in it.
#if !defined(X_GLXCreateContextAttribsARB)
#define X_GLXCreateContextAttribsARB X_GLXCreateContextAtrribsARB
#endif
static int dispatch_Render(ClientPtr client)
{
REQUEST(xGLXRenderReq);
CARD32 contextTag;
GlxServerVendor *vendor = NULL;
REQUEST_AT_LEAST_SIZE(*stuff);
contextTag = GlxCheckSwap(client, stuff->contextTag);
vendor = glxServer.getContextTag(client, contextTag);
if (vendor != NULL) {
int ret;
ret = glxServer.forwardRequest(vendor, client);
return ret;
} else {
client->errorValue = contextTag;
return GlxErrorBase + GLXBadContextTag;
}
}
static int dispatch_RenderLarge(ClientPtr client)
{
REQUEST(xGLXRenderLargeReq);
CARD32 contextTag;
GlxServerVendor *vendor = NULL;
REQUEST_AT_LEAST_SIZE(*stuff);
contextTag = GlxCheckSwap(client, stuff->contextTag);
vendor = glxServer.getContextTag(client, contextTag);
if (vendor != NULL) {
int ret;
ret = glxServer.forwardRequest(vendor, client);
return ret;
} else {
client->errorValue = contextTag;
return GlxErrorBase + GLXBadContextTag;
}
}
static int dispatch_CreateContext(ClientPtr client)
{
REQUEST(xGLXCreateContextReq);
CARD32 screen, context;
GlxServerVendor *vendor = NULL;
REQUEST_SIZE_MATCH(*stuff);
screen = GlxCheckSwap(client, stuff->screen);
context = GlxCheckSwap(client, stuff->context);
LEGAL_NEW_RESOURCE(context, client);
if (screen < screenInfo.numScreens) {
vendor = glxServer.getVendorForScreen(client, screenInfo.screens[screen]);
}
if (vendor != NULL) {
int ret;
if (!glxServer.addXIDMap(context, vendor)) {
return BadAlloc;
}
ret = glxServer.forwardRequest(vendor, client);
if (ret != Success) {
glxServer.removeXIDMap(context);
}
return ret;
} else {
client->errorValue = screen;
return BadMatch;
}
}
static int dispatch_DestroyContext(ClientPtr client)
{
REQUEST(xGLXDestroyContextReq);
CARD32 context;
GlxServerVendor *vendor = NULL;
REQUEST_SIZE_MATCH(*stuff);
context = GlxCheckSwap(client, stuff->context);
vendor = glxServer.getXIDMap(context);
if (vendor != NULL) {
int ret;
ret = glxServer.forwardRequest(vendor, client);
if (ret == Success) {
glxServer.removeXIDMap(context);
}
return ret;
} else {
client->errorValue = context;
return GlxErrorBase + GLXBadContext;
}
}
static int dispatch_WaitGL(ClientPtr client)
{
REQUEST(xGLXWaitGLReq);
CARD32 contextTag;
GlxServerVendor *vendor = NULL;
REQUEST_SIZE_MATCH(*stuff);
contextTag = GlxCheckSwap(client, stuff->contextTag);
vendor = glxServer.getContextTag(client, contextTag);
if (vendor != NULL) {
int ret;
ret = glxServer.forwardRequest(vendor, client);
return ret;
} else {
client->errorValue = contextTag;
return GlxErrorBase + GLXBadContextTag;
}
}
static int dispatch_WaitX(ClientPtr client)
{
REQUEST(xGLXWaitXReq);
CARD32 contextTag;
GlxServerVendor *vendor = NULL;
REQUEST_SIZE_MATCH(*stuff);
contextTag = GlxCheckSwap(client, stuff->contextTag);
vendor = glxServer.getContextTag(client, contextTag);
if (vendor != NULL) {
int ret;
ret = glxServer.forwardRequest(vendor, client);
return ret;
} else {
client->errorValue = contextTag;
return GlxErrorBase + GLXBadContextTag;
}
}
static int dispatch_UseXFont(ClientPtr client)
{
REQUEST(xGLXUseXFontReq);
CARD32 contextTag;
GlxServerVendor *vendor = NULL;
REQUEST_SIZE_MATCH(*stuff);
contextTag = GlxCheckSwap(client, stuff->contextTag);
vendor = glxServer.getContextTag(client, contextTag);
if (vendor != NULL) {
int ret;
ret = glxServer.forwardRequest(vendor, client);
return ret;
} else {
client->errorValue = contextTag;
return GlxErrorBase + GLXBadContextTag;
}
}
static int dispatch_CreateGLXPixmap(ClientPtr client)
{
REQUEST(xGLXCreateGLXPixmapReq);
CARD32 screen, glxpixmap;
GlxServerVendor *vendor = NULL;
REQUEST_SIZE_MATCH(*stuff);
screen = GlxCheckSwap(client, stuff->screen);
glxpixmap = GlxCheckSwap(client, stuff->glxpixmap);
LEGAL_NEW_RESOURCE(glxpixmap, client);
if (screen < screenInfo.numScreens) {
vendor = glxServer.getVendorForScreen(client, screenInfo.screens[screen]);
}
if (vendor != NULL) {
int ret;
if (!glxServer.addXIDMap(glxpixmap, vendor)) {
return BadAlloc;
}
ret = glxServer.forwardRequest(vendor, client);
if (ret != Success) {
glxServer.removeXIDMap(glxpixmap);
}
return ret;
} else {
client->errorValue = screen;
return BadMatch;
}
}
static int dispatch_GetVisualConfigs(ClientPtr client)
{
REQUEST(xGLXGetVisualConfigsReq);
CARD32 screen;
GlxServerVendor *vendor = NULL;
REQUEST_SIZE_MATCH(*stuff);
screen = GlxCheckSwap(client, stuff->screen);
if (screen < screenInfo.numScreens) {
vendor = glxServer.getVendorForScreen(client, screenInfo.screens[screen]);
}
if (vendor != NULL) {
int ret;
ret = glxServer.forwardRequest(vendor, client);
return ret;
} else {
client->errorValue = screen;
return BadMatch;
}
}
static int dispatch_DestroyGLXPixmap(ClientPtr client)
{
REQUEST(xGLXDestroyGLXPixmapReq);
CARD32 glxpixmap;
GlxServerVendor *vendor = NULL;
REQUEST_SIZE_MATCH(*stuff);
glxpixmap = GlxCheckSwap(client, stuff->glxpixmap);
vendor = glxServer.getXIDMap(glxpixmap);
if (vendor != NULL) {
int ret;
ret = glxServer.forwardRequest(vendor, client);
return ret;
} else {
client->errorValue = glxpixmap;
return GlxErrorBase + GLXBadPixmap;
}
}
static int dispatch_QueryExtensionsString(ClientPtr client)
{
REQUEST(xGLXQueryExtensionsStringReq);
CARD32 screen;
GlxServerVendor *vendor = NULL;
REQUEST_SIZE_MATCH(*stuff);
screen = GlxCheckSwap(client, stuff->screen);
if (screen < screenInfo.numScreens) {
vendor = glxServer.getVendorForScreen(client, screenInfo.screens[screen]);
}
if (vendor != NULL) {
int ret;
ret = glxServer.forwardRequest(vendor, client);
return ret;
} else {
client->errorValue = screen;
return BadMatch;
}
}
static int dispatch_QueryServerString(ClientPtr client)
{
REQUEST(xGLXQueryServerStringReq);
CARD32 screen;
GlxServerVendor *vendor = NULL;
REQUEST_SIZE_MATCH(*stuff);
screen = GlxCheckSwap(client, stuff->screen);
if (screen < screenInfo.numScreens) {
vendor = glxServer.getVendorForScreen(client, screenInfo.screens[screen]);
}
if (vendor != NULL) {
int ret;
ret = glxServer.forwardRequest(vendor, client);
return ret;
} else {
client->errorValue = screen;
return BadMatch;
}
}
static int dispatch_ChangeDrawableAttributes(ClientPtr client)
{
REQUEST(xGLXChangeDrawableAttributesReq);
CARD32 drawable;
GlxServerVendor *vendor = NULL;
REQUEST_AT_LEAST_SIZE(*stuff);
drawable = GlxCheckSwap(client, stuff->drawable);
vendor = glxServer.getXIDMap(drawable);
if (vendor != NULL) {
int ret;
ret = glxServer.forwardRequest(vendor, client);
return ret;
} else {
client->errorValue = drawable;
return BadDrawable;
}
}
static int dispatch_CreateNewContext(ClientPtr client)
{
REQUEST(xGLXCreateNewContextReq);
CARD32 screen, context;
GlxServerVendor *vendor = NULL;
REQUEST_SIZE_MATCH(*stuff);
screen = GlxCheckSwap(client, stuff->screen);
context = GlxCheckSwap(client, stuff->context);
LEGAL_NEW_RESOURCE(context, client);
if (screen < screenInfo.numScreens) {
vendor = glxServer.getVendorForScreen(client, screenInfo.screens[screen]);
}
if (vendor != NULL) {
int ret;
if (!glxServer.addXIDMap(context, vendor)) {
return BadAlloc;
}
ret = glxServer.forwardRequest(vendor, client);
if (ret != Success) {
glxServer.removeXIDMap(context);
}
return ret;
} else {
client->errorValue = screen;
return BadMatch;
}
}
static int dispatch_CreatePbuffer(ClientPtr client)
{
REQUEST(xGLXCreatePbufferReq);
CARD32 screen, pbuffer;
GlxServerVendor *vendor = NULL;
REQUEST_AT_LEAST_SIZE(*stuff);
screen = GlxCheckSwap(client, stuff->screen);
pbuffer = GlxCheckSwap(client, stuff->pbuffer);
LEGAL_NEW_RESOURCE(pbuffer, client);
if (screen < screenInfo.numScreens) {
vendor = glxServer.getVendorForScreen(client, screenInfo.screens[screen]);
}
if (vendor != NULL) {
int ret;
if (!glxServer.addXIDMap(pbuffer, vendor)) {
return BadAlloc;
}
ret = glxServer.forwardRequest(vendor, client);
if (ret != Success) {
glxServer.removeXIDMap(pbuffer);
}
return ret;
} else {
client->errorValue = screen;
return BadMatch;
}
}
static int dispatch_CreatePixmap(ClientPtr client)
{
REQUEST(xGLXCreatePixmapReq);
CARD32 screen, glxpixmap;
GlxServerVendor *vendor = NULL;
REQUEST_AT_LEAST_SIZE(*stuff);
screen = GlxCheckSwap(client, stuff->screen);
glxpixmap = GlxCheckSwap(client, stuff->glxpixmap);
LEGAL_NEW_RESOURCE(glxpixmap, client);
if (screen < screenInfo.numScreens) {
vendor = glxServer.getVendorForScreen(client, screenInfo.screens[screen]);
}
if (vendor != NULL) {
int ret;
if (!glxServer.addXIDMap(glxpixmap, vendor)) {
return BadAlloc;
}
ret = glxServer.forwardRequest(vendor, client);
if (ret != Success) {
glxServer.removeXIDMap(glxpixmap);
}
return ret;
} else {
client->errorValue = screen;
return BadMatch;
}
}
static int dispatch_CreateWindow(ClientPtr client)
{
REQUEST(xGLXCreateWindowReq);
CARD32 screen, glxwindow;
GlxServerVendor *vendor = NULL;
REQUEST_AT_LEAST_SIZE(*stuff);
screen = GlxCheckSwap(client, stuff->screen);
glxwindow = GlxCheckSwap(client, stuff->glxwindow);
LEGAL_NEW_RESOURCE(glxwindow, client);
if (screen < screenInfo.numScreens) {
vendor = glxServer.getVendorForScreen(client, screenInfo.screens[screen]);
}
if (vendor != NULL) {
int ret;
if (!glxServer.addXIDMap(glxwindow, vendor)) {
return BadAlloc;
}
ret = glxServer.forwardRequest(vendor, client);
if (ret != Success) {
glxServer.removeXIDMap(glxwindow);
}
return ret;
} else {
client->errorValue = screen;
return BadMatch;
}
}
static int dispatch_CreateContextAttribsARB(ClientPtr client)
{
REQUEST(xGLXCreateContextAttribsARBReq);
CARD32 screen, context;
GlxServerVendor *vendor = NULL;
REQUEST_AT_LEAST_SIZE(*stuff);
screen = GlxCheckSwap(client, stuff->screen);
context = GlxCheckSwap(client, stuff->context);
LEGAL_NEW_RESOURCE(context, client);
if (screen < screenInfo.numScreens) {
vendor = glxServer.getVendorForScreen(client, screenInfo.screens[screen]);
}
if (vendor != NULL) {
int ret;
if (!glxServer.addXIDMap(context, vendor)) {
return BadAlloc;
}
ret = glxServer.forwardRequest(vendor, client);
if (ret != Success) {
glxServer.removeXIDMap(context);
}
return ret;
} else {
client->errorValue = screen;
return BadMatch;
}
}
static int dispatch_DestroyPbuffer(ClientPtr client)
{
REQUEST(xGLXDestroyPbufferReq);
CARD32 pbuffer;
GlxServerVendor *vendor = NULL;
REQUEST_SIZE_MATCH(*stuff);
pbuffer = GlxCheckSwap(client, stuff->pbuffer);
vendor = glxServer.getXIDMap(pbuffer);
if (vendor != NULL) {
int ret;
ret = glxServer.forwardRequest(vendor, client);
if (ret == Success) {
glxServer.removeXIDMap(pbuffer);
}
return ret;
} else {
client->errorValue = pbuffer;
return GlxErrorBase + GLXBadPbuffer;
}
}
static int dispatch_DestroyPixmap(ClientPtr client)
{
REQUEST(xGLXDestroyPixmapReq);
CARD32 glxpixmap;
GlxServerVendor *vendor = NULL;
REQUEST_SIZE_MATCH(*stuff);
glxpixmap = GlxCheckSwap(client, stuff->glxpixmap);
vendor = glxServer.getXIDMap(glxpixmap);
if (vendor != NULL) {
int ret;
ret = glxServer.forwardRequest(vendor, client);
if (ret == Success) {
glxServer.removeXIDMap(glxpixmap);
}
return ret;
} else {
client->errorValue = glxpixmap;
return GlxErrorBase + GLXBadPixmap;
}
}
static int dispatch_DestroyWindow(ClientPtr client)
{
REQUEST(xGLXDestroyWindowReq);
CARD32 glxwindow;
GlxServerVendor *vendor = NULL;
REQUEST_SIZE_MATCH(*stuff);
glxwindow = GlxCheckSwap(client, stuff->glxwindow);
vendor = glxServer.getXIDMap(glxwindow);
if (vendor != NULL) {
int ret;
ret = glxServer.forwardRequest(vendor, client);
if (ret == Success) {
glxServer.removeXIDMap(glxwindow);
}
return ret;
} else {
client->errorValue = glxwindow;
return GlxErrorBase + GLXBadWindow;
}
}
static int dispatch_GetDrawableAttributes(ClientPtr client)
{
REQUEST(xGLXGetDrawableAttributesReq);
CARD32 drawable;
GlxServerVendor *vendor = NULL;
REQUEST_SIZE_MATCH(*stuff);
drawable = GlxCheckSwap(client, stuff->drawable);
vendor = glxServer.getXIDMap(drawable);
if (vendor != NULL) {
int ret;
ret = glxServer.forwardRequest(vendor, client);
return ret;
} else {
client->errorValue = drawable;
return BadDrawable;
}
}
static int dispatch_GetFBConfigs(ClientPtr client)
{
REQUEST(xGLXGetFBConfigsReq);
CARD32 screen;
GlxServerVendor *vendor = NULL;
REQUEST_SIZE_MATCH(*stuff);
screen = GlxCheckSwap(client, stuff->screen);
if (screen < screenInfo.numScreens) {
vendor = glxServer.getVendorForScreen(client, screenInfo.screens[screen]);
}
if (vendor != NULL) {
int ret;
ret = glxServer.forwardRequest(vendor, client);
return ret;
} else {
client->errorValue = screen;
return BadMatch;
}
}
static int dispatch_QueryContext(ClientPtr client)
{
REQUEST(xGLXQueryContextReq);
CARD32 context;
GlxServerVendor *vendor = NULL;
REQUEST_SIZE_MATCH(*stuff);
context = GlxCheckSwap(client, stuff->context);
vendor = glxServer.getXIDMap(context);
if (vendor != NULL) {
int ret;
ret = glxServer.forwardRequest(vendor, client);
return ret;
} else {
client->errorValue = context;
return GlxErrorBase + GLXBadContext;
}
}
static int dispatch_IsDirect(ClientPtr client)
{
REQUEST(xGLXIsDirectReq);
CARD32 context;
GlxServerVendor *vendor = NULL;
REQUEST_SIZE_MATCH(*stuff);
context = GlxCheckSwap(client, stuff->context);
vendor = glxServer.getXIDMap(context);
if (vendor != NULL) {
int ret;
ret = glxServer.forwardRequest(vendor, client);
return ret;
} else {
client->errorValue = context;
return GlxErrorBase + GLXBadContext;
}
}