[Mesa-dev] [PATCH] intel: Fix accum buffer mapping since the swrast rework.
Ian Romanick
idr at freedesktop.org
Tue Jan 24 17:55:49 PST 2012
On 01/24/2012 03:59 PM, Eric Anholt 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) {
> - /* 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;
Would it be better to use _swrast_pixel_address here?
> *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;
More information about the mesa-dev
mailing list