glx: Rename glcontextmodes.[ch] to glxconfig.[ch]
authorKristian Høgsberg <krh@bitplanet.net>
Wed, 28 Jul 2010 14:13:44 +0000 (10:13 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Wed, 28 Jul 2010 20:42:00 +0000 (16:42 -0400)
src/glx/Makefile
src/glx/dri_common.c
src/glx/glcontextmodes.c [deleted file]
src/glx/glcontextmodes.h [deleted file]
src/glx/glxclient.h
src/glx/glxcmds.c
src/glx/glxconfig.c [new file with mode: 0644]
src/glx/glxconfig.h [new file with mode: 0644]
src/glx/glxext.c

index 48d901fb894f0f6244c257001726b1e78095411d..70def7a2fbef8f9e9b90137c43f2dd73cefb4e31 100644 (file)
@@ -5,10 +5,10 @@ EXTRA_DEFINES = -DXF86VIDMODE -D_REENTRANT \
                 -DDEFAULT_DRIVER_DIR=\"$(DRI_DRIVER_SEARCH_DIR)\"
 
 SOURCES = \
-         glcontextmodes.c \
          clientattrib.c \
          compsize.c \
          eval.c \
+         glxconfig.c \
          glxcmds.c \
          glxcurrent.c \
          glxext.c \
index 7866521e420f93c407f0f2c2e98e3b2ee2eb0aef..812fb2eb080aaba386a4e4793dcc00c41f8a79be 100644 (file)
@@ -39,7 +39,6 @@
 #include <dlfcn.h>
 #include <stdarg.h>
 #include "glxclient.h"
-#include "glcontextmodes.h"
 #include "dri_common.h"
 
 #ifndef RTLD_NOW
diff --git a/src/glx/glcontextmodes.c b/src/glx/glcontextmodes.c
deleted file mode 100644 (file)
index 186de48..0000000
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * (C) Copyright IBM Corporation 2003
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * on the rights to use, copy, modify, merge, publish, distribute, sub
- * license, and/or sell copies of the Software, and to permit persons to whom
- * the Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
- * VA LINUX SYSTEM, IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- * USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file glcontextmodes.c
- * Utility routines for working with \c struct glx_config structures.  At
- * some point most or all of these functions will be moved to the Mesa
- * code base.
- *
- * \author Ian Romanick <idr@us.ibm.com>
- */
-
-#include <GL/glx.h>
-#include "GL/glxint.h"
-#include <stdlib.h>
-#include <string.h>
-
-#include "glcontextmodes.h"
-
-#define NUM_VISUAL_TYPES   6
-
-/**
- * Get data from a GLX config
- * 
- * \param mode         GL context mode whose data is to be returned.
- * \param attribute    Attribute of \c mode that is to be returned.
- * \param value_return Location to store the data member of \c mode.
- * \return  If \c attribute is a valid attribute of \c mode, zero is
- *          returned.  Otherwise \c GLX_BAD_ATTRIBUTE is returned.
- */
-_X_HIDDEN int
-glx_config_get(struct glx_config * mode, int attribute, int *value_return)
-{
-   switch (attribute) {
-   case GLX_USE_GL:
-      *value_return = GL_TRUE;
-      return 0;
-   case GLX_BUFFER_SIZE:
-      *value_return = mode->rgbBits;
-      return 0;
-   case GLX_RGBA:
-      *value_return = mode->rgbMode;
-      return 0;
-   case GLX_RED_SIZE:
-      *value_return = mode->redBits;
-      return 0;
-   case GLX_GREEN_SIZE:
-      *value_return = mode->greenBits;
-      return 0;
-   case GLX_BLUE_SIZE:
-      *value_return = mode->blueBits;
-      return 0;
-   case GLX_ALPHA_SIZE:
-      *value_return = mode->alphaBits;
-      return 0;
-   case GLX_DOUBLEBUFFER:
-      *value_return = mode->doubleBufferMode;
-      return 0;
-   case GLX_STEREO:
-      *value_return = mode->stereoMode;
-      return 0;
-   case GLX_AUX_BUFFERS:
-      *value_return = mode->numAuxBuffers;
-      return 0;
-   case GLX_DEPTH_SIZE:
-      *value_return = mode->depthBits;
-      return 0;
-   case GLX_STENCIL_SIZE:
-      *value_return = mode->stencilBits;
-      return 0;
-   case GLX_ACCUM_RED_SIZE:
-      *value_return = mode->accumRedBits;
-      return 0;
-   case GLX_ACCUM_GREEN_SIZE:
-      *value_return = mode->accumGreenBits;
-      return 0;
-   case GLX_ACCUM_BLUE_SIZE:
-      *value_return = mode->accumBlueBits;
-      return 0;
-   case GLX_ACCUM_ALPHA_SIZE:
-      *value_return = mode->accumAlphaBits;
-      return 0;
-   case GLX_LEVEL:
-      *value_return = mode->level;
-      return 0;
-#ifndef GLX_USE_APPLEGL               /* This isn't supported by CGL. */
-   case GLX_TRANSPARENT_TYPE_EXT:
-      *value_return = mode->transparentPixel;
-      return 0;
-#endif
-   case GLX_TRANSPARENT_RED_VALUE:
-      *value_return = mode->transparentRed;
-      return 0;
-   case GLX_TRANSPARENT_GREEN_VALUE:
-      *value_return = mode->transparentGreen;
-      return 0;
-   case GLX_TRANSPARENT_BLUE_VALUE:
-      *value_return = mode->transparentBlue;
-      return 0;
-   case GLX_TRANSPARENT_ALPHA_VALUE:
-      *value_return = mode->transparentAlpha;
-      return 0;
-   case GLX_TRANSPARENT_INDEX_VALUE:
-      *value_return = mode->transparentIndex;
-      return 0;
-   case GLX_X_VISUAL_TYPE:
-      *value_return = mode->visualType;
-      return 0;
-   case GLX_CONFIG_CAVEAT:
-      *value_return = mode->visualRating;
-      return 0;
-   case GLX_VISUAL_ID:
-      *value_return = mode->visualID;
-      return 0;
-   case GLX_DRAWABLE_TYPE:
-      *value_return = mode->drawableType;
-      return 0;
-   case GLX_RENDER_TYPE:
-      *value_return = mode->renderType;
-      return 0;
-   case GLX_X_RENDERABLE:
-      *value_return = mode->xRenderable;
-      return 0;
-   case GLX_FBCONFIG_ID:
-      *value_return = mode->fbconfigID;
-      return 0;
-   case GLX_MAX_PBUFFER_WIDTH:
-      *value_return = mode->maxPbufferWidth;
-      return 0;
-   case GLX_MAX_PBUFFER_HEIGHT:
-      *value_return = mode->maxPbufferHeight;
-      return 0;
-   case GLX_MAX_PBUFFER_PIXELS:
-      *value_return = mode->maxPbufferPixels;
-      return 0;
-#ifndef GLX_USE_APPLEGL               /* These aren't supported by CGL. */
-   case GLX_OPTIMAL_PBUFFER_WIDTH_SGIX:
-      *value_return = mode->optimalPbufferWidth;
-      return 0;
-   case GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX:
-      *value_return = mode->optimalPbufferHeight;
-      return 0;
-   case GLX_SWAP_METHOD_OML:
-      *value_return = mode->swapMethod;
-      return 0;
-#endif
-   case GLX_SAMPLE_BUFFERS_SGIS:
-      *value_return = mode->sampleBuffers;
-      return 0;
-   case GLX_SAMPLES_SGIS:
-      *value_return = mode->samples;
-      return 0;
-   case GLX_BIND_TO_TEXTURE_RGB_EXT:
-      *value_return = mode->bindToTextureRgb;
-      return 0;
-   case GLX_BIND_TO_TEXTURE_RGBA_EXT:
-      *value_return = mode->bindToTextureRgba;
-      return 0;
-   case GLX_BIND_TO_MIPMAP_TEXTURE_EXT:
-      *value_return = mode->bindToMipmapTexture == GL_TRUE ? GL_TRUE :
-         GL_FALSE;
-      return 0;
-   case GLX_BIND_TO_TEXTURE_TARGETS_EXT:
-      *value_return = mode->bindToTextureTargets;
-      return 0;
-   case GLX_Y_INVERTED_EXT:
-      *value_return = mode->yInverted;
-      return 0;
-
-      /* Applications are NOT allowed to query GLX_VISUAL_SELECT_GROUP_SGIX.
-       * It is ONLY for communication between the GLX client and the GLX
-       * server.
-       */
-   case GLX_VISUAL_SELECT_GROUP_SGIX:
-   default:
-      return GLX_BAD_ATTRIBUTE;
-   }
-}
-
-
-/**
- * Allocate a linked list of \c struct glx_config structures.  The fields of
- * each structure will be initialized to "reasonable" default values.  In
- * most cases this is the default value defined by table 3.4 of the GLX
- * 1.3 specification.  This means that most values are either initialized to
- * zero or \c GLX_DONT_CARE (which is -1).  As support for additional
- * extensions is added, the new values will be initialized to appropriate
- * values from the extension specification.
- * 
- * \param count         Number of structures to allocate.
- * \param minimum_size  Minimum size of a structure to allocate.  This allows
- *                      for differences in the version of the
- *                      \c struct glx_config stucture used in libGL and in a
- *                      DRI-based driver.
- * \returns A pointer to the first element in a linked list of \c count
- *          stuctures on success, or \c NULL on failure.
- */
-_X_HIDDEN struct glx_config *
-glx_config_create_list(unsigned count)
-{
-   const size_t size = sizeof(struct glx_config);
-   struct glx_config *base = NULL;
-   struct glx_config **next;
-   unsigned i;
-
-   next = &base;
-   for (i = 0; i < count; i++) {
-      *next = (struct glx_config *) malloc(size);
-      if (*next == NULL) {
-        glx_config_destroy_list(base);
-        base = NULL;
-        break;
-      }
-
-      (void) memset(*next, 0, size);
-      (*next)->visualID = GLX_DONT_CARE;
-      (*next)->visualType = GLX_DONT_CARE;
-      (*next)->visualRating = GLX_NONE;
-      (*next)->transparentPixel = GLX_NONE;
-      (*next)->transparentRed = GLX_DONT_CARE;
-      (*next)->transparentGreen = GLX_DONT_CARE;
-      (*next)->transparentBlue = GLX_DONT_CARE;
-      (*next)->transparentAlpha = GLX_DONT_CARE;
-      (*next)->transparentIndex = GLX_DONT_CARE;
-      (*next)->xRenderable = GLX_DONT_CARE;
-      (*next)->fbconfigID = GLX_DONT_CARE;
-      (*next)->swapMethod = GLX_SWAP_UNDEFINED_OML;
-      (*next)->bindToTextureRgb = GLX_DONT_CARE;
-      (*next)->bindToTextureRgba = GLX_DONT_CARE;
-      (*next)->bindToMipmapTexture = GLX_DONT_CARE;
-      (*next)->bindToTextureTargets = GLX_DONT_CARE;
-      (*next)->yInverted = GLX_DONT_CARE;
-
-      next = &((*next)->next);
-   }
-
-   return base;
-}
-
-_X_HIDDEN void
-glx_config_destroy_list(struct glx_config *configs)
-{
-   while (configs != NULL) {
-      struct glx_config *const next = configs->next;
-
-      free(configs);
-      configs = next;
-   }
-}
-
-
-/**
- * Find a context mode matching a Visual ID.
- *
- * \param modes  List list of context-mode structures to be searched.
- * \param vid    Visual ID to be found.
- * \returns A pointer to a context-mode in \c modes if \c vid was found in
- *          the list, or \c NULL if it was not.
- */
-
-_X_HIDDEN struct glx_config *
-glx_config_find_visual(struct glx_config *configs, int vid)
-{
-   struct glx_config *c;
-
-   for (c = configs; c != NULL; c = c->next)
-      if (c->visualID == vid)
-        return c;
-
-   return NULL;
-}
-
-_X_HIDDEN struct glx_config *
-glx_config_find_fbconfig(struct glx_config *configs, int fbid)
-{
-   struct glx_config *c;
-
-   for (c = configs; c != NULL; c = c->next)
-      if (c->fbconfigID == fbid)
-        return c;
-
-   return NULL;
-}
diff --git a/src/glx/glcontextmodes.h b/src/glx/glcontextmodes.h
deleted file mode 100644 (file)
index f7ee958..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * (C) Copyright IBM Corporation 2003
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * on the rights to use, copy, modify, merge, publish, distribute, sub
- * license, and/or sell copies of the Software, and to permit persons to whom
- * the Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
- * VA LINUX SYSTEM, IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- * USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file glcontextmodes.h
- * \author Ian Romanick <idr@us.ibm.com>
- */
-
-#ifndef GLCONTEXTMODES_H
-#define GLCONTEXTMODES_H
-
-struct glx_config {
-    struct glx_config * next;
-
-    GLboolean rgbMode;
-    GLboolean floatMode;
-    GLboolean colorIndexMode;
-    GLuint doubleBufferMode;
-    GLuint stereoMode;
-
-    GLint redBits, greenBits, blueBits, alphaBits;     /* bits per comp */
-    GLuint redMask, greenMask, blueMask, alphaMask;
-    GLint rgbBits;             /* total bits for rgb */
-    GLint indexBits;           /* total bits for colorindex */
-
-    GLint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits;
-    GLint depthBits;
-    GLint stencilBits;
-
-    GLint numAuxBuffers;
-
-    GLint level;
-
-    GLint pixmapMode;
-
-    /* GLX */
-    GLint visualID;
-    GLint visualType;     /**< One of the GLX X visual types. (i.e., 
-                          * \c GLX_TRUE_COLOR, etc.)
-                          */
-
-    /* EXT_visual_rating / GLX 1.2 */
-    GLint visualRating;
-
-    /* EXT_visual_info / GLX 1.2 */
-    GLint transparentPixel;
-                               /*    colors are floats scaled to ints */
-    GLint transparentRed, transparentGreen, transparentBlue, transparentAlpha;
-    GLint transparentIndex;
-
-    /* ARB_multisample / SGIS_multisample */
-    GLint sampleBuffers;
-    GLint samples;
-
-    /* SGIX_fbconfig / GLX 1.3 */
-    GLint drawableType;
-    GLint renderType;
-    GLint xRenderable;
-    GLint fbconfigID;
-
-    /* SGIX_pbuffer / GLX 1.3 */
-    GLint maxPbufferWidth;
-    GLint maxPbufferHeight;
-    GLint maxPbufferPixels;
-    GLint optimalPbufferWidth;   /* Only for SGIX_pbuffer. */
-    GLint optimalPbufferHeight;  /* Only for SGIX_pbuffer. */
-
-    /* SGIX_visual_select_group */
-    GLint visualSelectGroup;
-
-    /* OML_swap_method */
-    GLint swapMethod;
-
-    GLint screen;
-
-    /* EXT_texture_from_pixmap */
-    GLint bindToTextureRgb;
-    GLint bindToTextureRgba;
-    GLint bindToMipmapTexture;
-    GLint bindToTextureTargets;
-    GLint yInverted;
-};
-
-#define __GLX_MIN_CONFIG_PROPS 18
-#define __GLX_MAX_CONFIG_PROPS 500
-#define __GLX_EXT_CONFIG_PROPS 10
-
-/*
-** Since we send all non-core visual properties as token, value pairs,
-** we require 2 words across the wire. In order to maintain backwards
-** compatibility, we need to send the total number of words that the
-** VisualConfigs are sent back in so old libraries can simply "ignore"
-** the new properties.
-*/
-#define __GLX_TOTAL_CONFIG \
-   (__GLX_MIN_CONFIG_PROPS + 2 * __GLX_EXT_CONFIG_PROPS)
-
-extern GLint _gl_convert_from_x_visual_type(int visualType);
-
-extern int
-glx_config_get(struct glx_config * mode, int attribute, int *value_return);
-extern struct glx_config *
-glx_config_create_list(unsigned count);
-extern void
-glx_config_destroy_list(struct glx_config *configs);
-extern struct glx_config *
-glx_config_find_visual(struct glx_config *configs, int vid);
-extern struct glx_config *
-glx_config_find_fbconfig(struct glx_config *configs, int fbid);
-
-#endif /* GLCONTEXTMODES_H */
-
index 3a8d294dab80913930b371ae74ebb9363607895c..f8691433a6974a70c059432f58b36fc5d0039313 100644 (file)
@@ -51,7 +51,7 @@
 #endif
 #include "GL/glxproto.h"
 #include "glapi/glapitable.h"
-#include "glcontextmodes.h"
+#include "glxconfig.h"
 #include "glxhash.h"
 #if defined( PTHREADS )
 # include <pthread.h>
index 85bfa657e0dace39e5fd77b170cddfe0b0ae406b..55a736ce475f0802ca38009c16e5dd3d50486f2b 100644 (file)
@@ -36,7 +36,6 @@
 #include "glxclient.h"
 #include "glapi.h"
 #include "glxextensions.h"
-#include "glcontextmodes.h"
 
 #ifdef GLX_DIRECT_RENDERING
 #ifdef GLX_USE_APPLEGL
diff --git a/src/glx/glxconfig.c b/src/glx/glxconfig.c
new file mode 100644 (file)
index 0000000..1d9678f
--- /dev/null
@@ -0,0 +1,304 @@
+/*
+ * (C) Copyright IBM Corporation 2003
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * on the rights to use, copy, modify, merge, publish, distribute, sub
+ * license, and/or sell copies of the Software, and to permit persons to whom
+ * the Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+ * VA LINUX SYSTEM, IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file glxconfig.c
+ * Utility routines for working with \c struct glx_config structures.  At
+ * some point most or all of these functions will be moved to the Mesa
+ * code base.
+ *
+ * \author Ian Romanick <idr@us.ibm.com>
+ */
+
+#include <GL/glx.h>
+#include "GL/glxint.h"
+#include <stdlib.h>
+#include <string.h>
+
+#include "glxconfig.h"
+
+#define NUM_VISUAL_TYPES   6
+
+/**
+ * Get data from a GLX config
+ * 
+ * \param mode         GL context mode whose data is to be returned.
+ * \param attribute    Attribute of \c mode that is to be returned.
+ * \param value_return Location to store the data member of \c mode.
+ * \return  If \c attribute is a valid attribute of \c mode, zero is
+ *          returned.  Otherwise \c GLX_BAD_ATTRIBUTE is returned.
+ */
+_X_HIDDEN int
+glx_config_get(struct glx_config * mode, int attribute, int *value_return)
+{
+   switch (attribute) {
+   case GLX_USE_GL:
+      *value_return = GL_TRUE;
+      return 0;
+   case GLX_BUFFER_SIZE:
+      *value_return = mode->rgbBits;
+      return 0;
+   case GLX_RGBA:
+      *value_return = mode->rgbMode;
+      return 0;
+   case GLX_RED_SIZE:
+      *value_return = mode->redBits;
+      return 0;
+   case GLX_GREEN_SIZE:
+      *value_return = mode->greenBits;
+      return 0;
+   case GLX_BLUE_SIZE:
+      *value_return = mode->blueBits;
+      return 0;
+   case GLX_ALPHA_SIZE:
+      *value_return = mode->alphaBits;
+      return 0;
+   case GLX_DOUBLEBUFFER:
+      *value_return = mode->doubleBufferMode;
+      return 0;
+   case GLX_STEREO:
+      *value_return = mode->stereoMode;
+      return 0;
+   case GLX_AUX_BUFFERS:
+      *value_return = mode->numAuxBuffers;
+      return 0;
+   case GLX_DEPTH_SIZE:
+      *value_return = mode->depthBits;
+      return 0;
+   case GLX_STENCIL_SIZE:
+      *value_return = mode->stencilBits;
+      return 0;
+   case GLX_ACCUM_RED_SIZE:
+      *value_return = mode->accumRedBits;
+      return 0;
+   case GLX_ACCUM_GREEN_SIZE:
+      *value_return = mode->accumGreenBits;
+      return 0;
+   case GLX_ACCUM_BLUE_SIZE:
+      *value_return = mode->accumBlueBits;
+      return 0;
+   case GLX_ACCUM_ALPHA_SIZE:
+      *value_return = mode->accumAlphaBits;
+      return 0;
+   case GLX_LEVEL:
+      *value_return = mode->level;
+      return 0;
+#ifndef GLX_USE_APPLEGL               /* This isn't supported by CGL. */
+   case GLX_TRANSPARENT_TYPE_EXT:
+      *value_return = mode->transparentPixel;
+      return 0;
+#endif
+   case GLX_TRANSPARENT_RED_VALUE:
+      *value_return = mode->transparentRed;
+      return 0;
+   case GLX_TRANSPARENT_GREEN_VALUE:
+      *value_return = mode->transparentGreen;
+      return 0;
+   case GLX_TRANSPARENT_BLUE_VALUE:
+      *value_return = mode->transparentBlue;
+      return 0;
+   case GLX_TRANSPARENT_ALPHA_VALUE:
+      *value_return = mode->transparentAlpha;
+      return 0;
+   case GLX_TRANSPARENT_INDEX_VALUE:
+      *value_return = mode->transparentIndex;
+      return 0;
+   case GLX_X_VISUAL_TYPE:
+      *value_return = mode->visualType;
+      return 0;
+   case GLX_CONFIG_CAVEAT:
+      *value_return = mode->visualRating;
+      return 0;
+   case GLX_VISUAL_ID:
+      *value_return = mode->visualID;
+      return 0;
+   case GLX_DRAWABLE_TYPE:
+      *value_return = mode->drawableType;
+      return 0;
+   case GLX_RENDER_TYPE:
+      *value_return = mode->renderType;
+      return 0;
+   case GLX_X_RENDERABLE:
+      *value_return = mode->xRenderable;
+      return 0;
+   case GLX_FBCONFIG_ID:
+      *value_return = mode->fbconfigID;
+      return 0;
+   case GLX_MAX_PBUFFER_WIDTH:
+      *value_return = mode->maxPbufferWidth;
+      return 0;
+   case GLX_MAX_PBUFFER_HEIGHT:
+      *value_return = mode->maxPbufferHeight;
+      return 0;
+   case GLX_MAX_PBUFFER_PIXELS:
+      *value_return = mode->maxPbufferPixels;
+      return 0;
+#ifndef GLX_USE_APPLEGL               /* These aren't supported by CGL. */
+   case GLX_OPTIMAL_PBUFFER_WIDTH_SGIX:
+      *value_return = mode->optimalPbufferWidth;
+      return 0;
+   case GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX:
+      *value_return = mode->optimalPbufferHeight;
+      return 0;
+   case GLX_SWAP_METHOD_OML:
+      *value_return = mode->swapMethod;
+      return 0;
+#endif
+   case GLX_SAMPLE_BUFFERS_SGIS:
+      *value_return = mode->sampleBuffers;
+      return 0;
+   case GLX_SAMPLES_SGIS:
+      *value_return = mode->samples;
+      return 0;
+   case GLX_BIND_TO_TEXTURE_RGB_EXT:
+      *value_return = mode->bindToTextureRgb;
+      return 0;
+   case GLX_BIND_TO_TEXTURE_RGBA_EXT:
+      *value_return = mode->bindToTextureRgba;
+      return 0;
+   case GLX_BIND_TO_MIPMAP_TEXTURE_EXT:
+      *value_return = mode->bindToMipmapTexture == GL_TRUE ? GL_TRUE :
+         GL_FALSE;
+      return 0;
+   case GLX_BIND_TO_TEXTURE_TARGETS_EXT:
+      *value_return = mode->bindToTextureTargets;
+      return 0;
+   case GLX_Y_INVERTED_EXT:
+      *value_return = mode->yInverted;
+      return 0;
+
+      /* Applications are NOT allowed to query GLX_VISUAL_SELECT_GROUP_SGIX.
+       * It is ONLY for communication between the GLX client and the GLX
+       * server.
+       */
+   case GLX_VISUAL_SELECT_GROUP_SGIX:
+   default:
+      return GLX_BAD_ATTRIBUTE;
+   }
+}
+
+
+/**
+ * Allocate a linked list of \c struct glx_config structures.  The fields of
+ * each structure will be initialized to "reasonable" default values.  In
+ * most cases this is the default value defined by table 3.4 of the GLX
+ * 1.3 specification.  This means that most values are either initialized to
+ * zero or \c GLX_DONT_CARE (which is -1).  As support for additional
+ * extensions is added, the new values will be initialized to appropriate
+ * values from the extension specification.
+ * 
+ * \param count         Number of structures to allocate.
+ * \param minimum_size  Minimum size of a structure to allocate.  This allows
+ *                      for differences in the version of the
+ *                      \c struct glx_config stucture used in libGL and in a
+ *                      DRI-based driver.
+ * \returns A pointer to the first element in a linked list of \c count
+ *          stuctures on success, or \c NULL on failure.
+ */
+_X_HIDDEN struct glx_config *
+glx_config_create_list(unsigned count)
+{
+   const size_t size = sizeof(struct glx_config);
+   struct glx_config *base = NULL;
+   struct glx_config **next;
+   unsigned i;
+
+   next = &base;
+   for (i = 0; i < count; i++) {
+      *next = (struct glx_config *) malloc(size);
+      if (*next == NULL) {
+        glx_config_destroy_list(base);
+        base = NULL;
+        break;
+      }
+
+      (void) memset(*next, 0, size);
+      (*next)->visualID = GLX_DONT_CARE;
+      (*next)->visualType = GLX_DONT_CARE;
+      (*next)->visualRating = GLX_NONE;
+      (*next)->transparentPixel = GLX_NONE;
+      (*next)->transparentRed = GLX_DONT_CARE;
+      (*next)->transparentGreen = GLX_DONT_CARE;
+      (*next)->transparentBlue = GLX_DONT_CARE;
+      (*next)->transparentAlpha = GLX_DONT_CARE;
+      (*next)->transparentIndex = GLX_DONT_CARE;
+      (*next)->xRenderable = GLX_DONT_CARE;
+      (*next)->fbconfigID = GLX_DONT_CARE;
+      (*next)->swapMethod = GLX_SWAP_UNDEFINED_OML;
+      (*next)->bindToTextureRgb = GLX_DONT_CARE;
+      (*next)->bindToTextureRgba = GLX_DONT_CARE;
+      (*next)->bindToMipmapTexture = GLX_DONT_CARE;
+      (*next)->bindToTextureTargets = GLX_DONT_CARE;
+      (*next)->yInverted = GLX_DONT_CARE;
+
+      next = &((*next)->next);
+   }
+
+   return base;
+}
+
+_X_HIDDEN void
+glx_config_destroy_list(struct glx_config *configs)
+{
+   while (configs != NULL) {
+      struct glx_config *const next = configs->next;
+
+      free(configs);
+      configs = next;
+   }
+}
+
+
+/**
+ * Find a context mode matching a Visual ID.
+ *
+ * \param modes  List list of context-mode structures to be searched.
+ * \param vid    Visual ID to be found.
+ * \returns A pointer to a context-mode in \c modes if \c vid was found in
+ *          the list, or \c NULL if it was not.
+ */
+
+_X_HIDDEN struct glx_config *
+glx_config_find_visual(struct glx_config *configs, int vid)
+{
+   struct glx_config *c;
+
+   for (c = configs; c != NULL; c = c->next)
+      if (c->visualID == vid)
+        return c;
+
+   return NULL;
+}
+
+_X_HIDDEN struct glx_config *
+glx_config_find_fbconfig(struct glx_config *configs, int fbid)
+{
+   struct glx_config *c;
+
+   for (c = configs; c != NULL; c = c->next)
+      if (c->fbconfigID == fbid)
+        return c;
+
+   return NULL;
+}
diff --git a/src/glx/glxconfig.h b/src/glx/glxconfig.h
new file mode 100644 (file)
index 0000000..f7ee958
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+ * (C) Copyright IBM Corporation 2003
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * on the rights to use, copy, modify, merge, publish, distribute, sub
+ * license, and/or sell copies of the Software, and to permit persons to whom
+ * the Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
+ * VA LINUX SYSTEM, IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file glcontextmodes.h
+ * \author Ian Romanick <idr@us.ibm.com>
+ */
+
+#ifndef GLCONTEXTMODES_H
+#define GLCONTEXTMODES_H
+
+struct glx_config {
+    struct glx_config * next;
+
+    GLboolean rgbMode;
+    GLboolean floatMode;
+    GLboolean colorIndexMode;
+    GLuint doubleBufferMode;
+    GLuint stereoMode;
+
+    GLint redBits, greenBits, blueBits, alphaBits;     /* bits per comp */
+    GLuint redMask, greenMask, blueMask, alphaMask;
+    GLint rgbBits;             /* total bits for rgb */
+    GLint indexBits;           /* total bits for colorindex */
+
+    GLint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits;
+    GLint depthBits;
+    GLint stencilBits;
+
+    GLint numAuxBuffers;
+
+    GLint level;
+
+    GLint pixmapMode;
+
+    /* GLX */
+    GLint visualID;
+    GLint visualType;     /**< One of the GLX X visual types. (i.e., 
+                          * \c GLX_TRUE_COLOR, etc.)
+                          */
+
+    /* EXT_visual_rating / GLX 1.2 */
+    GLint visualRating;
+
+    /* EXT_visual_info / GLX 1.2 */
+    GLint transparentPixel;
+                               /*    colors are floats scaled to ints */
+    GLint transparentRed, transparentGreen, transparentBlue, transparentAlpha;
+    GLint transparentIndex;
+
+    /* ARB_multisample / SGIS_multisample */
+    GLint sampleBuffers;
+    GLint samples;
+
+    /* SGIX_fbconfig / GLX 1.3 */
+    GLint drawableType;
+    GLint renderType;
+    GLint xRenderable;
+    GLint fbconfigID;
+
+    /* SGIX_pbuffer / GLX 1.3 */
+    GLint maxPbufferWidth;
+    GLint maxPbufferHeight;
+    GLint maxPbufferPixels;
+    GLint optimalPbufferWidth;   /* Only for SGIX_pbuffer. */
+    GLint optimalPbufferHeight;  /* Only for SGIX_pbuffer. */
+
+    /* SGIX_visual_select_group */
+    GLint visualSelectGroup;
+
+    /* OML_swap_method */
+    GLint swapMethod;
+
+    GLint screen;
+
+    /* EXT_texture_from_pixmap */
+    GLint bindToTextureRgb;
+    GLint bindToTextureRgba;
+    GLint bindToMipmapTexture;
+    GLint bindToTextureTargets;
+    GLint yInverted;
+};
+
+#define __GLX_MIN_CONFIG_PROPS 18
+#define __GLX_MAX_CONFIG_PROPS 500
+#define __GLX_EXT_CONFIG_PROPS 10
+
+/*
+** Since we send all non-core visual properties as token, value pairs,
+** we require 2 words across the wire. In order to maintain backwards
+** compatibility, we need to send the total number of words that the
+** VisualConfigs are sent back in so old libraries can simply "ignore"
+** the new properties.
+*/
+#define __GLX_TOTAL_CONFIG \
+   (__GLX_MIN_CONFIG_PROPS + 2 * __GLX_EXT_CONFIG_PROPS)
+
+extern GLint _gl_convert_from_x_visual_type(int visualType);
+
+extern int
+glx_config_get(struct glx_config * mode, int attribute, int *value_return);
+extern struct glx_config *
+glx_config_create_list(unsigned count);
+extern void
+glx_config_destroy_list(struct glx_config *configs);
+extern struct glx_config *
+glx_config_find_visual(struct glx_config *configs, int vid);
+extern struct glx_config *
+glx_config_find_fbconfig(struct glx_config *configs, int fbid);
+
+#endif /* GLCONTEXTMODES_H */
+
index 8e8b362d10dc67b6b4361050b63466ddbf858b2c..b02755a6c2c861252733cedf1370a5366c6ed90f 100644 (file)
@@ -47,7 +47,6 @@
 #include "apple_visual.h"
 #endif
 #include "glxextensions.h"
-#include "glcontextmodes.h"
 
 #ifdef USE_XCB
 #include <X11/Xlib-xcb.h>