intel: Fix false positives in checking for non-packed depth/stencil RB.
authorEric Anholt <eric@anholt.net>
Tue, 29 Dec 2009 03:09:01 +0000 (19:09 -0800)
committerEric Anholt <eric@anholt.net>
Tue, 29 Dec 2009 03:21:27 +0000 (19:21 -0800)
The wine d3d9 visual.c testcase was tripping over this and failing.
Presumably it's binding a packed depth/stencil texture to both
stencil and depth attachment points, and we make a new renderbuffer
wrapper for each in that case.

src/mesa/drivers/dri/intel/intel_fbo.c

index b5ca418b0b1e86ad49bdd524430bd533e0491831..32c43ae1858b4a2066c90e3258a416192f88a42d 100644 (file)
@@ -592,13 +592,20 @@ intel_validate_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb)
    int i;
 
    if (depthRb && stencilRb && stencilRb != depthRb) {
-      /* we only support combined depth/stencil buffers, not separate
-       * stencil buffers.
-       */
-      DBG("Only supports combined depth/stencil (found %s, %s)\n",
-         depthRb ? _mesa_get_format_name(depthRb->Base.Format): "NULL",
-         stencilRb ? _mesa_get_format_name(stencilRb->Base.Format): "NULL");
-      fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
+      if (ctx->DrawBuffer->Attachment[BUFFER_DEPTH].Type == GL_TEXTURE &&
+         ctx->DrawBuffer->Attachment[BUFFER_STENCIL].Type == GL_TEXTURE &&
+         (ctx->DrawBuffer->Attachment[BUFFER_DEPTH].Texture->Name ==
+          ctx->DrawBuffer->Attachment[BUFFER_STENCIL].Texture->Name)) {
+        /* OK */
+      } else {
+        /* we only support combined depth/stencil buffers, not separate
+         * stencil buffers.
+         */
+        DBG("Only supports combined depth/stencil (found %s, %s)\n",
+            depthRb ? _mesa_get_format_name(depthRb->Base.Format): "NULL",
+            stencilRb ? _mesa_get_format_name(stencilRb->Base.Format): "NULL");
+        fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
+      }
    }
 
    for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) {