summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2012-01-24 14:52:04 -0800
committerIan Romanick <ian.d.romanick@intel.com>2012-02-07 10:20:07 -0800
commit203ef2a12b8e8fa520decf9e9024329f4dc96996 (patch)
tree9b0929cac9b82da7ccd2bff8931cf5893f0af994
parent05ff4d209d67962c6f367a94dcf0045ea242d5c3 (diff)
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 <brianp@vmware.com> (cherry picked from commit 5f65598cc79eccd38bf7f95ab167ed62e575daf2)
-rw-r--r--src/mesa/main/texstore.c45
1 files changed, 24 insertions, 21 deletions
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;