From: Eric Anholt Date: Tue, 24 Jan 2012 22:52:04 +0000 (-0800) Subject: mesa: Don't round-trip integer texture data through a floating point temp. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5f65598cc79eccd38bf7f95ab167ed62e575daf2;p=mesa.git mesa: Don't round-trip integer texture data through a floating point temp. This was losing bits of precision. Fixes (with the previous commits): piglit EXT_texture_integer/getteximage-clamping piglit EXT_texture_integer/getteximage-clamping GL_ARB_texture_rg oglc advanced.mipmap.upload Regresses oglc negative.typeFormatMismatch.teximage from fail to abort, because it's been hitting texstore for a format/type combo that shouldn't happen. NOTE: This is a candidate for the 8.0 branch. Reviewed-by: Brian Paul --- diff --git a/src/mesa/main/texstore.c b/src/mesa/main/texstore.c index 600dab302e9..f5cd1000446 100644 --- a/src/mesa/main/texstore.c +++ b/src/mesa/main/texstore.c @@ -3465,13 +3465,14 @@ _mesa_texstore_rgba_int8(TEXSTORE_PARAMS) } else { /* general path */ - const GLfloat *tempImage = _mesa_make_temp_float_image(ctx, dims, - baseInternalFormat, - baseFormat, - srcWidth, srcHeight, srcDepth, - srcFormat, srcType, srcAddr, - srcPacking, 0x0); - const GLfloat *src = tempImage; + const GLuint *tempImage = make_temp_uint_image(ctx, dims, + baseInternalFormat, + baseFormat, + srcWidth, srcHeight, srcDepth, + srcFormat, srcType, + srcAddr, + srcPacking); + const GLuint *src = tempImage; GLint img, row; if (!tempImage) return GL_FALSE; @@ -3534,13 +3535,14 @@ _mesa_texstore_rgba_int16(TEXSTORE_PARAMS) } else { /* general path */ - const GLfloat *tempImage = _mesa_make_temp_float_image(ctx, dims, - baseInternalFormat, - baseFormat, - srcWidth, srcHeight, srcDepth, - srcFormat, srcType, srcAddr, - srcPacking, 0x0); - const GLfloat *src = tempImage; + const GLuint *tempImage = make_temp_uint_image(ctx, dims, + baseInternalFormat, + baseFormat, + srcWidth, srcHeight, srcDepth, + srcFormat, srcType, + srcAddr, + srcPacking); + const GLuint *src = tempImage; GLint img, row; if (!tempImage) return GL_FALSE; @@ -3603,13 +3605,14 @@ _mesa_texstore_rgba_int32(TEXSTORE_PARAMS) } else { /* general path */ - const GLfloat *tempImage = _mesa_make_temp_float_image(ctx, dims, - baseInternalFormat, - baseFormat, - srcWidth, srcHeight, srcDepth, - srcFormat, srcType, srcAddr, - srcPacking, 0x0); - const GLfloat *src = tempImage; + const GLuint *tempImage = make_temp_uint_image(ctx, dims, + baseInternalFormat, + baseFormat, + srcWidth, srcHeight, srcDepth, + srcFormat, srcType, + srcAddr, + srcPacking); + const GLuint *src = tempImage; GLint img, row; if (!tempImage) return GL_FALSE;