mesa: Refactor expected texture size check in cpal_get_info
authorIan Romanick <ian.d.romanick@intel.com>
Mon, 12 Sep 2011 16:38:52 +0000 (11:38 -0500)
committerIan Romanick <ian.d.romanick@intel.com>
Mon, 19 Sep 2011 17:04:47 +0000 (10:04 -0700)
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Tested-by: Jin Yang <jin.a.yang@intel.com>
src/mesa/main/texpal.c
src/mesa/main/texpal.h

index b2112f957a2ce8a8cefe70450327be9931e86c3c..7608087f43bcb6fc0a56f542d7cc4a8cbffd450a 100644 (file)
@@ -92,25 +92,23 @@ paletted_to_color(const struct cpal_format_info *info, const GLubyte *palette,
    }
 }
 
-
-static const struct cpal_format_info *
-cpal_get_info(GLint level, GLenum internalFormat,
-              GLsizei width, GLsizei height, GLsizei imageSize)
+unsigned
+_mesa_cpal_compressed_size(int level, GLenum internalFormat,
+                          unsigned width, unsigned height)
 {
    const struct cpal_format_info *info;
-   GLint lvl, num_levels;
-   GLsizei w, h, expect_size;
+   const int num_levels = -level + 1;
+   int lvl;
+   unsigned w, h, expect_size;
+
+   if (internalFormat < GL_PALETTE4_RGB8_OES
+       || internalFormat > GL_PALETTE8_RGB5_A1_OES) {
+      return 0;
+   }
 
    info = &formats[internalFormat - GL_PALETTE4_RGB8_OES];
    ASSERT(info->cpal_format == internalFormat);
 
-   if (level > 0) {
-      _mesa_error(_mesa_get_current_context(), GL_INVALID_VALUE,
-            "glCompressedTexImage2D(level=%d)", level);
-      return NULL;
-   }
-
-   num_levels = -level + 1;
    expect_size = info->palette_size * info->size;
    for (lvl = 0; lvl < num_levels; lvl++) {
       w = width >> lvl;
@@ -125,6 +123,27 @@ cpal_get_info(GLint level, GLenum internalFormat,
       else
          expect_size += w * h;
    }
+
+   return expect_size;
+}
+
+static const struct cpal_format_info *
+cpal_get_info(GLint level, GLenum internalFormat,
+              GLsizei width, GLsizei height, GLsizei imageSize)
+{
+   const struct cpal_format_info *info;
+
+   info = &formats[internalFormat - GL_PALETTE4_RGB8_OES];
+   ASSERT(info->cpal_format == internalFormat);
+
+   if (level > 0) {
+      _mesa_error(_mesa_get_current_context(), GL_INVALID_VALUE,
+            "glCompressedTexImage2D(level=%d)", level);
+      return NULL;
+   }
+
+   expect_size = _mesa_cpal_compressed_size(level, internalFormat,
+                                           width, height);
    if (expect_size > imageSize) {
       _mesa_error(_mesa_get_current_context(), GL_INVALID_VALUE,
             "glCompressedTexImage2D(imageSize=%d)", imageSize);
index eeff5a9e24c092535625a4549194f18010dad990..e1809995468217061691702bb502e5077d0757fd 100644 (file)
@@ -34,5 +34,8 @@ _mesa_cpal_compressed_teximage2d(GLenum target, GLint level,
                                 GLsizei width, GLsizei height,
                                 GLsizei imageSize, const void *palette);
 
+extern unsigned
+_mesa_cpal_compressed_size(int level, GLenum internalFormat,
+                          unsigned width, unsigned height);
 
 #endif /* TEXPAL_H */