intel: Fix accum buffer mapping since the swrast rework.

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.
This commit is contained in:
Eric Anholt
2012-01-24 15:52:52 -08:00
parent 3d8c27f882
commit 42e9936ce6

View File

@@ -128,15 +128,16 @@ intel_map_renderbuffer(struct gl_context *ctx,
GLint *out_stride) GLint *out_stride)
{ {
struct intel_context *intel = intel_context(ctx); struct intel_context *intel = intel_context(ctx);
struct swrast_renderbuffer *srb = (struct swrast_renderbuffer *)rb;
struct intel_renderbuffer *irb = intel_renderbuffer(rb); struct intel_renderbuffer *irb = intel_renderbuffer(rb);
void *map; void *map;
int stride; int stride;
if (!irb && irb->Base.Buffer) { if (srb->Buffer) {
/* this is a malloc'd renderbuffer (accum buffer) */ /* this is a malloc'd renderbuffer (accum buffer), not an irb */
GLint bpp = _mesa_get_format_bytes(rb->Format); GLint bpp = _mesa_get_format_bytes(rb->Format);
GLint rowStride = irb->Base.RowStride; GLint rowStride = srb->RowStride;
*out_map = (GLubyte *) irb->Base.Buffer + y * rowStride + x * bpp; *out_map = (GLubyte *) srb->Buffer + y * rowStride + x * bpp;
*out_stride = rowStride; *out_stride = rowStride;
return; return;
} }
@@ -180,12 +181,13 @@ intel_unmap_renderbuffer(struct gl_context *ctx,
struct gl_renderbuffer *rb) struct gl_renderbuffer *rb)
{ {
struct intel_context *intel = intel_context(ctx); struct intel_context *intel = intel_context(ctx);
struct swrast_renderbuffer *srb = (struct swrast_renderbuffer *)rb;
struct intel_renderbuffer *irb = intel_renderbuffer(rb); struct intel_renderbuffer *irb = intel_renderbuffer(rb);
DBG("%s: rb %d (%s)\n", __FUNCTION__, DBG("%s: rb %d (%s)\n", __FUNCTION__,
rb->Name, _mesa_get_format_name(rb->Format)); rb->Name, _mesa_get_format_name(rb->Format));
if (!irb && irb->Base.Buffer) { if (srb->Buffer) {
/* this is a malloc'd renderbuffer (accum buffer) */ /* this is a malloc'd renderbuffer (accum buffer) */
/* nothing to do */ /* nothing to do */
return; return;