From 0a39cb88deee338de3c82db2e70594f11ee1cc8d Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Fri, 24 May 2013 12:48:47 -0700 Subject: [PATCH] intel: Fix format handling of blit glBitmap() Any 32-bit format got ARGB8888 handling (including, say, GL_RG1616), and anything else got 16-bit (including, say, GL_R8), which could potentially hang the GPU by writing out of bounds. NOTE: This is a candidate for the stable branches. Reviewed-and-tested-by: Ian Romanick Acked-by: Paul Berry --- src/mesa/drivers/dri/intel/intel_pixel_bitmap.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_pixel_bitmap.c b/src/mesa/drivers/dri/intel/intel_pixel_bitmap.c index e258945df72..c82253a9e77 100644 --- a/src/mesa/drivers/dri/intel/intel_pixel_bitmap.c +++ b/src/mesa/drivers/dri/intel/intel_pixel_bitmap.c @@ -227,10 +227,19 @@ do_blit_bitmap( struct gl_context *ctx, UNCLAMPED_FLOAT_TO_UBYTE(ubcolor[2], tmpColor[2]); UNCLAMPED_FLOAT_TO_UBYTE(ubcolor[3], tmpColor[3]); - if (irb->mt->cpp == 2) - color = PACK_COLOR_565(ubcolor[0], ubcolor[1], ubcolor[2]); - else + switch (irb->mt->format) { + case MESA_FORMAT_ARGB8888: + case MESA_FORMAT_XRGB8888: color = PACK_COLOR_8888(ubcolor[3], ubcolor[0], ubcolor[1], ubcolor[2]); + break; + case MESA_FORMAT_RGB565: + color = PACK_COLOR_565(ubcolor[0], ubcolor[1], ubcolor[2]); + break; + default: + perf_debug("Unsupported format %s in accelerated glBitmap()\n", + _mesa_get_format_name(irb->mt->format)); + return false; + } if (!intel_check_blit_fragment_ops(ctx, tmpColor[3] == 1.0F)) return false; -- 2.30.2