diff options
author | Eric Anholt <[email protected]> | 2013-05-24 12:40:14 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2013-05-28 13:06:57 -0700 |
commit | 1cb8de6fff24743e479e17f023bd3a7b455b756f (patch) | |
tree | 87be645c20b00e06dc74e7ae1cc8eb200bf33036 | |
parent | 5f29dca0700c7bc87c891b1d7653ae3d798407d4 (diff) |
intel: Fix MRT handling of glBitmap().
We'd only hit color buffer 0 even if multiple draw buffers were bound.
NOTE: This is a candidate for the stable branches.
Reviewed-and-tested-by: Ian Romanick <[email protected]>
Acked-by: Paul Berry <[email protected]>
-rw-r--r-- | src/mesa/drivers/dri/intel/intel_pixel_bitmap.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_pixel_bitmap.c b/src/mesa/drivers/dri/intel/intel_pixel_bitmap.c index c538a29571a..e258945df72 100644 --- a/src/mesa/drivers/dri/intel/intel_pixel_bitmap.c +++ b/src/mesa/drivers/dri/intel/intel_pixel_bitmap.c @@ -45,6 +45,7 @@ #include "intel_context.h" #include "intel_batchbuffer.h" #include "intel_blit.h" +#include "intel_fbo.h" #include "intel_regions.h" #include "intel_buffers.h" #include "intel_pixel.h" @@ -176,8 +177,8 @@ do_blit_bitmap( struct gl_context *ctx, const GLubyte *bitmap ) { struct intel_context *intel = intel_context(ctx); - struct intel_region *dst; struct gl_framebuffer *fb = ctx->DrawBuffer; + struct intel_renderbuffer *irb; GLfloat tmpColor[4]; GLubyte ubcolor[4]; GLuint color; @@ -200,10 +201,14 @@ do_blit_bitmap( struct gl_context *ctx, } intel_prepare_render(intel); - dst = intel_drawbuf_region(intel); - if (!dst) - return false; + if (fb->_NumColorDrawBuffers != 1) { + perf_debug("accelerated glBitmap() only supports rendering to a " + "single color buffer\n"); + return false; + } + + irb = intel_renderbuffer(fb->_ColorDrawBuffers[0]); if (_mesa_is_bufferobj(unpack->BufferObj)) { bitmap = map_pbo(ctx, width, height, unpack, bitmap); @@ -222,7 +227,7 @@ do_blit_bitmap( struct gl_context *ctx, UNCLAMPED_FLOAT_TO_UBYTE(ubcolor[2], tmpColor[2]); UNCLAMPED_FLOAT_TO_UBYTE(ubcolor[3], tmpColor[3]); - if (dst->cpp == 2) + if (irb->mt->cpp == 2) color = PACK_COLOR_565(ubcolor[0], ubcolor[1], ubcolor[2]); else color = PACK_COLOR_8888(ubcolor[3], ubcolor[0], ubcolor[1], ubcolor[2]); @@ -271,14 +276,14 @@ do_blit_bitmap( struct gl_context *ctx, continue; if (!intelEmitImmediateColorExpandBlit(intel, - dst->cpp, + irb->mt->cpp, (GLubyte *)stipple, sz, color, - dst->pitch, - dst->bo, + irb->mt->region->pitch, + irb->mt->region->bo, 0, - dst->tiling, + irb->mt->region->tiling, dstx + px, dsty + py, w, h, |