After Brian reported some problems to me with the fbconfig code in the client-side GLX, I decided to make some GLX updates before leaving for vacation (I'm away 6/10 through 6/22). I wanted to add GLX protocol support for as many of the "enum only" extensions as I could. I especially wanted to add support for some of the texture format extensions (i.e., MESA_ycbcr_texture).

When I started to dig into it, I found code like __glXImage3DSize (programs/Xserver/GL/glx/rensize.c) in *at least* 5 different places. Nearly identical code appears in several places in programs/Xserver/GL/glx/rensize.c, programs/Xserver/GL/glx/singlesize.c, lib/GL/glx/compsize.c, and lib/GL/glx/pixel.c. My current plan is to have one copy of the code on the client-side and one server-side.

Ideally, we should find a way to put as much code that is duplicated between client and server (i.e., most of those four files!) in one place. That would have made this effort *MUCH* easier.

Also, I think we should replace all the __glGet*_size functions with a hash table. Since all of the possible values are known in advance, it should be possible to create a hash table that would be smaller and faster than some of those really large switch-statements. Even if it's not faster or smaller, the maintainence ease that it would bring would more than make up!

In any case, here is the patch as it currently stands. demos/occlude doesn't work right, but I'm working on it. I've also attached a patch to demos/shadowtex.c to change the way cycling compare mode works. It can now cycle with the SGIX version. I'll commit this later. I want to modify it further to select at run-time which extensions to use.
Index: demos/shadowtex.c
===================================================================
RCS file: /cvsroot/mesa3d/Mesa/demos/shadowtex.c,v
retrieving revision 1.8
diff -u -d -r1.8 shadowtex.c
--- demos/shadowtex.c   21 Apr 2003 14:50:12 -0000      1.8
+++ demos/shadowtex.c   4 Jun 2003 03:06:56 -0000
@@ -35,7 +35,7 @@
 #include <GL/glut.h>
 #include "../util/showbuffer.c"
 
-#if 0 /* change to 1 if you want to use the old SGIX extensions */
+#if 1 /* change to 1 if you want to use the old SGIX extensions */
 #undef GL_ARB_depth_texture
 #undef GL_ARB_shadow
 #undef GL_ARB_shadow_ambient
@@ -67,15 +67,21 @@
 
 static GLboolean Anim = GL_TRUE;
 
-static GLboolean HaveEXTshadowFuncs = GL_FALSE;
 static GLint Operator = 0;
+#ifdef GL_ARB_shadow
 static const GLenum OperatorFunc[8] = {
    GL_LEQUAL, GL_LESS, GL_GEQUAL, GL_GREATER,
    GL_EQUAL, GL_NOTEQUAL, GL_ALWAYS, GL_NEVER };
 static const char *OperatorName[8] = {
-   "GL_LEQUAL", "GL_LESS", "GL_GEQUAL", "GL_GREATER",
+   "GL_LEQUAL", "GL_GEQUAL", "GL_LESS", "GL_GREATER",
    "GL_EQUAL", "GL_NOTEQUAL", "GL_ALWAYS", "GL_NEVER" };
-
+#else
+static const GLenum OperatorFunc[2] = {
+   GL_TEXTURE_LEQUAL_R_SGIX, GL_TEXTURE_GEQUAL_R_SGIX };
+static const char *OperatorName[2] = {
+   "GL_TEXTURE_LEQUAL_R_SGIX", "GL_TEXTURE_GEQUAL_R_SGIX" };
+#endif
+static unsigned OperatorCount = 2;
 
 static GLuint DisplayMode;
 #define SHOW_NORMAL         0
@@ -432,14 +438,17 @@
          DisplayMode = SHOW_NORMAL;
          break;
       case 'o':
-         if (HaveEXTshadowFuncs) {
-            Operator++;
-            if (Operator >= 8)
-               Operator = 0;
-            printf("Operator: %s\n", OperatorName[Operator]);
-            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB,
-                            OperatorFunc[Operator]);
-         }
+         Operator++;
+         if (Operator >= OperatorCount)
+           Operator = 0;
+         printf("Operator: %s\n", OperatorName[Operator]);
+#ifdef GL_ARB_shadow
+         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB,
+                        OperatorFunc[Operator]);
+#else
+         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_OPERATOR_SGIX,
+                        OperatorFunc[Operator]);
+#endif
          break;
       case 'z':
          Zrot -= step;
@@ -502,6 +511,8 @@
       exit(1);
    }
    printf("Using GL_ARB_depth_texture and GL_ARB_shadow\n");
+
+   OperatorCount = (glutExtensionSupported("GL_EXT_shadow_funcs")) ? 8 : 2;
 #elif defined(GL_SGIX_depth_texture) && defined(GL_SGIX_shadow)
    if (!glutExtensionSupported("GL_SGIX_depth_texture") ||
        !glutExtensionSupported("GL_SGIX_shadow")) {
@@ -510,7 +521,6 @@
    }
    printf("Using GL_SGIX_depth_texture and GL_SGIX_shadow\n");
 #endif
-   HaveEXTshadowFuncs = glutExtensionSupported("GL_EXT_shadow_funcs");
 
    glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP);
    glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
@@ -568,8 +578,7 @@
    printf("  b/B = decrease/increase shadow map Z bias\n");
    printf("  cursor keys = rotate scene\n");
    printf("  <shift> + cursor keys = rotate light source\n");
-   if (HaveEXTshadowFuncs)
-      printf("  o = cycle through comparison modes\n");
+   printf("  o = cycle through comparison modes\n");
 }
 
 
Index: lib/GL/glx/compsize.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/lib/GL/glx/compsize.c,v
retrieving revision 1.6
diff -u -d -r1.6 compsize.c
--- lib/GL/glx/compsize.c       25 Nov 2002 19:57:48 -0000      1.6
+++ lib/GL/glx/compsize.c       4 Jun 2003 03:18:03 -0000
@@ -47,6 +47,8 @@
       case GL_FOG_MODE:                return 1;
       case GL_FOG_INDEX:       return 1;
       case GL_FOG_START:       return 1;
+      case GL_FOG_DISTANCE_MODE_NV: return 1;
+      case GL_FOG_OFFSET_VALUE_SGIX: return 1;
       default:
        return 0;
     }
