intel: Allow binding a stencil but not a depth buffer.
authorEric Anholt <eric@anholt.net>
Tue, 29 Dec 2009 02:15:06 +0000 (18:15 -0800)
committerEric Anholt <eric@anholt.net>
Tue, 29 Dec 2009 02:52:47 +0000 (18:52 -0800)
Wine's d3d9 visual.c testcase tries this a lot, so I've added some
piglit tests (fbo-nodepth-test, fbo-nostencil-test, fbo-stencil-only)
and enabled it.

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

index 05643189a21de4d230d95d20288d75e9e89101a0..97d56e4e67e3fe4a53b92a288176709d66550d13 100644 (file)
@@ -291,6 +291,12 @@ intel_draw_buffer(GLcontext * ctx, struct gl_framebuffer *fb)
       FALLBACK(intel, INTEL_FALLBACK_STENCIL_BUFFER, GL_FALSE);
    }
 
+   /* If we have a (packed) stencil buffer attached but no depth buffer,
+    * we still need to set up the shared depth/stencil state so we can use it.
+    */
+   if (depthRegion == NULL && irbStencil && irbStencil->region)
+      depthRegion = irbStencil->region;
+
    /*
     * Update depth and stencil test state
     */
index dc96b36a15da65bd1cd8bbdd729d13814297bc8c..b5ca418b0b1e86ad49bdd524430bd533e0491831 100644 (file)
@@ -591,7 +591,7 @@ intel_validate_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb)
       intel_get_renderbuffer(fb, BUFFER_STENCIL);
    int i;
 
-   if (stencilRb && stencilRb != depthRb) {
+   if (depthRb && stencilRb && stencilRb != depthRb) {
       /* we only support combined depth/stencil buffers, not separate
        * stencil buffers.
        */