st/glx: Return a better format in choose_depth_stencil_format.
authorChia-I Wu <olv@lunarg.com>
Fri, 12 Mar 2010 03:20:27 +0000 (11:20 +0800)
committerChia-I Wu <olv@lunarg.com>
Fri, 12 Mar 2010 03:20:57 +0000 (11:20 +0800)
Return a better format instead of an exact format in
choose_depth_stencil_format.  Also, prefer formats with stencil bits.

src/gallium/state_trackers/glx/xlib/xm_api.c

index 6a0f3146dbf96f4a4a7eb8fb6f6f3676ff237728..3ea4d77805fe3a37408205543001e55eb0a49a1d 100644 (file)
@@ -274,7 +274,8 @@ choose_pixel_format(XMesaVisual v)
 }
 
 /**
- * Choose a depth/stencil format for the given depth and stencil sizes.
+ * Choose a depth/stencil format that is "better" than the given depth and
+ * stencil sizes.
  */
 static enum pipe_format
 choose_depth_stencil_format(int depth, int stencil)
@@ -289,21 +290,16 @@ choose_depth_stencil_format(int depth, int stencil)
    assert(screen);
 
    count = 0;
-   switch (depth) {
-   case 16:
-      if (!stencil)
-         formats[count++] = PIPE_FORMAT_Z16_UNORM;
-      break;
-   case 24:
+   if (depth <= 24 && stencil <= 8) {
       formats[count++] = PIPE_FORMAT_S8Z24_UNORM;
       formats[count++] = PIPE_FORMAT_Z24S8_UNORM;
-      break;
-   case 32:
-      if (!stencil)
+   }
+
+   if (!stencil) {
+      if (depth <= 16)
+         formats[count++] = PIPE_FORMAT_Z16_UNORM;
+      if (depth <= 32)
          formats[count++] = PIPE_FORMAT_Z32_UNORM;
-      break;
-   default:
-      break;
    }
 
    fmt = PIPE_FORMAT_NONE;