Module: Mesa
Branch: master
Commit: e0eafde746fee546b16205e4a605e28f78e120f9
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e0eafde746fee546b16205e4a605e28f78e120f9

Author: Maciej Cencora <[email protected]>
Date:   Mon Jun 15 01:06:40 2009 +0200

r300: fix 3D textures

---

 src/mesa/drivers/dri/radeon/radeon_texture.c |   21 ++++++++++++++++++++-
 1 files changed, 20 insertions(+), 1 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_texture.c 
b/src/mesa/drivers/dri/radeon/radeon_texture.c
index 3fc750c..429ad50 100644
--- a/src/mesa/drivers/dri/radeon/radeon_texture.c
+++ b/src/mesa/drivers/dri/radeon/radeon_texture.c
@@ -614,6 +614,8 @@ static void radeon_teximage(
                        memcpy(texImage->Data, pixels, imageSize);
                } else {
                        GLuint dstRowStride;
+                       GLuint *dstImageOffsets;
+
                        if (image->mt) {
                                radeon_mipmap_level *lvl = 
&image->mt->levels[image->mtlevel];
                                dstRowStride = lvl->rowstride;
@@ -621,15 +623,32 @@ static void radeon_teximage(
                                dstRowStride = texImage->Width * 
texImage->TexFormat->TexelBytes;
                        }
 
+                       if (dims == 3) {
+                               int i;
+
+                               dstImageOffsets = _mesa_malloc(depth * 
sizeof(GLuint)) ;
+                               if (!dstImageOffsets)
+                                       _mesa_error(ctx, GL_OUT_OF_MEMORY, 
"glTexImage");
+
+                               for (i = 0; i < depth; ++i) {
+                                       dstImageOffsets[i] = 
dstRowStride/texImage->TexFormat->TexelBytes * height * i;
+                               }
+                       } else {
+                               dstImageOffsets = texImage->ImageOffsets;
+                       }
+
                        if (!texImage->TexFormat->StoreImage(ctx, dims,
                                                texImage->_BaseFormat,
                                                texImage->TexFormat,
                                                texImage->Data, 0, 0, 0, /* 
dstX/Y/Zoffset */
                                                dstRowStride,
-                                               texImage->ImageOffsets,
+                                               dstImageOffsets,
                                                width, height, depth,
                                                format, type, pixels, packing))
                                _mesa_error(ctx, GL_OUT_OF_MEMORY, 
"glTexImage");
+
+                       if (dims == 3)
+                               _mesa_free(dstImageOffsets);
                }
 
                /* SGIS_generate_mipmap */

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to