mesa: Silence GCC warning 'comparison between signed and unsigned integer expressions'
[mesa.git] / src / mesa / main / texcompress_rgtc.c
index 5773459d79fe7886d182f6f134bac6fac8bf364a..7afd8ffa7a66296cbb67ac535cc469bb9969dd65 100644 (file)
 #include "colormac.h"
 #include "image.h"
 #include "macros.h"
-#include "mfeatures.h"
 #include "mipmap.h"
 #include "texcompress.h"
 #include "texcompress_rgtc.h"
 #include "texstore.h"
-#include "swrast/s_context.h"
 
 
 #define RGTC_DEBUG 0
@@ -291,113 +289,111 @@ _mesa_texstore_signed_rg_rgtc2(TEXSTORE_PARAMS)
    return GL_TRUE;
 }
 
-void
-_mesa_fetch_texel_red_rgtc1(const struct swrast_texture_image *texImage,
-                            GLint i, GLint j, GLint k, GLfloat *texel)
+
+#define TAG(x) unsigned_##x
+
+#define TYPE GLubyte
+#define T_MIN 0
+#define T_MAX 0xff
+
+#include "texcompress_rgtc_tmp.h"
+
+#undef TAG
+#undef TYPE
+#undef T_MIN
+#undef T_MAX
+
+#define TAG(x) signed_##x
+#define TYPE GLbyte
+#define T_MIN (GLbyte)-128
+#define T_MAX (GLbyte)127
+
+#include "texcompress_rgtc_tmp.h"
+
+#undef TAG
+#undef TYPE
+#undef T_MIN
+#undef T_MAX
+
+
+
+static void
+fetch_red_rgtc1(const GLubyte *map,
+                GLint rowStride, GLint i, GLint j, GLfloat *texel)
 {
    GLubyte red;
-   GLint sliceOffset = k ? texImage->ImageOffsets[k] / 2 : 0;
-   unsigned_fetch_texel_rgtc(texImage->RowStride,
-                             texImage->Map + sliceOffset,
-                             i, j, &red, 1);
+   unsigned_fetch_texel_rgtc(rowStride, map, i, j, &red, 1);
    texel[RCOMP] = UBYTE_TO_FLOAT(red);
    texel[GCOMP] = 0.0;
    texel[BCOMP] = 0.0;
    texel[ACOMP] = 1.0;
 }
 
-void
-_mesa_fetch_texel_signed_red_rgtc1(const struct swrast_texture_image *texImage,
-                                   GLint i, GLint j, GLint k, GLfloat *texel)
-{
-   GLbyte red;
-   GLint sliceOffset = k ? texImage->ImageOffsets[k] / 2 : 0;
-   signed_fetch_texel_rgtc(texImage->RowStride,
-                           (GLbyte *)(texImage->Map) + sliceOffset,
-                           i, j, &red, 1);
-   texel[RCOMP] = BYTE_TO_FLOAT_TEX(red);
-   texel[GCOMP] = 0.0;
-   texel[BCOMP] = 0.0;
-   texel[ACOMP] = 1.0;
-}
-
-void
-_mesa_fetch_texel_rg_rgtc2(const struct swrast_texture_image *texImage,
-                           GLint i, GLint j, GLint k, GLfloat *texel)
+static void
+fetch_l_latc1(const GLubyte *map,
+              GLint rowStride, GLint i, GLint j, GLfloat *texel)
 {
-   GLubyte red, green;
-   GLint sliceOffset = k ? texImage->ImageOffsets[k] : 0;
-   unsigned_fetch_texel_rgtc(texImage->RowStride,
-                             texImage->Map + sliceOffset,
-                             i, j, &red, 2);
-   unsigned_fetch_texel_rgtc(texImage->RowStride,
-                             texImage->Map + sliceOffset + 8,
-                             i, j, &green, 2);
-   texel[RCOMP] = UBYTE_TO_FLOAT(red);
-   texel[GCOMP] = UBYTE_TO_FLOAT(green);
-   texel[BCOMP] = 0.0;
+   GLubyte red;
+   unsigned_fetch_texel_rgtc(rowStride, map, i, j, &red, 1);
+   texel[RCOMP] =
+   texel[GCOMP] =
+   texel[BCOMP] = UBYTE_TO_FLOAT(red);
    texel[ACOMP] = 1.0;
 }
 
