[Mesa-dev] [PATCH] intel: Fix accum buffer mapping since the swrast rework.

nobled nobled at dreamwidth.org
Tue Jan 24 20:52:57 PST 2012


On Tue, Jan 24, 2012 at 6:59 PM, Eric Anholt <eric at anholt.net> wrote:
> A pure swrast-allocated buffer gets an irb of NULL, so we segfaulted
> in the clear-accum test.  Just look at the swrast renderbuffer pointer
> for handling swrast rbs.
> ---
>  src/mesa/drivers/dri/intel/intel_fbo.c |   12 +++++++-----
>  1 files changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c b/src/mesa/drivers/dri/intel/intel_fbo.c
> index 3a35a01..27b0bfc 100644
> --- a/src/mesa/drivers/dri/intel/intel_fbo.c
> +++ b/src/mesa/drivers/dri/intel/intel_fbo.c
> @@ -128,15 +128,16 @@ intel_map_renderbuffer(struct gl_context *ctx,
>                       GLint *out_stride)
>  {
>    struct intel_context *intel = intel_context(ctx);
> +   struct swrast_renderbuffer *srb = (struct swrast_renderbuffer *)rb;
>    struct intel_renderbuffer *irb = intel_renderbuffer(rb);
>    void *map;
>    int stride;
>
> -   if (!irb && irb->Base.Buffer) {
Isn't the problem just that this (and the other condition) is && instead of ||?

> -      /* this is a malloc'd renderbuffer (accum buffer) */
> +   if (srb->Buffer) {
> +      /* this is a malloc'd renderbuffer (accum buffer), not an irb */
>       GLint bpp = _mesa_get_format_bytes(rb->Format);
> -      GLint rowStride = irb->Base.RowStride;
> -      *out_map = (GLubyte *) irb->Base.Buffer + y * rowStride + x * bpp;
> +      GLint rowStride = srb->RowStride;
> +      *out_map = (GLubyte *) srb->Buffer + y * rowStride + x * bpp;
>       *out_stride = rowStride;
>       return;
>    }
> @@ -180,12 +181,13 @@ intel_unmap_renderbuffer(struct gl_context *ctx,
>                         struct gl_renderbuffer *rb)
>  {
>    struct intel_context *intel = intel_context(ctx);
> +   struct swrast_renderbuffer *srb = (struct swrast_renderbuffer *)rb;
>    struct intel_renderbuffer *irb = intel_renderbuffer(rb);
>
>    DBG("%s: rb %d (%s)\n", __FUNCTION__,
>        rb->Name, _mesa_get_format_name(rb->Format));
>
> -   if (!irb && irb->Base.Buffer) {
> +   if (srb->Buffer) {
>       /* this is a malloc'd renderbuffer (accum buffer) */
>       /* nothing to do */
>       return;
> --
> 1.7.7.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list