From 1c7ec97ec47f294dcfc0c6a87ee26bb3565f95d4 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Thu, 1 Oct 2009 15:59:13 -0600 Subject: mesa: added _mesa_format_image_size() --- src/mesa/main/formats.c | 27 +++++++++++++++++++++++++++ src/mesa/main/formats.h | 4 ++++ 2 files changed, 31 insertions(+) (limited to 'src/mesa/main') diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c index dec3daee7c..82843a3291 100644 --- a/src/mesa/main/formats.c +++ b/src/mesa/main/formats.c @@ -593,6 +593,33 @@ _mesa_is_format_compressed(gl_format format) } +/** + * Return number of bytes needed to store an image of the given size + * in the given format. + */ +GLuint +_mesa_format_image_size(gl_format format, GLsizei width, + GLsizei height, GLsizei depth) +{ + const struct gl_format_info *info = _mesa_get_format_info(format); + if (info->BlockWidth > 1 || info->BlockHeight > 1) { + /* compressed format */ + const GLuint bw = info->BlockWidth, bh = info->BlockHeight; + const GLuint wblocks = (width + bw - 1) / bw; + const GLuint hblocks = (height + bh - 1) / bh; + const GLuint sz = wblocks * hblocks * info->BytesPerBlock; + return sz; + } + else { + /* non-compressed */ + const GLuint sz = width * height * depth * info->BytesPerBlock; + return sz; + } +} + + + + /** * Do sanity checking of the format info table. */ diff --git a/src/mesa/main/formats.h b/src/mesa/main/formats.h index 99a6534ff1..b91682809f 100644 --- a/src/mesa/main/formats.h +++ b/src/mesa/main/formats.h @@ -202,6 +202,10 @@ extern void _mesa_format_to_type_and_comps2(gl_format format, GLenum *datatype, GLuint *comps); +extern GLuint +_mesa_format_image_size(gl_format format, GLsizei width, + GLsizei height, GLsizei depth); + extern void _mesa_test_formats(void); -- cgit v1.2.3