From: Eric Anholt Date: Fri, 4 Nov 2011 00:27:23 +0000 (-0700) Subject: swrast: Add support for glReadPixels() to integer types. X-Git-Tag: 062012170305~3249 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=11a90af1ef6384b3ac7730d16db9a65b4a799466;p=profile%2Fivi%2Fmesa.git swrast: Add support for glReadPixels() to integer types. With this change, i965 passes GL_EXT_texture_integer/fbo_integer_precision_clear Reviewed-by: Kenneth Graunke --- diff --git a/src/mesa/swrast/s_readpix.c b/src/mesa/swrast/s_readpix.c index 50422db..54f42db 100644 --- a/src/mesa/swrast/s_readpix.c +++ b/src/mesa/swrast/s_readpix.c @@ -236,7 +236,10 @@ slow_read_rgba_pixels( struct gl_context *ctx, GLbitfield transferOps ) { struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer; - GLfloat rgba[MAX_WIDTH][4]; + union { + float f[MAX_WIDTH][4]; + unsigned int i[MAX_WIDTH][4]; + } rgba; GLubyte *dst, *map; int dstStride, stride, j; @@ -248,11 +251,15 @@ slow_read_rgba_pixels( struct gl_context *ctx, &map, &stride); for (j = 0; j < height; j++) { - _mesa_unpack_rgba_row(_mesa_get_srgb_format_linear(rb->Format), - width, map, rgba); - _mesa_pack_rgba_span_float(ctx, width, rgba, format, type, dst, - packing, transferOps); - + if (_mesa_is_integer_format(format)) { + _mesa_unpack_int_rgba_row(rb->Format, width, map, rgba.i); + _mesa_pack_rgba_span_int(ctx, width, rgba.i, format, type, dst); + } else { + _mesa_unpack_rgba_row(_mesa_get_srgb_format_linear(rb->Format), + width, map, rgba.f); + _mesa_pack_rgba_span_float(ctx, width, rgba.f, format, type, dst, + packing, transferOps); + } dst += dstStride; map += stride; }