From b46fcf25be4d1d5a5d072fbce03c2490bf41203f Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Wed, 18 Mar 2009 08:21:32 +1000 Subject: st/dri2: use pipe_screen.is_format_supported to choose depth/stencil format --- src/gallium/state_trackers/dri2/dri_drawable.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/gallium/state_trackers/dri2/dri_drawable.c b/src/gallium/state_trackers/dri2/dri_drawable.c index aa86411190..2e3f4099e2 100644 --- a/src/gallium/state_trackers/dri2/dri_drawable.c +++ b/src/gallium/state_trackers/dri2/dri_drawable.c @@ -233,7 +233,9 @@ dri_create_buffer(__DRIscreenPrivate *sPriv, boolean isPixmap) { enum pipe_format colorFormat, depthFormat, stencilFormat; + struct dri_screen *screen = sPriv->private; struct dri_drawable *drawable = NULL; + struct pipe_screen *pscreen = screen->pipe_screen; int i; if (isPixmap) @@ -252,14 +254,26 @@ dri_create_buffer(__DRIscreenPrivate *sPriv, colorFormat = PIPE_FORMAT_A8R8G8B8_UNORM; - if (visual->depthBits) - depthFormat = PIPE_FORMAT_S8Z24_UNORM; - else + if (visual->depthBits) { + if (pscreen->is_format_supported(pscreen, PIPE_FORMAT_Z24S8_UNORM, + PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_RENDER_TARGET | + PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0)) + depthFormat = PIPE_FORMAT_Z24S8_UNORM; + else + depthFormat = PIPE_FORMAT_S8Z24_UNORM; + } else depthFormat = PIPE_FORMAT_NONE; - if (visual->stencilBits) - stencilFormat = PIPE_FORMAT_S8Z24_UNORM; - else + if (visual->stencilBits) { + if (pscreen->is_format_supported(pscreen, PIPE_FORMAT_Z24S8_UNORM, + PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_RENDER_TARGET | + PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0)) + stencilFormat = PIPE_FORMAT_Z24S8_UNORM; + else + stencilFormat = PIPE_FORMAT_S8Z24_UNORM; + } else stencilFormat = PIPE_FORMAT_NONE; drawable->stfb = st_create_framebuffer(visual, -- cgit v1.2.3