Mesa (gallium-xlib-rework): xlib: strip out some CI and overlay support

Keith Whitwell keithw at kemper.freedesktop.org
Fri Jan 9 14:38:43 UTC 2009


Module: Mesa
Branch: gallium-xlib-rework
Commit: 93bad7ffa1bde2e56b72ff7f2010e51712b39956
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=93bad7ffa1bde2e56b72ff7f2010e51712b39956

Author: Keith Whitwell <keith at tungstengraphics.com>
Date:   Fri Jan  9 11:05:03 2009 +0000

xlib: strip out some CI and overlay support

---

 src/gallium/state_trackers/xlib/fakeglx.c |  254 ++++++++++-------------------
 1 files changed, 87 insertions(+), 167 deletions(-)

diff --git a/src/gallium/state_trackers/xlib/fakeglx.c b/src/gallium/state_trackers/xlib/fakeglx.c
index e4ad6c6..65e7048 100644
--- a/src/gallium/state_trackers/xlib/fakeglx.c
+++ b/src/gallium/state_trackers/xlib/fakeglx.c
@@ -310,39 +310,23 @@ create_glx_visual( Display *dpy, XVisualInfo *visinfo )
    GLboolean alphaFlag = default_alpha_bits() > 0;
 
    if (is_usable_visual( visinfo )) {
-      if (_mesa_getenv("MESA_GLX_FORCE_CI")) {
-         /* Configure this visual as a COLOR INDEX visual. */
-         return save_glx_visual( dpy, visinfo,
-                                 GL_FALSE,   /* rgb */
-                                 GL_FALSE,  /* alpha */
-                                 GL_TRUE,   /* double */
-                                 GL_FALSE,  /* stereo */
-                                 zBits,
-                                 STENCIL_BITS,
-                                 0, 0, 0, 0, /* accum bits */
-                                 0,         /* level */
-                                 0          /* numAux */
-                               );
-      }
-      else {
-         /* Configure this visual as RGB, double-buffered, depth-buffered. */
-         /* This is surely wrong for some people's needs but what else */
-         /* can be done?  They should use glXChooseVisual(). */
-         return save_glx_visual( dpy, visinfo,
-                                 GL_TRUE,   /* rgb */
-                                 alphaFlag, /* alpha */
-                                 GL_TRUE,   /* double */
-                                 GL_FALSE,  /* stereo */
-                                 zBits,
-                                 STENCIL_BITS,
-                                 accBits, /* r */
-                                 accBits, /* g */
-                                 accBits, /* b */
-                                 accBits, /* a */
-                                 0,         /* level */
-                                 0          /* numAux */
-                               );
-      }
+      /* Configure this visual as RGB, double-buffered, depth-buffered. */
+      /* This is surely wrong for some people's needs but what else */
+      /* can be done?  They should use glXChooseVisual(). */
+      return save_glx_visual( dpy, visinfo,
+                              GL_TRUE,   /* rgb */
+                              alphaFlag, /* alpha */
+                              GL_TRUE,   /* double */
+                              GL_FALSE,  /* stereo */
+                              zBits,
+                              STENCIL_BITS,
+                              accBits, /* r */
+                              accBits, /* g */
+                              accBits, /* b */
+                              accBits, /* a */
+                              0,         /* level */
+                              0          /* numAux */
+         );
    }
    else {
       _mesa_warning(NULL, "Mesa: error in glXCreateContext: bad visual\n");
@@ -426,7 +410,7 @@ get_visual( Display *dpy, int scr, unsigned int depth, int xclass )
          return NULL;
       }
    }
-
+   
    return vis;
 }
 