@@ -81,82 +83,7 @@
 
 GLint __glDrawPixels_size(GLenum format, GLenum type, GLsizei w, GLsizei h)
 {
-    GLint elements, esize;
-    
-    switch (format) {
-      case GL_COLOR_INDEX:
-      case GL_STENCIL_INDEX:
-      case GL_DEPTH_COMPONENT:
-       elements = 1;
-       break;
-      case GL_RED:
-      case GL_GREEN:
-      case GL_BLUE:
-      case GL_ALPHA:
-      case GL_LUMINANCE:
-      case GL_INTENSITY:
-       elements = 1;
-       break;
-      case GL_LUMINANCE_ALPHA:
-       elements = 2;
-       break;
-      case GL_RGB:
-      case GL_BGR:
-       elements = 3;
-       break;
-      case GL_RGBA:
-      case GL_BGRA:
-      case GL_ABGR_EXT:
-       elements = 4;
-       break;
-      default:
-       return 0;
-    }
-    switch (type) {
-      case GL_BITMAP:
-       if (format == GL_COLOR_INDEX || format == GL_STENCIL_INDEX) {
-           return (h * ((w+7)/8));
-       } else {
-           return 0;
-       }
-      case GL_BYTE:
-      case GL_UNSIGNED_BYTE:
-       esize = 1;
-       break;
-      case GL_UNSIGNED_BYTE_3_3_2:
-      case GL_UNSIGNED_BYTE_2_3_3_REV:
-       esize = 1;
-       elements = 1;
-       break;
-      case GL_SHORT:
-      case GL_UNSIGNED_SHORT:
-       esize = 2;
-       break;
-      case GL_UNSIGNED_SHORT_5_6_5:
-      case GL_UNSIGNED_SHORT_5_6_5_REV:
-      case GL_UNSIGNED_SHORT_4_4_4_4:
-      case GL_UNSIGNED_SHORT_4_4_4_4_REV:
-      case GL_UNSIGNED_SHORT_5_5_5_1:
-      case GL_UNSIGNED_SHORT_1_5_5_5_REV:
-       esize = 2;
-       elements = 1;
-       break;
-      case GL_INT:
-      case GL_UNSIGNED_INT:
-      case GL_FLOAT:
-       esize = 4;
-       break;
-      case GL_UNSIGNED_INT_8_8_8_8:
-      case GL_UNSIGNED_INT_8_8_8_8_REV:
-      case GL_UNSIGNED_INT_10_10_10_2:
-      case GL_UNSIGNED_INT_2_10_10_10_REV:
-       esize = 4;
-       elements = 1;
-       break;
-      default:
-       return 0;
-    }
-    return (elements * esize * w * h);
+    return __glImageSize( w, h, 1, format, type );
 }
 
 GLint __glBitmap_size(GLsizei w, GLsizei h)