-void
-_mesa_fetch_texel_signed_rg_rgtc2(const struct swrast_texture_image *texImage,
-                                  GLint i, GLint j, GLint k, GLfloat *texel)
+static void
+fetch_signed_red_rgtc1(const GLubyte *map,
+                       GLint rowStride, GLint i, GLint j, GLfloat *texel)
 {
-   GLbyte red, green;
-   GLint sliceOffset = k ? texImage->ImageOffsets[k] : 0;
-   signed_fetch_texel_rgtc(texImage->RowStride,
-                           (GLbyte *)(texImage->Map) + sliceOffset,
-                           i, j, &red, 2);
-   signed_fetch_texel_rgtc(texImage->RowStride,
-                           (GLbyte *)(texImage->Map) + sliceOffset + 8,
-                           i, j, &green, 2);
+   GLbyte red;
+   signed_fetch_texel_rgtc(rowStride, (const GLbyte *) map,
+                           i, j, &red, 1);
    texel[RCOMP] = BYTE_TO_FLOAT_TEX(red);
-   texel[GCOMP] = BYTE_TO_FLOAT_TEX(green);
+   texel[GCOMP] = 0.0;
    texel[BCOMP] = 0.0;
    texel[ACOMP] = 1.0;
 }
 
-void
-_mesa_fetch_texel_l_latc1(const struct swrast_texture_image *texImage,
-                          GLint i, GLint j, GLint k, GLfloat *texel)
+static void
+fetch_signed_l_latc1(const GLubyte *map,
+                     GLint rowStride, GLint i, GLint j, GLfloat *texel)
 {
-   GLubyte red;
-   GLint sliceOffset = k ? texImage->ImageOffsets[k] / 2 : 0;
-   unsigned_fetch_texel_rgtc(texImage->RowStride,
-                             texImage->Map + sliceOffset,
-                             i, j, &red, 1);
+   GLbyte red;
+   signed_fetch_texel_rgtc(rowStride, (GLbyte *) map,
+                           i, j, &red, 1);
    texel[RCOMP] =
    texel[GCOMP] =
-   texel[BCOMP] = UBYTE_TO_FLOAT(red);
+   texel[BCOMP] = BYTE_TO_FLOAT(red);
    texel[ACOMP] = 1.0;
 }
 
-void
-_mesa_fetch_texel_signed_l_latc1(const struct swrast_texture_image *texImage,
-                                 GLint i, GLint j, GLint k, GLfloat *texel)
+static void
+fetch_rg_rgtc2(const GLubyte *map,
+               GLint rowStride, GLint i, GLint j, GLfloat *texel)
 {
-   GLbyte red;
-   GLint sliceOffset = k ? texImage->ImageOffsets[k] / 2 : 0;
-   signed_fetch_texel_rgtc(texImage->RowStride,
-                           (GLbyte *)(texImage->Map) + sliceOffset,
-                           i, j, &red, 1);
-   texel[RCOMP] =
-   texel[GCOMP] =
-   texel[BCOMP] = BYTE_TO_FLOAT_TEX(red);
+   GLubyte red, green;
+   unsigned_fetch_texel_rgtc(rowStride,
+                             map,
+                             i, j, &red, 2);
+   unsigned_fetch_texel_rgtc(rowStride,
+                             map + 8,
+                             i, j, &green, 2);
+   texel[RCOMP] = UBYTE_TO_FLOAT(red);
+   texel[GCOMP] = UBYTE_TO_FLOAT(green);
+   texel[BCOMP] = 0.0;
    texel[ACOMP] = 1.0;
 }
 