@@ -479,88 +463,48 @@ get_env_visual(Display *dpy, int scr, const char *varname)
 
 
 /*
- * Select an X visual which satisfies the RGBA/CI flag and minimum depth.
- * Input:  dpy, screen - X display and screen number
- *         rgba - GL_TRUE = RGBA mode, GL_FALSE = CI mode
+ * Select an X visual which satisfies the RGBA flag and minimum depth.
+ * Input:  dpy, 
+ *         screen - X display and screen number
  *         min_depth - minimum visual depth
  *         preferred_class - preferred GLX visual class or DONT_CARE
  * Return:  pointer to an XVisualInfo or NULL.
  */
 static XVisualInfo *
-choose_x_visual( Display *dpy, int screen, GLboolean rgba, int min_depth,
+choose_x_visual( Display *dpy, int screen, int min_depth,
                  int preferred_class )
 {
    XVisualInfo *vis;
    int xclass, visclass = 0;
    int depth;
 
-   if (rgba) {
-      /* First see if the MESA_RGB_VISUAL env var is defined */
-      vis = get_env_visual( dpy, screen, "MESA_RGB_VISUAL" );
-      if (vis) {
-	 return vis;
-      }
-      /* Otherwise, search for a suitable visual */
-      if (preferred_class==DONT_CARE) {
-         for (xclass=0;xclass<6;xclass++) {
-            switch (xclass) {
-               case 0:  visclass = TrueColor;    break;
-               case 1:  visclass = DirectColor;  break;
-               case 2:  visclass = PseudoColor;  break;
-               case 3:  visclass = StaticColor;  break;
-               case 4:  visclass = GrayScale;    break;
-               case 5:  visclass = StaticGray;   break;
-            }
-            if (min_depth==0) {
-               /* start with shallowest */
-               for (depth=0;depth<=32;depth++) {
-                  if (visclass==TrueColor && depth==8) {
-                     /* Special case:  try to get 8-bit PseudoColor before */
-                     /* 8-bit TrueColor */
-                     vis = get_visual( dpy, screen, 8, PseudoColor );
-                     if (vis) {
-                        return vis;
-                     }
-                  }
-                  vis = get_visual( dpy, screen, depth, visclass );
-                  if (vis) {
-                     return vis;
-                  }
-               }
-            }
-            else {
-               /* start with deepest */
-               for (depth=32;depth>=min_depth;depth--) {
-                  if (visclass==TrueColor && depth==8) {
-                     /* Special case:  try to get 8-bit PseudoColor before */
-                     /* 8-bit TrueColor */
-                     vis = get_visual( dpy, screen, 8, PseudoColor );
-                     if (vis) {
-                        return vis;
-                     }
-                  }
-                  vis = get_visual( dpy, screen, depth, visclass );
-                  if (vis) {
-                     return vis;
-                  }
-               }
-            }
-         }
-      }
-      else {
-         /* search for a specific visual class */
-         switch (preferred_class) {
-            case GLX_TRUE_COLOR_EXT:    visclass = TrueColor;    break;
-            case GLX_DIRECT_COLOR_EXT:  visclass = DirectColor;  break;
-            case GLX_PSEUDO_COLOR_EXT:  visclass = PseudoColor;  break;
-            case GLX_STATIC_COLOR_EXT:  visclass = StaticColor;  break;
-            case GLX_GRAY_SCALE_EXT:    visclass = GrayScale;    break;
-            case GLX_STATIC_GRAY_EXT:   visclass = StaticGray;   break;
-            default:   return NULL;
+   /* First see if the MESA_RGB_VISUAL env var is defined */
+   vis = get_env_visual( dpy, screen, "MESA_RGB_VISUAL" );
+   if (vis) {
+      return vis;
+   }
+   /* Otherwise, search for a suitable visual */
+   if (preferred_class==DONT_CARE) {
+      for (xclass=0;xclass<6;xclass++) {
+         switch (xclass) {
+         case 0:  visclass = TrueColor;    break;
+         case 1:  visclass = DirectColor;  break;
+         case 2:  visclass = PseudoColor;  break;
+         case 3:  visclass = StaticColor;  break;
+         case 4:  visclass = GrayScale;    break;
+         case 5:  visclass = StaticGray;   break;
          }
          if (min_depth==0) {
             /* start with shallowest */
             for (depth=0;depth<=32;depth++) {
+               if (visclass==TrueColor && depth==8) {
+                  /* Special case:  try to get 8-bit PseudoColor before */
+                  /* 8-bit TrueColor */
+                  vis = get_visual( dpy, screen, 8, PseudoColor );
+                  if (vis) {
+                     return vis;
+                  }
+               }
                vis = get_visual( dpy, screen, depth, visclass );
                if (vis) {
                   return vis;
@@ -570,6 +514,14 @@ choose_x_visual( Display *dpy, int screen, GLboolean rgba, int min_depth,
          else {
             /* start with deepest */
             for (depth=32;depth>=min_depth;depth--) {
+               if (visclass==TrueColor && depth==8) {
+                  /* Special case:  try to get 8-bit PseudoColor before */
+                  /* 8-bit TrueColor */
+                  vis = get_visual( dpy, screen, 8, PseudoColor );
+                  if (vis) {
+                     return vis;
+                  }
+               }
                vis = get_visual( dpy, screen, depth, visclass );
                if (vis) {
                   return vis;
@@ -579,56 +531,28 @@ choose_x_visual( Display *dpy, int screen, GLboolean rgba, int min_depth,
       }
    }
    else {
-      /* First see if the MESA_CI_VISUAL env var is defined */
-      vis = get_env_visual( dpy, screen, "MESA_CI_VISUAL" );
-      if (vis) {
-	 return vis;
-      }
-      /* Otherwise, search for a suitable visual, starting with shallowest */
-      if (preferred_class==DONT_CARE) {
-         for (xclass=0;xclass<4;xclass++) {
-            switch (xclass) {
-               case 0:  visclass = PseudoColor;  break;
-               case 1:  visclass = StaticColor;  break;
-               case 2:  visclass = GrayScale;    break;
-               case 3:  visclass = StaticGray;   break;
-            }
-            /* try 8-bit up through 16-bit */
-            for (depth=8;depth<=16;depth++) {
-               vis = get_visual( dpy, screen, depth, visclass );
-               if (vis) {
-                  return vis;
-               }
-            }
-            /* try min_depth up to 8-bit */
-            for (depth=min_depth;depth<8;depth++) {
-               vis = get_visual( dpy, screen, depth, visclass );
-               if (vis) {
-                  return vis;
-               }
-            }
-         }
+      /* search for a specific visual class */
+      switch (preferred_class) {
+      case GLX_TRUE_COLOR_EXT:    visclass = TrueColor;    break;
+      case GLX_DIRECT_COLOR_EXT:  visclass = DirectColor;  break;
+      case GLX_PSEUDO_COLOR_EXT:  visclass = PseudoColor;  break;
+      case GLX_STATIC_COLOR_EXT:  visclass = StaticColor;  break;
+      case GLX_GRAY_SCALE_EXT:    visclass = GrayScale;    break;
+      case GLX_STATIC_GRAY_EXT:   visclass = StaticGray;   break;
+      default:   return NULL;
       }
-      else {
-         /* search for a specific visual class */
-         switch (preferred_class) {
-            case GLX_TRUE_COLOR_EXT:    visclass = TrueColor;    break;
-            case GLX_DIRECT_COLOR_EXT:  visclass = DirectColor;  break;
-            case GLX_PSEUDO_COLOR_EXT:  visclass = PseudoColor;  break;
-            case GLX_STATIC_COLOR_EXT:  visclass = StaticColor;  break;
-            case GLX_GRAY_SCALE_EXT:    visclass = GrayScale;    break;
-            case GLX_STATIC_GRAY_EXT:   visclass = StaticGray;   break;
-            default:   return NULL;
-         }
-         /* try 8-bit up through 16-bit */
-         for (depth=8;depth<=16;depth++) {
+      if (min_depth==0) {
+         /* start with shallowest */
+         for (depth=0;depth<=32;depth++) {
             vis = get_visual( dpy, screen, depth, visclass );
             if (vis) {
                return vis;
             }
          }
-         /* try min_depth up to 8-bit */
-         for (depth=min_depth;depth<8;depth++) {
+      }
+      else {
+         /* start with deepest */
+         for (depth=32;depth>=min_depth;depth--) {
             vis = get_visual( dpy, screen, depth, visclass );
             if (vis) {
                return vis;
@@ -990,6 +914,7 @@ choose_visual( Display *dpy, int screen, const int *list, GLboolean fbConfig )
 
    (void) caveat;
 
+
    /*
     * Since we're only simulating the GLX extension this function will never
     * find any real GL visuals.  Instead, all we can do is try to find an RGB
@@ -1007,8 +932,7 @@ choose_visual( Display *dpy, int screen, const int *list, GLboolean fbConfig )
       if (vis) {
          /* give the visual some useful GLX attributes */
          double_flag = GL_TRUE;
-         if (vis->depth > 8)
-            rgb_flag = GL_TRUE;
+         rgb_flag = GL_TRUE;
          depth_size = default_depth_bits();
          stencil_size = STENCIL_BITS;
          /* XXX accum??? */
@@ -1016,22 +940,17 @@ choose_visual( Display *dpy, int screen, const int *list, GLboolean fbConfig )
    }
    else if (level==0) {
       /* normal color planes */
-      if (rgb_flag) {
-         /* Get an RGB visual */
-         int min_rgb = min_red + min_green + min_blue;
-         if (min_rgb>1 && min_rgb<8) {
-            /* a special case to be sure we can get a monochrome visual */
-            min_rgb = 1;
-         }
-         vis = choose_x_visual( dpy, screen, rgb_flag, min_rgb, visual_type );
-      }
-      else {
-         /* Get a color index visual */
-         vis = choose_x_visual( dpy, screen, rgb_flag, min_ci, visual_type );
-         accumRedSize = accumGreenSize = accumBlueSize = accumAlphaSize = 0;
+      /* Get an RGB visual */
+      int min_rgb = min_red + min_green + min_blue;
+      if (min_rgb>1 && min_rgb<8) {
+         /* a special case to be sure we can get a monochrome visual */
+         min_rgb = 1;
       }
+      vis = choose_x_visual( dpy, screen, min_rgb, visual_type );
    }
    else {
+      _mesa_warning(NULL, "overlay not supported");
+      return NULL;
    }
 
    if (vis) {
@@ -1057,11 +976,16 @@ choose_visual( Display *dpy, int screen, const int *list, GLboolean fbConfig )
       /* we only support one size of stencil and accum buffers. */
       if (stencil_size > 0)
          stencil_size = STENCIL_BITS;
-      if (accumRedSize > 0 || accumGreenSize > 0 || accumBlueSize > 0 ||
+
+      if (accumRedSize > 0 || 
+          accumGreenSize > 0 || 
+          accumBlueSize > 0 ||
           accumAlphaSize > 0) {
+
          accumRedSize = 
-         accumGreenSize = 
-         accumBlueSize = default_accum_bits();
+            accumGreenSize = 
+            accumBlueSize = default_accum_bits();
+
          accumAlphaSize = alpha_flag ? accumRedSize : 0;
       }
 
@@ -1085,16 +1009,12 @@ Fake_glXChooseVisual( Display *dpy, int screen, int *list )
 
    xmvis = choose_visual(dpy, screen, list, GL_FALSE);
    if (xmvis) {
-#if 0
-      return xmvis->vishandle;
-#else
       /* create a new vishandle - the cached one may be stale */
       xmvis->vishandle = (XVisualInfo *) _mesa_malloc(sizeof(XVisualInfo));
       if (xmvis->vishandle) {
          _mesa_memcpy(xmvis->vishandle, xmvis->visinfo, sizeof(XVisualInfo));
       }
       return xmvis->vishandle;
-#endif
    }
    else
       return NULL;




More information about the mesa-commit mailing list