diff options
author | José Fonseca <[email protected]> | 2009-03-06 17:57:02 +0000 |
---|---|---|
committer | José Fonseca <[email protected]> | 2009-03-06 18:04:25 +0000 |
commit | 78071fe7676adfcab44983505b0f64a31aa823b5 (patch) | |
tree | 488aacfa92a42c1ac8df34eed04f164f7b8cba87 | |
parent | 7817fea0b675686dd6b4c29c9a55b1304a3571d7 (diff) |
wgl: Choose a supported S8Z24/Z24S8/X8Z24/Z24X8.
-rw-r--r-- | src/gallium/state_trackers/wgl/shared/stw_framebuffer.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c b/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c index c70b31a4881..2b9f7ab7bd7 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c +++ b/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c @@ -79,6 +79,14 @@ window_proc( return CallWindowProc( fb->WndProc, hWnd, uMsg, wParam, lParam ); } +static INLINE boolean +stw_is_supported_depth_stencil(enum pipe_format format) +{ + struct pipe_screen *screen = stw_dev->screen; + return screen->is_format_supported(screen, format, PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); +} + /* Create a new framebuffer object which will correspond to the given HDC. */ struct stw_framebuffer * @@ -103,13 +111,27 @@ framebuffer_create( depthFormat = PIPE_FORMAT_NONE; else if (visual->depthBits <= 16) depthFormat = PIPE_FORMAT_Z16_UNORM; - else if (visual->depthBits <= 24) + else if (visual->depthBits <= 24 && visual->stencilBits != 8 && + stw_is_supported_depth_stencil(PIPE_FORMAT_X8Z24_UNORM)) { + depthFormat = PIPE_FORMAT_X8Z24_UNORM; + } + else if (visual->depthBits <= 24 && visual->stencilBits != 8 && + stw_is_supported_depth_stencil(PIPE_FORMAT_Z24X8_UNORM)) { + depthFormat = PIPE_FORMAT_Z24X8_UNORM; + } + else if (visual->depthBits <= 24 && visual->stencilBits == 8 && + stw_is_supported_depth_stencil(PIPE_FORMAT_S8Z24_UNORM)) { depthFormat = PIPE_FORMAT_S8Z24_UNORM; + } + else if (visual->depthBits <= 24 && visual->stencilBits == 8 && + stw_is_supported_depth_stencil(PIPE_FORMAT_Z24S8_UNORM)) { + depthFormat = PIPE_FORMAT_Z24S8_UNORM; + } else depthFormat = PIPE_FORMAT_Z32_UNORM; if (visual->stencilBits == 8) { - if (depthFormat == PIPE_FORMAT_S8Z24_UNORM) + if (depthFormat == PIPE_FORMAT_S8Z24_UNORM || depthFormat == PIPE_FORMAT_Z24S8_UNORM) stencilFormat = depthFormat; else stencilFormat = PIPE_FORMAT_S8_UNORM; |