intel: Fix accum buffer mapping since the swrast rework.
authorEric Anholt <eric@anholt.net>
Tue, 24 Jan 2012 23:52:52 +0000 (15:52 -0800)
committerEric Anholt <eric@anholt.net>
Fri, 27 Jan 2012 19:28:16 +0000 (11:28 -0800)
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

index 3a35a01abcac43c5b0ee56f4d6c51651b738f6d5..27b0bfcd4ed2f15915b82cce5fa49db1129f3b7d 100644 (file)
@@ -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;
       *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;