summaryrefslogtreecommitdiff
path: root/src/mesa/state_tracker
diff options
context:
space:
mode:
authorLuca Barbieri <luca@luca-barbieri.com>2010-01-10 12:04:21 -0800
committerKeith Whitwell <keithw@vmware.com>2010-01-11 10:53:02 +0000
commiteea6a7639f767b1d30b6ef1f91a9c49e3f3b78f0 (patch)
treea32a5e534d4385210ad1312a9bb20ec55aab8804 /src/mesa/state_tracker
parentbfcafbe15dc98d747ba4c63305c9cf2c4cdbe573 (diff)
Fix compressed texture loads for non-minimal pitches
The current glCompressedTexImage support in the state tracker assumes that compressed textures have minimal pitch. However, in some cases this is not true, such as for mipmaps of non-POT compressed textures on nVidia hardware. This patch adds a check and does a memcpy for each line instead of the whole image in that case. Signed-off-by: Keith Whitwell <keithw@vmware.com> Tweaks for C90 compilation.
Diffstat (limited to 'src/mesa/state_tracker')
-rw-r--r--src/mesa/state_tracker/st_cb_texture.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
index 0cec23f2b3..f01053cdac 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -680,7 +680,22 @@ st_TexImage(GLcontext * ctx,
* conversion and copy:
*/
if (compressed_src) {
- memcpy(texImage->Data, pixels, imageSize);
+ const GLuint srcImageStride = _mesa_format_row_stride(texImage->TexFormat, width);
+ if(dstRowStride == srcImageStride)
+ memcpy(texImage->Data, pixels, imageSize);
+ else
+ {
+ char *dst = texImage->Data;
+ const char *src = pixels;
+ int i;
+
+ for(i = 0; i < height; ++i)
+ {
+ memcpy(dst, src, srcImageStride);
+ dst += dstRowStride;
+ src += srcImageStride;
+ }
+ }
}
else {
const GLuint srcImageStride =