diff options
author | Luca Barbieri <[email protected]> | 2010-01-10 12:04:21 -0800 |
---|---|---|
committer | Keith Whitwell <[email protected]> | 2010-01-11 10:53:02 +0000 |
commit | eea6a7639f767b1d30b6ef1f91a9c49e3f3b78f0 (patch) | |
tree | a32a5e534d4385210ad1312a9bb20ec55aab8804 /src/mesa/state_tracker | |
parent | bfcafbe15dc98d747ba4c63305c9cf2c4cdbe573 (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 <[email protected]>
Tweaks for C90 compilation.
Diffstat (limited to 'src/mesa/state_tracker')
-rw-r--r-- | src/mesa/state_tracker/st_cb_texture.c | 17 |
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 0cec23f2b3c..f01053cdacc 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 = |