-void
-_mesa_fetch_texel_la_latc2(const struct swrast_texture_image *texImage,
-                           GLint i, GLint j, GLint k, GLfloat *texel)
+static void
+fetch_la_latc2(const GLubyte *map,
+               GLint rowStride, GLint i, GLint j, GLfloat *texel)
 {
    GLubyte red, green;
-   GLint sliceOffset = k ? texImage->ImageOffsets[k] : 0;
-   unsigned_fetch_texel_rgtc(texImage->RowStride,
-                             texImage->Map + sliceOffset,
+   unsigned_fetch_texel_rgtc(rowStride,
+                             map,
                              i, j, &red, 2);
-   unsigned_fetch_texel_rgtc(texImage->RowStride,
-                             texImage->Map + sliceOffset + 8,
+   unsigned_fetch_texel_rgtc(rowStride,
+                             map + 8,
                              i, j, &green, 2);
    texel[RCOMP] =
    texel[GCOMP] =
@@ -405,17 +401,35 @@ _mesa_fetch_texel_la_latc2(const struct swrast_texture_image *texImage,
    texel[ACOMP] = UBYTE_TO_FLOAT(green);
 }
 
-void
-_mesa_fetch_texel_signed_la_latc2(const struct swrast_texture_image *texImage,
-                                  GLint i, GLint j, GLint k, GLfloat *texel)
+
+static void
+fetch_signed_rg_rgtc2(const GLubyte *map,
+                      GLint rowStride, GLint i, GLint j, GLfloat *texel)
+{
+   GLbyte red, green;
+   signed_fetch_texel_rgtc(rowStride,
+                           (GLbyte *) map,
+                           i, j, &red, 2);
+   signed_fetch_texel_rgtc(rowStride,
+                           (GLbyte *) map + 8,
+                           i, j, &green, 2);
+   texel[RCOMP] = BYTE_TO_FLOAT_TEX(red);
+   texel[GCOMP] = BYTE_TO_FLOAT_TEX(green);
+   texel[BCOMP] = 0.0;
+   texel[ACOMP] = 1.0;
+}
+
+
+static void
+fetch_signed_la_latc2(const GLubyte *map,
+                      GLint rowStride, GLint i, GLint j, GLfloat *texel)
 {
    GLbyte red, green;
-   GLint sliceOffset = k ? texImage->ImageOffsets[k] : 0;
-   signed_fetch_texel_rgtc(texImage->RowStride,
-                           (GLbyte *)(texImage->Map) + sliceOffset,
+   signed_fetch_texel_rgtc(rowStride,
+                           (GLbyte *) map,
                            i, j, &red, 2);
-   signed_fetch_texel_rgtc(texImage->RowStride,
-                           (GLbyte *)(texImage->Map) + sliceOffset + 8,
+   signed_fetch_texel_rgtc(rowStride,
+                           (GLbyte *) map + 8,
                            i, j, &green, 2);
    texel[RCOMP] =
    texel[GCOMP] =
@@ -423,27 +437,28 @@ _mesa_fetch_texel_signed_la_latc2(const struct swrast_texture_image *texImage,
    texel[ACOMP] = BYTE_TO_FLOAT_TEX(green);
 }
 
-#define TAG(x) unsigned_##x
-
-#define TYPE GLubyte
-#define T_MIN 0
-#define T_MAX 0xff
-
-#include "texcompress_rgtc_tmp.h"
-
-#undef TAG
-#undef TYPE
-#undef T_MIN
-#undef T_MAX
-
-#define TAG(x) signed_##x
-#define TYPE GLbyte
-#define T_MIN (GLbyte)-128
-#define T_MAX (GLbyte)127
 
-#include "texcompress_rgtc_tmp.h"
-
-#undef TAG
-#undef TYPE
-#undef T_MIN
-#undef T_MAX
+compressed_fetch_func
+_mesa_get_compressed_rgtc_func(gl_format format)
+{
+   switch (format) {
+   case MESA_FORMAT_RED_RGTC1:
+      return fetch_red_rgtc1;
+   case MESA_FORMAT_L_LATC1:
+      return fetch_l_latc1;
+   case MESA_FORMAT_SIGNED_RED_RGTC1:
+      return fetch_signed_red_rgtc1;
+   case MESA_FORMAT_SIGNED_L_LATC1:
+      return fetch_signed_l_latc1;
+   case MESA_FORMAT_RG_RGTC2:
+      return fetch_rg_rgtc2;
+   case MESA_FORMAT_LA_LATC2:
+      return fetch_la_latc2;
+   case MESA_FORMAT_SIGNED_RG_RGTC2:
+      return fetch_signed_rg_rgtc2;
+   case MESA_FORMAT_SIGNED_LA_LATC2:
+      return fetch_signed_la_latc2;
+   default:
+      return NULL;
+   }
+}