Mesa (master): st/xorg: Find out correct type for depth stencil buffers

Jakob Bornecrantz wallbraker at kemper.freedesktop.org
Wed Aug 26 12:53:49 UTC 2009


Module: Mesa
Branch: master
Commit: 23fe960be0d0d27fcd676534c692ab164f854acb
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=23fe960be0d0d27fcd676534c692ab164f854acb

Author: Jakob Bornecrantz <jakob at vmware.com>
Date:   Wed Aug 26 13:45:31 2009 +0200

st/xorg: Find out correct type for depth stencil buffers

---

 src/gallium/state_trackers/xorg/xorg_dri2.c    |   12 +++++++++++-
 src/gallium/state_trackers/xorg/xorg_tracker.h |    2 ++
 2 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/src/gallium/state_trackers/xorg/xorg_dri2.c b/src/gallium/state_trackers/xorg/xorg_dri2.c
index f089965..e72710b 100644
--- a/src/gallium/state_trackers/xorg/xorg_dri2.c
+++ b/src/gallium/state_trackers/xorg/xorg_dri2.c
@@ -88,7 +88,8 @@ driCreateBuffers(DrawablePtr pDraw, unsigned int *attachments, int count)
 	    struct pipe_texture template;
 	    memset(&template, 0, sizeof(template));
 	    template.target = PIPE_TEXTURE_2D;
-	    template.format = PIPE_FORMAT_S8Z24_UNORM;
+	    template.format = ms->ds_depth_bits_last ?
+		PIPE_FORMAT_S8Z24_UNORM : PIPE_FORMAT_Z24S8_UNORM;
 	    pf_get_block(template.format, &template.block);
 	    template.width[0] = pDraw->width;
 	    template.height[0] = pDraw->height;
@@ -270,6 +271,15 @@ driScreenInit(ScreenPtr pScreen)
     dri2info.DestroyBuffers = driDestroyBuffers;
     dri2info.CopyRegion = driCopyRegion;
 
+    ms->d_depth_bits_last =
+	 ms->screen->is_format_supported(ms->screen, PIPE_FORMAT_X8Z24_UNORM,
+					 PIPE_TEXTURE_2D,
+					 PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0);
+    ms->ds_depth_bits_last =
+	 ms->screen->is_format_supported(ms->screen, PIPE_FORMAT_S8Z24_UNORM,
+					 PIPE_TEXTURE_2D,
+					 PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0);
+
     return DRI2ScreenInit(pScreen, &dri2info);
 }
 
diff --git a/src/gallium/state_trackers/xorg/xorg_tracker.h b/src/gallium/state_trackers/xorg/xorg_tracker.h
index da850bb..8c60d50 100644
--- a/src/gallium/state_trackers/xorg/xorg_tracker.h
+++ b/src/gallium/state_trackers/xorg/xorg_tracker.h
@@ -87,6 +87,8 @@ typedef struct _modesettingRec
     struct drm_api *api;
     struct pipe_screen *screen;
     struct pipe_context *ctx;
+    boolean d_depth_bits_last;
+    boolean ds_depth_bits_last;
 
     /* exa */
     void *exa;




More information about the mesa-commit mailing list