st/mesa: consolidate and clean-up texture memory allocation code
authorBrian Paul <brianp@vmware.com>
Mon, 3 May 2010 21:48:00 +0000 (15:48 -0600)
committerBrian Paul <brianp@vmware.com>
Mon, 3 May 2010 21:48:00 +0000 (15:48 -0600)
src/mesa/state_tracker/st_cb_texture.c

index cd15e3a1457ab33a77547f55dc7857a0ba5f72e3..d99bba61245dcfd63522ec19a863128dae08c888 100644 (file)
@@ -555,6 +555,11 @@ st_TexImage(GLcontext * ctx,
       texImage->Border = 0;
       border = 0;
    }
+   else {
+      assert(texImage->Width == width);
+      assert(texImage->Height == height);
+      assert(texImage->Depth == depth);
+   }
 
    stImage->face = _mesa_tex_target_to_face(target);
    stImage->level = level;
@@ -666,32 +671,17 @@ st_TexImage(GLcontext * ctx,
          transfer_usage = PIPE_TRANSFER_WRITE;
 
       texImage->Data = st_texture_image_map(st, stImage, 0,
-                                            transfer_usage, 0, 0,
-                                            stImage->base.Width,
-                                            stImage->base.Height);
+                                            transfer_usage, 0, 0, width, height);
       if(stImage->transfer)
          dstRowStride = stImage->transfer->stride;
    }
    else {
       /* Allocate regular memory and store the image there temporarily.   */
-      GLint sizeInBytes;
-
-      if (_mesa_is_format_compressed(texImage->TexFormat)) {
-         sizeInBytes = _mesa_format_image_size(texImage->TexFormat,
-                                               texImage->Width,
-                                               texImage->Height,
-                                               texImage->Depth);
-         dstRowStride = _mesa_format_row_stride(texImage->TexFormat, width);
-         assert(dims != 3);
-      }
-      else {
-         GLint texelBytes;
-         texelBytes = _mesa_get_format_bytes(texImage->TexFormat);
-         dstRowStride = width * texelBytes;
-         sizeInBytes = depth * dstRowStride * height;
-      }
+      GLuint imageSize = _mesa_format_image_size(texImage->TexFormat,
+                                                 width, height, depth);
+      dstRowStride = _mesa_format_row_stride(texImage->TexFormat, width);
 
-      texImage->Data = _mesa_align_malloc(sizeInBytes, 16);
+      texImage->Data = _mesa_align_malloc(imageSize, 16);
    }
 
    if (!texImage->Data) {
@@ -754,8 +744,7 @@ st_TexImage(GLcontext * ctx,
             /* map next slice of 3D texture */
            texImage->Data = st_texture_image_map(st, stImage, i + 1,
                                                   transfer_usage, 0, 0,
-                                                  stImage->base.Width,
-                                                  stImage->base.Height);
+                                                  width, height);
            src += srcImageStride;
         }
       }