radeon: add texture helper function
authorMaciej Cencora <m.cencora@gmail.com>
Sat, 9 Jan 2010 19:36:47 +0000 (20:36 +0100)
committerMaciej Cencora <m.cencora@gmail.com>
Sun, 7 Mar 2010 11:21:30 +0000 (12:21 +0100)
src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h

index cd843d965e5884b443183b3fc1b6f21fe92b83fa..117d695ce7bba5ef36130ec17d9fa139e78ba024 100644 (file)
@@ -81,6 +81,32 @@ static unsigned get_compressed_image_size(
        return rowStride * ((height + blockHeight - 1) / blockHeight);
 }
 
+static unsigned is_pot(unsigned value)
+{
+       unsigned m;
+
+       for (m = 1; m < value; m *= 2) {}
+
+       return value == m;
+}
+
+unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format format, unsigned width)
+{
+       if (_mesa_is_format_compressed(format)) {
+               return get_aligned_compressed_row_stride(format, width, rmesa->texture_compressed_row_align);
+       } else {
+               unsigned row_align;
+
+               if (is_pot(width)) {
+                       row_align = rmesa->texture_row_align - 1;
+               } else {
+                       row_align = rmesa->texture_rect_row_align - 1;
+               }
+
+               return (_mesa_format_row_stride(format, width) + row_align) & ~row_align;
+       }
+}
+
 /**
  * Compute sizes and fill in offset and blit information for the given
  * image (determined by \p face and \p level).
index c911688c1a5d2d81f29b0d43b9b1f418b75d1898..424bf5181ab11d642266d59e4ce8bc5de53c2801 100644 (file)
@@ -89,4 +89,7 @@ void radeon_try_alloc_miptree(radeonContextPtr rmesa, radeonTexObj *t);
 GLuint radeon_miptree_image_offset(radeon_mipmap_tree *mt,
                                   GLuint face, GLuint level);
 uint32_t get_base_teximage_offset(radeonTexObj *texObj);
+
+unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format format, unsigned width);
+
 #endif /* __RADEON_MIPMAP_TREE_H_ */