Mesa (master): swrast: add debug code to test combined depth/ stencil buffers

Brian Paul brianp at kemper.freedesktop.org
Tue Dec 13 13:50:31 UTC 2011


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

Author: Brian Paul <brianp at vmware.com>
Date:   Sat Dec 10 11:44:44 2011 -0700

swrast: add debug code to test combined depth/stencil buffers

Reviewed-by: Eric Anholt <eric at anholt.net>

---

 src/mesa/swrast/s_renderbuffer.c |   54 +++++++++++++++++++++++++++++++++-----
 1 files changed, 47 insertions(+), 7 deletions(-)

diff --git a/src/mesa/swrast/s_renderbuffer.c b/src/mesa/swrast/s_renderbuffer.c
index 7622e38..bb7cdeb 100644
--- a/src/mesa/swrast/s_renderbuffer.c
+++ b/src/mesa/swrast/s_renderbuffer.c
@@ -1888,6 +1888,31 @@ add_stencil_renderbuffer(struct gl_context *ctx, struct gl_framebuffer *fb,
 }
 
 
+static GLboolean
+add_depth_stencil_renderbuffer(struct gl_context *ctx,
+                               struct gl_framebuffer *fb)
+{
+   struct gl_renderbuffer *rb;
+
+   assert(fb->Attachment[BUFFER_DEPTH].Renderbuffer == NULL);
+   assert(fb->Attachment[BUFFER_STENCIL].Renderbuffer == NULL);
+
+   rb = _mesa_new_renderbuffer(ctx, 0);
+   if (!rb) {
+      _mesa_error(ctx, GL_OUT_OF_MEMORY, "Allocating depth+stencil buffer");
+      return GL_FALSE;
+   }
+
+   rb->InternalFormat = GL_DEPTH_STENCIL;
+
+   rb->AllocStorage = soft_renderbuffer_storage;
+   _mesa_add_renderbuffer(fb, BUFFER_DEPTH, rb);
+   _mesa_add_renderbuffer(fb, BUFFER_STENCIL, rb);
+
+   return GL_TRUE;
+}
+
+
 /**
  * Add a software-based accumulation renderbuffer to the given framebuffer.
  * This is a helper routine for device drivers when creating a
@@ -1999,14 +2024,29 @@ _swrast_add_soft_renderbuffers(struct gl_framebuffer *fb,
                               frontRight, backRight);
    }
 
-   if (depth) {
-      assert(fb->Visual.depthBits > 0);
-      add_depth_renderbuffer(NULL, fb, fb->Visual.depthBits);
-   }
+#if 0
+   /* This is pretty much for debugging purposes only since there's a perf
+    * hit for using combined depth/stencil in swrast.
+    */
+   if (depth && fb->Visual.depthBits == 24 &&
+       stencil && fb->Visual.stencilBits == 8) {
+      /* use combined depth/stencil buffer */
+      add_depth_stencil_renderbuffer(NULL, fb);
+   }
+   else
+#else
+   (void) add_depth_stencil_renderbuffer;
+#endif
+   {
+      if (depth) {
+         assert(fb->Visual.depthBits > 0);
+         add_depth_renderbuffer(NULL, fb, fb->Visual.depthBits);
+      }
 
-   if (stencil) {
-      assert(fb->Visual.stencilBits > 0);
-      add_stencil_renderbuffer(NULL, fb, fb->Visual.stencilBits);
+      if (stencil) {
+         assert(fb->Visual.stencilBits > 0);
+         add_stencil_renderbuffer(NULL, fb, fb->Visual.stencilBits);
+      }
    }
 
    if (accum) {




More information about the mesa-commit mailing list