1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mesa 3-D graphics library 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Version: 7.6 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 2009 VMware, Inc. All Rights Reserved. 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the "Software"), 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to deal in the Software without restriction, including without limitation 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense, 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and/or sell copies of the Software, and to permit persons to whom the 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software is furnished to do so, subject to the following conditions: 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice shall be included 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * in all copies or substantial portions of the Software. 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Fake" GLX API implemented in terms of the XMesa*() functions. 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define GLX_GLXEXT_PROTOTYPES 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "GL/glx.h" 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "xm_api.h" 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* This indicates the client-side GLX API and GLX encoder version. */ 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CLIENT_MAJOR_VERSION 1 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CLIENT_MINOR_VERSION 4 /* but don't have 1.3's pbuffers, etc yet */ 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* This indicates the server-side GLX decoder version. 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX 1.4 indicates OpenGL 1.3 support 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SERVER_MAJOR_VERSION 1 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SERVER_MINOR_VERSION 4 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Who implemented this GLX? */ 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VENDOR "Brian Paul" 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define EXTENSIONS \ 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_MESA_copy_sub_buffer " \ 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_MESA_pixmap_colormap " \ 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_MESA_release_buffers " \ 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_ARB_create_context " \ 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_ARB_create_context_profile " \ 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_ARB_get_proc_address " \ 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_EXT_texture_from_pixmap " \ 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_EXT_visual_info " \ 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_EXT_visual_rating " \ 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*"GLX_SGI_video_sync "*/ \ 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_SGIX_fbconfig " \ 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_SGIX_pbuffer " 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEFAULT_DIRECT GL_TRUE 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** XXX this could be based on gallium's max texture size */ 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define PBUFFER_MAX_SIZE 16384 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The GLXContext typedef is defined as a pointer to this structure. 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct __GLXcontextRec 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Display *currentDpy; 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean isDirect; 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLXDrawable currentDrawable; 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLXDrawable currentReadable; 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XID xid; 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesaContext; 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic pipe_tsd ContextTSD; 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Set current context for calling thread */ 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgSetCurrentContext(GLXContext c) 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pipe_tsd_set(&ContextTSD, c); 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Get current context for calling thread */ 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXContext 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGetCurrentContext(void) 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return pipe_tsd_get(&ContextTSD); 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**********************************************************************/ 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX Visual Code ***/ 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**********************************************************************/ 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DONT_CARE -1 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XMesaVisual *VisualTable = NULL; 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int NumVisuals = 0; 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Macro to handle c_class vs class field name in XVisualInfo struct */ 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if defined(__cplusplus) || defined(c_plusplus) 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CLASS c_class 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#else 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CLASS class 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Test if the given XVisualInfo is usable for Mesa rendering. 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLboolean 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgis_usable_visual( XVisualInfo *vinfo ) 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (vinfo->CLASS) { 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case StaticGray: 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GrayScale: 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Any StaticGray/GrayScale visual works in RGB or CI mode */ 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case StaticColor: 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PseudoColor: 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Any StaticColor/PseudoColor visual of at least 4 bits */ 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vinfo->depth>=4) { 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TrueColor: 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case DirectColor: 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Any depth of TrueColor or DirectColor works in RGB mode */ 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* This should never happen */ 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Given an XVisualInfo and RGB, Double, and Depth buffer flags, save the 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * configuration in our list of GLX visuals. 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XMesaVisual 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgsave_glx_visual( Display *dpy, XVisualInfo *vinfo, 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean rgbFlag, GLboolean alphaFlag, GLboolean dbFlag, 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean stereoFlag, 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint depth_size, GLint stencil_size, 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumRedSize, GLint accumGreenSize, 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumBlueSize, GLint accumAlphaSize, 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint level, GLint numAuxBuffers ) 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ximageFlag = GL_TRUE; 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis; 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint i; 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean comparePointers; 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (dbFlag) { 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Check if the MESA_BACK_BUFFER env var is set */ 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char *backbuffer = _mesa_getenv("MESA_BACK_BUFFER"); 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (backbuffer) { 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (backbuffer[0]=='p' || backbuffer[0]=='P') { 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ximageFlag = GL_FALSE; 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (backbuffer[0]=='x' || backbuffer[0]=='X') { 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ximageFlag = GL_TRUE; 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_warning(NULL, "Mesa: invalid value for MESA_BACK_BUFFER environment variable, using an XImage."); 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (stereoFlag) { 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* stereo not supported */ 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (stencil_size > 0 && depth_size > 0) 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_size = 24; 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Comparing IDs uses less memory but sometimes fails. */ 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* XXX revisit this after 3.0 is finished. */ 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_mesa_getenv("MESA_GLX_VISUAL_HACK")) 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org comparePointers = GL_TRUE; 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org comparePointers = GL_FALSE; 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Force the visual to have an alpha channel */ 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (rgbFlag && _mesa_getenv("MESA_GLX_FORCE_ALPHA")) 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org alphaFlag = GL_TRUE; 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* First check if a matching visual is already in the list */ 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i=0; i<NumVisuals; i++) { 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual v = VisualTable[i]; 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (v->display == dpy 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && v->mesa_visual.level == level 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && v->mesa_visual.numAuxBuffers == numAuxBuffers 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && v->ximage_flag == ximageFlag 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && v->mesa_visual.rgbMode == rgbFlag 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && v->mesa_visual.doubleBufferMode == dbFlag 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && v->mesa_visual.stereoMode == stereoFlag 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && (v->mesa_visual.alphaBits > 0) == alphaFlag 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && (v->mesa_visual.depthBits >= depth_size || depth_size == 0) 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && (v->mesa_visual.stencilBits >= stencil_size || stencil_size == 0) 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && (v->mesa_visual.accumRedBits >= accumRedSize || accumRedSize == 0) 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && (v->mesa_visual.accumGreenBits >= accumGreenSize || accumGreenSize == 0) 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && (v->mesa_visual.accumBlueBits >= accumBlueSize || accumBlueSize == 0) 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && (v->mesa_visual.accumAlphaBits >= accumAlphaSize || accumAlphaSize == 0)) { 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* now either compare XVisualInfo pointers or visual IDs */ 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ((!comparePointers && v->visinfo->visualid == vinfo->visualid) 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org || (comparePointers && v->vishandle == vinfo)) { 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return v; 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Create a new visual and add it to the list. */ 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis = XMesaCreateVisual( dpy, vinfo, rgbFlag, alphaFlag, dbFlag, 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stereoFlag, ximageFlag, 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_size, stencil_size, 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumRedSize, accumBlueSize, 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumBlueSize, accumAlphaSize, 0, level, 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLX_NONE_EXT ); 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmvis) { 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Save a copy of the pointer now so we can find this visual again 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * if we need to search for it in find_glx_visual(). 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis->vishandle = vinfo; 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Allocate more space for additional visual */ 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VisualTable = (XMesaVisual *) _mesa_realloc( VisualTable, 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sizeof(XMesaVisual) * NumVisuals, 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sizeof(XMesaVisual) * (NumVisuals + 1)); 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* add xmvis to the list */ 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VisualTable[NumVisuals] = xmvis; 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NumVisuals++; 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* XXX minor hack, because XMesaCreateVisual doesn't support an 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * aux buffers parameter. 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis->mesa_visual.numAuxBuffers = numAuxBuffers; 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return xmvis; 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Return the default number of bits for the Z buffer. 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * If defined, use the MESA_GLX_DEPTH_BITS env var value. 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Otherwise, use the DEFAULT_SOFTWARE_DEPTH_BITS constant. 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XXX probably do the same thing for stencil, accum, etc. 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLint 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdefault_depth_bits(void) 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int zBits; 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *zEnv = _mesa_getenv("MESA_GLX_DEPTH_BITS"); 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (zEnv) 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zBits = atoi(zEnv); 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zBits = 24; 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return zBits; 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLint 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdefault_alpha_bits(void) 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int aBits; 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *aEnv = _mesa_getenv("MESA_GLX_ALPHA_BITS"); 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (aEnv) 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org aBits = atoi(aEnv); 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org aBits = 0; 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return aBits; 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLint 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdefault_accum_bits(void) 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 16; 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Create a GLX visual from a regular XVisualInfo. 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is called when Fake GLX is given an XVisualInfo which wasn't 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * returned by glXChooseVisual. Since this is the first time we're 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * considering this visual we'll take a guess at reasonable values 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * for depth buffer size, stencil size, accum size, etc. 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is the best we can do with a client-side emulation of GLX. 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XMesaVisual 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgcreate_glx_visual( Display *dpy, XVisualInfo *visinfo ) 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint zBits = default_depth_bits(); 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accBits = default_accum_bits(); 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean alphaFlag = default_alpha_bits() > 0; 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (is_usable_visual( visinfo )) { 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Configure this visual as RGB, double-buffered, depth-buffered. */ 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* This is surely wrong for some people's needs but what else */ 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* can be done? They should use glXChooseVisual(). */ 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return save_glx_visual( dpy, visinfo, 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GL_TRUE, /* rgb */ 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org alphaFlag, /* alpha */ 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GL_TRUE, /* double */ 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GL_FALSE, /* stereo */ 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zBits, 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 8, /* stencil bits */ 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accBits, /* r */ 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accBits, /* g */ 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accBits, /* b */ 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accBits, /* a */ 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0, /* level */ 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0 /* numAux */ 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ); 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_warning(NULL, "Mesa: error in glXCreateContext: bad visual\n"); 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Find the GLX visual associated with an XVisualInfo. 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XMesaVisual 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgfind_glx_visual( Display *dpy, XVisualInfo *vinfo ) 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i; 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* try to match visual id */ 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i=0;i<NumVisuals;i++) { 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (VisualTable[i]->display==dpy 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && VisualTable[i]->visinfo->visualid == vinfo->visualid) { 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return VisualTable[i]; 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* if that fails, try to match pointers */ 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i=0;i<NumVisuals;i++) { 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (VisualTable[i]->display==dpy && VisualTable[i]->vishandle==vinfo) { 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return VisualTable[i]; 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Try to get an X visual which matches the given arguments. 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XVisualInfo * 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgget_visual( Display *dpy, int scr, unsigned int depth, int xclass ) 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVisualInfo temp, *vis; 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org long mask; 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int n; 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int default_depth; 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int default_class; 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mask = VisualScreenMask | VisualDepthMask | VisualClassMask; 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org temp.screen = scr; 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org temp.depth = depth; 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org temp.CLASS = xclass; 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default_depth = DefaultDepth(dpy,scr); 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default_class = DefaultVisual(dpy,scr)->CLASS; 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (depth==default_depth && xclass==default_class) { 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* try to get root window's visual */ 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org temp.visualid = DefaultVisual(dpy,scr)->visualid; 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mask |= VisualIDMask; 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = XGetVisualInfo( dpy, mask, &temp, &n ); 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* In case bits/pixel > 24, make sure color channels are still <=8 bits. 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * An SGI Infinite Reality system, for example, can have 30bpp pixels: 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 10 bits per color channel. Mesa's limited to a max of 8 bits/channel. 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis && depth > 24 && (xclass==TrueColor || xclass==DirectColor)) { 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_mesa_bitcount((GLuint) vis->red_mask ) <= 8 && 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_bitcount((GLuint) vis->green_mask) <= 8 && 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_bitcount((GLuint) vis->blue_mask ) <= 8) { 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vis; 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XFree((void *) vis); 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vis; 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Retrieve the value of the given environment variable and find 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the X visual which matches it. 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Input: dpy - the display 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * screen - the screen number 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * varname - the name of the environment variable 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Return: an XVisualInfo pointer to NULL if error. 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XVisualInfo * 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgget_env_visual(Display *dpy, int scr, const char *varname) 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char value[100], type[100]; 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int depth, xclass = -1; 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVisualInfo *vis; 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_getenv( varname )) { 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org strncpy( value, _mesa_getenv(varname), 100 ); 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org value[99] = 0; 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sscanf( value, "%s %d", type, &depth ); 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (strcmp(type,"TrueColor")==0) xclass = TrueColor; 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (strcmp(type,"DirectColor")==0) xclass = DirectColor; 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (strcmp(type,"PseudoColor")==0) xclass = PseudoColor; 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (strcmp(type,"StaticColor")==0) xclass = StaticColor; 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (strcmp(type,"GrayScale")==0) xclass = GrayScale; 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (strcmp(type,"StaticGray")==0) xclass = StaticGray; 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xclass>-1 && depth>0) { 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = get_visual( dpy, scr, depth, xclass ); 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis) { 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vis; 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_warning(NULL, "GLX unable to find visual class=%s, depth=%d.", 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org type, depth); 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Select an X visual which satisfies the RGBA flag and minimum depth. 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Input: dpy, 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * screen - X display and screen number 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * min_depth - minimum visual depth 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * preferred_class - preferred GLX visual class or DONT_CARE 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Return: pointer to an XVisualInfo or NULL. 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XVisualInfo * 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgchoose_x_visual( Display *dpy, int screen, int min_depth, 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int preferred_class ) 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVisualInfo *vis; 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int xclass, visclass = 0; 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int depth; 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* First see if the MESA_RGB_VISUAL env var is defined */ 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = get_env_visual( dpy, screen, "MESA_RGB_VISUAL" ); 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis) { 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vis; 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Otherwise, search for a suitable visual */ 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (preferred_class==DONT_CARE) { 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (xclass=0;xclass<6;xclass++) { 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (xclass) { 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0: visclass = TrueColor; break; 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 1: visclass = DirectColor; break; 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 2: visclass = PseudoColor; break; 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 3: visclass = StaticColor; break; 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 4: visclass = GrayScale; break; 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 5: visclass = StaticGray; break; 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (min_depth==0) { 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* start with shallowest */ 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (depth=0;depth<=32;depth++) { 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (visclass==TrueColor && depth==8) { 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Special case: try to get 8-bit PseudoColor before */ 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 8-bit TrueColor */ 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = get_visual( dpy, screen, 8, PseudoColor ); 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis) { 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vis; 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = get_visual( dpy, screen, depth, visclass ); 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis) { 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vis; 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* start with deepest */ 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (depth=32;depth>=min_depth;depth--) { 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (visclass==TrueColor && depth==8) { 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Special case: try to get 8-bit PseudoColor before */ 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 8-bit TrueColor */ 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = get_visual( dpy, screen, 8, PseudoColor ); 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis) { 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vis; 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = get_visual( dpy, screen, depth, visclass ); 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis) { 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vis; 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* search for a specific visual class */ 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (preferred_class) { 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRUE_COLOR_EXT: visclass = TrueColor; break; 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DIRECT_COLOR_EXT: visclass = DirectColor; break; 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_PSEUDO_COLOR_EXT: visclass = PseudoColor; break; 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_STATIC_COLOR_EXT: visclass = StaticColor; break; 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_GRAY_SCALE_EXT: visclass = GrayScale; break; 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_STATIC_GRAY_EXT: visclass = StaticGray; break; 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: return NULL; 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (min_depth==0) { 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* start with shallowest */ 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (depth=0;depth<=32;depth++) { 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = get_visual( dpy, screen, depth, visclass ); 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis) { 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vis; 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* start with deepest */ 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (depth=32;depth>=min_depth;depth--) { 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = get_visual( dpy, screen, depth, visclass ); 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis) { 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vis; 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* didn't find a visual */ 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**********************************************************************/ 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** Display-related functions ***/ 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**********************************************************************/ 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Free all XMesaVisuals which are associated with the given display. 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdestroy_visuals_on_display(Display *dpy) 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i; 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < NumVisuals; i++) { 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (VisualTable[i]->display == dpy) { 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* remove this visual */ 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int j; 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org free(VisualTable[i]); 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (j = i; j < NumVisuals - 1; j++) 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VisualTable[j] = VisualTable[j + 1]; 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NumVisuals--; 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Called from XCloseDisplay() to let us free our display-related data. 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclose_display_callback(Display *dpy, XExtCodes *codes) 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmesa_destroy_buffers_on_display(dpy); 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org destroy_visuals_on_display(dpy); 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Look for the named extension on given display and return a pointer 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to the _XExtension data, or NULL if extension not found. 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic _XExtension * 615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglookup_extension(Display *dpy, const char *extName) 616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _XExtension *ext; 618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (ext = dpy->ext_procs; ext; ext = ext->next) { 619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ext->name && strcmp(ext->name, extName) == 0) { 620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ext; 621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Whenever we're given a new Display pointer, call this function to 629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * register our close_display_callback function. 630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgregister_with_display(Display *dpy) 633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *extName = "MesaGLX"; 635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _XExtension *ext; 636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ext = lookup_extension(dpy, extName); 638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ext) { 639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XExtCodes *c = XAddExtension(dpy); 640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ext = dpy->ext_procs; /* new extension is at head of list */ 641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(c->extension == ext->codes.extension); 642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) c; 643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ext->name = _mesa_strdup(extName); 644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ext->close_display = close_display_callback; 645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**********************************************************************/ 650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** Begin Fake GLX API Functions ***/ 651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**********************************************************************/ 652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Helper used by glXChooseVisual and glXChooseFBConfig. 656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The fbConfig parameter must be GL_FALSE for the former and GL_TRUE for 657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the later. 658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * In either case, the attribute list is terminated with the value 'None'. 659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XMesaVisual 661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgchoose_visual( Display *dpy, int screen, const int *list, GLboolean fbConfig ) 662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLboolean rgbModeDefault = fbConfig; 664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *parselist; 665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVisualInfo *vis; 666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int min_red=0, min_green=0, min_blue=0; 667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean rgb_flag = rgbModeDefault; 668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean alpha_flag = GL_FALSE; 669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean double_flag = GL_FALSE; 670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean stereo_flag = GL_FALSE; 671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint depth_size = 0; 672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint stencil_size = 0; 673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumRedSize = 0; 674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumGreenSize = 0; 675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumBlueSize = 0; 676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumAlphaSize = 0; 677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int level = 0; 678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int visual_type = DONT_CARE; 679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint caveat = DONT_CARE; 680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = NULL; 681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int desiredVisualID = -1; 682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int numAux = 0; 683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmesa_init( dpy ); 685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist = list; 687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org while (*parselist) { 689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fbConfig && 691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist[1] == GLX_DONT_CARE && 692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist[0] != GLX_LEVEL) { 693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* For glXChooseFBConfig(), skip attributes whose value is 694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_DONT_CARE, unless it's GLX_LEVEL (which can legitimately be 695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a negative value). 696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * From page 17 (23 of the pdf) of the GLX 1.4 spec: 698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX DONT CARE may be specified for all attributes except GLX LEVEL. 699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist += 2; 701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org continue; 702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (*parselist) { 705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_USE_GL: 706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fbConfig) { 707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* invalid token */ 708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* skip */ 712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BUFFER_SIZE: 716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_LEVEL: 720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org level = *parselist++; 722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RGBA: 724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fbConfig) { 725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* invalid token */ 726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rgb_flag = GL_TRUE; 730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DOUBLEBUFFER: 734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fbConfig) { 736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org double_flag = *parselist++; 737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org double_flag = GL_TRUE; 740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_STEREO: 743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fbConfig) { 745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stereo_flag = *parselist++; 746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stereo_flag = GL_TRUE; 749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_AUX_BUFFERS: 752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org numAux = *parselist++; 754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (numAux > MAX_AUX_BUFFERS) 755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RED_SIZE: 758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org min_red = *parselist++; 760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_GREEN_SIZE: 762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org min_green = *parselist++; 764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BLUE_SIZE: 766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org min_blue = *parselist++; 768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ALPHA_SIZE: 770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint size = *parselist++; 773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org alpha_flag = size ? GL_TRUE : GL_FALSE; 774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DEPTH_SIZE: 777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_size = *parselist++; 779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_STENCIL_SIZE: 781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stencil_size = *parselist++; 783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_RED_SIZE: 785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint size = *parselist++; 788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumRedSize = MAX2( accumRedSize, size ); 789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_GREEN_SIZE: 792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint size = *parselist++; 795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumGreenSize = MAX2( accumGreenSize, size ); 796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_BLUE_SIZE: 799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint size = *parselist++; 802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumBlueSize = MAX2( accumBlueSize, size ); 803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_ALPHA_SIZE: 806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint size = *parselist++; 809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumAlphaSize = MAX2( accumAlphaSize, size ); 810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_EXT_visual_info extension 815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_X_VISUAL_TYPE_EXT: 817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org visual_type = *parselist++; 819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_TYPE_EXT: 821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_INDEX_VALUE_EXT: 825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_RED_VALUE_EXT: 829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_GREEN_VALUE_EXT: 830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_BLUE_VALUE_EXT: 831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_ALPHA_VALUE_EXT: 832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* ignore */ 833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_EXT_visual_info extension 839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VISUAL_CAVEAT_EXT: 841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org caveat = *parselist++; /* ignored for now */ 843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_multisample 847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_SAMPLE_BUFFERS_ARB: 849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_SAMPLES_ARB: 850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (*parselist++ != 0) { 852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* ms not supported */ 853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FBConfig attribs. 859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RENDER_TYPE: 861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbConfig) 862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (*parselist & GLX_RGBA_BIT) { 865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rgb_flag = GL_TRUE; 866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (*parselist & GLX_COLOR_INDEX_BIT) { 868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rgb_flag = GL_FALSE; 869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (*parselist == 0) { 871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rgb_flag = GL_TRUE; 872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DRAWABLE_TYPE: 876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbConfig) 877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (*parselist & ~(GLX_WINDOW_BIT | GLX_PIXMAP_BIT | GLX_PBUFFER_BIT)) { 880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; /* bad bit */ 881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_FBCONFIG_ID: 885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VISUAL_ID: 886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbConfig) 887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org desiredVisualID = *parselist++; 890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_X_RENDERABLE: 892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MAX_PBUFFER_WIDTH: 893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MAX_PBUFFER_HEIGHT: 894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MAX_PBUFFER_PIXELS: 895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbConfig) 896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; /* invalid config option */ 897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist += 2; /* ignore the parameter */ 898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef GLX_EXT_texture_from_pixmap 901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_TEXTURE_RGB_EXT: 902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; /*skip*/ 903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_TEXTURE_RGBA_EXT: 905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; /*skip*/ 906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_MIPMAP_TEXTURE_EXT: 908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; /*skip*/ 909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_TEXTURE_TARGETS_EXT: 911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (*parselist & ~(GLX_TEXTURE_1D_BIT_EXT | 913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLX_TEXTURE_2D_BIT_EXT | 914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLX_TEXTURE_RECTANGLE_BIT_EXT)) { 915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* invalid bit */ 916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_Y_INVERTED_EXT: 920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; /*skip*/ 921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case None: 925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* end of list */ 926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* undefined attribute */ 930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_warning(NULL, "unexpected attrib 0x%x in choose_visual()", 931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *parselist); 932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) caveat; 937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Since we're only simulating the GLX extension this function will never 941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * find any real GL visuals. Instead, all we can do is try to find an RGB 942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * or CI visual of appropriate depth. Other requested attributes such as 943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * double buffering, depth buffer, etc. will be associated with the X 944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * visual and stored in the VisualTable[]. 945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (desiredVisualID != -1) { 947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* try to get a specific visual, by visualID */ 948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVisualInfo temp; 949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int n; 950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org temp.visualid = desiredVisualID; 951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org temp.screen = screen; 952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = XGetVisualInfo(dpy, VisualIDMask | VisualScreenMask, &temp, &n); 953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis) { 954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* give the visual some useful GLX attributes */ 955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org double_flag = GL_TRUE; 956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rgb_flag = GL_TRUE; 957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (level==0) { 960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* normal color planes */ 961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Get an RGB visual */ 962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int min_rgb = min_red + min_green + min_blue; 963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (min_rgb>1 && min_rgb<8) { 964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* a special case to be sure we can get a monochrome visual */ 965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org min_rgb = 1; 966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = choose_x_visual( dpy, screen, min_rgb, visual_type ); 968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_warning(NULL, "overlay not supported"); 971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis) { 975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Note: we're not exactly obeying the glXChooseVisual rules here. 976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * When GLX_DEPTH_SIZE = 1 is specified we're supposed to choose the 977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * largest depth buffer size, which is 32bits/value. Instead, we 978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * return 16 to maintain performance with earlier versions of Mesa. 979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (stencil_size > 0) 981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_size = 24; /* if Z and stencil, always use 24+8 format */ 982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (depth_size > 24) 983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_size = 32; 984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (depth_size > 16) 985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_size = 24; 986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (depth_size > 0) { 987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_size = default_depth_bits(); 988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!alpha_flag) { 991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org alpha_flag = default_alpha_bits() > 0; 992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* we only support one size of stencil and accum buffers. */ 995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (stencil_size > 0) 996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stencil_size = 8; 997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (accumRedSize > 0 || 999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumGreenSize > 0 || 1000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumBlueSize > 0 || 1001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumAlphaSize > 0) { 1002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumRedSize = 1004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumGreenSize = 1005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumBlueSize = default_accum_bits(); 1006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumAlphaSize = alpha_flag ? accumRedSize : 0; 1008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis = save_glx_visual( dpy, vis, rgb_flag, alpha_flag, double_flag, 1011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stereo_flag, depth_size, stencil_size, 1012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumRedSize, accumGreenSize, 1013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumBlueSize, accumAlphaSize, level, numAux ); 1014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return xmvis; 1017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC XVisualInfo * 1021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXChooseVisual( Display *dpy, int screen, int *list ) 1022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis; 1024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* register ourselves as an extension on this display */ 1026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org register_with_display(dpy); 1027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis = choose_visual(dpy, screen, list, GL_FALSE); 1029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmvis) { 1030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* create a new vishandle - the cached one may be stale */ 1031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis->vishandle = (XVisualInfo *) malloc(sizeof(XVisualInfo)); 1032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmvis->vishandle) { 1033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memcpy(xmvis->vishandle, xmvis->visinfo, sizeof(XVisualInfo)); 1034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return xmvis->vishandle; 1036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 1038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Helper function used by other glXCreateContext functions. 1044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXContext 1046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgcreate_context(Display *dpy, XMesaVisual xmvis, 1047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext shareCtx, Bool direct, 1048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned major, unsigned minor, 1049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned profileMask, unsigned contextFlags) 1050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLXContext glxCtx; 1052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!dpy || !xmvis) 1054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glxCtx = CALLOC_STRUCT(__GLXcontextRec); 1057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!glxCtx) 1058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* deallocate unused windows/buffers */ 1061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if 0 1062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaGarbageCollect(); 1063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glxCtx->xmesaContext = XMesaCreateContext(xmvis, shareCtx, major, minor, 1066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org profileMask, contextFlags); 1067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!glxCtx->xmesaContext) { 1068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org free(glxCtx); 1069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glxCtx->isDirect = DEFAULT_DIRECT; 1073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glxCtx->currentDpy = dpy; 1074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glxCtx->xid = (XID) glxCtx; /* self pointer */ 1075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return glxCtx; 1077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXContext 1081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXCreateContext( Display *dpy, XVisualInfo *visinfo, 1082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLXContext shareCtx, Bool direct ) 1083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis; 1085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis = find_glx_visual( dpy, visinfo ); 1087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xmvis) { 1088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* This visual wasn't found with glXChooseVisual() */ 1089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis = create_glx_visual( dpy, visinfo ); 1090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xmvis) { 1091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* unusable visual */ 1092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return create_context(dpy, xmvis, 1097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org shareCtx ? shareCtx->xmesaContext : NULL, 1098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org direct, 1099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1, 0, GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB, 0x0); 1100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* XXX these may have to be removed due to thread-safety issues. */ 1104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXContext MakeCurrent_PrevContext = 0; 1105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXDrawable MakeCurrent_PrevDrawable = 0; 1106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXDrawable MakeCurrent_PrevReadable = 0; 1107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XMesaBuffer MakeCurrent_PrevDrawBuffer = 0; 1108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XMesaBuffer MakeCurrent_PrevReadBuffer = 0; 1109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* GLX 1.3 and later */ 1112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC Bool 1113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXMakeContextCurrent( Display *dpy, GLXDrawable draw, 1114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLXDrawable read, GLXContext ctx ) 1115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLXContext glxCtx = ctx; 1117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static boolean firsttime = 1, no_rast = 0; 1118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (firsttime) { 1120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org no_rast = getenv("SP_NO_RAST") != NULL; 1121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org firsttime = 0; 1122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx && draw && read) { 1125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer drawBuffer, readBuffer; 1126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmctx = glxCtx->xmesaContext; 1127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Find the XMesaBuffer which corresponds to the GLXDrawable 'draw' */ 1129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx == MakeCurrent_PrevContext 1130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && draw == MakeCurrent_PrevDrawable) { 1131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drawBuffer = MakeCurrent_PrevDrawBuffer; 1132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 1134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drawBuffer = XMesaFindBuffer( dpy, draw ); 1135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!drawBuffer) { 1137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* drawable must be a new window! */ 1138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drawBuffer = XMesaCreateWindowBuffer( xmctx->xm_visual, draw ); 1139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!drawBuffer) { 1140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Out of memory, or context/drawable depth mismatch */ 1141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return False; 1142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Find the XMesaBuffer which corresponds to the GLXDrawable 'read' */ 1146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx == MakeCurrent_PrevContext 1147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && read == MakeCurrent_PrevReadable) { 1148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org readBuffer = MakeCurrent_PrevReadBuffer; 1149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 1151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org readBuffer = XMesaFindBuffer( dpy, read ); 1152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!readBuffer) { 1154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* drawable must be a new window! */ 1155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org readBuffer = XMesaCreateWindowBuffer( xmctx->xm_visual, read ); 1156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!readBuffer) { 1157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Out of memory, or context/drawable depth mismatch */ 1158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return False; 1159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (no_rast && 1163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevContext == ctx && 1164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevDrawable == draw && 1165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevReadable == read && 1166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevDrawBuffer == drawBuffer && 1167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevReadBuffer == readBuffer) 1168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return True; 1169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevContext = ctx; 1171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevDrawable = draw; 1172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevReadable = read; 1173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevDrawBuffer = drawBuffer; 1174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevReadBuffer = readBuffer; 1175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Now make current! */ 1177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (XMesaMakeCurrent2(xmctx, drawBuffer, readBuffer)) { 1178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->currentDpy = dpy; 1179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->currentDrawable = draw; 1180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ctx->currentReadable = read; 1181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SetCurrentContext(ctx); 1182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return True; 1183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 1185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return False; 1186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (!ctx && !draw && !read) { 1189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* release current context w/out assigning new one. */ 1190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaMakeCurrent2( NULL, NULL, NULL ); 1191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevContext = 0; 1192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevDrawable = 0; 1193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevReadable = 0; 1194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevDrawBuffer = 0; 1195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevReadBuffer = 0; 1196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SetCurrentContext(NULL); 1197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return True; 1198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 1200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The args must either all be non-zero or all zero. 1201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is an error. 1202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return False; 1204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC Bool 1209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXMakeCurrent( Display *dpy, GLXDrawable drawable, GLXContext ctx ) 1210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return glXMakeContextCurrent( dpy, drawable, drawable, ctx ); 1212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXContext 1216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetCurrentContext(void) 1217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GetCurrentContext(); 1219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC Display * 1223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetCurrentDisplay(void) 1224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLXContext glxCtx = glXGetCurrentContext(); 1226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return glxCtx ? glxCtx->currentDpy : NULL; 1228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC Display * 1232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetCurrentDisplayEXT(void) 1233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return glXGetCurrentDisplay(); 1235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXDrawable 1239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetCurrentDrawable(void) 1240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLXContext gc = glXGetCurrentContext(); 1242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return gc ? gc->currentDrawable : 0; 1243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXDrawable 1247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetCurrentReadDrawable(void) 1248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLXContext gc = glXGetCurrentContext(); 1250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return gc ? gc->currentReadable : 0; 1251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXDrawable 1255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetCurrentReadDrawableSGI(void) 1256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return glXGetCurrentReadDrawable(); 1258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXPixmap 1262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXCreateGLXPixmap( Display *dpy, XVisualInfo *visinfo, Pixmap pixmap ) 1263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual v; 1265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b; 1266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v = find_glx_visual( dpy, visinfo ); 1268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!v) { 1269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v = create_glx_visual( dpy, visinfo ); 1270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!v) { 1271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* unusable visual */ 1272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org b = XMesaCreatePixmapBuffer( v, pixmap, 0 ); 1277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!b) { 1278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return b->ws.drawable; 1281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_MESA_pixmap_colormap ***/ 1285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXPixmap 1287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXCreateGLXPixmapMESA( Display *dpy, XVisualInfo *visinfo, 1288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Pixmap pixmap, Colormap cmap ) 1289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual v; 1291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b; 1292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v = find_glx_visual( dpy, visinfo ); 1294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!v) { 1295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v = create_glx_visual( dpy, visinfo ); 1296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!v) { 1297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* unusable visual */ 1298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org b = XMesaCreatePixmapBuffer( v, pixmap, cmap ); 1303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!b) { 1304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return b->ws.drawable; 1307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 1311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXDestroyGLXPixmap( Display *dpy, GLXPixmap pixmap ) 1312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b = XMesaFindBuffer(dpy, pixmap); 1314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (b) { 1315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaDestroyBuffer(b); 1316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (_mesa_getenv("MESA_DEBUG")) { 1318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_warning(NULL, "Mesa: glXDestroyGLXPixmap: invalid pixmap\n"); 1319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 1324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXCopyContext( Display *dpy, GLXContext src, GLXContext dst, 1325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long mask ) 1326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xm_src = src->xmesaContext; 1328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xm_dst = dst->xmesaContext; 1329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 1330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (MakeCurrent_PrevContext == src) { 1331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glFlush(); 1332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaCopyContext(xm_src, xm_dst, mask); 1334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC Bool 1338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXQueryExtension( Display *dpy, int *errorBase, int *eventBase ) 1339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int op, ev, err; 1341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Mesa's GLX isn't really an X extension but we try to act like one. */ 1342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!XQueryExtension(dpy, GLX_EXTENSION_NAME, &op, &ev, &err)) 1343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ev = err = 0; 1344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (errorBase) 1345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *errorBase = err; 1346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (eventBase) 1347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *eventBase = ev; 1348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return True; /* we're faking GLX so always return success */ 1349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 1353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXDestroyContext( Display *dpy, GLXContext ctx ) 1354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLXContext glxCtx = ctx; 1356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 1357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevContext = 0; 1358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevDrawable = 0; 1359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevReadable = 0; 1360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevDrawBuffer = 0; 1361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevReadBuffer = 0; 1362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaDestroyContext( glxCtx->xmesaContext ); 1363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaGarbageCollect(); 1364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org free(glxCtx); 1365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC Bool 1369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXIsDirect( Display *dpy, GLXContext ctx ) 1370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLXContext glxCtx = ctx; 1372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) ctx; 1373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return glxCtx->isDirect; 1374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 1379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXSwapBuffers( Display *dpy, GLXDrawable drawable ) 1380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer buffer = XMesaFindBuffer( dpy, drawable ); 1382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static boolean firsttime = 1, no_rast = 0; 1383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (firsttime) { 1385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org no_rast = getenv("SP_NO_RAST") != NULL; 1386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org firsttime = 0; 1387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (no_rast) 1390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 1391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (buffer) { 1393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaSwapBuffers(buffer); 1394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (_mesa_getenv("MESA_DEBUG")) { 1396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_warning(NULL, "glXSwapBuffers: invalid drawable 0x%x\n", 1397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (int) drawable); 1398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_MESA_copy_sub_buffer ***/ 1404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 1406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXCopySubBufferMESA(Display *dpy, GLXDrawable drawable, 1407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int x, int y, int width, int height) 1408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer buffer = XMesaFindBuffer( dpy, drawable ); 1410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (buffer) { 1411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaCopySubBuffer(buffer, x, y, width, height); 1412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (_mesa_getenv("MESA_DEBUG")) { 1414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_warning(NULL, "Mesa: glXCopySubBufferMESA: invalid drawable\n"); 1415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC Bool 1420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXQueryVersion( Display *dpy, int *maj, int *min ) 1421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 1423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Return GLX version, not Mesa version */ 1424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(CLIENT_MAJOR_VERSION == SERVER_MAJOR_VERSION); 1425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *maj = CLIENT_MAJOR_VERSION; 1426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *min = MIN2( CLIENT_MINOR_VERSION, SERVER_MINOR_VERSION ); 1427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return True; 1428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 1432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Query the GLX attributes of the given XVisualInfo. 1433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 1435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgget_config( XMesaVisual xmvis, int attrib, int *value, GLboolean fbconfig ) 1436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT(xmvis); 1438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch(attrib) { 1439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_USE_GL: 1440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fbconfig) 1441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = (int) True; 1443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BUFFER_SIZE: 1445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->visinfo->depth; 1446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_LEVEL: 1448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.level; 1449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RGBA: 1451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fbconfig) 1452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmvis->mesa_visual.rgbMode) { 1454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = True; 1455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 1457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = False; 1458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DOUBLEBUFFER: 1461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = (int) xmvis->mesa_visual.doubleBufferMode; 1462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_STEREO: 1464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = (int) xmvis->mesa_visual.stereoMode; 1465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_AUX_BUFFERS: 1467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.numAuxBuffers; 1468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RED_SIZE: 1470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.redBits; 1471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_GREEN_SIZE: 1473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.greenBits; 1474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BLUE_SIZE: 1476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.blueBits; 1477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ALPHA_SIZE: 1479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.alphaBits; 1480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DEPTH_SIZE: 1482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.depthBits; 1483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_STENCIL_SIZE: 1485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.stencilBits; 1486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_RED_SIZE: 1488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.accumRedBits; 1489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_GREEN_SIZE: 1491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.accumGreenBits; 1492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_BLUE_SIZE: 1494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.accumBlueBits; 1495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_ALPHA_SIZE: 1497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.accumAlphaBits; 1498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 1501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_EXT_visual_info extension 1502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_X_VISUAL_TYPE_EXT: 1504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (xmvis->visinfo->CLASS) { 1505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case StaticGray: *value = GLX_STATIC_GRAY_EXT; return 0; 1506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GrayScale: *value = GLX_GRAY_SCALE_EXT; return 0; 1507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case StaticColor: *value = GLX_STATIC_GRAY_EXT; return 0; 1508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PseudoColor: *value = GLX_PSEUDO_COLOR_EXT; return 0; 1509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TrueColor: *value = GLX_TRUE_COLOR_EXT; return 0; 1510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case DirectColor: *value = GLX_DIRECT_COLOR_EXT; return 0; 1511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_TYPE_EXT: 1514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* normal planes */ 1515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = GLX_NONE_EXT; 1516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_INDEX_VALUE_EXT: 1518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* undefined */ 1519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_RED_VALUE_EXT: 1521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* undefined */ 1522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_GREEN_VALUE_EXT: 1524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* undefined */ 1525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_BLUE_VALUE_EXT: 1527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* undefined */ 1528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_ALPHA_VALUE_EXT: 1530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* undefined */ 1531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 1534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_EXT_visual_info extension 1535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VISUAL_CAVEAT_EXT: 1537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* test for zero, just in case */ 1538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmvis->mesa_visual.visualRating > 0) 1539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.visualRating; 1540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 1541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = GLX_NONE_EXT; 1542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 1545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_multisample 1546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_SAMPLE_BUFFERS_ARB: 1548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = 0; 1549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_SAMPLES_ARB: 1551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = 0; 1552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 1555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * For FBConfigs: 1556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_SCREEN_EXT: 1558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbconfig) 1559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->visinfo->screen; 1561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DRAWABLE_TYPE: /*SGIX too */ 1563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbconfig) 1564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = GLX_WINDOW_BIT | GLX_PIXMAP_BIT | GLX_PBUFFER_BIT; 1566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RENDER_TYPE_SGIX: 1568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbconfig) 1569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmvis->mesa_visual.rgbMode) 1571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = GLX_RGBA_BIT; 1572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 1573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = GLX_COLOR_INDEX_BIT; 1574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_X_RENDERABLE_SGIX: 1576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbconfig) 1577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = True; /* XXX really? */ 1579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_FBCONFIG_ID_SGIX: 1581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbconfig) 1582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->visinfo->visualid; 1584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MAX_PBUFFER_WIDTH: 1586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbconfig) 1587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* XXX or MAX_WIDTH? */ 1589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = DisplayWidth(xmvis->display, xmvis->visinfo->screen); 1590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MAX_PBUFFER_HEIGHT: 1592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbconfig) 1593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = DisplayHeight(xmvis->display, xmvis->visinfo->screen); 1595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MAX_PBUFFER_PIXELS: 1597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbconfig) 1598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = DisplayWidth(xmvis->display, xmvis->visinfo->screen) * 1600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DisplayHeight(xmvis->display, xmvis->visinfo->screen); 1601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VISUAL_ID: 1603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbconfig) 1604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->visinfo->visualid; 1606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef GLX_EXT_texture_from_pixmap 1609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_TEXTURE_RGB_EXT: 1610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = True; /*XXX*/ 1611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_TEXTURE_RGBA_EXT: 1613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* XXX review */ 1614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.alphaBits > 0 ? True : False; 1615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_MIPMAP_TEXTURE_EXT: 1617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = True; /*XXX*/ 1618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_TEXTURE_TARGETS_EXT: 1620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = (GLX_TEXTURE_1D_BIT_EXT | 1621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLX_TEXTURE_2D_BIT_EXT | 1622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLX_TEXTURE_RECTANGLE_BIT_EXT); /*XXX*/ 1623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_Y_INVERTED_EXT: 1625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = True; /*XXX*/ 1626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return Success; 1633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC int 1637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetConfig( Display *dpy, XVisualInfo *visinfo, 1638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int attrib, int *value ) 1639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis; 1641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int k; 1642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!dpy || !visinfo) 1643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis = find_glx_visual( dpy, visinfo ); 1646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xmvis) { 1647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* this visual wasn't obtained with glXChooseVisual */ 1648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis = create_glx_visual( dpy, visinfo ); 1649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xmvis) { 1650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* this visual can't be used for GL rendering */ 1651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (attrib==GLX_USE_GL) { 1652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = (int) False; 1653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 1656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_VISUAL; 1657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org k = get_config(xmvis, attrib, value, GL_FALSE); 1662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return k; 1663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 1667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXWaitGL( void ) 1668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesa = XMesaGetCurrentContext(); 1670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaFlush( xmesa ); 1671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 1676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXWaitX( void ) 1677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesa = XMesaGetCurrentContext(); 1679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaFlush( xmesa ); 1680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const char * 1684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgget_extensions( void ) 1685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return EXTENSIONS; 1687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* GLX 1.1 and later */ 1692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC const char * 1693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXQueryExtensionsString( Display *dpy, int screen ) 1694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 1696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) screen; 1697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return get_extensions(); 1698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* GLX 1.1 and later */ 1703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC const char * 1704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXQueryServerString( Display *dpy, int screen, int name ) 1705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static char version[1000]; 1707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sprintf(version, "%d.%d %s", 1708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SERVER_MAJOR_VERSION, SERVER_MINOR_VERSION, xmesa_get_name()); 1709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 1711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) screen; 1712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (name) { 1714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_EXTENSIONS: 1715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return get_extensions(); 1716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VENDOR: 1717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return VENDOR; 1718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VERSION: 1719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return version; 1720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* GLX 1.1 and later */ 1728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC const char * 1729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetClientString( Display *dpy, int name ) 1730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static char version[1000]; 1732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sprintf(version, "%d.%d %s", CLIENT_MAJOR_VERSION, 1733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CLIENT_MINOR_VERSION, xmesa_get_name()); 1734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 1736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (name) { 1738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_EXTENSIONS: 1739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return get_extensions(); 1740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VENDOR: 1741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return VENDOR; 1742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VERSION: 1743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return version; 1744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 1752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX 1.3 and later 1753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC int 1757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetFBConfigAttrib(Display *dpy, GLXFBConfig config, 1758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int attribute, int *value) 1759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual v = (XMesaVisual) config; 1761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 1762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) config; 1763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!dpy || !config || !value) 1765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 1766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return get_config(v, attribute, value, GL_TRUE); 1768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXFBConfig * 1772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetFBConfigs( Display *dpy, int screen, int *nelements ) 1773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVisualInfo *visuals, visTemplate; 1775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const long visMask = VisualScreenMask; 1776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i; 1777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Get list of all X visuals */ 1779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org visTemplate.screen = screen; 1780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org visuals = XGetVisualInfo(dpy, visMask, &visTemplate, nelements); 1781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (*nelements > 0) { 1782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual *results; 1783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org results = (XMesaVisual *) malloc(*nelements * sizeof(XMesaVisual)); 1784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!results) { 1785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *nelements = 0; 1786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < *nelements; i++) { 1789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org results[i] = create_glx_visual(dpy, visuals + i); 1790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!results[i]) { 1791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *nelements = i; 1792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (GLXFBConfig *) results; 1796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXFBConfig * 1802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXChooseFBConfig(Display *dpy, int screen, 1803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *attribList, int *nitems) 1804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis; 1806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* register ourselves as an extension on this display */ 1808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org register_with_display(dpy); 1809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!attribList || !attribList[0]) { 1811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* return list of all configs (per GLX_SGIX_fbconfig spec) */ 1812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return glXGetFBConfigs(dpy, screen, nitems); 1813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis = choose_visual(dpy, screen, attribList, GL_TRUE); 1816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmvis) { 1817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLXFBConfig *config = (GLXFBConfig *) malloc(sizeof(XMesaVisual)); 1818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!config) { 1819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *nitems = 0; 1820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *nitems = 1; 1823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config[0] = (GLXFBConfig) xmvis; 1824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (GLXFBConfig *) config; 1825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 1827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *nitems = 0; 1828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC XVisualInfo * 1834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetVisualFromFBConfig( Display *dpy, GLXFBConfig config ) 1835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (dpy && config) { 1837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = (XMesaVisual) config; 1838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if 0 1839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return xmvis->vishandle; 1840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#else 1841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* create a new vishandle - the cached one may be stale */ 1842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis->vishandle = (XVisualInfo *) malloc(sizeof(XVisualInfo)); 1843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmvis->vishandle) { 1844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memcpy(xmvis->vishandle, xmvis->visinfo, sizeof(XVisualInfo)); 1845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return xmvis->vishandle; 1847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 1850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXWindow 1856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXCreateWindow(Display *dpy, GLXFBConfig config, Window win, 1857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *attribList) 1858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = (XMesaVisual) config; 1860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf; 1861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xmvis) 1862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmbuf = XMesaCreateWindowBuffer(xmvis, win); 1865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xmbuf) 1866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 1869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) attribList; /* Ignored in GLX 1.3 */ 1870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return win; /* A hack for now */ 1872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 1876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXDestroyWindow( Display *dpy, GLXWindow window ) 1877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b = XMesaFindBuffer(dpy, (Drawable) window); 1879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (b) 1880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaDestroyBuffer(b); 1881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* don't destroy X window */ 1882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* XXX untested */ 1886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXPixmap 1887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXCreatePixmap(Display *dpy, GLXFBConfig config, Pixmap pixmap, 1888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *attribList) 1889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual v = (XMesaVisual) config; 1891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b; 1892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *attr; 1893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int target = 0, format = 0, mipmap = 0; 1894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int value; 1895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!dpy || !config || !pixmap) 1897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (attr = attribList; attr && *attr; attr++) { 1900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (*attr) { 1901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_FORMAT_EXT: 1902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attr++; 1903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (*attr) { 1904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_FORMAT_NONE_EXT: 1905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_FORMAT_RGB_EXT: 1906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_FORMAT_RGBA_EXT: 1907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org format = *attr; 1908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* error */ 1911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_TARGET_EXT: 1915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attr++; 1916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (*attr) { 1917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_1D_EXT: 1918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_2D_EXT: 1919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_RECTANGLE_EXT: 1920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org target = *attr; 1921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* error */ 1924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MIPMAP_TEXTURE_EXT: 1928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attr++; 1929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (*attr) 1930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mipmap = 1; 1931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* error */ 1934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format == GLX_TEXTURE_FORMAT_RGB_EXT) { 1939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (get_config(v, GLX_BIND_TO_TEXTURE_RGB_EXT, 1940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &value, GL_TRUE) != Success 1941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org || !value) { 1942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; /* error! */ 1943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (format == GLX_TEXTURE_FORMAT_RGBA_EXT) { 1946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (get_config(v, GLX_BIND_TO_TEXTURE_RGBA_EXT, 1947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &value, GL_TRUE) != Success 1948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org || !value) { 1949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; /* error! */ 1950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (mipmap) { 1953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (get_config(v, GLX_BIND_TO_MIPMAP_TEXTURE_EXT, 1954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &value, GL_TRUE) != Success 1955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org || !value) { 1956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; /* error! */ 1957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (target == GLX_TEXTURE_1D_EXT) { 1960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (get_config(v, GLX_BIND_TO_TEXTURE_TARGETS_EXT, 1961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &value, GL_TRUE) != Success 1962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org || (value & GLX_TEXTURE_1D_BIT_EXT) == 0) { 1963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; /* error! */ 1964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (target == GLX_TEXTURE_2D_EXT) { 1967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (get_config(v, GLX_BIND_TO_TEXTURE_TARGETS_EXT, 1968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &value, GL_TRUE) != Success 1969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org || (value & GLX_TEXTURE_2D_BIT_EXT) == 0) { 1970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; /* error! */ 1971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (target == GLX_TEXTURE_RECTANGLE_EXT) { 1974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (get_config(v, GLX_BIND_TO_TEXTURE_TARGETS_EXT, 1975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &value, GL_TRUE) != Success 1976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org || (value & GLX_TEXTURE_RECTANGLE_BIT_EXT) == 0) { 1977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; /* error! */ 1978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format || target || mipmap) { 1982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* texture from pixmap */ 1983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org b = XMesaCreatePixmapTextureBuffer(v, pixmap, 0, format, target, mipmap); 1984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 1986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org b = XMesaCreatePixmapBuffer( v, pixmap, 0 ); 1987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!b) { 1989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return pixmap; 1993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 1997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXDestroyPixmap( Display *dpy, GLXPixmap pixmap ) 1998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b = XMesaFindBuffer(dpy, (Drawable)pixmap); 2000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (b) 2001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaDestroyBuffer(b); 2002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* don't destroy X pixmap */ 2003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXPbuffer 2007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXCreatePbuffer(Display *dpy, GLXFBConfig config, const int *attribList) 2008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = (XMesaVisual) config; 2010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf; 2011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *attrib; 2012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int width = 0, height = 0; 2013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean useLargest = GL_FALSE, preserveContents = GL_FALSE; 2014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (attrib = attribList; *attrib; attrib++) { 2018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (*attrib) { 2019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_PBUFFER_WIDTH: 2020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attrib++; 2021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org width = *attrib; 2022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_PBUFFER_HEIGHT: 2024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attrib++; 2025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org height = *attrib; 2026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_PRESERVED_CONTENTS: 2028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attrib++; 2029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org preserveContents = *attrib; 2030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_LARGEST_PBUFFER: 2032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attrib++; 2033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org useLargest = *attrib; 2034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 2036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (width == 0 || height == 0) 2041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (width > PBUFFER_MAX_SIZE || height > PBUFFER_MAX_SIZE) { 2044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* If allocation would have failed and GLX_LARGEST_PBUFFER is set, 2045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * allocate the largest possible buffer. 2046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (useLargest) { 2048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org width = PBUFFER_MAX_SIZE; 2049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org height = PBUFFER_MAX_SIZE; 2050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmbuf = XMesaCreatePBuffer( xmvis, 0, width, height); 2054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* A GLXPbuffer handle must be an X Drawable because that's what 2055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glXMakeCurrent takes. 2056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmbuf) { 2058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmbuf->largestPbuffer = useLargest; 2059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmbuf->preservedContents = preserveContents; 2060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (GLXPbuffer) xmbuf->ws.drawable; 2061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 2063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 2069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXDestroyPbuffer( Display *dpy, GLXPbuffer pbuf ) 2070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b = XMesaFindBuffer(dpy, pbuf); 2072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (b) { 2073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaDestroyBuffer(b); 2074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 2079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXQueryDrawable(Display *dpy, GLXDrawable draw, int attribute, 2080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int *value) 2081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint width, height; 2083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf = XMesaFindBuffer(dpy, draw); 2084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xmbuf) 2085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 2086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* make sure buffer's dimensions are up to date */ 2088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmesa_get_window_size(dpy, xmbuf, &width, &height); 2089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (attribute) { 2091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_WIDTH: 2092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = width; 2093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_HEIGHT: 2095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = height; 2096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_PRESERVED_CONTENTS: 2098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmbuf->preservedContents; 2099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_LARGEST_PBUFFER: 2101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmbuf->largestPbuffer; 2102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_FBCONFIG_ID: 2104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmbuf->xm_visual->visinfo->visualid; 2105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 2106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef GLX_EXT_texture_from_pixmap 2107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_FORMAT_EXT: 2108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmbuf->TextureFormat; 2109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_TARGET_EXT: 2111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmbuf->TextureTarget; 2112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MIPMAP_TEXTURE_EXT: 2114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmbuf->TextureMipmap; 2115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 2117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 2119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; /* raise BadValue error */ 2120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXContext 2125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXCreateNewContext( Display *dpy, GLXFBConfig config, 2126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int renderType, GLXContext shareCtx, Bool direct ) 2127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = (XMesaVisual) config; 2129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!dpy || !config || 2131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (renderType != GLX_RGBA_TYPE && renderType != GLX_COLOR_INDEX_TYPE)) 2132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return create_context(dpy, xmvis, 2135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org shareCtx ? shareCtx->xmesaContext : NULL, 2136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org direct, 2137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1, 0, GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB, 0x0); 2138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC int 2142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXQueryContext( Display *dpy, GLXContext ctx, int attribute, int *value ) 2143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLXContext glxCtx = ctx; 2145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmctx = glxCtx->xmesaContext; 2146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) ctx; 2149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (attribute) { 2151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_FBCONFIG_ID: 2152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmctx->xm_visual->visinfo->visualid; 2153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RENDER_TYPE: 2155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmctx->xm_visual->mesa_visual.rgbMode) 2156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = GLX_RGBA_TYPE; 2157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 2158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = GLX_COLOR_INDEX_TYPE; 2159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_SCREEN: 2161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = 0; 2162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return Success; 2163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 2164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 2165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 2171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXSelectEvent( Display *dpy, GLXDrawable drawable, unsigned long mask ) 2172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf = XMesaFindBuffer(dpy, drawable); 2174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmbuf) 2175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmbuf->selectedEvents = mask; 2176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 2180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetSelectedEvent(Display *dpy, GLXDrawable drawable, unsigned long *mask) 2181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf = XMesaFindBuffer(dpy, drawable); 2183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmbuf) 2184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *mask = xmbuf->selectedEvents; 2185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 2186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *mask = 0; 2187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGI_swap_control ***/ 2192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC int 2194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXSwapIntervalSGI(int interval) 2195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) interval; 2197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGI_video_sync ***/ 2203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic unsigned int FrameCounter = 0; 2205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC int 2207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetVideoSyncSGI(unsigned int *count) 2208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* this is a bogus implementation */ 2210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *count = FrameCounter++; 2211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC int 2215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count) 2216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (divisor <= 0 || remainder < 0) 2218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_VALUE; 2219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* this is a bogus implementation */ 2220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FrameCounter++; 2221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org while (FrameCounter % divisor != remainder) 2222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FrameCounter++; 2223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *count = FrameCounter; 2224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGI_make_current_read ***/ 2230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC Bool 2232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXMakeCurrentReadSGI(Display *dpy, GLXDrawable draw, GLXDrawable read, 2233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLXContext ctx) 2234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return glXMakeContextCurrent( dpy, draw, read, ctx ); 2236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* not used 2239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXDrawable 2240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetCurrentReadDrawableSGI(void) 2241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org*/ 2245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGIX_video_source ***/ 2248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if defined(_VL_H) 2249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXVideoSourceSGIX 2251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXCreateGLXVideoSourceSGIX(Display *dpy, int screen, VLServer server, 2252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VLPath path, int nodeClass, VLNode drainNode) 2253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) screen; 2256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) server; 2257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) path; 2258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) nodeClass; 2259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) drainNode; 2260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 2264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXDestroyGLXVideoSourceSGIX(Display *dpy, GLXVideoSourceSGIX src) 2265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) src; 2268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 2271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_EXT_import_context ***/ 2274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 2276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXFreeContextEXT(Display *dpy, GLXContext context) 2277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) context; 2280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXContextID 2283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetContextIDEXT(const GLXContext context) 2284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) context; 2286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXContext 2290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXImportContextEXT(Display *dpy, GLXContextID contextID) 2291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) contextID; 2294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC int 2298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXQueryContextInfoEXT(Display *dpy, GLXContext context, int attribute, 2299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int *value) 2300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) context; 2303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) attribute; 2304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) value; 2305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGIX_fbconfig ***/ 2311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC int 2313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetFBConfigAttribSGIX(Display *dpy, GLXFBConfigSGIX config, 2314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int attribute, int *value) 2315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return glXGetFBConfigAttrib(dpy, config, attribute, value); 2317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXFBConfigSGIX * 2320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXChooseFBConfigSGIX(Display *dpy, int screen, int *attrib_list, 2321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int *nelements) 2322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (GLXFBConfig *) glXChooseFBConfig(dpy, screen, 2324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attrib_list, nelements); 2325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXPixmap 2329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXCreateGLXPixmapWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, 2330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Pixmap pixmap) 2331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = (XMesaVisual) config; 2333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf = XMesaCreatePixmapBuffer(xmvis, pixmap, 0); 2334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return xmbuf->ws.drawable; /* need to return an X ID */ 2335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXContext 2339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXCreateContextWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, 2340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int renderType, GLXContext shareCtx, 2341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Bool direct) 2342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = (XMesaVisual) config; 2344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!dpy || !config || 2346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (renderType != GLX_RGBA_TYPE && renderType != GLX_COLOR_INDEX_TYPE)) 2347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return create_context(dpy, xmvis, 2350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org shareCtx ? shareCtx->xmesaContext : NULL, 2351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org direct, 2352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1, 0, GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB, 0x0); 2353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC XVisualInfo * 2357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetVisualFromFBConfigSGIX(Display *dpy, GLXFBConfigSGIX config) 2358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return glXGetVisualFromFBConfig(dpy, config); 2360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXFBConfigSGIX 2364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetFBConfigFromVisualSGIX(Display *dpy, XVisualInfo *vis) 2365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = find_glx_visual(dpy, vis); 2367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xmvis) { 2368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* This visual wasn't found with glXChooseVisual() */ 2369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis = create_glx_visual(dpy, vis); 2370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (GLXFBConfigSGIX) xmvis; 2373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGIX_pbuffer ***/ 2378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC GLXPbufferSGIX 2380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXCreateGLXPbufferSGIX(Display *dpy, GLXFBConfigSGIX config, 2381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int width, unsigned int height, 2382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int *attribList) 2383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = (XMesaVisual) config; 2385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf; 2386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *attrib; 2387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean useLargest = GL_FALSE, preserveContents = GL_FALSE; 2388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (attrib = attribList; attrib && *attrib; attrib++) { 2392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (*attrib) { 2393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_PRESERVED_CONTENTS_SGIX: 2394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attrib++; 2395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org preserveContents = *attrib; /* ignored */ 2396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_LARGEST_PBUFFER_SGIX: 2398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attrib++; 2399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org useLargest = *attrib; /* ignored */ 2400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 2402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* not used at this time */ 2407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) useLargest; 2408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) preserveContents; 2409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmbuf = XMesaCreatePBuffer( xmvis, 0, width, height); 2411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* A GLXPbuffer handle must be an X Drawable because that's what 2412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glXMakeCurrent takes. 2413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (GLXPbuffer) xmbuf->ws.drawable; 2415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 2419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXDestroyGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf) 2420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf = XMesaFindBuffer(dpy, pbuf); 2422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmbuf) { 2423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaDestroyBuffer(xmbuf); 2424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC int 2429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXQueryGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf, int attribute, 2430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int *value) 2431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const XMesaBuffer xmbuf = XMesaFindBuffer(dpy, pbuf); 2433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xmbuf) { 2435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Generate GLXBadPbufferSGIX for bad pbuffer */ 2436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (attribute) { 2440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_PRESERVED_CONTENTS_SGIX: 2441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = True; 2442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_LARGEST_PBUFFER_SGIX: 2444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmesa_buffer_width(xmbuf) * xmesa_buffer_height(xmbuf); 2445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_WIDTH_SGIX: 2447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmesa_buffer_width(xmbuf); 2448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_HEIGHT_SGIX: 2450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmesa_buffer_height(xmbuf); 2451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_EVENT_MASK_SGIX: 2453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = 0; /* XXX might be wrong */ 2454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 2456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = 0; 2457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 2463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXSelectEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long mask) 2464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf = XMesaFindBuffer(dpy, drawable); 2466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmbuf) { 2467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Note: we'll never generate clobber events */ 2468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmbuf->selectedEvents = mask; 2469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 2474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetSelectedEventSGIX(Display *dpy, GLXDrawable drawable, 2475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long *mask) 2476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf = XMesaFindBuffer(dpy, drawable); 2478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmbuf) { 2479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *mask = xmbuf->selectedEvents; 2480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 2482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *mask = 0; 2483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGI_cushion ***/ 2489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 2491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXCushionSGI(Display *dpy, Window win, float cushion) 2492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) win; 2495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) cushion; 2496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGIX_video_resize ***/ 2501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC int 2503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXBindChannelToWindowSGIX(Display *dpy, int screen, int channel, 2504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Window window) 2505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) screen; 2508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) channel; 2509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) window; 2510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC int 2514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXChannelRectSGIX(Display *dpy, int screen, int channel, 2515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int x, int y, int w, int h) 2516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) screen; 2519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) channel; 2520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) x; 2521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) y; 2522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) w; 2523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) h; 2524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC int 2528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXQueryChannelRectSGIX(Display *dpy, int screen, int channel, 2529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int *x, int *y, int *w, int *h) 2530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) screen; 2533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) channel; 2534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) x; 2535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) y; 2536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) w; 2537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) h; 2538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC int 2542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXQueryChannelDeltasSGIX(Display *dpy, int screen, int channel, 2543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int *dx, int *dy, int *dw, int *dh) 2544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) screen; 2547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) channel; 2548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dx; 2549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dy; 2550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dw; 2551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dh; 2552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC int 2556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXChannelRectSyncSGIX(Display *dpy, int screen, int channel, GLenum synctype) 2557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) screen; 2560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) channel; 2561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) synctype; 2562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGIX_dmbuffer **/ 2568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if defined(_DM_BUFFER_H_) 2570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC Bool 2571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXAssociateDMPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuffer, 2572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DMparams *params, DMbuffer dmbuffer) 2573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) pbuffer; 2576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) params; 2577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dmbuffer; 2578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return False; 2579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 2581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGIX_swap_group ***/ 2584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 2586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXJoinSwapGroupSGIX(Display *dpy, GLXDrawable drawable, GLXDrawable member) 2587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) drawable; 2590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) member; 2591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGIX_swap_barrier ***/ 2596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 2598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXBindSwapBarrierSGIX(Display *dpy, GLXDrawable drawable, int barrier) 2599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) drawable; 2602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) barrier; 2603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC Bool 2606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXQueryMaxSwapBarriersSGIX(Display *dpy, int screen, int *max) 2607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) screen; 2610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) max; 2611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return False; 2612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SUN_get_transparent_index ***/ 2617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC Status 2619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXGetTransparentIndexSUN(Display *dpy, Window overlay, Window underlay, 2620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org long *pTransparent) 2621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) overlay; 2624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) underlay; 2625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) pTransparent; 2626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_MESA_release_buffers ***/ 2632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Release the depth, stencil, accum buffers attached to a GLXDrawable 2635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * (a window or pixmap) prior to destroying the GLXDrawable. 2636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC Bool 2638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXReleaseBuffersMESA( Display *dpy, GLXDrawable d ) 2639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b = XMesaFindBuffer(dpy, d); 2641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (b) { 2642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaDestroyBuffer(b); 2643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return True; 2644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return False; 2646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_EXT_texture_from_pixmap ***/ 2649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 2651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXBindTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer, 2652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *attrib_list) 2653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b = XMesaFindBuffer(dpy, drawable); 2655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (b) 2656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBindTexImage(dpy, b, buffer, attrib_list); 2657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgPUBLIC void 2660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXReleaseTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer) 2661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b = XMesaFindBuffer(dpy, drawable); 2663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (b) 2664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaReleaseTexImage(dpy, b, buffer); 2665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_ARB_create_context ***/ 2670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLXContext 2672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglXCreateContextAttribsARB(Display *dpy, GLXFBConfig config, 2673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLXContext shareCtx, Bool direct, 2674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *attrib_list) 2675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = (XMesaVisual) config; 2677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int majorVersion = 1, minorVersion = 0; 2678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int contextFlags = 0x0; 2679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int profileMask = GLX_CONTEXT_CORE_PROFILE_BIT_ARB; 2680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int renderType = GLX_RGBA_TYPE; 2681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned i; 2682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Bool done = False; 2683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int contextFlagsAll = (GLX_CONTEXT_DEBUG_BIT_ARB | 2684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB); 2685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* parse attrib_list */ 2687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; !done && attrib_list && attrib_list[i]; i++) { 2688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (attrib_list[i]) { 2689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_CONTEXT_MAJOR_VERSION_ARB: 2690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org majorVersion = attrib_list[++i]; 2691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_CONTEXT_MINOR_VERSION_ARB: 2693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org minorVersion = attrib_list[++i]; 2694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_CONTEXT_FLAGS_ARB: 2696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org contextFlags = attrib_list[++i]; 2697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_CONTEXT_PROFILE_MASK_ARB: 2699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org profileMask = attrib_list[++i]; 2700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RENDER_TYPE: 2702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org renderType = attrib_list[++i]; 2703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0: 2705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* end of list */ 2706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org done = True; 2707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 2709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* bad attribute */ 2710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* XXX generate BadValue X Error */ 2711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 2712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* check contextFlags */ 2716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (contextFlags & ~contextFlagsAll) { 2717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; /* generate BadValue X Error */ 2718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* check profileMask */ 2721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (profileMask != GLX_CONTEXT_CORE_PROFILE_BIT_ARB && 2722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org profileMask != GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB) { 2723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; /* generate BadValue X Error */ 2724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* check version (generate BadMatch if bad) */ 2727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (majorVersion) { 2728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 1: 2729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (minorVersion < 0 || minorVersion > 5) 2730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 2731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 2: 2733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (minorVersion < 0 || minorVersion > 1) 2734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 2735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 3: 2737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (minorVersion < 0 || minorVersion > 2) 2738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 2739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 4: 2741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (minorVersion < 0 || minorVersion > 0) 2742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 2743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 2745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 2746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ((contextFlags & GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB) && 2749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org majorVersion < 3) 2750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; /* generate GLXBadProfileARB */ 2751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (renderType == GLX_COLOR_INDEX_TYPE && majorVersion >= 3) 2753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; /* generate BadMatch */ 2754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return create_context(dpy, xmvis, 2756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org shareCtx ? shareCtx->xmesaContext : NULL, 2757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org direct, 2758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org majorVersion, minorVersion, 2759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org profileMask, contextFlags); 2760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2761