1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mesa 3-D graphics library 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Version: 7.5 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 1999-2008 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 * This is an emulation of the GLX API which allows Mesa/GLX-based programs 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to run on X servers which do not have the real GLX extension. 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Thanks to the contributors: 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Initial version: Philip Brown (phil@bolthole.com) 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Better glXGetConfig() support: Armin Liebchen (liebchen@asylum.cs.utah.edu) 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Further visual-handling refinements: Wolfram Gloger 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * (wmglo@Dent.MED.Uni-Muenchen.DE). 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Notes: 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Don't be fooled, stereo isn't supported yet. 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "glxheader.h" 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "glxapi.h" 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/context.h" 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/config.h" 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/macros.h" 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/imports.h" 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/mtypes.h" 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/version.h" 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "xfonts.h" 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "xmesaP.h" 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __VMS 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define sprintf sprintf 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* This indicates the client-side GLX API and GLX encoder version. */ 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CLIENT_MAJOR_VERSION 1 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CLIENT_MINOR_VERSION 4 /* but don't have 1.3's pbuffers, etc yet */ 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* This indicates the server-side GLX decoder version. 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX 1.4 indicates OpenGL 1.3 support 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SERVER_MAJOR_VERSION 1 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SERVER_MINOR_VERSION 4 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* This is appended onto the glXGetClient/ServerString version strings. */ 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define MESA_GLX_VERSION "Mesa " MESA_VERSION_STRING 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Who implemented this GLX? */ 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define VENDOR "Brian Paul" 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define EXTENSIONS \ 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_MESA_set_3dfx_mode " \ 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_MESA_copy_sub_buffer " \ 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_MESA_pixmap_colormap " \ 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_MESA_release_buffers " \ 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_ARB_get_proc_address " \ 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_EXT_texture_from_pixmap " \ 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_EXT_visual_info " \ 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_EXT_visual_rating " \ 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*"GLX_SGI_video_sync "*/ \ 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_SGIX_fbconfig " \ 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_SGIX_pbuffer " 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Our fake GLX context will contain a "real" GLX context and an XMesa context. 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Note that a pointer to a __GLXcontext is a pointer to a fake_glx_context, 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and vice versa. 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * We really just need this structure in order to make the libGL functions 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glXGetCurrentContext(), glXGetCurrentDrawable() and glXGetCurrentDisplay() 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * work correctly. 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct fake_glx_context { 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __GLXcontext glxContext; /* this MUST be first! */ 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesaContext; 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**********************************************************************/ 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX Visual Code ***/ 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**********************************************************************/ 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DONT_CARE -1 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XMesaVisual *VisualTable = NULL; 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int NumVisuals = 0; 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This struct and some code fragments borrowed 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * from Mark Kilgard's GLUT library. 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef struct _OverlayInfo { 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Avoid 64-bit portability problems by being careful to use 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org longs due to the way XGetWindowProperty is specified. Note 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org that these parameters are passed as CARD32s over X 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org protocol. */ 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long overlay_visual; 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org long transparent_type; 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org long value; 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org long layer; 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} OverlayInfo; 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Macro to handle c_class vs class field name in XVisualInfo struct */ 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if defined(__cplusplus) || defined(c_plusplus) 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CLASS c_class 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#else 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CLASS class 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Test if the given XVisualInfo is usable for Mesa rendering. 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLboolean 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgis_usable_visual( XVisualInfo *vinfo ) 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (vinfo->CLASS) { 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case StaticGray: 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GrayScale: 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Any StaticGray/GrayScale visual works in RGB or CI mode */ 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case StaticColor: 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PseudoColor: 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Color-index rendering is not supported. */ 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TrueColor: 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case DirectColor: 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Any depth of TrueColor or DirectColor works in RGB mode */ 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_TRUE; 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* This should never happen */ 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GL_FALSE; 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Get an array OverlayInfo records for specified screen. 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param dpy the display 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param screen screen number 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param numOverlays returns numver of OverlayInfo records 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \return pointer to OverlayInfo array, free with XFree() 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic OverlayInfo * 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGetOverlayInfo(Display *dpy, int screen, int *numOverlays) 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Atom overlayVisualsAtom; 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Atom actualType; 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Status status; 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned char *ovInfo; 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long sizeData, bytesLeft; 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int actualFormat; 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The SERVER_OVERLAY_VISUALS property on the root window contains 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a list of overlay visuals. Get that list now. 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org overlayVisualsAtom = XInternAtom(dpy,"SERVER_OVERLAY_VISUALS", True); 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (overlayVisualsAtom == None) { 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org status = XGetWindowProperty(dpy, RootWindow(dpy, screen), 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org overlayVisualsAtom, 0L, (long) 10000, False, 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org overlayVisualsAtom, &actualType, &actualFormat, 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &sizeData, &bytesLeft, 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &ovInfo); 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (status != Success || actualType != overlayVisualsAtom || 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org actualFormat != 32 || sizeData < 4) { 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* something went wrong */ 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XFree((void *) ovInfo); 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *numOverlays = 0; 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *numOverlays = sizeData / 4; 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (OverlayInfo *) ovInfo; 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Return the level (overlay, normal, underlay) of a given XVisualInfo. 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Input: dpy - the X display 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * vinfo - the XVisualInfo to test 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Return: level of the visual: 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 0 = normal planes 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * >0 = overlay planes 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * <0 = underlay planes 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglevel_of_visual( Display *dpy, XVisualInfo *vinfo ) 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org OverlayInfo *overlay_info; 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int numOverlaysPerScreen, i; 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org overlay_info = GetOverlayInfo(dpy, vinfo->screen, &numOverlaysPerScreen); 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!overlay_info) { 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* search the overlay visual list for the visual ID of interest */ 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < numOverlaysPerScreen; i++) { 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const OverlayInfo *ov = overlay_info + i; 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ov->overlay_visual == vinfo->visualid) { 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* found the visual */ 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (/*ov->transparent_type==1 &&*/ ov->layer!=0) { 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int level = ov->layer; 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XFree((void *) overlay_info); 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return level; 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XFree((void *) overlay_info); 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The visual ID was not found in the overlay list. */ 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XFree((void *) overlay_info); 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Given an XVisualInfo and RGB, Double, and Depth buffer flags, save the 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * configuration in our list of GLX visuals. 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XMesaVisual 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgsave_glx_visual( Display *dpy, XVisualInfo *vinfo, 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean alphaFlag, GLboolean dbFlag, 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean stereoFlag, 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint depth_size, GLint stencil_size, 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumRedSize, GLint accumGreenSize, 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumBlueSize, GLint accumAlphaSize, 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint level, GLint numAuxBuffers ) 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean ximageFlag = GL_TRUE; 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis; 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint i; 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean comparePointers; 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (dbFlag) { 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Check if the MESA_BACK_BUFFER env var is set */ 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char *backbuffer = _mesa_getenv("MESA_BACK_BUFFER"); 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (backbuffer) { 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (backbuffer[0]=='p' || backbuffer[0]=='P') { 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ximageFlag = GL_FALSE; 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (backbuffer[0]=='x' || backbuffer[0]=='X') { 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ximageFlag = GL_TRUE; 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_warning(NULL, "Mesa: invalid value for MESA_BACK_BUFFER environment variable, using an XImage."); 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (stereoFlag) { 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* stereo not supported */ 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Comparing IDs uses less memory but sometimes fails. */ 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* XXX revisit this after 3.0 is finished. */ 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_mesa_getenv("MESA_GLX_VISUAL_HACK")) 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org comparePointers = GL_TRUE; 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org comparePointers = GL_FALSE; 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Force the visual to have an alpha channel */ 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_mesa_getenv("MESA_GLX_FORCE_ALPHA")) 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org alphaFlag = GL_TRUE; 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* First check if a matching visual is already in the list */ 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i=0; i<NumVisuals; i++) { 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual v = VisualTable[i]; 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (v->display == dpy 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && v->mesa_visual.level == level 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && v->mesa_visual.numAuxBuffers == numAuxBuffers 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && v->ximage_flag == ximageFlag 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && v->mesa_visual.doubleBufferMode == dbFlag 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && v->mesa_visual.stereoMode == stereoFlag 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && (v->mesa_visual.alphaBits > 0) == alphaFlag 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && (v->mesa_visual.depthBits >= depth_size || depth_size == 0) 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && (v->mesa_visual.stencilBits >= stencil_size || stencil_size == 0) 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && (v->mesa_visual.accumRedBits >= accumRedSize || accumRedSize == 0) 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && (v->mesa_visual.accumGreenBits >= accumGreenSize || accumGreenSize == 0) 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && (v->mesa_visual.accumBlueBits >= accumBlueSize || accumBlueSize == 0) 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && (v->mesa_visual.accumAlphaBits >= accumAlphaSize || accumAlphaSize == 0)) { 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* now either compare XVisualInfo pointers or visual IDs */ 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ((!comparePointers && v->visinfo->visualid == vinfo->visualid) 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org || (comparePointers && v->vishandle == vinfo)) { 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return v; 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Create a new visual and add it to the list. */ 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis = XMesaCreateVisual( dpy, vinfo, GL_TRUE, alphaFlag, dbFlag, 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stereoFlag, ximageFlag, 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_size, stencil_size, 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumRedSize, accumBlueSize, 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumBlueSize, accumAlphaSize, 0, level, 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLX_NONE_EXT ); 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmvis) { 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Save a copy of the pointer now so we can find this visual again 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * if we need to search for it in find_glx_visual(). 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis->vishandle = vinfo; 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Allocate more space for additional visual */ 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VisualTable = (XMesaVisual *) _mesa_realloc( VisualTable, 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sizeof(XMesaVisual) * NumVisuals, 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sizeof(XMesaVisual) * (NumVisuals + 1)); 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* add xmvis to the list */ 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VisualTable[NumVisuals] = xmvis; 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NumVisuals++; 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* XXX minor hack, because XMesaCreateVisual doesn't support an 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * aux buffers parameter. 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis->mesa_visual.numAuxBuffers = numAuxBuffers; 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return xmvis; 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Return the default number of bits for the Z buffer. 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * If defined, use the MESA_GLX_DEPTH_BITS env var value. 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Otherwise, use the DEFAULT_SOFTWARE_DEPTH_BITS constant. 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * XXX probably do the same thing for stencil, accum, etc. 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLint 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdefault_depth_bits(void) 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int zBits; 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *zEnv = _mesa_getenv("MESA_GLX_DEPTH_BITS"); 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (zEnv) 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zBits = atoi(zEnv); 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zBits = DEFAULT_SOFTWARE_DEPTH_BITS; 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return zBits; 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLint 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdefault_alpha_bits(void) 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int aBits; 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *aEnv = _mesa_getenv("MESA_GLX_ALPHA_BITS"); 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (aEnv) 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org aBits = atoi(aEnv); 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org aBits = 0; 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return aBits; 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLint 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdefault_accum_bits(void) 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 16; 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Create a GLX visual from a regular XVisualInfo. 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is called when Fake GLX is given an XVisualInfo which wasn't 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * returned by glXChooseVisual. Since this is the first time we're 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * considering this visual we'll take a guess at reasonable values 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * for depth buffer size, stencil size, accum size, etc. 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is the best we can do with a client-side emulation of GLX. 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XMesaVisual 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgcreate_glx_visual( Display *dpy, XVisualInfo *visinfo ) 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int vislevel; 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint zBits = default_depth_bits(); 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accBits = default_accum_bits(); 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean alphaFlag = default_alpha_bits() > 0; 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vislevel = level_of_visual( dpy, visinfo ); 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vislevel) { 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Color-index rendering to overlays is not supported. */ 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (is_usable_visual( visinfo )) { 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Configure this visual as RGB, double-buffered, depth-buffered. */ 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* This is surely wrong for some people's needs but what else */ 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* can be done? They should use glXChooseVisual(). */ 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return save_glx_visual( dpy, visinfo, 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org alphaFlag, /* alpha */ 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GL_TRUE, /* double */ 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GL_FALSE, /* stereo */ 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org zBits, 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 8, /* stencil bits */ 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accBits, /* r */ 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accBits, /* g */ 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accBits, /* b */ 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accBits, /* a */ 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0, /* level */ 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0 /* numAux */ 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ); 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_warning(NULL, "Mesa: error in glXCreateContext: bad visual\n"); 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Find the GLX visual associated with an XVisualInfo. 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XMesaVisual 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgfind_glx_visual( Display *dpy, XVisualInfo *vinfo ) 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i; 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* try to match visual id */ 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i=0;i<NumVisuals;i++) { 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (VisualTable[i]->display==dpy 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && VisualTable[i]->visinfo->visualid == vinfo->visualid) { 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return VisualTable[i]; 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* if that fails, try to match pointers */ 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i=0;i<NumVisuals;i++) { 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (VisualTable[i]->display==dpy && VisualTable[i]->vishandle==vinfo) { 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return VisualTable[i]; 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Return the transparent pixel value for a GLX visual. 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Input: glxvis - the glx_visual 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Return: a pixel value or -1 if no transparent pixel 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtransparent_pixel( XMesaVisual glxvis ) 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Display *dpy = glxvis->display; 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVisualInfo *vinfo = glxvis->visinfo; 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org OverlayInfo *overlay_info; 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int numOverlaysPerScreen, i; 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org overlay_info = GetOverlayInfo(dpy, vinfo->screen, &numOverlaysPerScreen); 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!overlay_info) { 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < numOverlaysPerScreen; i++) { 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const OverlayInfo *ov = overlay_info + i; 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ov->overlay_visual == vinfo->visualid) { 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* found it! */ 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ov->transparent_type == 0) { 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* type 0 indicates no transparency */ 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XFree((void *) overlay_info); 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* ov->value is the transparent pixel */ 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XFree((void *) overlay_info); 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ov->value; 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The visual ID was not found in the overlay list. */ 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XFree((void *) overlay_info); 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Try to get an X visual which matches the given arguments. 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XVisualInfo * 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgget_visual( Display *dpy, int scr, unsigned int depth, int xclass ) 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVisualInfo temp, *vis; 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org long mask; 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int n; 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int default_depth; 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int default_class; 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mask = VisualScreenMask | VisualDepthMask | VisualClassMask; 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org temp.screen = scr; 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org temp.depth = depth; 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org temp.CLASS = xclass; 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default_depth = DefaultDepth(dpy,scr); 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default_class = DefaultVisual(dpy,scr)->CLASS; 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (depth==default_depth && xclass==default_class) { 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* try to get root window's visual */ 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org temp.visualid = DefaultVisual(dpy,scr)->visualid; 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mask |= VisualIDMask; 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = XGetVisualInfo( dpy, mask, &temp, &n ); 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* In case bits/pixel > 24, make sure color channels are still <=8 bits. 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * An SGI Infinite Reality system, for example, can have 30bpp pixels: 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 10 bits per color channel. Mesa's limited to a max of 8 bits/channel. 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis && depth > 24 && (xclass==TrueColor || xclass==DirectColor)) { 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (_mesa_bitcount((GLuint) vis->red_mask ) <= 8 && 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_bitcount((GLuint) vis->green_mask) <= 8 && 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_bitcount((GLuint) vis->blue_mask ) <= 8) { 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vis; 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XFree((void *) vis); 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vis; 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Retrieve the value of the given environment variable and find 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the X visual which matches it. 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Input: dpy - the display 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * screen - the screen number 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * varname - the name of the environment variable 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Return: an XVisualInfo pointer to NULL if error. 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XVisualInfo * 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgget_env_visual(Display *dpy, int scr, const char *varname) 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char value[100], type[100]; 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int depth, xclass = -1; 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVisualInfo *vis; 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!_mesa_getenv( varname )) { 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org strncpy( value, _mesa_getenv(varname), 100 ); 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org value[99] = 0; 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sscanf( value, "%s %d", type, &depth ); 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (strcmp(type,"TrueColor")==0) xclass = TrueColor; 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (strcmp(type,"DirectColor")==0) xclass = DirectColor; 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (strcmp(type,"GrayScale")==0) xclass = GrayScale; 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (strcmp(type,"StaticGray")==0) xclass = StaticGray; 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xclass>-1 && depth>0) { 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = get_visual( dpy, scr, depth, xclass ); 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis) { 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vis; 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_warning(NULL, "GLX unable to find visual class=%s, depth=%d.", 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org type, depth); 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Select an X visual which satisfies the RGBA/CI flag and minimum depth. 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Input: dpy, screen - X display and screen number 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * min_depth - minimum visual depth 615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * preferred_class - preferred GLX visual class or DONT_CARE 616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Return: pointer to an XVisualInfo or NULL. 617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XVisualInfo * 619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgchoose_x_visual(Display *dpy, int screen, int min_depth, int preferred_class) 620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVisualInfo *vis; 622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int xclass, visclass = 0; 623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int depth; 624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* First see if the MESA_RGB_VISUAL env var is defined */ 626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = get_env_visual( dpy, screen, "MESA_RGB_VISUAL" ); 627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis) { 628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vis; 629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Otherwise, search for a suitable visual */ 631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (preferred_class==DONT_CARE) { 632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (xclass=0;xclass<4;xclass++) { 633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (xclass) { 634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 0: visclass = TrueColor; break; 635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 1: visclass = DirectColor; break; 636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 2: visclass = GrayScale; break; 637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 3: visclass = StaticGray; break; 638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (min_depth==0) { 640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* start with shallowest */ 641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (depth=0;depth<=32;depth++) { 642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = get_visual( dpy, screen, depth, visclass ); 643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis) { 644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vis; 645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* start with deepest */ 650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (depth=32;depth>=min_depth;depth--) { 651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = get_visual( dpy, screen, depth, visclass ); 652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis) { 653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vis; 654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* search for a specific visual class */ 661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (preferred_class) { 662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRUE_COLOR_EXT: visclass = TrueColor; break; 663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DIRECT_COLOR_EXT: visclass = DirectColor; break; 664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_GRAY_SCALE_EXT: visclass = GrayScale; break; 665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_STATIC_GRAY_EXT: visclass = StaticGray; break; 666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_PSEUDO_COLOR_EXT: 667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_STATIC_COLOR_EXT: 668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: return NULL; 669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (min_depth==0) { 671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* start with shallowest */ 672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (depth=0;depth<=32;depth++) { 673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = get_visual( dpy, screen, depth, visclass ); 674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis) { 675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vis; 676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* start with deepest */ 681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (depth=32;depth>=min_depth;depth--) { 682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = get_visual( dpy, screen, depth, visclass ); 683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis) { 684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return vis; 685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* didn't find a visual */ 691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Find the deepest X over/underlay visual of at least min_depth. 698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Input: dpy, screen - X display and screen number 699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * level - the over/underlay level 700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * trans_type - transparent pixel type: GLX_NONE_EXT, 701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_TRANSPARENT_RGB_EXT, GLX_TRANSPARENT_INDEX_EXT, 702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * or DONT_CARE 703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * trans_value - transparent pixel value or DONT_CARE 704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * min_depth - minimum visual depth 705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * preferred_class - preferred GLX visual class or DONT_CARE 706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Return: pointer to an XVisualInfo or NULL. 707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XVisualInfo * 709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgchoose_x_overlay_visual( Display *dpy, int scr, 710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int level, int trans_type, int trans_value, 711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int min_depth, int preferred_class ) 712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org OverlayInfo *overlay_info; 714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int numOverlaysPerScreen; 715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i; 716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVisualInfo *deepvis; 717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int deepest; 718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*DEBUG int tt, tv; */ 720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (preferred_class) { 722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRUE_COLOR_EXT: preferred_class = TrueColor; break; 723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DIRECT_COLOR_EXT: preferred_class = DirectColor; break; 724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_PSEUDO_COLOR_EXT: preferred_class = PseudoColor; break; 725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_STATIC_COLOR_EXT: preferred_class = StaticColor; break; 726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_GRAY_SCALE_EXT: preferred_class = GrayScale; break; 727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_STATIC_GRAY_EXT: preferred_class = StaticGray; break; 728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: preferred_class = DONT_CARE; 729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org overlay_info = GetOverlayInfo(dpy, scr, &numOverlaysPerScreen); 732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!overlay_info) { 733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Search for the deepest overlay which satisifies all criteria. */ 737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org deepest = min_depth; 738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org deepvis = NULL; 739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < numOverlaysPerScreen; i++) { 741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const OverlayInfo *ov = overlay_info + i; 742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVisualInfo *vislist, vistemplate; 743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int count; 744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ov->layer!=level) { 746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* failed overlay level criteria */ 747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org continue; 748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!(trans_type==DONT_CARE 750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org || (trans_type==GLX_TRANSPARENT_INDEX_EXT 751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && ov->transparent_type>0) 752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org || (trans_type==GLX_NONE_EXT && ov->transparent_type==0))) { 753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* failed transparent pixel type criteria */ 754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org continue; 755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (trans_value!=DONT_CARE && trans_value!=ov->value) { 757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* failed transparent pixel value criteria */ 758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org continue; 759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* get XVisualInfo and check the depth */ 762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vistemplate.visualid = ov->overlay_visual; 763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vistemplate.screen = scr; 764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vislist = XGetVisualInfo( dpy, VisualIDMask | VisualScreenMask, 765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &vistemplate, &count ); 766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (count!=1) { 768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* something went wrong */ 769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org continue; 770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (preferred_class!=DONT_CARE && preferred_class!=vislist->CLASS) { 772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* wrong visual class */ 773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org continue; 774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Color-index rendering is not supported. Make sure we have True/DirectColor */ 777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vislist->CLASS != TrueColor && vislist->CLASS != DirectColor) 778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org continue; 779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (deepvis==NULL || vislist->depth > deepest) { 781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* YES! found a satisfactory visual */ 782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (deepvis) { 783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XFree( deepvis ); 784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org deepest = vislist->depth; 786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org deepvis = vislist; 787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* DEBUG tt = ov->transparent_type;*/ 788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* DEBUG tv = ov->value; */ 789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*DEBUG 793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (deepvis) { 794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org printf("chose 0x%x: layer=%d depth=%d trans_type=%d trans_value=%d\n", 795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org deepvis->visualid, level, deepvis->depth, tt, tv ); 796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org*/ 798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return deepvis; 799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**********************************************************************/ 803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** Display-related functions ***/ 804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**********************************************************************/ 805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Free all XMesaVisuals which are associated with the given display. 809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdestroy_visuals_on_display(Display *dpy) 812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i; 814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < NumVisuals; i++) { 815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (VisualTable[i]->display == dpy) { 816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* remove this visual */ 817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int j; 818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org free(VisualTable[i]); 819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (j = i; j < NumVisuals - 1; j++) 820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org VisualTable[j] = VisualTable[j + 1]; 821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NumVisuals--; 822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Called from XCloseDisplay() to let us free our display-related data. 829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclose_display_callback(Display *dpy, XExtCodes *codes) 832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org destroy_visuals_on_display(dpy); 834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmesa_destroy_buffers_on_display(dpy); 835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Look for the named extension on given display and return a pointer 841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to the _XExtension data, or NULL if extension not found. 842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic _XExtension * 844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orglookup_extension(Display *dpy, const char *extName) 845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _XExtension *ext; 847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (ext = dpy->ext_procs; ext; ext = ext->next) { 848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ext->name && strcmp(ext->name, extName) == 0) { 849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ext; 850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Whenever we're given a new Display pointer, call this function to 858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * register our close_display_callback function. 859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgregister_with_display(Display *dpy) 862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *extName = "MesaGLX"; 864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _XExtension *ext; 865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ext = lookup_extension(dpy, extName); 867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!ext) { 868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XExtCodes *c = XAddExtension(dpy); 869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ext = dpy->ext_procs; /* new extension is at head of list */ 870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(c->extension == ext->codes.extension); 871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) c; /* silence warning */ 872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ext->name = _mesa_strdup(extName); 873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ext->close_display = close_display_callback; 874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**********************************************************************/ 879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** Begin Fake GLX API Functions ***/ 880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**********************************************************************/ 881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Helper used by glXChooseVisual and glXChooseFBConfig. 885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The fbConfig parameter must be GL_FALSE for the former and GL_TRUE for 886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the later. 887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * In either case, the attribute list is terminated with the value 'None'. 888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XMesaVisual 890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgchoose_visual( Display *dpy, int screen, const int *list, GLboolean fbConfig ) 891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const GLboolean rgbModeDefault = fbConfig; 893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *parselist; 894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVisualInfo *vis; 895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int min_ci = 0; 896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int min_red=0, min_green=0, min_blue=0; 897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean rgb_flag = rgbModeDefault; 898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean alpha_flag = GL_FALSE; 899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean double_flag = GL_FALSE; 900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean stereo_flag = GL_FALSE; 901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint depth_size = 0; 902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint stencil_size = 0; 903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumRedSize = 0; 904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumGreenSize = 0; 905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumBlueSize = 0; 906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint accumAlphaSize = 0; 907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int level = 0; 908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int visual_type = DONT_CARE; 909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int trans_type = DONT_CARE; 910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int trans_value = DONT_CARE; 911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint caveat = DONT_CARE; 912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = NULL; 913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int desiredVisualID = -1; 914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int numAux = 0; 915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist = list; 917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org while (*parselist) { 919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fbConfig && 921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist[1] == GLX_DONT_CARE && 922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist[0] != GLX_LEVEL) { 923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* For glXChooseFBConfig(), skip attributes whose value is 924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_DONT_CARE (-1), unless it's GLX_LEVEL (which can legitimately be 925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a negative value). 926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * From page 17 (23 of the pdf) of the GLX 1.4 spec: 928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX DONT CARE may be specified for all attributes except GLX LEVEL. 929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist += 2; 931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org continue; 932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (*parselist) { 935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_USE_GL: 936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fbConfig) { 937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* invalid token */ 938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* skip */ 942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BUFFER_SIZE: 946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org min_ci = *parselist++; 948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_LEVEL: 950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org level = *parselist++; 952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RGBA: 954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fbConfig) { 955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* invalid token */ 956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rgb_flag = GL_TRUE; 960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DOUBLEBUFFER: 964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fbConfig) { 966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org double_flag = *parselist++; 967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org double_flag = GL_TRUE; 970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_STEREO: 973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fbConfig) { 975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stereo_flag = *parselist++; 976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stereo_flag = GL_TRUE; 979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_AUX_BUFFERS: 982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org numAux = *parselist++; 984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (numAux > MAX_AUX_BUFFERS) 985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RED_SIZE: 988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org min_red = *parselist++; 990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_GREEN_SIZE: 992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org min_green = *parselist++; 994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BLUE_SIZE: 996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org min_blue = *parselist++; 998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ALPHA_SIZE: 1000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 1002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint size = *parselist++; 1003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org alpha_flag = size ? GL_TRUE : GL_FALSE; 1004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DEPTH_SIZE: 1007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_size = *parselist++; 1009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_STENCIL_SIZE: 1011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stencil_size = *parselist++; 1013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_RED_SIZE: 1015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 1017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint size = *parselist++; 1018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumRedSize = MAX2( accumRedSize, size ); 1019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_GREEN_SIZE: 1022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 1024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint size = *parselist++; 1025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumGreenSize = MAX2( accumGreenSize, size ); 1026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_BLUE_SIZE: 1029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 1031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint size = *parselist++; 1032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumBlueSize = MAX2( accumBlueSize, size ); 1033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_ALPHA_SIZE: 1036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 1038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint size = *parselist++; 1039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumAlphaSize = MAX2( accumAlphaSize, size ); 1040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 1044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_EXT_visual_info extension 1045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_X_VISUAL_TYPE_EXT: 1047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org visual_type = *parselist++; 1049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_TYPE_EXT: 1051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org trans_type = *parselist++; 1053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_INDEX_VALUE_EXT: 1055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org trans_value = *parselist++; 1057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_RED_VALUE_EXT: 1059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_GREEN_VALUE_EXT: 1060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_BLUE_VALUE_EXT: 1061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_ALPHA_VALUE_EXT: 1062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* ignore */ 1063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 1068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_EXT_visual_info extension 1069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VISUAL_CAVEAT_EXT: 1071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org caveat = *parselist++; /* ignored for now */ 1073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 1076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_multisample 1077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_SAMPLE_BUFFERS_ARB: 1079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_SAMPLES_ARB: 1080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (*parselist++ != 0) 1082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* ms not supported */ 1083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 1087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FBConfig attribs. 1088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RENDER_TYPE: 1090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbConfig) 1091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (*parselist & GLX_RGBA_BIT) { 1094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rgb_flag = GL_TRUE; 1095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (*parselist & GLX_COLOR_INDEX_BIT) { 1097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rgb_flag = GL_FALSE; 1098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (*parselist == 0) { 1100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rgb_flag = GL_TRUE; 1101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DRAWABLE_TYPE: 1105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbConfig) 1106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (*parselist & ~(GLX_WINDOW_BIT | GLX_PIXMAP_BIT | GLX_PBUFFER_BIT)) { 1109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; /* bad bit */ 1110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_FBCONFIG_ID: 1114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VISUAL_ID: 1115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbConfig) 1116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org desiredVisualID = *parselist++; 1119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_X_RENDERABLE: 1121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MAX_PBUFFER_WIDTH: 1122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MAX_PBUFFER_HEIGHT: 1123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MAX_PBUFFER_PIXELS: 1124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbConfig) 1125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist += 2; 1127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* ignore */ 1128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef GLX_EXT_texture_from_pixmap 1131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_TEXTURE_RGB_EXT: 1132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; /*skip*/ 1133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_TEXTURE_RGBA_EXT: 1135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; /*skip*/ 1136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_MIPMAP_TEXTURE_EXT: 1138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; /*skip*/ 1139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_TEXTURE_TARGETS_EXT: 1141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; 1142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (*parselist & ~(GLX_TEXTURE_1D_BIT_EXT | 1143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLX_TEXTURE_2D_BIT_EXT | 1144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLX_TEXTURE_RECTANGLE_BIT_EXT)) { 1145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* invalid bit */ 1146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_Y_INVERTED_EXT: 1150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org parselist++; /*skip*/ 1151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case None: 1155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* end of list */ 1156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* undefined attribute */ 1160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_warning(NULL, "unexpected attrib 0x%x in choose_visual()", 1161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *parselist); 1162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!rgb_flag) 1167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) caveat; 1170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) min_ci; 1171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 1173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Since we're only simulating the GLX extension this function will never 1174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * find any real GL visuals. Instead, all we can do is try to find an RGB 1175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * or CI visual of appropriate depth. Other requested attributes such as 1176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * double buffering, depth buffer, etc. will be associated with the X 1177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * visual and stored in the VisualTable[]. 1178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (desiredVisualID != -1) { 1180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* try to get a specific visual, by visualID */ 1181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVisualInfo temp; 1182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int n; 1183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org temp.visualid = desiredVisualID; 1184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org temp.screen = screen; 1185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = XGetVisualInfo(dpy, VisualIDMask | VisualScreenMask, &temp, &n); 1186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis) { 1187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* give the visual some useful GLX attributes */ 1188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org double_flag = GL_TRUE; 1189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis->depth <= 8) 1190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_size = default_depth_bits(); 1192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stencil_size = 8; 1193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* XXX accum??? */ 1194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 1197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* RGB visual */ 1198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int min_rgb = min_red + min_green + min_blue; 1199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (min_rgb>1 && min_rgb<8) { 1200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* a special case to be sure we can get a monochrome visual */ 1201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org min_rgb = 1; 1202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (level==0) { 1205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = choose_x_visual(dpy, screen, min_rgb, visual_type); 1206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 1208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org vis = choose_x_overlay_visual(dpy, screen, level, 1209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org trans_type, trans_value, min_rgb, visual_type); 1210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (vis) { 1214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Note: we're not exactly obeying the glXChooseVisual rules here. 1215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * When GLX_DEPTH_SIZE = 1 is specified we're supposed to choose the 1216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * largest depth buffer size, which is 32bits/value. Instead, we 1217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * return 16 to maintain performance with earlier versions of Mesa. 1218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (depth_size > 24) 1220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_size = 32; 1221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (depth_size > 16) 1222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_size = 24; 1223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (depth_size > 0) { 1224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org depth_size = default_depth_bits(); 1225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!alpha_flag) { 1228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org alpha_flag = default_alpha_bits() > 0; 1229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* we only support one size of stencil and accum buffers. */ 1232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (stencil_size > 0) 1233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stencil_size = 8; 1234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (accumRedSize > 0 || accumGreenSize > 0 || accumBlueSize > 0 || 1235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumAlphaSize > 0) { 1236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumRedSize = 1237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumGreenSize = 1238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumBlueSize = default_accum_bits(); 1239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumAlphaSize = alpha_flag ? accumRedSize : 0; 1240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis = save_glx_visual( dpy, vis, alpha_flag, double_flag, 1243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stereo_flag, depth_size, stencil_size, 1244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumRedSize, accumGreenSize, 1245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org accumBlueSize, accumAlphaSize, level, numAux ); 1246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return xmvis; 1249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XVisualInfo * 1253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXChooseVisual( Display *dpy, int screen, int *list ) 1254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis; 1256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* register ourselves as an extension on this display */ 1258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org register_with_display(dpy); 1259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis = choose_visual(dpy, screen, list, GL_FALSE); 1261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmvis) { 1262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if 0 1263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return xmvis->vishandle; 1264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#else 1265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* create a new vishandle - the cached one may be stale */ 1266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis->vishandle = (XVisualInfo *) malloc(sizeof(XVisualInfo)); 1267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmvis->vishandle) { 1268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memcpy(xmvis->vishandle, xmvis->visinfo, sizeof(XVisualInfo)); 1269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return xmvis->vishandle; 1271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 1274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Init basic fields of a new fake_glx_context. 1280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginit_glx_context(struct fake_glx_context *glxCtx, Display *dpy) 1283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Always return True. See if anyone's confused... */ 1285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean direct = GL_TRUE; 1286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glxCtx->xmesaContext->direct = direct; 1288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glxCtx->glxContext.isDirect = direct; 1289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glxCtx->glxContext.currentDpy = dpy; 1290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glxCtx->glxContext.xid = (XID) glxCtx; /* self pointer */ 1291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert((void *) glxCtx == (void *) &(glxCtx->glxContext)); 1293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXContext 1298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXCreateContext( Display *dpy, XVisualInfo *visinfo, 1299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLXContext share_list, Bool direct ) 1300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis; 1302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct fake_glx_context *glxCtx; 1303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct fake_glx_context *shareCtx = (struct fake_glx_context *) share_list; 1304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!dpy || !visinfo) 1306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glxCtx = CALLOC_STRUCT(fake_glx_context); 1309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!glxCtx) 1310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* deallocate unused windows/buffers */ 1313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if 0 1314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaGarbageCollect(dpy); 1315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis = find_glx_visual( dpy, visinfo ); 1318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xmvis) { 1319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* This visual wasn't found with glXChooseVisual() */ 1320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis = create_glx_visual( dpy, visinfo ); 1321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xmvis) { 1322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* unusable visual */ 1323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org free(glxCtx); 1324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glxCtx->xmesaContext = XMesaCreateContext(xmvis, 1329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org shareCtx ? shareCtx->xmesaContext : NULL); 1330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!glxCtx->xmesaContext) { 1331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org free(glxCtx); 1332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_glx_context(glxCtx, dpy); 1336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (GLXContext) glxCtx; 1338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* XXX these may have to be removed due to thread-safety issues. */ 1342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXContext MakeCurrent_PrevContext = 0; 1343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXDrawable MakeCurrent_PrevDrawable = 0; 1344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXDrawable MakeCurrent_PrevReadable = 0; 1345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XMesaBuffer MakeCurrent_PrevDrawBuffer = 0; 1346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XMesaBuffer MakeCurrent_PrevReadBuffer = 0; 1347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* GLX 1.3 and later */ 1350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic Bool 1351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXMakeContextCurrent( Display *dpy, GLXDrawable draw, 1352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLXDrawable read, GLXContext ctx ) 1353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct fake_glx_context *glxCtx = (struct fake_glx_context *) ctx; 1355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx && draw && read) { 1357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer drawBuffer, readBuffer; 1358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmctx = glxCtx->xmesaContext; 1359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Find the XMesaBuffer which corresponds to the GLXDrawable 'draw' */ 1361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx == MakeCurrent_PrevContext 1362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && draw == MakeCurrent_PrevDrawable) { 1363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drawBuffer = MakeCurrent_PrevDrawBuffer; 1364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 1366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drawBuffer = XMesaFindBuffer( dpy, draw ); 1367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!drawBuffer) { 1369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* drawable must be a new window! */ 1370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drawBuffer = XMesaCreateWindowBuffer( xmctx->xm_visual, draw ); 1371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!drawBuffer) { 1372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Out of memory, or context/drawable depth mismatch */ 1373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return False; 1374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Find the XMesaBuffer which corresponds to the GLXDrawable 'read' */ 1378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ctx == MakeCurrent_PrevContext 1379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org && read == MakeCurrent_PrevReadable) { 1380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org readBuffer = MakeCurrent_PrevReadBuffer; 1381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 1383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org readBuffer = XMesaFindBuffer( dpy, read ); 1384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!readBuffer) { 1386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* drawable must be a new window! */ 1387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org readBuffer = XMesaCreateWindowBuffer( xmctx->xm_visual, read ); 1388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!readBuffer) { 1389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Out of memory, or context/drawable depth mismatch */ 1390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return False; 1391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevContext = ctx; 1395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevDrawable = draw; 1396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevReadable = read; 1397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevDrawBuffer = drawBuffer; 1398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevReadBuffer = readBuffer; 1399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Now make current! */ 1401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (XMesaMakeCurrent2(xmctx, drawBuffer, readBuffer)) { 1402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ((__GLXcontext *) ctx)->currentDpy = dpy; 1403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ((__GLXcontext *) ctx)->currentDrawable = draw; 1404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ((__GLXcontext *) ctx)->currentReadable = read; 1405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return True; 1406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 1408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return False; 1409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (!ctx && !draw && !read) { 1412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* release current context w/out assigning new one. */ 1413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaMakeCurrent( NULL, NULL ); 1414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevContext = 0; 1415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevDrawable = 0; 1416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevReadable = 0; 1417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevDrawBuffer = 0; 1418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevReadBuffer = 0; 1419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return True; 1420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 1422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The args must either all be non-zero or all zero. 1423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is an error. 1424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return False; 1426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic Bool 1431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXMakeCurrent( Display *dpy, GLXDrawable drawable, GLXContext ctx ) 1432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return Fake_glXMakeContextCurrent( dpy, drawable, drawable, ctx ); 1434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXPixmap 1438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXCreateGLXPixmap( Display *dpy, XVisualInfo *visinfo, Pixmap pixmap ) 1439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual v; 1441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b; 1442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v = find_glx_visual( dpy, visinfo ); 1444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!v) { 1445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v = create_glx_visual( dpy, visinfo ); 1446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!v) { 1447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* unusable visual */ 1448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org b = XMesaCreatePixmapBuffer( v, pixmap, 0 ); 1453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!b) { 1454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return b->frontxrb->pixmap; 1457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_MESA_pixmap_colormap ***/ 1461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXPixmap 1463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXCreateGLXPixmapMESA( Display *dpy, XVisualInfo *visinfo, 1464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Pixmap pixmap, Colormap cmap ) 1465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual v; 1467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b; 1468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v = find_glx_visual( dpy, visinfo ); 1470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!v) { 1471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v = create_glx_visual( dpy, visinfo ); 1472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!v) { 1473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* unusable visual */ 1474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org b = XMesaCreatePixmapBuffer( v, pixmap, cmap ); 1479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!b) { 1480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return b->frontxrb->pixmap; 1483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXDestroyGLXPixmap( Display *dpy, GLXPixmap pixmap ) 1488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b = XMesaFindBuffer(dpy, pixmap); 1490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (b) { 1491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaDestroyBuffer(b); 1492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (_mesa_getenv("MESA_DEBUG")) { 1494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_warning(NULL, "Mesa: glXDestroyGLXPixmap: invalid pixmap\n"); 1495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXCopyContext( Display *dpy, GLXContext src, GLXContext dst, 1501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long mask ) 1502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct fake_glx_context *fakeSrc = (struct fake_glx_context *) src; 1504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct fake_glx_context *fakeDst = (struct fake_glx_context *) dst; 1505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xm_src = fakeSrc->xmesaContext; 1506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xm_dst = fakeDst->xmesaContext; 1507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 1508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (MakeCurrent_PrevContext == src) { 1509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_Flush(); 1510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_copy_context( &(xm_src->mesa), &(xm_dst->mesa), (GLuint) mask ); 1512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic Bool 1516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXQueryExtension( Display *dpy, int *errorBase, int *eventBase ) 1517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int op, ev, err; 1519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Mesa's GLX isn't really an X extension but we try to act like one. */ 1520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!XQueryExtension(dpy, GLX_EXTENSION_NAME, &op, &ev, &err)) 1521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ev = err = 0; 1522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (errorBase) 1523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *errorBase = err; 1524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (eventBase) 1525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *eventBase = ev; 1526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return True; /* we're faking GLX so always return success */ 1527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern void _kw_ungrab_all( Display *dpy ); 1531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid _kw_ungrab_all( Display *dpy ) 1532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XUngrabPointer( dpy, CurrentTime ); 1534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XUngrabKeyboard( dpy, CurrentTime ); 1535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXDestroyContext( Display *dpy, GLXContext ctx ) 1540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct fake_glx_context *glxCtx = (struct fake_glx_context *) ctx; 1542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 1543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevContext = 0; 1544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevDrawable = 0; 1545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevReadable = 0; 1546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevDrawBuffer = 0; 1547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MakeCurrent_PrevReadBuffer = 0; 1548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaDestroyContext( glxCtx->xmesaContext ); 1549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaGarbageCollect(dpy); 1550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org free(glxCtx); 1551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic Bool 1555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXIsDirect( Display *dpy, GLXContext ctx ) 1556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct fake_glx_context *glxCtx = (struct fake_glx_context *) ctx; 1558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 1559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return glxCtx->xmesaContext->direct; 1560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXSwapBuffers( Display *dpy, GLXDrawable drawable ) 1566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer buffer = XMesaFindBuffer( dpy, drawable ); 1568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (buffer) { 1570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaSwapBuffers(buffer); 1571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (_mesa_getenv("MESA_DEBUG")) { 1573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_warning(NULL, "glXSwapBuffers: invalid drawable 0x%x\n", 1574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (int) drawable); 1575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_MESA_copy_sub_buffer ***/ 1581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXCopySubBufferMESA( Display *dpy, GLXDrawable drawable, 1584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int x, int y, int width, int height ) 1585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer buffer = XMesaFindBuffer( dpy, drawable ); 1587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (buffer) { 1588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaCopySubBuffer(buffer, x, y, width, height); 1589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (_mesa_getenv("MESA_DEBUG")) { 1591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _mesa_warning(NULL, "Mesa: glXCopySubBufferMESA: invalid drawable\n"); 1592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic Bool 1597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXQueryVersion( Display *dpy, int *maj, int *min ) 1598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 1600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Return GLX version, not Mesa version */ 1601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(CLIENT_MAJOR_VERSION == SERVER_MAJOR_VERSION); 1602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *maj = CLIENT_MAJOR_VERSION; 1603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *min = MIN2( CLIENT_MINOR_VERSION, SERVER_MINOR_VERSION ); 1604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return True; 1605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 1609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Query the GLX attributes of the given XVisualInfo. 1610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 1612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgget_config( XMesaVisual xmvis, int attrib, int *value, GLboolean fbconfig ) 1613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT(xmvis); 1615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch(attrib) { 1616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_USE_GL: 1617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fbconfig) 1618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = (int) True; 1620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BUFFER_SIZE: 1622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->visinfo->depth; 1623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_LEVEL: 1625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.level; 1626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RGBA: 1628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (fbconfig) 1629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmvis->mesa_visual.rgbMode) { 1631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = True; 1632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 1634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = False; 1635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DOUBLEBUFFER: 1638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = (int) xmvis->mesa_visual.doubleBufferMode; 1639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_STEREO: 1641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = (int) xmvis->mesa_visual.stereoMode; 1642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_AUX_BUFFERS: 1644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.numAuxBuffers; 1645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RED_SIZE: 1647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.redBits; 1648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_GREEN_SIZE: 1650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.greenBits; 1651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BLUE_SIZE: 1653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.blueBits; 1654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ALPHA_SIZE: 1656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.alphaBits; 1657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DEPTH_SIZE: 1659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.depthBits; 1660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_STENCIL_SIZE: 1662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.stencilBits; 1663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_RED_SIZE: 1665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.accumRedBits; 1666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_GREEN_SIZE: 1668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.accumGreenBits; 1669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_BLUE_SIZE: 1671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.accumBlueBits; 1672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_ALPHA_SIZE: 1674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.accumAlphaBits; 1675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 1678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_EXT_visual_info extension 1679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_X_VISUAL_TYPE_EXT: 1681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (xmvis->visinfo->CLASS) { 1682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case StaticGray: *value = GLX_STATIC_GRAY_EXT; return 0; 1683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GrayScale: *value = GLX_GRAY_SCALE_EXT; return 0; 1684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case StaticColor: *value = GLX_STATIC_GRAY_EXT; return 0; 1685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case PseudoColor: *value = GLX_PSEUDO_COLOR_EXT; return 0; 1686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case TrueColor: *value = GLX_TRUE_COLOR_EXT; return 0; 1687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case DirectColor: *value = GLX_DIRECT_COLOR_EXT; return 0; 1688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_TYPE_EXT: 1691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmvis->mesa_visual.level==0) { 1692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* normal planes */ 1693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = GLX_NONE_EXT; 1694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (xmvis->mesa_visual.level>0) { 1696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* overlay */ 1697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmvis->mesa_visual.rgbMode) { 1698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = GLX_TRANSPARENT_RGB_EXT; 1699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 1701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = GLX_TRANSPARENT_INDEX_EXT; 1702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (xmvis->mesa_visual.level<0) { 1705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* underlay */ 1706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = GLX_NONE_EXT; 1707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_INDEX_VALUE_EXT: 1710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 1711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int pixel = transparent_pixel( xmvis ); 1712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (pixel>=0) { 1713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = pixel; 1714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* else undefined */ 1716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_RED_VALUE_EXT: 1719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* undefined */ 1720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_GREEN_VALUE_EXT: 1722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* undefined */ 1723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_BLUE_VALUE_EXT: 1725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* undefined */ 1726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_ALPHA_VALUE_EXT: 1728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* undefined */ 1729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 1732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_EXT_visual_info extension 1733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VISUAL_CAVEAT_EXT: 1735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* test for zero, just in case */ 1736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmvis->mesa_visual.visualRating > 0) 1737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.visualRating; 1738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 1739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = GLX_NONE_EXT; 1740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 1743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_multisample 1744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_SAMPLE_BUFFERS_ARB: 1746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = 0; 1747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_SAMPLES_ARB: 1749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = 0; 1750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 1753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * For FBConfigs: 1754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_SCREEN_EXT: 1756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbconfig) 1757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->visinfo->screen; 1759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DRAWABLE_TYPE: /*SGIX too */ 1761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbconfig) 1762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = GLX_WINDOW_BIT | GLX_PIXMAP_BIT | GLX_PBUFFER_BIT; 1764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RENDER_TYPE_SGIX: 1766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbconfig) 1767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmvis->mesa_visual.rgbMode) 1769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = GLX_RGBA_BIT; 1770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 1771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = GLX_COLOR_INDEX_BIT; 1772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_X_RENDERABLE_SGIX: 1774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbconfig) 1775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = True; /* XXX really? */ 1777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_FBCONFIG_ID_SGIX: 1779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbconfig) 1780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->visinfo->visualid; 1782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MAX_PBUFFER_WIDTH: 1784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbconfig) 1785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* XXX or MAX_WIDTH? */ 1787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = DisplayWidth(xmvis->display, xmvis->visinfo->screen); 1788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MAX_PBUFFER_HEIGHT: 1790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbconfig) 1791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = DisplayHeight(xmvis->display, xmvis->visinfo->screen); 1793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MAX_PBUFFER_PIXELS: 1795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbconfig) 1796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = DisplayWidth(xmvis->display, xmvis->visinfo->screen) * 1798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DisplayHeight(xmvis->display, xmvis->visinfo->screen); 1799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VISUAL_ID: 1801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!fbconfig) 1802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->visinfo->visualid; 1804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef GLX_EXT_texture_from_pixmap 1807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_TEXTURE_RGB_EXT: 1808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = True; /*XXX*/ 1809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_TEXTURE_RGBA_EXT: 1811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* XXX review */ 1812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmvis->mesa_visual.alphaBits > 0 ? True : False; 1813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_MIPMAP_TEXTURE_EXT: 1815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = True; /*XXX*/ 1816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_TEXTURE_TARGETS_EXT: 1818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = (GLX_TEXTURE_1D_BIT_EXT | 1819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLX_TEXTURE_2D_BIT_EXT | 1820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLX_TEXTURE_RECTANGLE_BIT_EXT); /*XXX*/ 1821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_Y_INVERTED_EXT: 1823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = True; /*XXX*/ 1824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 1825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return Success; 1831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 1835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXGetConfig( Display *dpy, XVisualInfo *visinfo, 1836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int attrib, int *value ) 1837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis; 1839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int k; 1840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!dpy || !visinfo) 1841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 1842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis = find_glx_visual( dpy, visinfo ); 1844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xmvis) { 1845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* this visual wasn't obtained with glXChooseVisual */ 1846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis = create_glx_visual( dpy, visinfo ); 1847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xmvis) { 1848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* this visual can't be used for GL rendering */ 1849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (attrib==GLX_USE_GL) { 1850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = (int) False; 1851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 1854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_VISUAL; 1855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org k = get_config(xmvis, attrib, value, GL_FALSE); 1860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return k; 1861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXWaitGL( void ) 1866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesa = XMesaGetCurrentContext(); 1868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaFlush( xmesa ); 1869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXWaitX( void ) 1875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmesa = XMesaGetCurrentContext(); 1877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaFlush( xmesa ); 1878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const char * 1882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgget_extensions( void ) 1883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return EXTENSIONS + 23; /* skip "GLX_MESA_set_3dfx_mode" */ 1885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* GLX 1.1 and later */ 1890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const char * 1891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXQueryExtensionsString( Display *dpy, int screen ) 1892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 1894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) screen; 1895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return get_extensions(); 1896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* GLX 1.1 and later */ 1901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const char * 1902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXQueryServerString( Display *dpy, int screen, int name ) 1903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static char version[1000]; 1905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sprintf(version, "%d.%d %s", 1906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SERVER_MAJOR_VERSION, SERVER_MINOR_VERSION, MESA_GLX_VERSION); 1907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 1909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) screen; 1910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (name) { 1912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_EXTENSIONS: 1913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return get_extensions(); 1914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VENDOR: 1915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return VENDOR; 1916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VERSION: 1917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return version; 1918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* GLX 1.1 and later */ 1926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const char * 1927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXGetClientString( Display *dpy, int name ) 1928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static char version[1000]; 1930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sprintf(version, "%d.%d %s", CLIENT_MAJOR_VERSION, 1931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CLIENT_MINOR_VERSION, MESA_GLX_VERSION); 1932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 1934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (name) { 1936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_EXTENSIONS: 1937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return get_extensions(); 1938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VENDOR: 1939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return VENDOR; 1940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VERSION: 1941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return version; 1942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 1943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 1950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX 1.3 and later 1951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 1955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXGetFBConfigAttrib( Display *dpy, GLXFBConfig config, 1956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int attribute, int *value ) 1957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual v = (XMesaVisual) config; 1959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 1960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) config; 1961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!dpy || !config || !value) 1963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return -1; 1964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return get_config(v, attribute, value, GL_TRUE); 1966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXFBConfig * 1970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXGetFBConfigs( Display *dpy, int screen, int *nelements ) 1971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVisualInfo *visuals, visTemplate; 1973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const long visMask = VisualScreenMask; 1974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int i; 1975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Get list of all X visuals */ 1977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org visTemplate.screen = screen; 1978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org visuals = XGetVisualInfo(dpy, visMask, &visTemplate, nelements); 1979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (*nelements > 0) { 1980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual *results; 1981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org results = (XMesaVisual *) malloc(*nelements * sizeof(XMesaVisual)); 1982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!results) { 1983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *nelements = 0; 1984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < *nelements; i++) { 1987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org results[i] = create_glx_visual(dpy, visuals + i); 1988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (GLXFBConfig *) results; 1990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 1992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXFBConfig * 1996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXChooseFBConfig( Display *dpy, int screen, 1997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *attribList, int *nitems ) 1998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis; 2000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* register ourselves as an extension on this display */ 2002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org register_with_display(dpy); 2003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!attribList || !attribList[0]) { 2005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* return list of all configs (per GLX_SGIX_fbconfig spec) */ 2006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return Fake_glXGetFBConfigs(dpy, screen, nitems); 2007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis = choose_visual(dpy, screen, attribList, GL_TRUE); 2010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmvis) { 2011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLXFBConfig *config = (GLXFBConfig *) malloc(sizeof(XMesaVisual)); 2012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!config) { 2013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *nitems = 0; 2014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 2015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *nitems = 1; 2017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org config[0] = (GLXFBConfig) xmvis; 2018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (GLXFBConfig *) config; 2019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 2021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *nitems = 0; 2022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 2023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XVisualInfo * 2028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXGetVisualFromFBConfig( Display *dpy, GLXFBConfig config ) 2029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (dpy && config) { 2031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = (XMesaVisual) config; 2032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if 0 2033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return xmvis->vishandle; 2034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#else 2035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* create a new vishandle - the cached one may be stale */ 2036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis->vishandle = (XVisualInfo *) malloc(sizeof(XVisualInfo)); 2037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmvis->vishandle) { 2038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memcpy(xmvis->vishandle, xmvis->visinfo, sizeof(XVisualInfo)); 2039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return xmvis->vishandle; 2041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 2042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 2044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 2045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXWindow 2050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXCreateWindow( Display *dpy, GLXFBConfig config, Window win, 2051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *attribList ) 2052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = (XMesaVisual) config; 2054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf; 2055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xmvis) 2056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmbuf = XMesaCreateWindowBuffer(xmvis, win); 2059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xmbuf) 2060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) attribList; /* Ignored in GLX 1.3 */ 2064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return win; /* A hack for now */ 2066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 2070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXDestroyWindow( Display *dpy, GLXWindow window ) 2071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b = XMesaFindBuffer(dpy, (XMesaDrawable) window); 2073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (b) 2074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaDestroyBuffer(b); 2075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* don't destroy X window */ 2076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* XXX untested */ 2080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXPixmap 2081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXCreatePixmap( Display *dpy, GLXFBConfig config, Pixmap pixmap, 2082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *attribList ) 2083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual v = (XMesaVisual) config; 2085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b; 2086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *attr; 2087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int target = 0, format = 0, mipmap = 0; 2088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int value; 2089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!dpy || !config || !pixmap) 2091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (attr = attribList; attr && *attr; attr++) { 2094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (*attr) { 2095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_FORMAT_EXT: 2096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attr++; 2097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (*attr) { 2098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_FORMAT_NONE_EXT: 2099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_FORMAT_RGB_EXT: 2100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_FORMAT_RGBA_EXT: 2101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org format = *attr; 2102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 2104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* error */ 2105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_TARGET_EXT: 2109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attr++; 2110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (*attr) { 2111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_1D_EXT: 2112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_2D_EXT: 2113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_RECTANGLE_EXT: 2114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org target = *attr; 2115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 2117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* error */ 2118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MIPMAP_TEXTURE_EXT: 2122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attr++; 2123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (*attr) 2124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mipmap = 1; 2125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 2127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* error */ 2128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format == GLX_TEXTURE_FORMAT_RGB_EXT) { 2133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (get_config(v, GLX_BIND_TO_TEXTURE_RGB_EXT, 2134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &value, GL_TRUE) != Success 2135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org || !value) { 2136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; /* error! */ 2137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (format == GLX_TEXTURE_FORMAT_RGBA_EXT) { 2140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (get_config(v, GLX_BIND_TO_TEXTURE_RGBA_EXT, 2141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &value, GL_TRUE) != Success 2142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org || !value) { 2143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; /* error! */ 2144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (mipmap) { 2147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (get_config(v, GLX_BIND_TO_MIPMAP_TEXTURE_EXT, 2148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &value, GL_TRUE) != Success 2149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org || !value) { 2150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; /* error! */ 2151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (target == GLX_TEXTURE_1D_EXT) { 2154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (get_config(v, GLX_BIND_TO_TEXTURE_TARGETS_EXT, 2155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &value, GL_TRUE) != Success 2156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org || (value & GLX_TEXTURE_1D_BIT_EXT) == 0) { 2157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; /* error! */ 2158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else if (target == GLX_TEXTURE_2D_EXT) { 2161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (get_config(v, GLX_BIND_TO_TEXTURE_TARGETS_EXT, 2162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &value, GL_TRUE) != Success 2163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org || (value & GLX_TEXTURE_2D_BIT_EXT) == 0) { 2164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; /* error! */ 2165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (target == GLX_TEXTURE_RECTANGLE_EXT) { 2168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (get_config(v, GLX_BIND_TO_TEXTURE_TARGETS_EXT, 2169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &value, GL_TRUE) != Success 2170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org || (value & GLX_TEXTURE_RECTANGLE_BIT_EXT) == 0) { 2171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; /* error! */ 2172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (format || target || mipmap) { 2176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* texture from pixmap */ 2177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org b = XMesaCreatePixmapTextureBuffer(v, pixmap, 0, format, target, mipmap); 2178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 2180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org b = XMesaCreatePixmapBuffer( v, pixmap, 0 ); 2181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!b) { 2183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return pixmap; 2187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 2191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXDestroyPixmap( Display *dpy, GLXPixmap pixmap ) 2192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b = XMesaFindBuffer(dpy, (XMesaDrawable)pixmap); 2194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (b) 2195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaDestroyBuffer(b); 2196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* don't destroy X pixmap */ 2197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXPbuffer 2201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXCreatePbuffer( Display *dpy, GLXFBConfig config, 2202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *attribList ) 2203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = (XMesaVisual) config; 2205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf; 2206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *attrib; 2207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int width = 0, height = 0; 2208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean useLargest = GL_FALSE, preserveContents = GL_FALSE; 2209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (attrib = attribList; *attrib; attrib++) { 2213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (*attrib) { 2214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_PBUFFER_WIDTH: 2215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attrib++; 2216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org width = *attrib; 2217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_PBUFFER_HEIGHT: 2219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attrib++; 2220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org height = *attrib; 2221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_PRESERVED_CONTENTS: 2223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attrib++; 2224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org preserveContents = *attrib; 2225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_LARGEST_PBUFFER: 2227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attrib++; 2228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org useLargest = *attrib; 2229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 2231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (width == 0 || height == 0) 2236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (width > SWRAST_MAX_WIDTH || height > SWRAST_MAX_HEIGHT) { 2239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* If allocation would have failed and GLX_LARGEST_PBUFFER is set, 2240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * allocate the largest possible buffer. 2241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (useLargest) { 2243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org width = SWRAST_MAX_WIDTH; 2244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org height = SWRAST_MAX_HEIGHT; 2245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmbuf = XMesaCreatePBuffer( xmvis, 0, width, height); 2249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* A GLXPbuffer handle must be an X Drawable because that's what 2250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glXMakeCurrent takes. 2251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmbuf) { 2253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmbuf->largestPbuffer = useLargest; 2254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmbuf->preservedContents = preserveContents; 2255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (GLXPbuffer) xmbuf->frontxrb->pixmap; 2256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 2258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 2264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXDestroyPbuffer( Display *dpy, GLXPbuffer pbuf ) 2265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b = XMesaFindBuffer(dpy, pbuf); 2267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (b) { 2268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaDestroyBuffer(b); 2269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 2274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXQueryDrawable( Display *dpy, GLXDrawable draw, int attribute, 2275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int *value ) 2276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf = XMesaFindBuffer(dpy, draw); 2278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xmbuf) 2279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 2280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* make sure buffer's dimensions are up to date */ 2282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmesa_check_and_update_buffer_size(NULL, xmbuf); 2283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (attribute) { 2285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_WIDTH: 2286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmbuf->mesa_buffer.Width; 2287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_HEIGHT: 2289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmbuf->mesa_buffer.Height; 2290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_PRESERVED_CONTENTS: 2292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmbuf->preservedContents; 2293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_LARGEST_PBUFFER: 2295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmbuf->largestPbuffer; 2296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_FBCONFIG_ID: 2298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmbuf->xm_visual->visinfo->visualid; 2299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 2300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef GLX_EXT_texture_from_pixmap 2301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_FORMAT_EXT: 2302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmbuf->TextureFormat; 2303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TEXTURE_TARGET_EXT: 2305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmbuf->TextureTarget; 2306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MIPMAP_TEXTURE_EXT: 2308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmbuf->TextureMipmap; 2309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 2311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 2313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; /* raise BadValue error */ 2314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXContext 2319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXCreateNewContext( Display *dpy, GLXFBConfig config, 2320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int renderType, GLXContext shareList, Bool direct ) 2321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct fake_glx_context *glxCtx; 2323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct fake_glx_context *shareCtx = (struct fake_glx_context *) shareList; 2324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = (XMesaVisual) config; 2325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!dpy || !config || 2327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (renderType != GLX_RGBA_TYPE && renderType != GLX_COLOR_INDEX_TYPE)) 2328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glxCtx = CALLOC_STRUCT(fake_glx_context); 2331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!glxCtx) 2332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* deallocate unused windows/buffers */ 2335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaGarbageCollect(dpy); 2336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glxCtx->xmesaContext = XMesaCreateContext(xmvis, 2338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org shareCtx ? shareCtx->xmesaContext : NULL); 2339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!glxCtx->xmesaContext) { 2340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org free(glxCtx); 2341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 2342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_glx_context(glxCtx, dpy); 2345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (GLXContext) glxCtx; 2347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 2351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXQueryContext( Display *dpy, GLXContext ctx, int attribute, int *value ) 2352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct fake_glx_context *glxCtx = (struct fake_glx_context *) ctx; 2354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaContext xmctx = glxCtx->xmesaContext; 2355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) ctx; 2358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (attribute) { 2360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_FBCONFIG_ID: 2361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmctx->xm_visual->visinfo->visualid; 2362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RENDER_TYPE: 2364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = GLX_RGBA_TYPE; 2365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_SCREEN: 2367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = 0; 2368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return Success; 2369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 2370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 2371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 2377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXSelectEvent( Display *dpy, GLXDrawable drawable, unsigned long mask ) 2378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf = XMesaFindBuffer(dpy, drawable); 2380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmbuf) 2381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmbuf->selectedEvents = mask; 2382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 2386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXGetSelectedEvent( Display *dpy, GLXDrawable drawable, 2387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned long *mask ) 2388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf = XMesaFindBuffer(dpy, drawable); 2390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmbuf) 2391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *mask = xmbuf->selectedEvents; 2392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 2393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *mask = 0; 2394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGI_swap_control ***/ 2399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 2401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXSwapIntervalSGI(int interval) 2402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) interval; 2404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGI_video_sync ***/ 2410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic unsigned int FrameCounter = 0; 2412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 2414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXGetVideoSyncSGI(unsigned int *count) 2415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* this is a bogus implementation */ 2417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *count = FrameCounter++; 2418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 2422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count) 2423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (divisor <= 0 || remainder < 0) 2425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_VALUE; 2426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* this is a bogus implementation */ 2427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FrameCounter++; 2428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org while (FrameCounter % divisor != remainder) 2429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FrameCounter++; 2430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *count = FrameCounter; 2431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGI_make_current_read ***/ 2437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic Bool 2439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXMakeCurrentReadSGI(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx) 2440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return Fake_glXMakeContextCurrent( dpy, draw, read, ctx ); 2442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* not used 2445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXDrawable 2446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXGetCurrentReadDrawableSGI(void) 2447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org*/ 2451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGIX_video_source ***/ 2454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if defined(_VL_H) 2455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXVideoSourceSGIX 2457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXCreateGLXVideoSourceSGIX(Display *dpy, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode) 2458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) screen; 2461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) server; 2462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) path; 2463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) nodeClass; 2464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) drainNode; 2465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 2469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXDestroyGLXVideoSourceSGIX(Display *dpy, GLXVideoSourceSGIX src) 2470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) src; 2473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 2476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_EXT_import_context ***/ 2479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 2481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXFreeContextEXT(Display *dpy, GLXContext context) 2482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) context; 2485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXContextID 2488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXGetContextIDEXT(const GLXContext context) 2489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) context; 2491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXContext 2495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXImportContextEXT(Display *dpy, GLXContextID contextID) 2496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) contextID; 2499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 2503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXQueryContextInfoEXT(Display *dpy, GLXContext context, int attribute, int *value) 2504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) context; 2507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) attribute; 2508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) value; 2509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGIX_fbconfig ***/ 2515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 2517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXGetFBConfigAttribSGIX(Display *dpy, GLXFBConfigSGIX config, int attribute, int *value) 2518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return Fake_glXGetFBConfigAttrib(dpy, config, attribute, value); 2520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXFBConfigSGIX * 2523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXChooseFBConfigSGIX(Display *dpy, int screen, int *attrib_list, int *nelements) 2524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (GLXFBConfig *) Fake_glXChooseFBConfig(dpy, screen, attrib_list, nelements); 2526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXPixmap 2530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXCreateGLXPixmapWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap) 2531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = (XMesaVisual) config; 2533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf = XMesaCreatePixmapBuffer(xmvis, pixmap, 0); 2534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return xmbuf->frontxrb->pixmap; /* need to return an X ID */ 2535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXContext 2539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXCreateContextWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct) 2540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = (XMesaVisual) config; 2542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct fake_glx_context *glxCtx; 2543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct fake_glx_context *shareCtx = (struct fake_glx_context *) share_list; 2544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glxCtx = CALLOC_STRUCT(fake_glx_context); 2546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!glxCtx) 2547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* deallocate unused windows/buffers */ 2550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaGarbageCollect(dpy); 2551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glxCtx->xmesaContext = XMesaCreateContext(xmvis, 2553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org shareCtx ? shareCtx->xmesaContext : NULL); 2554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!glxCtx->xmesaContext) { 2555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org free(glxCtx); 2556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 2557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org init_glx_context(glxCtx, dpy); 2560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (GLXContext) glxCtx; 2562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XVisualInfo * 2566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXGetVisualFromFBConfigSGIX(Display *dpy, GLXFBConfigSGIX config) 2567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return Fake_glXGetVisualFromFBConfig(dpy, config); 2569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXFBConfigSGIX 2573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXGetFBConfigFromVisualSGIX(Display *dpy, XVisualInfo *vis) 2574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = find_glx_visual(dpy, vis); 2576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xmvis) { 2577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* This visual wasn't found with glXChooseVisual() */ 2578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmvis = create_glx_visual(dpy, vis); 2579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (GLXFBConfigSGIX) xmvis; 2582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGIX_pbuffer ***/ 2587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLXPbufferSGIX 2589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXCreateGLXPbufferSGIX(Display *dpy, GLXFBConfigSGIX config, 2590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int width, unsigned int height, 2591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int *attribList) 2592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaVisual xmvis = (XMesaVisual) config; 2594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf; 2595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *attrib; 2596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLboolean useLargest = GL_FALSE, preserveContents = GL_FALSE; 2597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (attrib = attribList; attrib && *attrib; attrib++) { 2601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (*attrib) { 2602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_PRESERVED_CONTENTS_SGIX: 2603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attrib++; 2604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org preserveContents = *attrib; /* ignored */ 2605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_LARGEST_PBUFFER_SGIX: 2607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org attrib++; 2608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org useLargest = *attrib; /* ignored */ 2609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 2611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* not used at this time */ 2616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) useLargest; 2617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) preserveContents; 2618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmbuf = XMesaCreatePBuffer( xmvis, 0, width, height); 2620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* A GLXPbuffer handle must be an X Drawable because that's what 2621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glXMakeCurrent takes. 2622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (GLXPbuffer) xmbuf->frontxrb->pixmap; 2624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 2628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXDestroyGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf) 2629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf = XMesaFindBuffer(dpy, pbuf); 2631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmbuf) { 2632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaDestroyBuffer(xmbuf); 2633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 2638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXQueryGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value) 2639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const XMesaBuffer xmbuf = XMesaFindBuffer(dpy, pbuf); 2641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xmbuf) { 2643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Generate GLXBadPbufferSGIX for bad pbuffer */ 2644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (attribute) { 2648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_PRESERVED_CONTENTS_SGIX: 2649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmbuf->preservedContents; 2650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_LARGEST_PBUFFER_SGIX: 2652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmbuf->largestPbuffer; 2653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_WIDTH_SGIX: 2655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmbuf->mesa_buffer.Width; 2656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_HEIGHT_SGIX: 2658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = xmbuf->mesa_buffer.Height; 2659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_EVENT_MASK_SGIX: 2661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = 0; /* XXX might be wrong */ 2662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 2663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 2664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value = 0; 2665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 2671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXSelectEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long mask) 2672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf = XMesaFindBuffer(dpy, drawable); 2674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmbuf) { 2675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Note: we'll never generate clobber events */ 2676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xmbuf->selectedEvents = mask; 2677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 2682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXGetSelectedEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long *mask) 2683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer xmbuf = XMesaFindBuffer(dpy, drawable); 2685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (xmbuf) { 2686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *mask = xmbuf->selectedEvents; 2687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else { 2689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *mask = 0; 2690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGI_cushion ***/ 2696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 2698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXCushionSGI(Display *dpy, Window win, float cushion) 2699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) win; 2702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) cushion; 2703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGIX_video_resize ***/ 2708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 2710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXBindChannelToWindowSGIX(Display *dpy, int screen, int channel , Window window) 2711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) screen; 2714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) channel; 2715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) window; 2716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 2720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXChannelRectSGIX(Display *dpy, int screen, int channel, int x, int y, int w, int h) 2721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) screen; 2724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) channel; 2725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) x; 2726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) y; 2727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) w; 2728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) h; 2729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 2733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXQueryChannelRectSGIX(Display *dpy, int screen, int channel, int *x, int *y, int *w, int *h) 2734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) screen; 2737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) channel; 2738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) x; 2739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) y; 2740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) w; 2741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) h; 2742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 2746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXQueryChannelDeltasSGIX(Display *dpy, int screen, int channel, int *dx, int *dy, int *dw, int *dh) 2747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) screen; 2750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) channel; 2751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dx; 2752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dy; 2753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dw; 2754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dh; 2755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int 2759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXChannelRectSyncSGIX(Display *dpy, int screen, int channel, GLenum synctype) 2760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) screen; 2763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) channel; 2764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) synctype; 2765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGIX_dmbuffer **/ 2771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if defined(_DM_BUFFER_H_) 2773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic Bool 2774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXAssociateDMPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer) 2775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) pbuffer; 2778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) params; 2779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dmbuffer; 2780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return False; 2781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 2783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGIX_swap_group ***/ 2786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 2788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXJoinSwapGroupSGIX(Display *dpy, GLXDrawable drawable, GLXDrawable member) 2789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) drawable; 2792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) member; 2793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGIX_swap_barrier ***/ 2798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 2800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXBindSwapBarrierSGIX(Display *dpy, GLXDrawable drawable, int barrier) 2801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) drawable; 2804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) barrier; 2805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic Bool 2808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXQueryMaxSwapBarriersSGIX(Display *dpy, int screen, int *max) 2809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) screen; 2812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) max; 2813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return False; 2814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SUN_get_transparent_index ***/ 2819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic Status 2821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXGetTransparentIndexSUN(Display *dpy, Window overlay, Window underlay, long *pTransparent) 2822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) dpy; 2824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) overlay; 2825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) underlay; 2826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) pTransparent; 2827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 2828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_MESA_release_buffers ***/ 2833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Release the depth, stencil, accum buffers attached to a GLXDrawable 2836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * (a window or pixmap) prior to destroying the GLXDrawable. 2837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic Bool 2839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXReleaseBuffersMESA( Display *dpy, GLXDrawable d ) 2840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b = XMesaFindBuffer(dpy, d); 2842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (b) { 2843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaDestroyBuffer(b); 2844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return True; 2845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return False; 2847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_MESA_set_3dfx_mode ***/ 2852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic Bool 2854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXSet3DfxModeMESA( int mode ) 2855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return XMesaSetFXmode( mode ); 2857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_NV_vertex_array range ***/ 2862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void * 2863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXAllocateMemoryNV( GLsizei size, 2864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat readFrequency, 2865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat writeFrequency, 2866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat priority ) 2867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) size; 2869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) readFrequency; 2870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) writeFrequency; 2871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) priority; 2872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 2873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 2877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXFreeMemoryNV( GLvoid *pointer ) 2878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) pointer; 2880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_MESA_agp_offset ***/ 2884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic GLuint 2886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXGetAGPOffsetMESA( const GLvoid *pointer ) 2887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) pointer; 2889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ~0; 2890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_EXT_texture_from_pixmap ***/ 2894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 2896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXBindTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer, 2897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *attrib_list) 2898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b = XMesaFindBuffer(dpy, drawable); 2900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (b) 2901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBindTexImage(dpy, b, buffer, attrib_list); 2902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 2905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgFake_glXReleaseTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer) 2906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaBuffer b = XMesaFindBuffer(dpy, drawable); 2908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (b) 2909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XMesaReleaseTexImage(dpy, b, buffer); 2910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 2911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* silence warning */ 2914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern struct _glxapi_table *_mesa_GetGLXDispatchTable(void); 2915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 2918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Create a new GLX API dispatch table with its function pointers 2919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * initialized to point to Mesa's "fake" GLX API functions. 2920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Note: there's a similar function (_real_GetGLXDispatchTable) that 2921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * returns a new dispatch table with all pointers initalized to point 2922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to "real" GLX functions (which understand GLX wire protocol, etc). 2923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 2924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct _glxapi_table * 2925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_mesa_GetGLXDispatchTable(void) 2926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 2927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org static struct _glxapi_table glx; 2928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* be sure our dispatch table size <= libGL's table */ 2930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 2931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint size = sizeof(struct _glxapi_table) / sizeof(void *); 2932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) size; 2933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(_glxapi_get_dispatch_table_size() >= size); 2934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 2935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* initialize the whole table to no-ops */ 2937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org _glxapi_set_no_op_table(&glx); 2938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* now initialize the table with the functions I implement */ 2940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.ChooseVisual = Fake_glXChooseVisual; 2941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.CopyContext = Fake_glXCopyContext; 2942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.CreateContext = Fake_glXCreateContext; 2943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.CreateGLXPixmap = Fake_glXCreateGLXPixmap; 2944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.DestroyContext = Fake_glXDestroyContext; 2945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.DestroyGLXPixmap = Fake_glXDestroyGLXPixmap; 2946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.GetConfig = Fake_glXGetConfig; 2947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*glx.GetCurrentContext = Fake_glXGetCurrentContext;*/ 2948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*glx.GetCurrentDrawable = Fake_glXGetCurrentDrawable;*/ 2949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.IsDirect = Fake_glXIsDirect; 2950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.MakeCurrent = Fake_glXMakeCurrent; 2951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.QueryExtension = Fake_glXQueryExtension; 2952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.QueryVersion = Fake_glXQueryVersion; 2953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.SwapBuffers = Fake_glXSwapBuffers; 2954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.UseXFont = Fake_glXUseXFont; 2955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.WaitGL = Fake_glXWaitGL; 2956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.WaitX = Fake_glXWaitX; 2957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_VERSION_1_1 ***/ 2959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.GetClientString = Fake_glXGetClientString; 2960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.QueryExtensionsString = Fake_glXQueryExtensionsString; 2961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.QueryServerString = Fake_glXQueryServerString; 2962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_VERSION_1_2 ***/ 2964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*glx.GetCurrentDisplay = Fake_glXGetCurrentDisplay;*/ 2965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_VERSION_1_3 ***/ 2967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.ChooseFBConfig = Fake_glXChooseFBConfig; 2968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.CreateNewContext = Fake_glXCreateNewContext; 2969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.CreatePbuffer = Fake_glXCreatePbuffer; 2970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.CreatePixmap = Fake_glXCreatePixmap; 2971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.CreateWindow = Fake_glXCreateWindow; 2972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.DestroyPbuffer = Fake_glXDestroyPbuffer; 2973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.DestroyPixmap = Fake_glXDestroyPixmap; 2974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.DestroyWindow = Fake_glXDestroyWindow; 2975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*glx.GetCurrentReadDrawable = Fake_glXGetCurrentReadDrawable;*/ 2976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.GetFBConfigAttrib = Fake_glXGetFBConfigAttrib; 2977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.GetFBConfigs = Fake_glXGetFBConfigs; 2978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.GetSelectedEvent = Fake_glXGetSelectedEvent; 2979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.GetVisualFromFBConfig = Fake_glXGetVisualFromFBConfig; 2980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.MakeContextCurrent = Fake_glXMakeContextCurrent; 2981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.QueryContext = Fake_glXQueryContext; 2982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.QueryDrawable = Fake_glXQueryDrawable; 2983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.SelectEvent = Fake_glXSelectEvent; 2984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_SGI_swap_control ***/ 2986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.SwapIntervalSGI = Fake_glXSwapIntervalSGI; 2987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_SGI_video_sync ***/ 2989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.GetVideoSyncSGI = Fake_glXGetVideoSyncSGI; 2990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.WaitVideoSyncSGI = Fake_glXWaitVideoSyncSGI; 2991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_SGI_make_current_read ***/ 2993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.MakeCurrentReadSGI = Fake_glXMakeCurrentReadSGI; 2994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*glx.GetCurrentReadDrawableSGI = Fake_glXGetCurrentReadDrawableSGI;*/ 2995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*** GLX_SGIX_video_source ***/ 2997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if defined(_VL_H) 2998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.CreateGLXVideoSourceSGIX = Fake_glXCreateGLXVideoSourceSGIX; 2999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.DestroyGLXVideoSourceSGIX = Fake_glXDestroyGLXVideoSourceSGIX; 3000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 3001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_EXT_import_context ***/ 3003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.FreeContextEXT = Fake_glXFreeContextEXT; 3004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.GetContextIDEXT = Fake_glXGetContextIDEXT; 3005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*glx.GetCurrentDisplayEXT = Fake_glXGetCurrentDisplayEXT;*/ 3006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.ImportContextEXT = Fake_glXImportContextEXT; 3007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.QueryContextInfoEXT = Fake_glXQueryContextInfoEXT; 3008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_SGIX_fbconfig ***/ 3010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.GetFBConfigAttribSGIX = Fake_glXGetFBConfigAttribSGIX; 3011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.ChooseFBConfigSGIX = Fake_glXChooseFBConfigSGIX; 3012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.CreateGLXPixmapWithConfigSGIX = Fake_glXCreateGLXPixmapWithConfigSGIX; 3013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.CreateContextWithConfigSGIX = Fake_glXCreateContextWithConfigSGIX; 3014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.GetVisualFromFBConfigSGIX = Fake_glXGetVisualFromFBConfigSGIX; 3015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.GetFBConfigFromVisualSGIX = Fake_glXGetFBConfigFromVisualSGIX; 3016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_SGIX_pbuffer ***/ 3018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.CreateGLXPbufferSGIX = Fake_glXCreateGLXPbufferSGIX; 3019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.DestroyGLXPbufferSGIX = Fake_glXDestroyGLXPbufferSGIX; 3020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.QueryGLXPbufferSGIX = Fake_glXQueryGLXPbufferSGIX; 3021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.SelectEventSGIX = Fake_glXSelectEventSGIX; 3022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.GetSelectedEventSGIX = Fake_glXGetSelectedEventSGIX; 3023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_SGI_cushion ***/ 3025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.CushionSGI = Fake_glXCushionSGI; 3026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_SGIX_video_resize ***/ 3028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.BindChannelToWindowSGIX = Fake_glXBindChannelToWindowSGIX; 3029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.ChannelRectSGIX = Fake_glXChannelRectSGIX; 3030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.QueryChannelRectSGIX = Fake_glXQueryChannelRectSGIX; 3031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.QueryChannelDeltasSGIX = Fake_glXQueryChannelDeltasSGIX; 3032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.ChannelRectSyncSGIX = Fake_glXChannelRectSyncSGIX; 3033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_SGIX_dmbuffer **/ 3035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if defined(_DM_BUFFER_H_) 3036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.AssociateDMPbufferSGIX = NULL; 3037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 3038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_SGIX_swap_group ***/ 3040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.JoinSwapGroupSGIX = Fake_glXJoinSwapGroupSGIX; 3041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_SGIX_swap_barrier ***/ 3043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.BindSwapBarrierSGIX = Fake_glXBindSwapBarrierSGIX; 3044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.QueryMaxSwapBarriersSGIX = Fake_glXQueryMaxSwapBarriersSGIX; 3045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_SUN_get_transparent_index ***/ 3047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.GetTransparentIndexSUN = Fake_glXGetTransparentIndexSUN; 3048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_MESA_copy_sub_buffer ***/ 3050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.CopySubBufferMESA = Fake_glXCopySubBufferMESA; 3051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_MESA_release_buffers ***/ 3053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.ReleaseBuffersMESA = Fake_glXReleaseBuffersMESA; 3054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_MESA_pixmap_colormap ***/ 3056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.CreateGLXPixmapMESA = Fake_glXCreateGLXPixmapMESA; 3057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_MESA_set_3dfx_mode ***/ 3059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.Set3DfxModeMESA = Fake_glXSet3DfxModeMESA; 3060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_NV_vertex_array_range ***/ 3062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.AllocateMemoryNV = Fake_glXAllocateMemoryNV; 3063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.FreeMemoryNV = Fake_glXFreeMemoryNV; 3064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_MESA_agp_offset ***/ 3066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.GetAGPOffsetMESA = Fake_glXGetAGPOffsetMESA; 3067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*** GLX_EXT_texture_from_pixmap ***/ 3069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.BindTexImageEXT = Fake_glXBindTexImageEXT; 3070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx.ReleaseTexImageEXT = Fake_glXReleaseTexImageEXT; 3071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return &glx; 3073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 3074