diff options
author | Maciej Cencora <[email protected]> | 2010-01-09 20:36:47 +0100 |
---|---|---|
committer | Maciej Cencora <[email protected]> | 2010-03-07 12:21:30 +0100 |
commit | b078a613bedb76242af177bee12520203bd63d50 (patch) | |
tree | 04d4255bfa1424b846abdf5890e9448be927b6b2 | |
parent | 8014b5f06853a5926ee772af232abdc9cd4e90c4 (diff) |
radeon: add texture helper function
-rw-r--r-- | src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c | 26 | ||||
-rw-r--r-- | src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h | 3 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c index cd843d965e5..117d695ce7b 100644 --- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c +++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c @@ -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). diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h index c911688c1a5..424bf5181ab 100644 --- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h +++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.h @@ -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_ */ |