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:
@@ -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;
|
||||||
|
Reference in New Issue
Block a user