1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * (C) Copyright IBM Corporation 2003 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All Rights Reserved. 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the "Software"), 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to deal in the Software without restriction, including without limitation 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * on the rights to use, copy, modify, merge, publish, distribute, sub 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * license, and/or sell copies of the Software, and to permit persons to whom 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the Software is furnished to do so, subject to the following conditions: 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the next 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * paragraph) shall be included in all copies or substantial portions of the 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software. 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * VA LINUX SYSTEM, IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * USE OR OTHER DEALINGS IN THE SOFTWARE. 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \file glxconfig.c 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Utility routines for working with \c struct glx_config structures. At 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * some point most or all of these functions will be moved to the Mesa 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * code base. 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \author Ian Romanick <idr@us.ibm.com> 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <GL/glx.h> 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "GL/glxint.h" 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <stdlib.h> 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <string.h> 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "glxconfig.h" 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NUM_VISUAL_TYPES 6 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Get data from a GLX config 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param mode GL context mode whose data is to be returned. 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param attribute Attribute of \c mode that is to be returned. 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param value_return Location to store the data member of \c mode. 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \return If \c attribute is a valid attribute of \c mode, zero is 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * returned. Otherwise \c GLX_BAD_ATTRIBUTE is returned. 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_X_HIDDEN int 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglx_config_get(struct glx_config * mode, int attribute, int *value_return) 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (attribute) { 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_USE_GL: 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = GL_TRUE; 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BUFFER_SIZE: 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->rgbBits; 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RGBA: 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->rgbMode; 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RED_SIZE: 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->redBits; 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_GREEN_SIZE: 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->greenBits; 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BLUE_SIZE: 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->blueBits; 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ALPHA_SIZE: 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->alphaBits; 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DOUBLEBUFFER: 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->doubleBufferMode; 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_STEREO: 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->stereoMode; 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_AUX_BUFFERS: 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->numAuxBuffers; 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DEPTH_SIZE: 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->depthBits; 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_STENCIL_SIZE: 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->stencilBits; 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_RED_SIZE: 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->accumRedBits; 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_GREEN_SIZE: 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->accumGreenBits; 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_BLUE_SIZE: 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->accumBlueBits; 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_ACCUM_ALPHA_SIZE: 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->accumAlphaBits; 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_LEVEL: 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->level; 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef GLX_USE_APPLEGL /* This isn't supported by CGL. */ 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_TYPE_EXT: 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->transparentPixel; 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_RED_VALUE: 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->transparentRed; 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_GREEN_VALUE: 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->transparentGreen; 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_BLUE_VALUE: 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->transparentBlue; 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_ALPHA_VALUE: 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->transparentAlpha; 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_TRANSPARENT_INDEX_VALUE: 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->transparentIndex; 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_X_VISUAL_TYPE: 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->visualType; 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_CONFIG_CAVEAT: 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->visualRating; 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VISUAL_ID: 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->visualID; 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_DRAWABLE_TYPE: 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->drawableType; 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_RENDER_TYPE: 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->renderType; 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_X_RENDERABLE: 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->xRenderable; 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_FBCONFIG_ID: 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->fbconfigID; 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MAX_PBUFFER_WIDTH: 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->maxPbufferWidth; 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MAX_PBUFFER_HEIGHT: 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->maxPbufferHeight; 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_MAX_PBUFFER_PIXELS: 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->maxPbufferPixels; 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef GLX_USE_APPLEGL /* These aren't supported by CGL. */ 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_OPTIMAL_PBUFFER_WIDTH_SGIX: 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->optimalPbufferWidth; 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX: 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->optimalPbufferHeight; 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_SWAP_METHOD_OML: 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->swapMethod; 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_SAMPLE_BUFFERS_SGIS: 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->sampleBuffers; 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_SAMPLES_SGIS: 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->samples; 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_TEXTURE_RGB_EXT: 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->bindToTextureRgb; 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_TEXTURE_RGBA_EXT: 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->bindToTextureRgba; 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_MIPMAP_TEXTURE_EXT: 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->bindToMipmapTexture == GL_TRUE ? GL_TRUE : 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GL_FALSE; 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_BIND_TO_TEXTURE_TARGETS_EXT: 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->bindToTextureTargets; 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_Y_INVERTED_EXT: 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->yInverted; 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT: 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *value_return = mode->sRGBCapable; 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Applications are NOT allowed to query GLX_VISUAL_SELECT_GROUP_SGIX. 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * It is ONLY for communication between the GLX client and the GLX 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * server. 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case GLX_VISUAL_SELECT_GROUP_SGIX: 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org default: 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return GLX_BAD_ATTRIBUTE; 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Allocate a linked list of \c struct glx_config structures. The fields of 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * each structure will be initialized to "reasonable" default values. In 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * most cases this is the default value defined by table 3.4 of the GLX 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 1.3 specification. This means that most values are either initialized to 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * zero or \c GLX_DONT_CARE (which is -1). As support for additional 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * extensions is added, the new values will be initialized to appropriate 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * values from the extension specification. 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param count Number of structures to allocate. 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param minimum_size Minimum size of a structure to allocate. This allows 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * for differences in the version of the 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \c struct glx_config stucture used in libGL and in a 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * DRI-based driver. 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \returns A pointer to the first element in a linked list of \c count 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * stuctures on success, or \c NULL on failure. 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_X_HIDDEN struct glx_config * 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglx_config_create_list(unsigned count) 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const size_t size = sizeof(struct glx_config); 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct glx_config *base = NULL; 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct glx_config **next; 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned i; 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org next = &base; 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < count; i++) { 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *next = (struct glx_config *) malloc(size); 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (*next == NULL) { 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx_config_destroy_list(base); 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org base = NULL; 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) memset(*next, 0, size); 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->visualID = GLX_DONT_CARE; 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->visualType = GLX_DONT_CARE; 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->visualRating = GLX_NONE; 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->transparentPixel = GLX_NONE; 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->transparentRed = GLX_DONT_CARE; 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->transparentGreen = GLX_DONT_CARE; 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->transparentBlue = GLX_DONT_CARE; 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->transparentAlpha = GLX_DONT_CARE; 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->transparentIndex = GLX_DONT_CARE; 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->xRenderable = GLX_DONT_CARE; 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->fbconfigID = GLX_DONT_CARE; 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->swapMethod = GLX_SWAP_UNDEFINED_OML; 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->bindToTextureRgb = GLX_DONT_CARE; 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->bindToTextureRgba = GLX_DONT_CARE; 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->bindToMipmapTexture = GLX_DONT_CARE; 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->bindToTextureTargets = GLX_DONT_CARE; 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->yInverted = GLX_DONT_CARE; 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*next)->sRGBCapable = GLX_DONT_CARE; 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org next = &((*next)->next); 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return base; 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_X_HIDDEN void 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglx_config_destroy_list(struct glx_config *configs) 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org while (configs != NULL) { 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct glx_config *const next = configs->next; 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org free(configs); 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org configs = next; 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Find a context mode matching a Visual ID. 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param modes List list of context-mode structures to be searched. 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param vid Visual ID to be found. 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \returns A pointer to a context-mode in \c modes if \c vid was found in 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the list, or \c NULL if it was not. 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_X_HIDDEN struct glx_config * 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglx_config_find_visual(struct glx_config *configs, int vid) 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct glx_config *c; 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (c = configs; c != NULL; c = c->next) 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (c->visualID == vid) 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return c; 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org_X_HIDDEN struct glx_config * 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglx_config_find_fbconfig(struct glx_config *configs, int fbid) 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct glx_config *c; 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (c = configs; c != NULL; c = c->next) 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (c->fbconfigID == fbid) 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return c; 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 310