1680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/* 2680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * (C) Copyright IBM Corporation 2003 3680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * All Rights Reserved. 4680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 5680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 6680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * copy of this software and associated documentation files (the "Software"), 7680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * to deal in the Software without restriction, including without limitation 8680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * on the rights to use, copy, modify, merge, publish, distribute, sub 9680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * license, and/or sell copies of the Software, and to permit persons to whom 10680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * the Software is furnished to do so, subject to the following conditions: 11680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 12680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * The above copyright notice and this permission notice (including the next 13680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * paragraph) shall be included in all copies or substantial portions of the 14680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Software. 15680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 16680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 19680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * VA LINUX SYSTEM, IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 20680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 21680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 22680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * USE OR OTHER DEALINGS IN THE SOFTWARE. 23680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 24680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 25680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 2665d98e25770487456eb3d7eb8ec3ec8272f170b1Kristian Høgsberg * \file glxconfig.c 276ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg * Utility routines for working with \c struct glx_config structures. At 28680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * some point most or all of these functions will be moved to the Mesa 29680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * code base. 30680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 31680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \author Ian Romanick <idr@us.ibm.com> 32680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 33680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 34aa1c79eaea96283e3ac7bae513b8d7535b875ce9George Sapountzis#include <GL/glx.h> 35aa1c79eaea96283e3ac7bae513b8d7535b875ce9George Sapountzis#include "GL/glxint.h" 3632f2fd1c5d6088692551c80352b7d6fa35b0cd09Kristian Høgsberg#include <stdlib.h> 3732f2fd1c5d6088692551c80352b7d6fa35b0cd09Kristian Høgsberg#include <string.h> 38680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 3965d98e25770487456eb3d7eb8ec3ec8272f170b1Kristian Høgsberg#include "glxconfig.h" 40680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 41680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell#define NUM_VISUAL_TYPES 6 42680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 43680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 446ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg * Get data from a GLX config 45680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 46680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \param mode GL context mode whose data is to be returned. 47680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \param attribute Attribute of \c mode that is to be returned. 48680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \param value_return Location to store the data member of \c mode. 49bb45fec07460748f7762e709eeed8b7111c5a3c8Ian Romanick * \return If \c attribute is a valid attribute of \c mode, zero is 50680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * returned. Otherwise \c GLX_BAD_ATTRIBUTE is returned. 51680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 526ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg_X_HIDDEN int 536ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsbergglx_config_get(struct glx_config * mode, int attribute, int *value_return) 54680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell{ 5507c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf switch (attribute) { 5607c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_USE_GL: 5707c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = GL_TRUE; 5807c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 5907c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_BUFFER_SIZE: 6007c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->rgbBits; 6107c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 6207c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_RGBA: 6307c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->rgbMode; 6407c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 6507c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_RED_SIZE: 6607c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->redBits; 6707c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 6807c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_GREEN_SIZE: 6907c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->greenBits; 7007c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 7107c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_BLUE_SIZE: 7207c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->blueBits; 7307c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 7407c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_ALPHA_SIZE: 7507c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->alphaBits; 7607c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 7707c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_DOUBLEBUFFER: 7807c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->doubleBufferMode; 7907c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 8007c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_STEREO: 8107c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->stereoMode; 8207c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 8307c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_AUX_BUFFERS: 8407c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->numAuxBuffers; 8507c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 8607c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_DEPTH_SIZE: 8707c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->depthBits; 8807c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 8907c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_STENCIL_SIZE: 9007c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->stencilBits; 9107c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 9207c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_ACCUM_RED_SIZE: 9307c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->accumRedBits; 9407c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 9507c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_ACCUM_GREEN_SIZE: 9607c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->accumGreenBits; 9707c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 9807c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_ACCUM_BLUE_SIZE: 9907c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->accumBlueBits; 10007c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 10107c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_ACCUM_ALPHA_SIZE: 10207c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->accumAlphaBits; 10307c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 10407c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_LEVEL: 10507c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->level; 10607c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 107ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#ifndef GLX_USE_APPLEGL /* This isn't supported by CGL. */ 10807c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_TRANSPARENT_TYPE_EXT: 10907c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->transparentPixel; 11007c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 111ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#endif 11207c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_TRANSPARENT_RED_VALUE: 11307c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->transparentRed; 11407c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 11507c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_TRANSPARENT_GREEN_VALUE: 11607c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->transparentGreen; 11707c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 11807c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_TRANSPARENT_BLUE_VALUE: 11907c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->transparentBlue; 12007c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 12107c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_TRANSPARENT_ALPHA_VALUE: 12207c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->transparentAlpha; 12307c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 12407c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_TRANSPARENT_INDEX_VALUE: 12507c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->transparentIndex; 12607c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 12707c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_X_VISUAL_TYPE: 12807c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->visualType; 12907c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 13007c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_CONFIG_CAVEAT: 13107c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->visualRating; 13207c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 13307c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_VISUAL_ID: 13407c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->visualID; 13507c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 13607c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_DRAWABLE_TYPE: 13707c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->drawableType; 13807c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 13907c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_RENDER_TYPE: 14007c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->renderType; 14107c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 14207c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_X_RENDERABLE: 14307c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->xRenderable; 14407c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 14507c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_FBCONFIG_ID: 14607c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->fbconfigID; 14707c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 14807c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_MAX_PBUFFER_WIDTH: 14907c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->maxPbufferWidth; 15007c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 15107c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_MAX_PBUFFER_HEIGHT: 15207c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->maxPbufferHeight; 15307c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 15407c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_MAX_PBUFFER_PIXELS: 15507c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->maxPbufferPixels; 15607c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 157ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#ifndef GLX_USE_APPLEGL /* These aren't supported by CGL. */ 15807c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_OPTIMAL_PBUFFER_WIDTH_SGIX: 15907c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->optimalPbufferWidth; 16007c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 16107c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX: 16207c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->optimalPbufferHeight; 16307c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 16407c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_SWAP_METHOD_OML: 16507c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->swapMethod; 16607c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 167ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#endif 16807c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_SAMPLE_BUFFERS_SGIS: 16907c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->sampleBuffers; 17007c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 17107c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_SAMPLES_SGIS: 17207c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->samples; 17307c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 17407c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_BIND_TO_TEXTURE_RGB_EXT: 17507c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->bindToTextureRgb; 17607c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 17707c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_BIND_TO_TEXTURE_RGBA_EXT: 17807c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->bindToTextureRgba; 17907c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 18007c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_BIND_TO_MIPMAP_TEXTURE_EXT: 18107c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->bindToMipmapTexture == GL_TRUE ? GL_TRUE : 18207c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf GL_FALSE; 18307c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 18407c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_BIND_TO_TEXTURE_TARGETS_EXT: 18507c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->bindToTextureTargets; 18607c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 18707c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_Y_INVERTED_EXT: 18807c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf *value_return = mode->yInverted; 18907c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return 0; 190680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 191b09b3e5c8f4f5d71b986bf359b56e7b60424538dDave Airlie case GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT: 1926538b5824e298eaebede2d9686c7607c44ab446aDave Airlie *value_return = mode->sRGBCapable; 193b09b3e5c8f4f5d71b986bf359b56e7b60424538dDave Airlie return 0; 194b09b3e5c8f4f5d71b986bf359b56e7b60424538dDave Airlie 195680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /* Applications are NOT allowed to query GLX_VISUAL_SELECT_GROUP_SGIX. 196680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * It is ONLY for communication between the GLX client and the GLX 197680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * server. 198680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 19907c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf case GLX_VISUAL_SELECT_GROUP_SGIX: 20007c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf default: 20107c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return GLX_BAD_ATTRIBUTE; 20207c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf } 203680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell} 204680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 205680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 206680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 2076ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg * Allocate a linked list of \c struct glx_config structures. The fields of 208680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * each structure will be initialized to "reasonable" default values. In 209680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * most cases this is the default value defined by table 3.4 of the GLX 210680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 1.3 specification. This means that most values are either initialized to 211680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * zero or \c GLX_DONT_CARE (which is -1). As support for additional 212680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * extensions is added, the new values will be initialized to appropriate 213680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * values from the extension specification. 214680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 215680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \param count Number of structures to allocate. 216680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \param minimum_size Minimum size of a structure to allocate. This allows 217680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * for differences in the version of the 2186ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg * \c struct glx_config stucture used in libGL and in a 219680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * DRI-based driver. 220680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \returns A pointer to the first element in a linked list of \c count 221680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * stuctures on success, or \c NULL on failure. 222680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 2236ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg_X_HIDDEN struct glx_config * 2246ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsbergglx_config_create_list(unsigned count) 225680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell{ 2266ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg const size_t size = sizeof(struct glx_config); 2276ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg struct glx_config *base = NULL; 2286ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg struct glx_config **next; 22907c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf unsigned i; 23007c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf 23107c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf next = &base; 23207c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf for (i = 0; i < count; i++) { 2336ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg *next = (struct glx_config *) malloc(size); 23407c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf if (*next == NULL) { 2356ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg glx_config_destroy_list(base); 2366ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg base = NULL; 2376ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg break; 238680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell } 23907c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf 24026f8fad1456fdc2b352cea9d3b4c32cb5f6ae947Kenneth Graunke (void) memset(*next, 0, size); 241680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell (*next)->visualID = GLX_DONT_CARE; 242680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell (*next)->visualType = GLX_DONT_CARE; 243680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell (*next)->visualRating = GLX_NONE; 244680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell (*next)->transparentPixel = GLX_NONE; 245680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell (*next)->transparentRed = GLX_DONT_CARE; 246680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell (*next)->transparentGreen = GLX_DONT_CARE; 247680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell (*next)->transparentBlue = GLX_DONT_CARE; 248680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell (*next)->transparentAlpha = GLX_DONT_CARE; 249680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell (*next)->transparentIndex = GLX_DONT_CARE; 250680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell (*next)->xRenderable = GLX_DONT_CARE; 251680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell (*next)->fbconfigID = GLX_DONT_CARE; 252680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell (*next)->swapMethod = GLX_SWAP_UNDEFINED_OML; 253ba23f699f03e45a7519cb41cc853deba686ff8d9David Reveman (*next)->bindToTextureRgb = GLX_DONT_CARE; 254ba23f699f03e45a7519cb41cc853deba686ff8d9David Reveman (*next)->bindToTextureRgba = GLX_DONT_CARE; 255ba23f699f03e45a7519cb41cc853deba686ff8d9David Reveman (*next)->bindToMipmapTexture = GLX_DONT_CARE; 2562771862adcbc163c0a3f3eaaf4b58c658e72f680Jie Luo (*next)->bindToTextureTargets = GLX_DONT_CARE; 257ba23f699f03e45a7519cb41cc853deba686ff8d9David Reveman (*next)->yInverted = GLX_DONT_CARE; 2586538b5824e298eaebede2d9686c7607c44ab446aDave Airlie (*next)->sRGBCapable = GLX_DONT_CARE; 259680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 26007c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf next = &((*next)->next); 261680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell } 262680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 263680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell return base; 264680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell} 265680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 2666ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg_X_HIDDEN void 2676ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsbergglx_config_destroy_list(struct glx_config *configs) 268680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell{ 2696ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg while (configs != NULL) { 2706ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg struct glx_config *const next = configs->next; 271680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 2726ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg free(configs); 2736ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg configs = next; 274680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell } 275680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell} 276680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 277680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 278680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 279680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Find a context mode matching a Visual ID. 280680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 281680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \param modes List list of context-mode structures to be searched. 282680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \param vid Visual ID to be found. 283680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \returns A pointer to a context-mode in \c modes if \c vid was found in 284680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * the list, or \c NULL if it was not. 285680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 286680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 2876ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg_X_HIDDEN struct glx_config * 2886ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsbergglx_config_find_visual(struct glx_config *configs, int vid) 289680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell{ 2906ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg struct glx_config *c; 291680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 2926ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg for (c = configs; c != NULL; c = c->next) 2936ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg if (c->visualID == vid) 2946ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg return c; 295680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 29607c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return NULL; 297680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell} 298680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 2996ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg_X_HIDDEN struct glx_config * 3006ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsbergglx_config_find_fbconfig(struct glx_config *configs, int fbid) 301001de0ac4e9ccd5c440dca4a2994deca668a2d9fKristian Høgsberg{ 3026ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg struct glx_config *c; 303001de0ac4e9ccd5c440dca4a2994deca668a2d9fKristian Høgsberg 3046ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg for (c = configs; c != NULL; c = c->next) 3056ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg if (c->fbconfigID == fbid) 3066ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg return c; 307001de0ac4e9ccd5c440dca4a2994deca668a2d9fKristian Høgsberg 30807c9bd246d7569e7841ba5b7838d441c8de205a9RALOVICH, Kristóf return NULL; 309001de0ac4e9ccd5c440dca4a2994deca668a2d9fKristian Høgsberg} 310