mesa: add new texel fetch code for fxt formats
authorBrian Paul <brianp@vmware.com>
Sat, 8 Dec 2012 22:19:44 +0000 (15:19 -0700)
committerBrian Paul <brianp@vmware.com>
Fri, 14 Dec 2012 13:33:07 +0000 (06:33 -0700)
src/mesa/main/texcompress_fxt1.c
src/mesa/main/texcompress_fxt1.h

index eeed78891c96eeebb1c3fc1a3e56d4e7434c4646..6a0f8560532e6ced729e04d188008b45f2fe83bf 100644 (file)
@@ -1643,3 +1643,45 @@ fxt1_decode_1 (const void *texture, GLint stride, /* in pixels */
 
    decode_1[mode](code, t, rgba);
 }
+
+
+
+
+static void
+fetch_rgb_fxt1(const GLubyte *map, const GLuint imageOffsets[],
+               GLint rowStride, GLint i, GLint j, GLint k, GLfloat *texel)
+{
+   GLubyte rgba[4];
+   fxt1_decode_1(map, rowStride, i, j, rgba);
+   texel[RCOMP] = UBYTE_TO_FLOAT(rgba[RCOMP]);
+   texel[GCOMP] = UBYTE_TO_FLOAT(rgba[GCOMP]);
+   texel[BCOMP] = UBYTE_TO_FLOAT(rgba[BCOMP]);
+   texel[ACOMP] = 1.0F;
+}
+
+
+static void
+fetch_rgba_fxt1(const GLubyte *map, const GLuint imageOffsets[],
+                GLint rowStride, GLint i, GLint j, GLint k, GLfloat *texel)
+{
+   GLubyte rgba[4];
+   fxt1_decode_1(map, rowStride, i, j, rgba);
+   texel[RCOMP] = UBYTE_TO_FLOAT(rgba[RCOMP]);
+   texel[GCOMP] = UBYTE_TO_FLOAT(rgba[GCOMP]);
+   texel[BCOMP] = UBYTE_TO_FLOAT(rgba[BCOMP]);
+   texel[ACOMP] = UBYTE_TO_FLOAT(rgba[ACOMP]);
+}
+
+
+compressed_fetch_func
+_mesa_get_fxt_fetch_func(gl_format format)
+{
+   switch (format) {
+   case MESA_FORMAT_RGB_FXT1:
+      return fetch_rgb_fxt1;
+   case MESA_FORMAT_RGBA_FXT1:
+      return fetch_rgba_fxt1;
+   default:
+      return NULL;
+   }
+}
index 2a8b8d6538cf616f75ef8116513174a2df4c6cb4..f60f19675d2fc6ae533f9ed73b45ef384c77d21e 100644 (file)
@@ -45,4 +45,7 @@ extern void
 _mesa_fetch_texel_2d_f_rgb_fxt1(const struct swrast_texture_image *texImage,
                                 GLint i, GLint j, GLint k, GLfloat *texel);
 
+compressed_fetch_func
+_mesa_get_fxt_fetch_func(gl_format format);
+
 #endif /* TEXCOMPRESS_FXT1_H */