@@ -190,25 +117,45 @@
 GLint __glTexParameterfv_size(GLenum e)
 {
     switch (e) {
+      case GL_TEXTURE_BORDER_COLOR:
+       return 4;
+
       case GL_TEXTURE_WRAP_S:
       case GL_TEXTURE_WRAP_T:
       case GL_TEXTURE_WRAP_R:
       case GL_TEXTURE_MIN_FILTER:
       case GL_TEXTURE_MAG_FILTER:
-       return 1;
-      case GL_TEXTURE_BORDER_COLOR:
-       return 4;
       case GL_TEXTURE_PRIORITY:
-       return 1;
+      case GL_TEXTURE_RESIDENT:
+       
+      /* GL_SGIS_texture_lod / GL_EXT_texture_lod / GL 1.2 */
       case GL_TEXTURE_MIN_LOD:
       case GL_TEXTURE_MAX_LOD:
       case GL_TEXTURE_BASE_LEVEL:
       case GL_TEXTURE_MAX_LEVEL:
+
+      /* GL_SGIX_texture_lod_bias */
+      case GL_TEXTURE_LOD_BIAS_S_SGIX:
+      case GL_TEXTURE_LOD_BIAS_T_SGIX:
+      case GL_TEXTURE_LOD_BIAS_R_SGIX:
+
+      /* GL_ARB_shadow / GL 1.4 */
+      case GL_TEXTURE_COMPARE_MODE:
+      case GL_TEXTURE_COMPARE_FUNC:
+
+      /* GL_SGIX_shadow_ambient / GL_ARB_shadow_ambient */
+      case GL_TEXTURE_COMPARE_FAIL_VALUE_ARB:
+
+      /* GL_SGIX_shadow */
+      case GL_TEXTURE_COMPARE_SGIX:
+      case GL_TEXTURE_COMPARE_OPERATOR_SGIX:
+
+      /* GL_SGIX_texture_coordinate_clamp */
+      case GL_TEXTURE_MAX_CLAMP_S_SGIX:
+      case GL_TEXTURE_MAX_CLAMP_T_SGIX:
+      case GL_TEXTURE_MAX_CLAMP_R_SGIX:
        return 1;
-      case GL_TEXTURE_COMPARE_MODE_ARB: /* GL_ARB_shadow */
-      case GL_TEXTURE_COMPARE_FUNC_ARB: /* GL_ARB_shadow */
-      case GL_TEXTURE_COMPARE_FAIL_VALUE_ARB: /* GL_ARB_shadow_ambient */
-       return 1;
+
       default:
        return 0;
     }
@@ -243,7 +190,7 @@
       case GL_OPERAND2_ALPHA_EXT:
       case GL_RGB_SCALE_EXT:
       case GL_ALPHA_SCALE:
-      /* GL_EXT_texture_lod */
+      /* GL_EXT_texture_lod_bias */
       case GL_TEXTURE_LOD_BIAS_EXT:
         return 1;
       default:
@@ -258,245 +205,18 @@
 
 GLint __glTexImage1D_size(GLenum format, GLenum type, GLsizei w)
 {
-    GLint elements, esize;
-
-    if (w < 0) return 0;
-    switch (format) {
-      case GL_COLOR_INDEX:
-       elements = 1;
-       break;
-      case GL_RED:
-      case GL_GREEN:
-      case GL_BLUE:
-      case GL_ALPHA:
-      case GL_LUMINANCE:
-      case GL_INTENSITY:
-      case GL_DEPTH_COMPONENT:
-       elements = 1;
-       break;
-      case GL_LUMINANCE_ALPHA:
-       elements = 2;
-       break;
-      case GL_RGB:
-      case GL_BGR:
-       elements = 3;
-       break;
-      case GL_RGBA:
-      case GL_BGRA:
-      case GL_ABGR_EXT:
-       elements = 4;
-       break;
-      default:
-       return 0;
-    }
-    switch (type) {
-      case GL_BITMAP:
-       if (format == GL_COLOR_INDEX) {
-           return (w+7)/8;
-       } else {
-           return 0;
-       }
-      case GL_BYTE:
-      case GL_UNSIGNED_BYTE:
-       esize = 1;
-       break;
-      case GL_UNSIGNED_BYTE_3_3_2:
-      case GL_UNSIGNED_BYTE_2_3_3_REV:
-       esize = 1;
-       elements = 1;
-       break;
-      case GL_SHORT:
-      case GL_UNSIGNED_SHORT:
-       esize = 2;
-       break;
-      case GL_UNSIGNED_SHORT_5_6_5:
-      case GL_UNSIGNED_SHORT_5_6_5_REV:
-      case GL_UNSIGNED_SHORT_4_4_4_4:
-      case GL_UNSIGNED_SHORT_4_4_4_4_REV:
-      case GL_UNSIGNED_SHORT_5_5_5_1:
-      case GL_UNSIGNED_SHORT_1_5_5_5_REV:
-       esize = 2;
-       elements = 1;
-       break;
-      case GL_INT:
-      case GL_UNSIGNED_INT:
-      case GL_FLOAT:
-       esize = 4;
-       break;
-      case GL_UNSIGNED_INT_8_8_8_8:
-      case GL_UNSIGNED_INT_8_8_8_8_REV:
-      case GL_UNSIGNED_INT_10_10_10_2:
-      case GL_UNSIGNED_INT_2_10_10_10_REV:
-       esize = 4;
-       elements = 1;
-       break;
-      default:
-       return 0;
-    }
-    return (elements * esize * w);
+    return __glImageSize( w, 1, 1, format, type );
 }
 
 GLint __glTexImage2D_size(GLenum format, GLenum type, GLsizei w, GLsizei h)
 {
-    GLint elements, esize;
-
-    if (w < 0) return 0;
-    if (h < 0) return 0;
-    switch (format) {
-      case GL_COLOR_INDEX:
-       elements = 1;
-       break;
-      case GL_RED:
-      case GL_GREEN:
-      case GL_BLUE:
-      case GL_ALPHA:
-      case GL_LUMINANCE:
-      case GL_INTENSITY:
-      case GL_DEPTH_COMPONENT:
-       elements = 1;
-       break;
-      case GL_LUMINANCE_ALPHA:
-       elements = 2;
-       break;
-      case GL_RGB:
-      case GL_BGR:
-       elements = 3;
-       break;
-      case GL_RGBA:
-      case GL_BGRA:
-      case GL_ABGR_EXT:
-       elements = 4;
-       break;
-      default:
-       return 0;
-    }
-    switch (type) {
-      case GL_BITMAP:
-       if (format == GL_COLOR_INDEX) {
-           return (h * ((w+7)/8));
-       } else {
-           return 0;
-       }
-      case GL_BYTE:
-      case GL_UNSIGNED_BYTE:
-       esize = 1;
-       break;
-      case GL_UNSIGNED_BYTE_3_3_2:
-      case GL_UNSIGNED_BYTE_2_3_3_REV:
-       esize = 1;
-       elements = 1;
-       break;
-      case GL_SHORT:
-      case GL_UNSIGNED_SHORT:
-       esize = 2;
-       break;
-      case GL_UNSIGNED_SHORT_5_6_5:
-      case GL_UNSIGNED_SHORT_5_6_5_REV:
-      case GL_UNSIGNED_SHORT_4_4_4_4:
-      case GL_UNSIGNED_SHORT_4_4_4_4_REV:
-      case GL_UNSIGNED_SHORT_5_5_5_1:
-      case GL_UNSIGNED_SHORT_1_5_5_5_REV:
-       esize = 2;
-       elements = 1;
-       break;
-      case GL_INT:
-      case GL_UNSIGNED_INT:
-      case GL_FLOAT:
-       esize = 4;
-       break;
-      case GL_UNSIGNED_INT_8_8_8_8:
-      case GL_UNSIGNED_INT_8_8_8_8_REV:
-      case GL_UNSIGNED_INT_10_10_10_2:
-      case GL_UNSIGNED_INT_2_10_10_10_REV:
-       esize = 4;
-       elements = 1;
-       break;
-      default:
-       return 0;
-    }
-    return (elements * esize * w * h);
+    return __glImageSize( w, h, 1, format, type );
 }
 
 GLint __glTexImage3D_size(GLenum format, GLenum type, GLsizei w, GLsizei h,
                          GLsizei d)
 {
-    GLint elements, esize;
-
-    if (w < 0) return 0;
-    if (h < 0) return 0;
-    if (d < 0) return 0;
-    switch (format) {
-      case GL_COLOR_INDEX:
-       elements = 1;
-       break;
-      case GL_RED:
-      case GL_GREEN:
-      case GL_BLUE:
-      case GL_ALPHA:
-      case GL_LUMINANCE:
-      case GL_INTENSITY:
-       elements = 1;
-       break;
-      case GL_LUMINANCE_ALPHA:
-       elements = 2;
-       break;
-      case GL_RGB:
-      case GL_BGR:
-       elements = 3;
-       break;
-      case GL_RGBA:
-      case GL_BGRA:
-      case GL_ABGR_EXT:
-       elements = 4;
-       break;
-      default:
-       return 0;
-    }
-    switch (type) {
-      case GL_BITMAP:
-       if (format == GL_COLOR_INDEX) {
-           return (d * (h * ((w+7)/8)));
-       } else {
-           return 0;
-       }
-      case GL_BYTE:
-      case GL_UNSIGNED_BYTE:
-       esize = 1;
-       break;
-      case GL_UNSIGNED_BYTE_3_3_2:
-      case GL_UNSIGNED_BYTE_2_3_3_REV:
-       esize = 1;
-       elements = 1;
-       break;
-      case GL_SHORT:
-      case GL_UNSIGNED_SHORT:
-       esize = 2;
-       break;
-      case GL_UNSIGNED_SHORT_5_6_5:
-      case GL_UNSIGNED_SHORT_5_6_5_REV:
-      case GL_UNSIGNED_SHORT_4_4_4_4:
-      case GL_UNSIGNED_SHORT_4_4_4_4_REV:
-      case GL_UNSIGNED_SHORT_5_5_5_1:
-      case GL_UNSIGNED_SHORT_1_5_5_5_REV:
-       esize = 2;
-       elements = 1;
-       break;
-      case GL_INT:
-      case GL_UNSIGNED_INT:
-      case GL_FLOAT:
-       esize = 4;
-       break;
-      case GL_UNSIGNED_INT_8_8_8_8:
-      case GL_UNSIGNED_INT_8_8_8_8_REV:
-      case GL_UNSIGNED_INT_10_10_10_2:
-      case GL_UNSIGNED_INT_2_10_10_10_REV:
-       esize = 4;
-       elements = 1;
-       break;
-      default:
-       return 0;
-    }
-    return (elements * esize * w * h * d);
+    return __glImageSize( w, h, d, format, type );
 }
 
 GLint __glLightfv_size(GLenum pname)
Index: lib/GL/glx/glxcmds.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/lib/GL/glx/glxcmds.c,v
retrieving revision 1.41
diff -u -d -r1.41 glxcmds.c
--- lib/GL/glx/glxcmds.c        21 May 2003 17:32:06 -0000      1.41
+++ lib/GL/glx/glxcmds.c        4 Jun 2003 03:18:03 -0000
@@ -52,6 +52,7 @@
 const char __glXGLClientExtensions[] = 
                        "GL_ARB_depth_texture "
                        "GL_ARB_imaging "
+                       "GL_ARB_multisample "
                        "GL_ARB_multitexture "
                        "GL_ARB_point_parameters "
                        "GL_ARB_shadow "
@@ -72,6 +73,7 @@
                        "GL_EXT_blend_logic_op "
                        "GL_EXT_blend_minmax "
                        "GL_EXT_blend_subtract "
+                       "GL_EXT_clip_volume_hint "
                        "GL_EXT_copy_texture "
                        "GL_EXT_draw_range_elements "
                        "GL_EXT_fog_coord "
@@ -81,23 +83,62 @@
                        "GL_EXT_rescale_normal "
                        "GL_EXT_secondary_color "
                        "GL_EXT_separate_specular_color "
+                       "GL_EXT_shadow_funcs "
                        "GL_EXT_stencil_two_side "
                        "GL_EXT_stencil_wrap "
                        "GL_EXT_subtexture "
                        "GL_EXT_texture "
                        "GL_EXT_texture3D "
+                       "GL_EXT_texture_edge_clamp "
                        "GL_EXT_texture_env_add "
                        "GL_EXT_texture_env_combine "
                        "GL_EXT_texture_env_dot3 "
+                       "GL_EXT_texture_filter_anisotropic "
+                       "GL_EXT_texture_lod "
                        "GL_EXT_texture_lod_bias "
                        "GL_EXT_texture_object "
                        "GL_EXT_vertex_array "
+                       "GL_APPLE_ycbcr_422 "
+                       "GL_ATI_texture_env_combine3 "
+                       "GL_ATI_texture_float "
+                       "GL_ATI_texture_mirror_once "
+                       "GL_ATIX_texture_env_combine3 "
+                       "GL_HP_convolution_border_modes "
+                       "GL_HP_occlusion_test "
+                       "GL_IBM_cull_vertex "
+                       "GL_IBM_pixel_filter_hint "
+                       "GL_IBM_rasterpos_clip "
+                       "GL_IBM_texture_clamp_nodraw "
                        "GL_IBM_texture_mirrored_repeat "
+                       "GL_MESA_pack_invert "
+                       "GL_MESA_ycbcr_texture "
                        "GL_NV_blend_square "
+                       "GL_NV_copy_depth_to_color "
+                       "GL_NV_depth_clamp "
+                       "GL_NV_fog_distance "
+                       "GL_NV_light_max_exponent "
+                       "GL_NV_multisample_filter_hint "
+                       "GL_NV_texgen_reflection "
+                       "GL_NV_texture_rectangle "
+                       "GL_SGIS_generate_mipmap "
                        "GL_SGIS_multisample "
                        "GL_SGIS_texture_border_clamp "
                        "GL_SGIS_texture_edge_clamp "
-                       "GL_SGIS_generate_mipmap "
+                       "GL_SGIS_texture_lod "
+                       "GL_SGIX_blend_alpha_minmax "
+                       "GL_SGIX_clipmap "
+                       "GL_SGIX_depth_texture "
+                       "GL_SGIX_fog_offset "
+                       "GL_SGIX_shadow "
+                       "GL_SGIX_shadow_ambient "
+                       "GL_SGIX_texture_coordinate_clamp "
+                       "GL_SGIX_texture_lod_bias "
+                       "GL_SGIX_texture_range "
+                       "GL_SGIX_vertex_preclip "
+                       "GL_SGIX_vertex_preclip_hint "
+                       "GL_SGIX_ycrcb "
+                       "GL_SUN_convolution_border_modes "
+                       "GL_SUN_slice_accum "
                        ;
 
 static const char __glXGLXClientVendorName[] = "SGI";
@@ -769,20 +810,22 @@
       case GLX_TRANSPARENT_INDEX_VALUE_EXT:
        *value_return = pConfig->transparentIndex;
        return Success;
-      case GLX_X_VISUAL_TYPE_EXT:
+      case GLX_X_VISUAL_TYPE:
        switch(pConfig->class) {
          case TrueColor:
-           *value_return = GLX_TRUE_COLOR_EXT;   break;
+           *value_return = GLX_TRUE_COLOR;   break;
          case DirectColor:
-           *value_return = GLX_DIRECT_COLOR_EXT; break;
+           *value_return = GLX_DIRECT_COLOR; break;
          case PseudoColor:
-           *value_return = GLX_PSEUDO_COLOR_EXT; break;
+           *value_return = GLX_PSEUDO_COLOR; break;
          case StaticColor:
-           *value_return = GLX_STATIC_COLOR_EXT; break;
+           *value_return = GLX_STATIC_COLOR; break;
          case GrayScale:
-           *value_return = GLX_GRAY_SCALE_EXT;   break;
+           *value_return = GLX_GRAY_SCALE;   break;
          case StaticGray:
-           *value_return = GLX_STATIC_GRAY_EXT;  break;
+           *value_return = GLX_STATIC_GRAY;  break;
+         default:
+           *value_return = GLX_NONE;         break;
        }
        return Success;
       case GLX_VISUAL_CAVEAT_EXT:
Index: lib/GL/glx/glxext.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/lib/GL/glx/glxext.c,v
retrieving revision 1.28
diff -u -d -r1.28 glxext.c
--- lib/GL/glx/glxext.c 13 May 2003 13:48:21 -0000      1.28
+++ lib/GL/glx/glxext.c 4 Jun 2003 03:18:04 -0000
@@ -674,12 +674,6 @@
            fb_req->reqType = priv->majorOpcode;
            fb_req->glxCode = X_GLXGetFBConfigs;
            fb_req->screen = i;
-           if (_XReply(dpy, (xReply*) &reply, 0, False)) {
-               /* Something is busted. Punt. */
-               UnlockDisplay(dpy);
-               FreeScreenConfigs(priv);
-               return GL_FALSE;
-           }
            break;
            
            case 2:
@@ -690,12 +684,6 @@
            sgi_req->glxCode = X_GLXVendorPrivateWithReply;
            sgi_req->vendorCode = X_GLXvop_GetFBConfigsSGIX;
            sgi_req->screen = i;
-           if (_XReply(dpy, (xReply*) &reply, 0, False)) {
-               /* Something is busted. Punt. */
-               UnlockDisplay(dpy);
-               FreeScreenConfigs(priv);
-               return GL_FALSE;
-           }
            break;
 
            case 3:
@@ -703,15 +691,16 @@
            req->reqType = priv->majorOpcode;
            req->glxCode = X_GLXGetVisualConfigs;
            req->screen = i;
-           if (!_XReply(dpy, (xReply*) &reply, 0, False)) {
-               /* Something is busted. Punt. */
-               UnlockDisplay(dpy);
-               FreeScreenConfigs(priv);
-               return GL_FALSE;
-           }
            break;
        }
 
