summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChia-I Wu <[email protected]>2010-03-12 11:20:27 +0800
committerChia-I Wu <[email protected]>2010-03-12 11:20:57 +0800
commit3475e88442c16fb2b50b903fe246b3ebe49da226 (patch)
treef0ea9f3f51f0380eee5424ef2e5d1958dd7e889b
parent72ed7eb15a12ad88647dddefde5999ddd308b9e4 (diff)
st/glx: Return a better format in choose_depth_stencil_format.
Return a better format instead of an exact format in choose_depth_stencil_format. Also, prefer formats with stencil bits.
-rw-r--r--src/gallium/state_trackers/glx/xlib/xm_api.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.c b/src/gallium/state_trackers/glx/xlib/xm_api.c
index 6a0f3146dbf..3ea4d77805f 100644
--- a/src/gallium/state_trackers/glx/xlib/xm_api.c
+++ b/src/gallium/state_trackers/glx/xlib/xm_api.c
@@ -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;