526 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			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;
 | 
						|
    }
 | 
						|
}
 |