+       if (!_XReply(dpy, (xReply*) &reply, 0, False)) {
+           /* Something is busted. Punt. */
+           UnlockDisplay(dpy);
+           FreeScreenConfigs(priv);
+           return GL_FALSE;
+       }
+
        UnlockDisplay(dpy);
        if (!reply.numVisuals) {
            /* This screen does not support GL rendering */
@@ -745,9 +734,11 @@
        }
 
        /* Allocate memory for the properties, if needed */
-       prop_size = (supported_request == 3)
-           ? nprops * __GLX_SIZE_INT32
-           : nprops * __GLX_SIZE_INT32 * 2;
+       if ( supported_request != 3 ) {
+           nprops *= 2;
+       }
+
+       prop_size = nprops * __GLX_SIZE_INT32;
 
        if (prop_size <= sizeof(buf)) {
            props = buf;
Index: lib/GL/glx/pixel.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/lib/GL/glx/pixel.c,v
retrieving revision 1.10
diff -u -d -r1.10 pixel.c
--- lib/GL/glx/pixel.c  25 Mar 2003 12:53:44 -0000      1.10
+++ lib/GL/glx/pixel.c  4 Jun 2003 03:18:04 -0000
@@ -97,10 +97,17 @@
     case GL_UNSIGNED_SHORT_4_4_4_4_REV:
     case GL_UNSIGNED_SHORT_5_5_5_1:
     case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+    case GL_UNSIGNED_SHORT_8_8_APPLE:
+    case GL_UNSIGNED_SHORT_8_8_REV_APPLE:
+    case GL_UNSIGNED_SHORT_15_1_MESA:
+    case GL_UNSIGNED_SHORT_1_15_REV_MESA:
     case GL_UNSIGNED_INT_8_8_8_8:
     case GL_UNSIGNED_INT_8_8_8_8_REV:
     case GL_UNSIGNED_INT_10_10_10_2:
     case GL_UNSIGNED_INT_2_10_10_10_REV:
+    case GL_UNSIGNED_INT_24_8_NV:
+    case GL_UNSIGNED_INT_24_8_MESA:
+    case GL_UNSIGNED_INT_8_24_REV_MESA:
       return 1;
     default:
       break;
@@ -110,6 +117,10 @@
       case GL_RGB:
       case GL_BGR:
        return 3;
+      case GL_422_EXT:
+      case GL_422_REV_EXT:
+      case GL_422_AVERAGE_EXT:
+      case GL_422_REV_AVERAGE_EXT:
       case GL_LUMINANCE_ALPHA:
        return 2;
       case GL_RGBA:
@@ -146,6 +157,10 @@
       case GL_UNSIGNED_SHORT_4_4_4_4_REV:
       case GL_UNSIGNED_SHORT_5_5_5_1:
       case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+      case GL_UNSIGNED_SHORT_8_8_APPLE:
+      case GL_UNSIGNED_SHORT_8_8_REV_APPLE:
+      case GL_UNSIGNED_SHORT_15_1_MESA:
+      case GL_UNSIGNED_SHORT_1_15_REV_MESA:
        return 2;
       case GL_UNSIGNED_BYTE:
       case GL_BYTE:
@@ -159,6 +174,9 @@
       case GL_UNSIGNED_INT_8_8_8_8_REV:
       case GL_UNSIGNED_INT_10_10_10_2:
       case GL_UNSIGNED_INT_2_10_10_10_REV:
+      case GL_UNSIGNED_INT_24_8_NV:
+      case GL_UNSIGNED_INT_24_8_MESA:
+      case GL_UNSIGNED_INT_8_24_REV_MESA:
        return 4;
       default:
        return 0;
Index: programs/Xserver/GL/glx/glxscreens.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/programs/Xserver/GL/glx/glxscreens.c,v
retrieving revision 1.11
diff -u -d -r1.11 glxscreens.c
--- programs/Xserver/GL/glx/glxscreens.c        30 Apr 2003 01:50:58 -0000      1.11
+++ programs/Xserver/GL/glx/glxscreens.c        4 Jun 2003 03:18:04 -0000
@@ -69,6 +69,7 @@
                        "GL_EXT_blend_logic_op "
                        "GL_EXT_blend_minmax "
                        "GL_EXT_blend_subtract "
+                       "GL_EXT_clip_volume_hint "
                        "GL_EXT_copy_texture "
                        "GL_EXT_draw_range_elements "
                        "GL_EXT_fog_coord "
@@ -78,22 +79,36 @@
                        "GL_EXT_rescale_normal "
                        "GL_EXT_secondary_color "
                        "GL_EXT_separate_specular_color "
+                       "GL_EXT_shadow_funcs "
                        "GL_EXT_stencil_two_side "
                        "GL_EXT_stencil_wrap "
                        "GL_EXT_subtexture "
                        "GL_EXT_texture "
                        "GL_EXT_texture3D "
+                       "GL_EXT_texture_edge_clamp "
                        "GL_EXT_texture_env_add "
                        "GL_EXT_texture_env_combine "
                        "GL_EXT_texture_env_dot3 "
+                       "GL_EXT_texture_lod "
                        "GL_EXT_texture_lod_bias "
                        "GL_EXT_texture_object "
                        "GL_EXT_vertex_array "
+                       "GL_APPLE_packed_pixels "
+                       "GL_ATI_texture_mirror_once "
+                       "GL_ATI_texture_env_combine3 "
+                       "GL_HP_occlusion_test "
                        "GL_IBM_texture_mirrored_repeat "
+                       "GL_MESA_pack_invert "
+                       "GL_MESA_ycbcr_texture "
                        "GL_NV_blend_square "
+                       "GL_NV_texgen_reflection "
+                       "GL_SGIS_generate_mipmap "
                        "GL_SGIS_texture_border_clamp "
                        "GL_SGIS_texture_edge_clamp "
-                       "GL_SGIS_generate_mipmap "
+                       "GL_SGIS_texture_lod "
+                       "GL_SGIX_depth_texture "
+                       "GL_SGIX_shadow "
+                       "GL_SGIX_shadow_ambient "
                        ;
 
 /*
Index: programs/Xserver/GL/glx/rensize.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/programs/Xserver/GL/glx/rensize.c,v
retrieving revision 1.7
diff -u -d -r1.7 rensize.c
--- programs/Xserver/GL/glx/rensize.c   25 Nov 2002 19:58:40 -0000      1.7
+++ programs/Xserver/GL/glx/rensize.c   4 Jun 2003 03:18:04 -0000
@@ -267,109 +267,8 @@
 int __glXImageSize( GLenum format, GLenum type, GLsizei w, GLsizei h,
               GLint rowLength, GLint skipRows, GLint alignment )
 {
-    GLint bytesPerElement, elementsPerGroup, groupsPerRow;
-    GLint groupSize, rowSize, padding;
-
-    if (w < 0 || h < 0 ||
-       (type == GL_BITMAP &&
-        (format != GL_COLOR_INDEX && format != GL_STENCIL_INDEX))) {
-       return -1;
-    }
-    if (w==0 || h==0) return 0;
-
-    if (type == GL_BITMAP) {
-       if (rowLength > 0) {
-           groupsPerRow = rowLength;
-       } else {
-           groupsPerRow = w;
-       }
-       rowSize = (groupsPerRow + 7) >> 3;
-       padding = (rowSize % alignment);
-       if (padding) {
-           rowSize += alignment - padding;
-       }
-       return ((h + skipRows) * rowSize);
-    } else {
-       switch(format) {
-         case GL_COLOR_INDEX:
-         case GL_STENCIL_INDEX:
-         case GL_DEPTH_COMPONENT:
-           elementsPerGroup = 1;
-           break;
-         case GL_RED:
-         case GL_GREEN:
-         case GL_BLUE:
-         case GL_ALPHA:
-         case GL_LUMINANCE:
-         case GL_INTENSITY:
-           elementsPerGroup = 1;
-           break;
-         case GL_LUMINANCE_ALPHA:
-           elementsPerGroup = 2;
-           break;
-         case GL_RGB:
-         case GL_BGR:
-           elementsPerGroup = 3;
-           break;
-         case GL_RGBA:
-         case GL_BGRA:
-         case GL_ABGR_EXT:
-           elementsPerGroup = 4;
-           break;
-         default:
-           return -1;
-       }
-       switch(type) {
-         case GL_UNSIGNED_BYTE:
-         case GL_BYTE:
-           bytesPerElement = 1;
-           break;
-         case GL_UNSIGNED_BYTE_3_3_2:
-         case GL_UNSIGNED_BYTE_2_3_3_REV:
-           bytesPerElement = 1;            
-           elementsPerGroup = 1;
-           break;
-         case GL_UNSIGNED_SHORT:
-         case GL_SHORT:
-           bytesPerElement = 2;
-           break;
-         case GL_UNSIGNED_SHORT_5_6_5:
-         case GL_UNSIGNED_SHORT_5_6_5_REV:
-         case GL_UNSIGNED_SHORT_4_4_4_4:
-         case GL_UNSIGNED_SHORT_4_4_4_4_REV:
-         case GL_UNSIGNED_SHORT_5_5_5_1:
-         case GL_UNSIGNED_SHORT_1_5_5_5_REV:
-           bytesPerElement = 2;
-           elementsPerGroup = 1;
-           break;
-         case GL_INT:
-         case GL_UNSIGNED_INT:
-         case GL_FLOAT:
-           bytesPerElement = 4;
-           break;
-         case GL_UNSIGNED_INT_8_8_8_8:
-         case GL_UNSIGNED_INT_8_8_8_8_REV:
-         case GL_UNSIGNED_INT_10_10_10_2:
-         case GL_UNSIGNED_INT_2_10_10_10_REV:
-           bytesPerElement = 4;
-           elementsPerGroup = 1;
-           break;
-         default:
-           return -1;
-       }
-       groupSize = bytesPerElement * elementsPerGroup;
-       if (rowLength > 0) {
-           groupsPerRow = rowLength;
-       } else {
-           groupsPerRow = w;
-       }
-       rowSize = groupsPerRow * groupSize;
-       padding = (rowSize % alignment);
-       if (padding) {
-           rowSize += alignment - padding;
-       }
-       return ((h + skipRows) * rowSize);
-    }
+    return __glXImage3DSize( format, type, w, h, 1, 0, rowLength,
+                            0, skipRows, alignment );
 }
 
 /* XXX
@@ -406,8 +305,6 @@
          case GL_COLOR_INDEX:
          case GL_STENCIL_INDEX:
          case GL_DEPTH_COMPONENT:
-           elementsPerGroup = 1;
-           break;
          case GL_RED:
          case GL_GREEN:
          case GL_BLUE:
@@ -416,6 +313,13 @@
          case GL_INTENSITY:
            elementsPerGroup = 1;
            break;
+         case GL_422_EXT:
+         case GL_422_REV_EXT:
+         case GL_422_AVERAGE_EXT:
+         case GL_422_REV_AVERAGE_EXT:
+         case GL_DEPTH_STENCIL_NV:
+         case GL_DEPTH_STENCIL_MESA:
+         case GL_YCBCR_MESA:
          case GL_LUMINANCE_ALPHA:
            elementsPerGroup = 2;
            break;
@@ -451,6 +355,10 @@
          case GL_UNSIGNED_SHORT_4_4_4_4_REV:
          case GL_UNSIGNED_SHORT_5_5_5_1:
          case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+         case GL_UNSIGNED_SHORT_8_8_APPLE:
+         case GL_UNSIGNED_SHORT_8_8_REV_APPLE:
+         case GL_UNSIGNED_SHORT_15_1_MESA:
+         case GL_UNSIGNED_SHORT_1_15_REV_MESA:
            bytesPerElement = 2;
            elementsPerGroup = 1;
            break;
@@ -463,6 +371,9 @@
          case GL_UNSIGNED_INT_8_8_8_8_REV:
          case GL_UNSIGNED_INT_10_10_10_2:
          case GL_UNSIGNED_INT_2_10_10_10_REV:
+         case GL_UNSIGNED_INT_24_8_NV:
+         case GL_UNSIGNED_INT_24_8_MESA:
+         case GL_UNSIGNED_INT_8_24_REV_MESA:
            bytesPerElement = 4;
            elementsPerGroup = 1;
            break;
Index: programs/Xserver/GL/glx/singlesize.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/programs/Xserver/GL/glx/singlesize.c,v
retrieving revision 1.6
diff -u -d -r1.6 singlesize.c
--- programs/Xserver/GL/glx/singlesize.c        25 Nov 2002 19:58:41 -0000      1.6
+++ programs/Xserver/GL/glx/singlesize.c        4 Jun 2003 03:18:04 -0000
@@ -46,101 +46,7 @@
 
 GLint __glReadPixels_size(GLenum format, GLenum type, GLint w, GLint h)
 {
-    GLint elements, esize;
-    GLint rowsize, padding;
-
-    if (w < 0 || h < 0) {
-       return -1;
-    }
-    switch (format) {
-      case GL_COLOR_INDEX:
-      case GL_STENCIL_INDEX:
-      case GL_DEPTH_COMPONENT:
-       elements = 1;
-       break;
-      case GL_RED:
-      case GL_GREEN:
-      case GL_BLUE:
-      case GL_ALPHA:
-      case GL_LUMINANCE:
-      case GL_INTENSITY:
-       elements = 1;
-       break;
-      case GL_LUMINANCE_ALPHA:
-       elements = 2;
-       break;
-      case GL_RGB:
-      case GL_BGR:
-       elements = 3;
-       break;
-      case GL_RGBA:
-      case GL_BGRA:
-      case GL_ABGR_EXT:
-       elements = 4;
-       break;
-      default:
-       return -1;
-    }
-    /*
-    ** According to the GLX protocol, each row must be padded to a multiple of
-    ** 4 bytes.  4 bytes also happens to be the default alignment in the pixel
-    ** store modes of the GL.
-    */
-    switch (type) {
-      case GL_BITMAP:
-       if (format == GL_COLOR_INDEX || format == GL_STENCIL_INDEX) {
-          rowsize = ((w * elements)+7)/8;
-          padding = rowsize % 4;
-          if (padding) {
-             rowsize += 4 - padding;
-          }
-          return (rowsize * h);
-       } else {
-          return -1;
-       }
-      case GL_BYTE:
-      case GL_UNSIGNED_BYTE:
-       esize = 1;
-       break;
-      case GL_UNSIGNED_BYTE_3_3_2:
-      case GL_UNSIGNED_BYTE_2_3_3_REV:
-       esize = 1;
-       elements = 1;
-       break;
-      case GL_SHORT:
-      case GL_UNSIGNED_SHORT:
-       esize = 2;
-       break;
-      case GL_UNSIGNED_SHORT_5_6_5:
-      case GL_UNSIGNED_SHORT_5_6_5_REV:
-      case GL_UNSIGNED_SHORT_4_4_4_4:
-      case GL_UNSIGNED_SHORT_4_4_4_4_REV:
-      case GL_UNSIGNED_SHORT_5_5_5_1:
-      case GL_UNSIGNED_SHORT_1_5_5_5_REV:
-       esize = 2;
-       elements = 1;
-       break;
-      case GL_INT:
-      case GL_UNSIGNED_INT:
-      case GL_FLOAT:
-       esize = 4;
-       break;
-      case GL_UNSIGNED_INT_8_8_8_8:
-      case GL_UNSIGNED_INT_8_8_8_8_REV:
-      case GL_UNSIGNED_INT_10_10_10_2:
-      case GL_UNSIGNED_INT_2_10_10_10_REV:
-       esize = 4;
-       elements = 1;
-       break;
-      default:
-       return -1;
-    }
-    rowsize = w * elements * esize;
-    padding = rowsize % 4;
-    if (padding) {
-       rowsize += 4 - padding;
-    }
-    return (rowsize * h);
+    return __glXImage3DSize( format, type, w, h, 1, 0, 0, 0, 0, 4 );
 }
 
 GLint __glGetTexEnvfv_size(GLenum pname)
