1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX initialization. Code based on glxext.c, glx_query.c, and 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glcontextmodes.c under src/glx/. The major difference is that DRI 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * related code is stripped out. 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * If the maintenance of this file takes too much time, we should consider 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * refactoring glxext.c. 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <assert.h> 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <X11/Xlib.h> 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <X11/Xproto.h> 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <X11/Xlibint.h> 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <X11/extensions/Xext.h> 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <X11/extensions/extutil.h> 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <sys/time.h> 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "GL/glxproto.h" 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "GL/glxtokens.h" 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "GL/gl.h" /* for GL types needed by __GLcontextModes */ 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "glcore.h" /* for __GLcontextModes */ 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "glxinit.h" 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef GLX_DIRECT_RENDERING 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef struct GLXGenericGetString 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CARD8 reqType; 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CARD8 glxCode; 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CARD16 length B16; 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CARD32 for_whom B32; 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CARD32 name B32; 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} xGLXGenericGetStringReq; 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define sz_xGLXGenericGetStringReq 12 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define X_GLXGenericGetString 0 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Extension required boiler plate */ 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic char *__glXExtensionName = GLX_EXTENSION_NAME; 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XExtensionInfo *__glXExtensionInfo = NULL; 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org__glXCloseDisplay(Display * dpy, XExtCodes * codes) 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return XextRemoveDisplay(__glXExtensionInfo, dpy); 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic /* const */ XExtensionHooks __glXExtensionHooks = { 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NULL, /* create_gc */ 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NULL, /* copy_gc */ 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NULL, /* flush_gc */ 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NULL, /* free_gc */ 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NULL, /* create_font */ 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NULL, /* free_font */ 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __glXCloseDisplay, /* close_display */ 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NULL, /* wire_to_event */ 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NULL, /* event_to_wire */ 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NULL, /* error */ 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NULL, /* error_string */ 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XEXT_GENERATE_FIND_DISPLAY(__glXFindDisplay, __glXExtensionInfo, 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __glXExtensionName, &__glXExtensionHooks, 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __GLX_NUMBER_EVENTS, NULL) 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLint 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_gl_convert_from_x_visual_type(int visualType) 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NUM_VISUAL_TYPES 6 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static const int glx_visual_types[NUM_VISUAL_TYPES] = { 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLX_STATIC_GRAY, GLX_GRAY_SCALE, 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLX_STATIC_COLOR, GLX_PSEUDO_COLOR, 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLX_TRUE_COLOR, GLX_DIRECT_COLOR 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }; 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ((unsigned) visualType < NUM_VISUAL_TYPES) 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? glx_visual_types[visualType] : GLX_NONE; 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_gl_context_modes_destroy(__GLcontextModes * modes) 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org while (modes != NULL) { 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __GLcontextModes *const next = modes->next; 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Xfree(modes); 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org modes = next; 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic __GLcontextModes * 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_gl_context_modes_create(unsigned count, size_t minimum_size) 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const size_t size = (minimum_size > sizeof(__GLcontextModes)) 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ? minimum_size : sizeof(__GLcontextModes); 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __GLcontextModes *base = NULL; 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __GLcontextModes **next; 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned i; 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org next = &base; 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < count; i++) { 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *next = (__GLcontextModes *) Xmalloc(size); 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (*next == NULL) { 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _gl_context_modes_destroy(base); 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org base = NULL; 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memset(*next, 0, size); 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->visualID = GLX_DONT_CARE; 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->visualType = GLX_DONT_CARE; 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->visualRating = GLX_NONE; 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->transparentPixel = GLX_NONE; 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->transparentRed = GLX_DONT_CARE; 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->transparentGreen = GLX_DONT_CARE; 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->transparentBlue = GLX_DONT_CARE; 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->transparentAlpha = GLX_DONT_CARE; 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->transparentIndex = GLX_DONT_CARE; 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->xRenderable = GLX_DONT_CARE; 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->fbconfigID = GLX_DONT_CARE; 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->swapMethod = GLX_SWAP_UNDEFINED_OML; 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->bindToTextureRgb = GLX_DONT_CARE; 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->bindToTextureRgba = GLX_DONT_CARE; 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->bindToMipmapTexture = GLX_DONT_CARE; 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->bindToTextureTargets = GLX_DONT_CARE; 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->yInverted = GLX_DONT_CARE; 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org next = &((*next)->next); 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return base; 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic char * 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org__glXQueryServerString(Display * dpy, int opcode, CARD32 screen, CARD32 name) 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xGLXGenericGetStringReq *req; 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xGLXSingleReply reply; 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int length; 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int numbytes; 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char *buf; 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CARD32 for_whom = screen; 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CARD32 glxCode = X_GLXQueryServerString; 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LockDisplay(dpy); 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* All of the GLX protocol requests for getting a string from the server 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * look the same. The exact meaning of the for_whom field is usually 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * either the screen number (for glXQueryServerString) or the context tag 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * (for GLXSingle). 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GetReq(GLXGenericGetString, req); 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org req->reqType = opcode; 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org req->glxCode = glxCode; 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org req->for_whom = for_whom; 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org req->name = name; 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _XReply(dpy, (xReply *) & reply, 0, False); 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org length = reply.length * 4; 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org numbytes = reply.size; 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org buf = (char *) Xmalloc(numbytes); 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (buf != NULL) { 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _XRead(dpy, buf, numbytes); 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org length -= numbytes; 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _XEatData(dpy, length); 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org UnlockDisplay(dpy); 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SyncHandle(); 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return buf; 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/************************************************************************/ 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org** Free the per screen configs data as well as the array of 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org** __glXScreenConfigs. 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org*/ 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFreeScreenConfigs(__GLXdisplayPrivate * priv) 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __GLXscreenConfigs *psc; 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint i, screens; 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Free screen configuration information */ 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org screens = ScreenCount(priv->dpy); 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < screens; i++) { 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org psc = priv->screenConfigs[i]; 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!psc) 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org continue; 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (psc->configs) { 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _gl_context_modes_destroy(psc->configs); 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org psc->configs = NULL; /* NOTE: just for paranoia */ 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Xfree((char *) psc->serverGLXexts); 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XFree((char *) priv->screenConfigs); 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org priv->screenConfigs = NULL; 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org** Release the private memory referred to in a display private 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org** structure. The caller will free the extension structure. 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org*/ 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org__glXFreeDisplayPrivate(XExtData * extension) 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __GLXdisplayPrivate *priv; 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org priv = (__GLXdisplayPrivate *) extension->private_data; 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FreeScreenConfigs(priv); 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (priv->serverGLXversion) 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Xfree((char *) priv->serverGLXversion); 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Xfree((char *) priv); 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/************************************************************************/ 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org** Query the version of the GLX extension. This procedure works even if 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org** the client extension is not completely set up. 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org*/ 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GLX_MAJOR_VERSION 1 /* current version numbers */ 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GLX_MINOR_VERSION 4 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic Bool 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgQueryVersion(Display * dpy, int opcode, int *major, int *minor) 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xGLXQueryVersionReq *req; 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xGLXQueryVersionReply reply; 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Send the glXQueryVersion request */ 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LockDisplay(dpy); 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GetReq(GLXQueryVersion, req); 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org req->reqType = opcode; 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org req->glxCode = X_GLXQueryVersion; 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org req->majorVersion = GLX_MAJOR_VERSION; 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org req->minorVersion = GLX_MINOR_VERSION; 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _XReply(dpy, (xReply *) & reply, 0, False); 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org UnlockDisplay(dpy); 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SyncHandle(); 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (reply.majorVersion != GLX_MAJOR_VERSION) { 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ** The server does not support the same major release as this 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ** client. 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *major = reply.majorVersion; 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *minor = min(reply.minorVersion, GLX_MINOR_VERSION); 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define __GLX_MIN_CONFIG_PROPS 18 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define __GLX_MAX_CONFIG_PROPS 500 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define __GLX_EXT_CONFIG_PROPS 10 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define __GLX_TOTAL_CONFIG (__GLX_MIN_CONFIG_PROPS + \ 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2 * __GLX_EXT_CONFIG_PROPS) 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org__glXInitializeVisualConfigFromTags(__GLcontextModes * config, int count, 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const INT32 * bp, Bool tagged_only, 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Bool fbconfig_style_tags) 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i; 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!tagged_only) { 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Copy in the first set of properties */ 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->visualID = *bp++; 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->visualType = _gl_convert_from_x_visual_type(*bp++); 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->rgbMode = *bp++; 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->redBits = *bp++; 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->greenBits = *bp++; 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->blueBits = *bp++; 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->alphaBits = *bp++; 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->accumRedBits = *bp++; 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->accumGreenBits = *bp++; 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->accumBlueBits = *bp++; 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->accumAlphaBits = *bp++; 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->doubleBufferMode = *bp++; 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->stereoMode = *bp++; 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->rgbBits = *bp++; 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->depthBits = *bp++; 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->stencilBits = *bp++; 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->numAuxBuffers = *bp++; 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->level = *bp++; 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org count -= __GLX_MIN_CONFIG_PROPS; 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ** Additional properties may be in a list at the end 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ** of the reply. They are in pairs of property type 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ** and property value. 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FETCH_OR_SET(tag) \ 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config-> tag = ( fbconfig_style_tags ) ? *bp++ : 1 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < count; i += 2) { 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (*bp++) { 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RGBA: 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FETCH_OR_SET(rgbMode); 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BUFFER_SIZE: 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->rgbBits = *bp++; 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_LEVEL: 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->level = *bp++; 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DOUBLEBUFFER: 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FETCH_OR_SET(doubleBufferMode); 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_STEREO: 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FETCH_OR_SET(stereoMode); 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_AUX_BUFFERS: 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->numAuxBuffers = *bp++; 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RED_SIZE: 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->redBits = *bp++; 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_GREEN_SIZE: 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->greenBits = *bp++; 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BLUE_SIZE: 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->blueBits = *bp++; 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ALPHA_SIZE: 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->alphaBits = *bp++; 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DEPTH_SIZE: 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->depthBits = *bp++; 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_STENCIL_SIZE: 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->stencilBits = *bp++; 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_RED_SIZE: 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->accumRedBits = *bp++; 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_GREEN_SIZE: 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->accumGreenBits = *bp++; 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_BLUE_SIZE: 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->accumBlueBits = *bp++; 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_ALPHA_SIZE: 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->accumAlphaBits = *bp++; 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VISUAL_CAVEAT_EXT: 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->visualRating = *bp++; 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_X_VISUAL_TYPE: 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->visualType = *bp++; 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_TYPE: 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->transparentPixel = *bp++; 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_INDEX_VALUE: 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->transparentIndex = *bp++; 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_RED_VALUE: 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->transparentRed = *bp++; 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_GREEN_VALUE: 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->transparentGreen = *bp++; 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_BLUE_VALUE: 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->transparentBlue = *bp++; 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_ALPHA_VALUE: 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->transparentAlpha = *bp++; 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VISUAL_ID: 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->visualID = *bp++; 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DRAWABLE_TYPE: 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->drawableType = *bp++; 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RENDER_TYPE: 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->renderType = *bp++; 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_X_RENDERABLE: 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->xRenderable = *bp++; 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_FBCONFIG_ID: 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->fbconfigID = *bp++; 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MAX_PBUFFER_WIDTH: 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->maxPbufferWidth = *bp++; 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MAX_PBUFFER_HEIGHT: 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->maxPbufferHeight = *bp++; 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MAX_PBUFFER_PIXELS: 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->maxPbufferPixels = *bp++; 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_OPTIMAL_PBUFFER_WIDTH_SGIX: 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->optimalPbufferWidth = *bp++; 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX: 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->optimalPbufferHeight = *bp++; 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VISUAL_SELECT_GROUP_SGIX: 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->visualSelectGroup = *bp++; 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_SWAP_METHOD_OML: 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->swapMethod = *bp++; 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_SAMPLE_BUFFERS_SGIS: 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->sampleBuffers = *bp++; 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_SAMPLES_SGIS: 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->samples = *bp++; 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_TEXTURE_RGB_EXT: 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->bindToTextureRgb = *bp++; 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_TEXTURE_RGBA_EXT: 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->bindToTextureRgba = *bp++; 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_MIPMAP_TEXTURE_EXT: 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->bindToMipmapTexture = *bp++; 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_TEXTURE_TARGETS_EXT: 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->bindToTextureTargets = *bp++; 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_Y_INVERTED_EXT: 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->yInverted = *bp++; 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case None: 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org i = count; 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->renderType = 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (config->rgbMode) ? GLX_RGBA_BIT : GLX_COLOR_INDEX_BIT; 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->haveAccumBuffer = ((config->accumRedBits + 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->accumGreenBits + 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->accumBlueBits + 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->accumAlphaBits) > 0); 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->haveDepthBuffer = (config->depthBits > 0); 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config->haveStencilBuffer = (config->stencilBits > 0); 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic __GLcontextModes * 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgcreateConfigsFromProperties(Display * dpy, int nvisuals, int nprops, 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int screen, GLboolean tagged_only) 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INT32 buf[__GLX_TOTAL_CONFIG], *props; 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned prop_size; 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __GLcontextModes *modes, *m; 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i; 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (nprops == 0) 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* FIXME: Is the __GLX_MIN_CONFIG_PROPS test correct for FBconfigs? */ 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Check number of properties */ 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (nprops < __GLX_MIN_CONFIG_PROPS || nprops > __GLX_MAX_CONFIG_PROPS) 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Allocate memory for our config structure */ 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org modes = _gl_context_modes_create(nvisuals, sizeof(__GLcontextModes)); 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!modes) 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org prop_size = nprops * __GLX_SIZE_INT32; 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (prop_size <= sizeof(buf)) 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org props = buf; 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org props = Xmalloc(prop_size); 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Read each config structure and convert it into our format */ 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m = modes; 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < nvisuals; i++) { 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _XRead(dpy, (char *) props, prop_size); 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Older X servers don't send this so we default it here. */ 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m->drawableType = GLX_WINDOW_BIT; 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __glXInitializeVisualConfigFromTags(m, nprops, props, 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org tagged_only, GL_TRUE); 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m->screen = screen; 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org m = m->next; 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (props != buf) 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Xfree(props); 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return modes; 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLboolean 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orggetFBConfigs(__GLXscreenConfigs *psc, __GLXdisplayPrivate *priv, int screen) 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xGLXGetFBConfigsReq *fb_req; 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xGLXGetFBConfigsSGIXReq *sgi_req; 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xGLXVendorPrivateWithReplyReq *vpreq; 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xGLXGetFBConfigsReply reply; 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Display *dpy = priv->dpy; 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org psc->serverGLXexts = 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __glXQueryServerString(dpy, priv->majorOpcode, screen, GLX_EXTENSIONS); 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LockDisplay(dpy); 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org psc->configs = NULL; 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (atof(priv->serverGLXversion) >= 1.3) { 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GetReq(GLXGetFBConfigs, fb_req); 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fb_req->reqType = priv->majorOpcode; 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fb_req->glxCode = X_GLXGetFBConfigs; 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fb_req->screen = screen; 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (strstr(psc->serverGLXexts, "GLX_SGIX_fbconfig") != NULL) { 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GetReqExtra(GLXVendorPrivateWithReply, 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sz_xGLXGetFBConfigsSGIXReq + 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sz_xGLXVendorPrivateWithReplyReq, vpreq); 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sgi_req = (xGLXGetFBConfigsSGIXReq *) vpreq; 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sgi_req->reqType = priv->majorOpcode; 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sgi_req->glxCode = X_GLXVendorPrivateWithReply; 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sgi_req->vendorCode = X_GLXvop_GetFBConfigsSGIX; 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sgi_req->screen = screen; 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto out; 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_XReply(dpy, (xReply *) & reply, 0, False)) 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org goto out; 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org psc->configs = createConfigsFromProperties(dpy, 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reply.numFBConfigs, 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reply.numAttribs * 2, 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org screen, GL_TRUE); 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org out: 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org UnlockDisplay(dpy); 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return psc->configs != NULL; 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLboolean 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgAllocAndFetchScreenConfigs(Display * dpy, __GLXdisplayPrivate * priv) 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __GLXscreenConfigs *psc; 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint i, screens; 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ** First allocate memory for the array of per screen configs. 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org screens = ScreenCount(dpy); 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org priv->screenConfigs = Xmalloc(screens * sizeof *priv->screenConfigs); 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!priv->screenConfigs) { 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org priv->serverGLXversion = 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __glXQueryServerString(dpy, priv->majorOpcode, 0, GLX_VERSION); 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (priv->serverGLXversion == NULL) { 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FreeScreenConfigs(priv); 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < screens; i++) { 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org psc = Xcalloc(1, sizeof *psc); 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!psc) 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org getFBConfigs(psc, priv, i); 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org priv->screenConfigs[i] = psc; 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SyncHandle(); 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_X_HIDDEN __GLXdisplayPrivate * 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org__glXInitialize(Display * dpy) 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XExtDisplayInfo *info = __glXFindDisplay(dpy); 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XExtData **privList, *private, *found; 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __GLXdisplayPrivate *dpyPriv; 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XEDataObject dataObj; 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int major, minor; 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!XextHasExtension(info)) 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* See if a display private already exists. If so, return it */ 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dataObj.display = dpy; 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org privList = XEHeadOfExtensionList(dataObj); 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org found = XFindOnExtensionList(privList, info->codes->extension); 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (found) 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (__GLXdisplayPrivate *) found->private_data; 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* See if the versions are compatible */ 616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!QueryVersion(dpy, info->codes->major_opcode, &major, &minor)) 617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ** Allocate memory for all the pieces needed for this buffer. 621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org private = (XExtData *) Xmalloc(sizeof(XExtData)); 623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!private) 624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dpyPriv = (__GLXdisplayPrivate *) Xcalloc(1, sizeof(__GLXdisplayPrivate)); 626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!dpyPriv) { 627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Xfree(private); 628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ** Init the display private and then read in the screen config 633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ** structures from the server. 634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dpyPriv->majorOpcode = info->codes->major_opcode; 636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dpyPriv->dpy = dpy; 637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!AllocAndFetchScreenConfigs(dpy, dpyPriv)) { 639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Xfree(dpyPriv); 640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Xfree(private); 641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ** Fill in the private structure. This is the actual structure that 646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ** hangs off of the Display structure. Our private structure is 647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ** referred to by this structure. Got that? 648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org private->number = info->codes->extension; 650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org private->next = 0; 651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org private->free_private = __glXFreeDisplayPrivate; 652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org private->private_data = (char *) dpyPriv; 653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XAddToExtensionList(privList, private); 654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return dpyPriv; 656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif /* GLX_DIRECT_RENDERING */ 659