intel: fix mapping of malloc'd renderbuffers
authorBrian Paul <brianp@vmware.com>
Sat, 7 Jan 2012 22:05:35 +0000 (15:05 -0700)
committerBrian Paul <brianp@vmware.com>
Thu, 12 Jan 2012 20:49:15 +0000 (13:49 -0700)
This fixes accum buffer operations.  The accumulation buffer is the
only malloc-based renderbuffer for the intel drivers.

v2: apply x/y offset to returned pointer

NOTE: This is a candidate for the 8.0 branch.

Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/intel/intel_fbo.c

index b95193d2b6e4d0766fd14c5fcb76e2aee922be46..1d8b10e288e6e33e1b552fcbde3383600b4b0454 100644 (file)
@@ -132,6 +132,15 @@ intel_map_renderbuffer(struct gl_context *ctx,
    void *map;
    int stride;
 
+   if (!irb && rb->Data) {
+      /* this is a malloc'd renderbuffer (accum buffer) */
+      GLint bpp = _mesa_get_format_bytes(rb->Format);
+      GLint rowStride = rb->RowStride * bpp;
+      *out_map = (GLubyte *) rb->Data + y * rowStride + x * bpp;
+      *out_stride = rowStride;
+      return;
+   }
+
    /* We sometimes get called with this by our intel_span.c usage. */
    if (!irb->mt) {
       *out_map = NULL;
@@ -176,6 +185,12 @@ intel_unmap_renderbuffer(struct gl_context *ctx,
    DBG("%s: rb %d (%s)\n", __FUNCTION__,
        rb->Name, _mesa_get_format_name(rb->Format));
 
+   if (!irb && rb->Data) {
+      /* this is a malloc'd renderbuffer (accum buffer) */
+      /* nothing to do */
+      return;
+   }
+
    intel_miptree_unmap(intel, irb->mt, irb->mt_level, irb->mt_layer);
 }