[Mesa-dev] [PATCH 5/5] st/mesa: fix ReadPixels crashes when reading depth/stencil from a FBO

Brian Paul brian.e.paul at gmail.com
Sun Aug 22 18:05:57 PDT 2010


On Sat, Aug 14, 2010 at 9:47 AM, Marek Olšák <maraeo at gmail.com> wrote:
> NOTE: This is a candidate for the 7.8 branch.
> ---
>  src/mesa/state_tracker/st_cb_readpixels.c |   13 +++++++++++--
>  1 files changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_cb_readpixels.c b/src/mesa/state_tracker/st_cb_readpixels.c
> index b8493da..3cfb262 100644
> --- a/src/mesa/state_tracker/st_cb_readpixels.c
> +++ b/src/mesa/state_tracker/st_cb_readpixels.c
> @@ -63,11 +63,16 @@ st_read_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
>  {
>    struct gl_framebuffer *fb = ctx->ReadBuffer;
>    struct pipe_context *pipe = st_context(ctx)->pipe;
> -   struct st_renderbuffer *strb = st_renderbuffer(fb->_StencilBuffer);
> +   struct st_renderbuffer *strb;
>    struct pipe_transfer *pt;
>    ubyte *stmap;
>    GLint j;
>
> +   if (fb->_StencilBuffer->Wrapped)
> +      strb = st_renderbuffer(fb->_StencilBuffer->Wrapped);
> +   else
> +      strb = st_renderbuffer(fb->_StencilBuffer);
> +
>    if (st_fb_orientation(ctx->DrawBuffer) == Y_0_TOP) {
>       y = ctx->DrawBuffer->Height - y - height;
>    }
> @@ -358,7 +363,11 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
>       return;
>    }
>    else if (format == GL_DEPTH_COMPONENT) {
> -      strb = st_renderbuffer(ctx->ReadBuffer->_DepthBuffer);
> +      struct gl_renderbuffer *depthRb = ctx->ReadBuffer->_DepthBuffer;
> +      if (depthRb->Wrapped)
> +         strb = st_renderbuffer(depthRb->Wrapped);
> +      else
> +         strb = st_renderbuffer(depthRb);
>    }
>    else {
>       /* Read color buffer */
> --
> 1.7.0.4

Thanks.  I've committed a slightly modified version of this patch.

-Brian


More information about the mesa-dev mailing list