@@ -207,27 +113,43 @@
 GLint __glGetTexParameterfv_size(GLenum pname)
 {
     switch (pname) {
+      case GL_TEXTURE_BORDER_COLOR:
+       return 4;
+
       case GL_TEXTURE_WRAP_S:
       case GL_TEXTURE_WRAP_T:
       case GL_TEXTURE_WRAP_R:
-       return 1;
       case GL_TEXTURE_MIN_FILTER:
       case GL_TEXTURE_MAG_FILTER:
-       return 1;
-      case GL_TEXTURE_BORDER_COLOR:
-       return 4;
       case GL_TEXTURE_PRIORITY:
-       return 1;
       case GL_TEXTURE_RESIDENT:
-       return 1;
+       
+      /* GL_SGIS_texture_lod / GL_EXT_texture_lod / GL 1.2 */
       case GL_TEXTURE_MIN_LOD:
       case GL_TEXTURE_MAX_LOD:
       case GL_TEXTURE_BASE_LEVEL:
       case GL_TEXTURE_MAX_LEVEL:
-       return 1;
-      case GL_TEXTURE_COMPARE_MODE_ARB: /* GL_ARB_shadow */
-      case GL_TEXTURE_COMPARE_FUNC_ARB: /* GL_ARB_shadow */
-      case GL_TEXTURE_COMPARE_FAIL_VALUE_ARB: /* GL_ARB_shadow_ambient */
+
+      /* GL_SGIX_texture_lod_bias */
+      case GL_TEXTURE_LOD_BIAS_S_SGIX:
+      case GL_TEXTURE_LOD_BIAS_T_SGIX:
+      case GL_TEXTURE_LOD_BIAS_R_SGIX:
+
+      /* GL_ARB_shadow / GL 1.4 */
+      case GL_TEXTURE_COMPARE_MODE:
+      case GL_TEXTURE_COMPARE_FUNC:
+
+      /* GL_SGIX_shadow_ambient / GL_ARB_shadow_ambient */
+      case GL_TEXTURE_COMPARE_FAIL_VALUE_ARB:
+
+      /* GL_SGIX_shadow */
+      case GL_TEXTURE_COMPARE_SGIX:
+      case GL_TEXTURE_COMPARE_OPERATOR_SGIX:
+
+      /* GL_SGIX_texture_coordinate_clamp */
+      case GL_TEXTURE_MAX_CLAMP_S_SGIX:
+      case GL_TEXTURE_MAX_CLAMP_T_SGIX:
+      case GL_TEXTURE_MAX_CLAMP_R_SGIX:
        return 1;
 
       default:
@@ -915,6 +837,14 @@
       case GL_TEXTURE_BINDING_CUBE_MAP_ARB:
       case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB:
        return 1;
+      case GL_OCCLUSION_TEST_RESULT_HP:
+       return 1;
+      case GL_PACK_INVERT_MESA:
+       return 1;
+      case GL_CULL_VERTEX_IBM:
+       return 1;
+      case GL_RASTER_POSITION_UNCLIPPED_IBM:
+       return 1;
       default:
        return -1;
     }
@@ -968,83 +898,8 @@
 GLint __glGetTexImage_size(GLenum target, GLint level, GLenum format,
                           GLenum type, GLint width, GLint height, GLint depth)
 {
-    GLint elements, esize;
-    GLint padding, rowsize;
-
-    switch (format) {
-      case GL_RGBA:
-      case GL_BGRA:
-      case GL_ABGR_EXT:
-       elements = 4;
-       break;
-      case GL_RGB:
-      case GL_BGR:
-       elements = 3;
-       break;
-      case GL_RED:
-      case GL_GREEN:
-      case GL_BLUE:
-      case GL_ALPHA:
-      case GL_LUMINANCE:
-      case GL_INTENSITY:
-      case GL_DEPTH_COMPONENT:
-       elements = 1;
-       break;
-      case GL_LUMINANCE_ALPHA:
-       elements = 2;
-       break;
-      default:
-       return -1;
-    }
-    switch (type) {
-      case GL_BYTE:
-      case GL_UNSIGNED_BYTE:
-       esize = 1;
-       break;
-      case GL_UNSIGNED_BYTE_3_3_2:
-      case GL_UNSIGNED_BYTE_2_3_3_REV:
-       esize = 1;
-       elements = 1;
-       break;
-      case GL_SHORT:
-      case GL_UNSIGNED_SHORT:
-       esize = 2;
-       break;
-      case GL_UNSIGNED_SHORT_5_6_5:
-      case GL_UNSIGNED_SHORT_5_6_5_REV:
-      case GL_UNSIGNED_SHORT_4_4_4_4:
-      case GL_UNSIGNED_SHORT_4_4_4_4_REV:
-      case GL_UNSIGNED_SHORT_5_5_5_1:
-      case GL_UNSIGNED_SHORT_1_5_5_5_REV:
-       esize = 2;
-       elements = 1;
-       break;
-      case GL_INT:
-      case GL_UNSIGNED_INT:
-      case GL_FLOAT:
-       esize = 4;
-       break;
-      case GL_UNSIGNED_INT_8_8_8_8:
-      case GL_UNSIGNED_INT_8_8_8_8_REV:
-      case GL_UNSIGNED_INT_10_10_10_2:
-      case GL_UNSIGNED_INT_2_10_10_10_REV:
-       esize = 4;
-       elements = 1;
-       break;
-      default:
-       return -1;
-    }
-    /*
-    ** According to the GLX protocol, each row must be padded to a multiple of
-    ** 4 bytes.  4 bytes also happens to be the default alignment in the pixel
-    ** store modes of the GL.
-    */
-    rowsize = width * elements * esize;
-    padding = rowsize % 4;
-    if (padding) {
-       rowsize += 4 - padding;
-    }
-    return (rowsize * height * depth);
+    return __glXImage3DSize( format, type, width, height, depth,
+                            0, 0, 0, 0, 4 );
 }
 
 GLint __glGetConvolutionParameteriv_size(GLenum pname)

Reply via email to