st/mesa: use the wrapped renderbuffer in CopyPixels()
authorBrian Paul <brianp@vmware.com>
Fri, 24 Sep 2010 14:26:32 +0000 (08:26 -0600)
committerBrian Paul <brianp@vmware.com>
Fri, 24 Sep 2010 14:27:06 +0000 (08:27 -0600)
Fixes assertion failures when copying stencil pixels.

NOTE: this is a candidate for the 7.9 branch.

src/mesa/state_tracker/st_cb_drawpixels.c

index 1147b1950e25bd51ffaa3627c43cb44e7adea163..fb1fec1aefd1198ac0f7d1d5a4d52ed20a140d0e 100644 (file)
@@ -832,7 +832,7 @@ copy_stencil_pixels(GLcontext *ctx, GLint srcx, GLint srcy,
                     GLsizei width, GLsizei height,
                     GLint dstx, GLint dsty)
 {
-   struct st_renderbuffer *rbDraw = st_renderbuffer(ctx->DrawBuffer->_StencilBuffer);
+   struct st_renderbuffer *rbDraw;
    struct pipe_context *pipe = st_context(ctx)->pipe;
    enum pipe_transfer_usage usage;
    struct pipe_transfer *ptDraw;
@@ -846,6 +846,13 @@ copy_stencil_pixels(GLcontext *ctx, GLint srcx, GLint srcy,
       return;
    }
 
+   /* Get the dest renderbuffer.  If there's a wrapper, use the
+    * underlying renderbuffer.
+    */
+   rbDraw = st_renderbuffer(ctx->DrawBuffer->_StencilBuffer);
+   if (rbDraw->Base.Wrapped)
+      rbDraw = st_renderbuffer(rbDraw->Base.Wrapped);
+
    /* this will do stencil pixel transfer ops */
    st_read_stencil_pixels(ctx, srcx, srcy, width, height,
                           GL_STENCIL_INDEX, GL_UNSIGNED_BYTE,
@@ -968,6 +975,9 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy,
       driver_vp = make_passthrough_vertex_shader(st, GL_TRUE);
    }
 
+   if (rbRead->Base.Wrapped)
+      rbRead = st_renderbuffer(rbRead->Base.Wrapped);
+
    sample_count = rbRead->texture->nr_samples;
    /* I believe this would be legal, presumably would need to do a resolve
       for color, and for depth/stencil spec says to just use one of the