Mesa (master): util: move shared rgtc code to util (v2)

Dave Airlie airlied at kemper.freedesktop.org
Wed Sep 17 01:29:33 UTC 2014


Module: Mesa
Branch: master
Commit: ebcb2ee989b9839e52f2789a457fb806d1fad1e7
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=ebcb2ee989b9839e52f2789a457fb806d1fad1e7

Author: Dave Airlie <airlied at redhat.com>
Date:   Tue Sep 16 15:33:29 2014 +1000

util: move shared rgtc code to util (v2)

This was being shared using a ../../ get out of gallium into
mesa, and I swore when I did it I'd fix things when we got a util
dir, we did, so I have.

v2: move RGTC_DEBUG define

Reviewed-by: Jason Ekstrand <jason.ekstrand at intel.com>
Signed-off-by: Dave Airlie <airlied at redhat.com>

---

 src/gallium/auxiliary/util/u_format_latc.c     |   72 +++++--------------
 src/gallium/auxiliary/util/u_format_rgtc.c     |   92 ++++++++----------------
 src/mesa/main/texcompress_rgtc.c               |   79 +++++---------------
 src/util/Makefile.sources                      |    3 +-
 src/util/rgtc.c                                |   61 ++++++++++++++++
 src/util/rgtc.h                                |   39 ++++++++++
 src/{mesa/main => util}/texcompress_rgtc_tmp.h |   14 ++--
 7 files changed, 174 insertions(+), 186 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_format_latc.c b/src/gallium/auxiliary/util/u_format_latc.c
index caab7e8..31d72b5 100644
--- a/src/gallium/auxiliary/util/u_format_latc.c
+++ b/src/gallium/auxiliary/util/u_format_latc.c
@@ -27,27 +27,16 @@
 #include "u_format.h"
 #include "u_format_rgtc.h"
 #include "u_format_latc.h"
-
-static void u_format_unsigned_encode_rgtc_ubyte(uint8_t *blkaddr, uint8_t srccolors[4][4],
-					       int numxpixels, int numypixels);
-
-static void u_format_unsigned_fetch_texel_rgtc(unsigned srcRowStride, const uint8_t *pixdata,
-					       unsigned i, unsigned j, uint8_t *value, unsigned comps);
-
-static void u_format_signed_encode_rgtc_ubyte(int8_t *blkaddr, int8_t srccolors[4][4],
-					     int numxpixels, int numypixels);
-
-static void u_format_signed_fetch_texel_rgtc(unsigned srcRowStride, const int8_t *pixdata,
-					       unsigned i, unsigned j, int8_t *value, unsigned comps);
+#include "util/rgtc.h"
 
 void
 util_format_latc1_unorm_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j)
 {
    /* Fix warnings here: */
-   (void) u_format_unsigned_encode_rgtc_ubyte;
-   (void) u_format_signed_encode_rgtc_ubyte;
+   (void) util_format_unsigned_encode_rgtc_ubyte;
+   (void) util_format_signed_encode_rgtc_ubyte;
 
-   u_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 1);
+   util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 1);
    dst[1] = dst[0];
    dst[2] = dst[0];
    dst[3] = 255;
@@ -79,7 +68,7 @@ util_format_latc1_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, c
             for(i = 0; i < 4; ++i) {
                float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4;
                uint8_t tmp_r;
-               u_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
+               util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
                dst[0] =
                dst[1] =
                dst[2] = ubyte_to_float(tmp_r);
@@ -103,7 +92,7 @@ util_format_latc1_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigne
 {
    uint8_t tmp_r;
 
-   u_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
+   util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
    dst[0] =
    dst[1] =
    dst[2] = ubyte_to_float(tmp_r);
@@ -147,7 +136,7 @@ util_format_latc1_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, c
             for(i = 0; i < 4; ++i) {
                float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4;
                int8_t tmp_r;
-               u_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
+               util_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
                dst[0] =
                dst[1] =
                dst[2] = byte_to_float_tex(tmp_r);
@@ -165,7 +154,7 @@ util_format_latc1_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigne
 {
    int8_t tmp_r;
 
-   u_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 1);
+   util_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 1);
    dst[0] =
    dst[1] =
    dst[2] = byte_to_float_tex(tmp_r);
@@ -176,10 +165,10 @@ util_format_latc1_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigne
 void
 util_format_latc2_unorm_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j)
 {
-   u_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 2);
+   util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 2);
    dst[1] = dst[0];
    dst[2] = dst[0];
-   u_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, dst + 3, 2);
+   util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, dst + 3, 2);
 }
 
 void
@@ -213,8 +202,8 @@ util_format_latc2_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, c
             for(i = 0; i < 4; ++i) {
                float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4;
                uint8_t tmp_r, tmp_g;
-               u_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
-               u_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
+               util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
+               util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
                dst[0] =
                dst[1] =
                dst[2] = ubyte_to_float(tmp_r);
@@ -232,8 +221,8 @@ util_format_latc2_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigne
 {
    uint8_t tmp_r, tmp_g;
 
-   u_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
-   u_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
+   util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
+   util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
    dst[0] =
    dst[1] =
    dst[2] = ubyte_to_float(tmp_r);
@@ -272,8 +261,8 @@ util_format_latc2_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, c
             for(i = 0; i < 4; ++i) {
                float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4;
                int8_t tmp_r, tmp_g;
-               u_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
-               u_format_signed_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
+               util_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
+               util_format_signed_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
                dst[0] =
                dst[1] =
                dst[2] = byte_to_float_tex(tmp_r);
@@ -297,36 +286,11 @@ util_format_latc2_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigne
 {
    int8_t tmp_r, tmp_g;
 
-   u_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 2);
-   u_format_signed_fetch_texel_rgtc(0, (int8_t *)src + 8, i, j, &tmp_g, 2);
+   util_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 2);
+   util_format_signed_fetch_texel_rgtc(0, (int8_t *)src + 8, i, j, &tmp_g, 2);
    dst[0] =
    dst[1] =
    dst[2] = byte_to_float_tex(tmp_r);
    dst[3] = byte_to_float_tex(tmp_g);
 }
 
-
-#define TAG(x) u_format_unsigned_##x
-#define TYPE uint8_t
-#define T_MIN 0
-#define T_MAX 255
-
-#include "../../../mesa/main/texcompress_rgtc_tmp.h"
-
-#undef TYPE
-#undef TAG
-#undef T_MIN
-#undef T_MAX
-
-
-#define TAG(x) u_format_signed_##x
-#define TYPE int8_t
-#define T_MIN (int8_t)-128
-#define T_MAX (int8_t)127
-
-#include "../../../mesa/main/texcompress_rgtc_tmp.h"
-
-#undef TYPE
-#undef TAG
-#undef T_MIN
-#undef T_MAX
diff --git a/src/gallium/auxiliary/util/u_format_rgtc.c b/src/gallium/auxiliary/util/u_format_rgtc.c
index 758e337..1596917 100644
--- a/src/gallium/auxiliary/util/u_format_rgtc.c
+++ b/src/gallium/auxiliary/util/u_format_rgtc.c
@@ -26,23 +26,12 @@
 #include "u_math.h"
 #include "u_format.h"
 #include "u_format_rgtc.h"
-
-static void u_format_unsigned_encode_rgtc_ubyte(uint8_t *blkaddr, uint8_t srccolors[4][4],
-					       int numxpixels, int numypixels);
-
-static void u_format_unsigned_fetch_texel_rgtc(unsigned srcRowStride, const uint8_t *pixdata,
-					       unsigned i, unsigned j, uint8_t *value, unsigned comps);
-
-static void u_format_signed_encode_rgtc_ubyte(int8_t *blkaddr, int8_t srccolors[4][4],
-					     int numxpixels, int numypixels);
-
-static void u_format_signed_fetch_texel_rgtc(unsigned srcRowStride, const int8_t *pixdata,
-					       unsigned i, unsigned j, int8_t *value, unsigned comps);
+#include "util/rgtc.h"
 
 void
 util_format_rgtc1_unorm_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j)
 {
-   u_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 1);
+   util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 1);
    dst[1] = 0;
    dst[2] = 0;
    dst[3] = 255;
@@ -61,7 +50,7 @@ util_format_rgtc1_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride
          for(j = 0; j < bh; ++j) {
             for(i = 0; i < bw; ++i) {
                uint8_t *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*comps;
-	       u_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 1);
+	       util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 1);
 	       dst[1] = 0;
 	       dst[2] = 0;
 	       dst[3] = 255;
@@ -89,7 +78,7 @@ util_format_rgtc1_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride,
 	       tmp[j][i] = src_row[(y + j)*src_stride/sizeof(*src_row) + (x + i)*4];
             }
          }
-         u_format_unsigned_encode_rgtc_ubyte(dst, tmp, 4, 4);
+         util_format_unsigned_encode_rgtc_ubyte(dst, tmp, 4, 4);
          dst += bytes_per_block;
       }
       dst_row += dst_stride / sizeof(*dst_row);
@@ -108,7 +97,7 @@ util_format_rgtc1_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, c
             for(i = 0; i < 4; ++i) {
                float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4;
                uint8_t tmp_r;
-               u_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
+               util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
                dst[0] = ubyte_to_float(tmp_r);
                dst[1] = 0.0;
                dst[2] = 0.0;
@@ -136,7 +125,7 @@ util_format_rgtc1_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, c
 	       tmp[j][i] = float_to_ubyte(src_row[(y + j)*src_stride/sizeof(*src_row) + (x + i)*4]);
             }
          }
-         u_format_unsigned_encode_rgtc_ubyte(dst, tmp, 4, 4);
+         util_format_unsigned_encode_rgtc_ubyte(dst, tmp, 4, 4);
          dst += bytes_per_block;
       }
       dst_row += dst_stride / sizeof(*dst_row);
@@ -147,7 +136,7 @@ void
 util_format_rgtc1_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j)
 {
    uint8_t tmp_r;
-   u_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
+   util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
    dst[0] = ubyte_to_float(tmp_r);
    dst[1] = 0.0;
    dst[2] = 0.0;
@@ -187,7 +176,7 @@ util_format_rgtc1_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, c
 	       tmp[j][i] = float_to_byte_tex(src_row[(y + j)*src_stride/sizeof(*src_row) + (x + i)*4]);
             }
          }
-         u_format_signed_encode_rgtc_ubyte(dst, tmp, 4, 4);
+         util_format_signed_encode_rgtc_ubyte(dst, tmp, 4, 4);
          dst += bytes_per_block;
       }
       dst_row += dst_stride / sizeof(*dst_row);
@@ -206,7 +195,7 @@ util_format_rgtc1_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, c
             for(i = 0; i < 4; ++i) {
                float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4;
                int8_t tmp_r;
-               u_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
+               util_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1);
                dst[0] = byte_to_float_tex(tmp_r);
                dst[1] = 0.0;
                dst[2] = 0.0;
@@ -223,7 +212,7 @@ void
 util_format_rgtc1_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j)
 {
    int8_t tmp_r;
-   u_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 1);
+   util_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 1);
    dst[0] = byte_to_float_tex(tmp_r);
    dst[1] = 0.0;
    dst[2] = 0.0;
@@ -234,8 +223,8 @@ util_format_rgtc1_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigne
 void
 util_format_rgtc2_unorm_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j)
 {
-   u_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 2);
-   u_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, dst + 1, 2);
+   util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 2);
+   util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, dst + 1, 2);
    dst[2] = 0;
    dst[3] = 255;
 }
@@ -253,8 +242,8 @@ util_format_rgtc2_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride
          for(j = 0; j < bh; ++j) {
             for(i = 0; i < bw; ++i) {
                uint8_t *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*comps;
-	       u_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 2);
-	       u_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, dst + 1, 2);
+	       util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 2);
+	       util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, dst + 1, 2);
 	       dst[2] = 0;
 	       dst[3] = 255;
 	    }
@@ -282,8 +271,8 @@ util_format_rgtc2_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride,
 	       tmp_g[j][i] = src_row[((y + j)*src_stride/sizeof(*src_row) + (x + i)*4) + 1];
             }
          }
-         u_format_unsigned_encode_rgtc_ubyte(dst, tmp_r, 4, 4);
-         u_format_unsigned_encode_rgtc_ubyte(dst + 8, tmp_g, 4, 4);
+         util_format_unsigned_encode_rgtc_ubyte(dst, tmp_r, 4, 4);
+         util_format_unsigned_encode_rgtc_ubyte(dst + 8, tmp_g, 4, 4);
          dst += bytes_per_block;
       }
       dst_row += dst_stride / sizeof(*dst_row);
@@ -307,8 +296,8 @@ util_format_rxtc2_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, c
                tmp_g[j][i] = float_to_ubyte(src_row[(y + j)*src_stride/sizeof(*src_row) + (x + i)*4 + chan2off]);
             }
          }
-         u_format_unsigned_encode_rgtc_ubyte(dst, tmp_r, 4, 4);
-         u_format_unsigned_encode_rgtc_ubyte(dst + 8, tmp_g, 4, 4);
+         util_format_unsigned_encode_rgtc_ubyte(dst, tmp_r, 4, 4);
+         util_format_unsigned_encode_rgtc_ubyte(dst + 8, tmp_g, 4, 4);
          dst += bytes_per_block;
       }
       dst_row += dst_stride / sizeof(*dst_row);
@@ -333,8 +322,8 @@ util_format_rgtc2_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, c
             for(i = 0; i < 4; ++i) {
                float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4;
                uint8_t tmp_r, tmp_g;
-               u_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
-               u_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
+               util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
+               util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
                dst[0] = ubyte_to_float(tmp_r);
                dst[1] = ubyte_to_float(tmp_g);
                dst[2] = 0.0;
@@ -351,8 +340,8 @@ void
 util_format_rgtc2_unorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j)
 {
    uint8_t tmp_r, tmp_g;
-   u_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
-   u_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
+   util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
+   util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
    dst[0] = ubyte_to_float(tmp_r);
    dst[1] = ubyte_to_float(tmp_g);
    dst[2] = 0.0;
@@ -390,8 +379,8 @@ util_format_rgtc2_snorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, c
             for(i = 0; i < 4; ++i) {
                float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4;
                int8_t tmp_r, tmp_g;
-               u_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
-               u_format_signed_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
+               util_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2);
+               util_format_signed_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2);
                dst[0] = byte_to_float_tex(tmp_r);
                dst[1] = byte_to_float_tex(tmp_g);
                dst[2] = 0.0;
@@ -421,8 +410,8 @@ util_format_rxtc2_snorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, c
                tmp_g[j][i] = float_to_byte_tex(src_row[(y + j)*src_stride/sizeof(*src_row) + (x + i)*4 + chan2off]);
             }
          }
-         u_format_signed_encode_rgtc_ubyte(dst, tmp_r, 4, 4);
-         u_format_signed_encode_rgtc_ubyte(dst + 8, tmp_g, 4, 4);
+         util_format_signed_encode_rgtc_ubyte(dst, tmp_r, 4, 4);
+         util_format_signed_encode_rgtc_ubyte(dst + 8, tmp_g, 4, 4);
          dst += bytes_per_block;
       }
       dst_row += dst_stride / sizeof(*dst_row);
@@ -439,36 +428,11 @@ void
 util_format_rgtc2_snorm_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j)
 {
    int8_t tmp_r, tmp_g;
-   u_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 2);
-   u_format_signed_fetch_texel_rgtc(0, (int8_t *)src + 8, i, j, &tmp_g, 2);
+   util_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 2);
+   util_format_signed_fetch_texel_rgtc(0, (int8_t *)src + 8, i, j, &tmp_g, 2);
    dst[0] = byte_to_float_tex(tmp_r);
    dst[1] = byte_to_float_tex(tmp_g);
    dst[2] = 0.0;
    dst[3] = 1.0;
 }
 
-
-#define TAG(x) u_format_unsigned_##x
-#define TYPE uint8_t
-#define T_MIN 0
-#define T_MAX 255
-
-#include "../../../mesa/main/texcompress_rgtc_tmp.h"
-
-#undef TYPE
-#undef TAG
-#undef T_MIN
-#undef T_MAX
-
-
-#define TAG(x) u_format_signed_##x
-#define TYPE int8_t
-#define T_MIN (int8_t)-128
-#define T_MAX (int8_t)127
-
-#include "../../../mesa/main/texcompress_rgtc_tmp.h"
-
-#undef TYPE
-#undef TAG
-#undef T_MIN
-#undef T_MAX
diff --git a/src/mesa/main/texcompress_rgtc.c b/src/mesa/main/texcompress_rgtc.c
index 1012699..f7ee24d 100644
--- a/src/mesa/main/texcompress_rgtc.c
+++ b/src/mesa/main/texcompress_rgtc.c
@@ -40,23 +40,10 @@
 #include "macros.h"
 #include "mipmap.h"
 #include "texcompress.h"
+#include "util/rgtc.h"
 #include "texcompress_rgtc.h"
 #include "texstore.h"
 
-
-#define RGTC_DEBUG 0
-
-static void unsigned_encode_rgtc_ubyte(GLubyte *blkaddr, GLubyte srccolors[4][4],
-					GLint numxpixels, GLint numypixels);
-static void signed_encode_rgtc_ubyte(GLbyte *blkaddr, GLbyte srccolors[4][4],
-			     GLint numxpixels, GLint numypixels);
-
-static void unsigned_fetch_texel_rgtc(unsigned srcRowStride, const GLubyte *pixdata,
-				      unsigned i, unsigned j, GLubyte *value, unsigned comps);
-
-static void signed_fetch_texel_rgtc(unsigned srcRowStride, const GLbyte *pixdata,
-				      unsigned i, unsigned j, GLbyte *value, unsigned comps);
-
 static void extractsrc_u( GLubyte srcpixels[4][4], const GLubyte *srcaddr,
 			  GLint srcRowStride, GLint numxpixels, GLint numypixels, GLint comps)
 {
@@ -121,7 +108,7 @@ _mesa_texstore_red_rgtc1(TEXSTORE_PARAMS)
 	 if (srcWidth > i + 3) numxpixels = 4;
 	 else numxpixels = srcWidth - i;
 	 extractsrc_u(srcpixels, srcaddr, srcWidth, numxpixels, numypixels, 1);
-	 unsigned_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
+	 util_format_unsigned_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
 	 srcaddr += numxpixels;
 	 blkaddr += 8;
       }
@@ -168,7 +155,7 @@ _mesa_texstore_signed_red_rgtc1(TEXSTORE_PARAMS)
 	 if (srcWidth > i + 3) numxpixels = 4;
 	 else numxpixels = srcWidth - i;
 	 extractsrc_s(srcpixels, srcaddr, srcWidth, numxpixels, numypixels, 1);
-	 signed_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
+	 util_format_signed_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
 	 srcaddr += numxpixels;
 	 blkaddr += 8;
       }
@@ -216,11 +203,11 @@ _mesa_texstore_rg_rgtc2(TEXSTORE_PARAMS)
 	 if (srcWidth > i + 3) numxpixels = 4;
 	 else numxpixels = srcWidth - i;
 	 extractsrc_u(srcpixels, srcaddr, srcWidth, numxpixels, numypixels, 2);
-	 unsigned_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
+	 util_format_unsigned_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
 
 	 blkaddr += 8;
 	 extractsrc_u(srcpixels, (GLubyte *)srcaddr + 1, srcWidth, numxpixels, numypixels, 2);
-	 unsigned_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
+	 util_format_unsigned_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
 
 	 blkaddr += 8;
 
@@ -271,11 +258,11 @@ _mesa_texstore_signed_rg_rgtc2(TEXSTORE_PARAMS)
 	 else numxpixels = srcWidth - i;
 
 	 extractsrc_s(srcpixels, srcaddr, srcWidth, numxpixels, numypixels, 2);
-	 signed_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
+	 util_format_signed_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
 	 blkaddr += 8;
 
 	 extractsrc_s(srcpixels, srcaddr + 1, srcWidth, numxpixels, numypixels, 2);
-	 signed_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
+	 util_format_signed_encode_rgtc_ubyte(blkaddr, srcpixels, numxpixels, numypixels);
 	 blkaddr += 8;
 
 	 srcaddr += numxpixels * 2;
@@ -289,40 +276,12 @@ _mesa_texstore_signed_rg_rgtc2(TEXSTORE_PARAMS)
    return GL_TRUE;
 }
 
-
-#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;
-   unsigned_fetch_texel_rgtc(rowStride, map, i, j, &red, 1);
+   util_format_unsigned_fetch_texel_rgtc(rowStride, map, i, j, &red, 1);
    texel[RCOMP] = UBYTE_TO_FLOAT(red);
    texel[GCOMP] = 0.0;
    texel[BCOMP] = 0.0;
@@ -334,7 +293,7 @@ fetch_l_latc1(const GLubyte *map,
               GLint rowStride, GLint i, GLint j, GLfloat *texel)
 {
    GLubyte red;
-   unsigned_fetch_texel_rgtc(rowStride, map, i, j, &red, 1);
+   util_format_unsigned_fetch_texel_rgtc(rowStride, map, i, j, &red, 1);
    texel[RCOMP] =
    texel[GCOMP] =
    texel[BCOMP] = UBYTE_TO_FLOAT(red);
@@ -346,7 +305,7 @@ fetch_signed_red_rgtc1(const GLubyte *map,
                        GLint rowStride, GLint i, GLint j, GLfloat *texel)
 {
    GLbyte red;
-   signed_fetch_texel_rgtc(rowStride, (const GLbyte *) map,
+   util_format_signed_fetch_texel_rgtc(rowStride, (const GLbyte *) map,
                            i, j, &red, 1);
    texel[RCOMP] = BYTE_TO_FLOAT_TEX(red);
    texel[GCOMP] = 0.0;
@@ -359,7 +318,7 @@ fetch_signed_l_latc1(const GLubyte *map,
                      GLint rowStride, GLint i, GLint j, GLfloat *texel)
 {
    GLbyte red;
-   signed_fetch_texel_rgtc(rowStride, (GLbyte *) map,
+   util_format_signed_fetch_texel_rgtc(rowStride, (GLbyte *) map,
                            i, j, &red, 1);
    texel[RCOMP] =
    texel[GCOMP] =
@@ -372,10 +331,10 @@ fetch_rg_rgtc2(const GLubyte *map,
                GLint rowStride, GLint i, GLint j, GLfloat *texel)
 {
    GLubyte red, green;
-   unsigned_fetch_texel_rgtc(rowStride,
+   util_format_unsigned_fetch_texel_rgtc(rowStride,
                              map,
                              i, j, &red, 2);
-   unsigned_fetch_texel_rgtc(rowStride,
+   util_format_unsigned_fetch_texel_rgtc(rowStride,
                              map + 8,
                              i, j, &green, 2);
    texel[RCOMP] = UBYTE_TO_FLOAT(red);
@@ -389,10 +348,10 @@ fetch_la_latc2(const GLubyte *map,
                GLint rowStride, GLint i, GLint j, GLfloat *texel)
 {
    GLubyte red, green;
-   unsigned_fetch_texel_rgtc(rowStride,
+   util_format_unsigned_fetch_texel_rgtc(rowStride,
                              map,
                              i, j, &red, 2);
-   unsigned_fetch_texel_rgtc(rowStride,
+   util_format_unsigned_fetch_texel_rgtc(rowStride,
                              map + 8,
                              i, j, &green, 2);
    texel[RCOMP] =
@@ -407,10 +366,10 @@ fetch_signed_rg_rgtc2(const GLubyte *map,
                       GLint rowStride, GLint i, GLint j, GLfloat *texel)
 {
    GLbyte red, green;
-   signed_fetch_texel_rgtc(rowStride,
+   util_format_signed_fetch_texel_rgtc(rowStride,
                            (GLbyte *) map,
                            i, j, &red, 2);
-   signed_fetch_texel_rgtc(rowStride,
+   util_format_signed_fetch_texel_rgtc(rowStride,
                            (GLbyte *) map + 8,
                            i, j, &green, 2);
    texel[RCOMP] = BYTE_TO_FLOAT_TEX(red);
@@ -425,10 +384,10 @@ fetch_signed_la_latc2(const GLubyte *map,
                       GLint rowStride, GLint i, GLint j, GLfloat *texel)
 {
    GLbyte red, green;
-   signed_fetch_texel_rgtc(rowStride,
+   util_format_signed_fetch_texel_rgtc(rowStride,
                            (GLbyte *) map,
                            i, j, &red, 2);
-   signed_fetch_texel_rgtc(rowStride,
+   util_format_signed_fetch_texel_rgtc(rowStride,
                            (GLbyte *) map + 8,
                            i, j, &green, 2);
    texel[RCOMP] =
diff --git a/src/util/Makefile.sources b/src/util/Makefile.sources
index b99aa25..c34475a 100644
--- a/src/util/Makefile.sources
+++ b/src/util/Makefile.sources
@@ -1,6 +1,7 @@
 MESA_UTIL_FILES :=	\
 	hash_table.c	\
-	ralloc.c
+	ralloc.c \
+	rgtc.c
 
 MESA_UTIL_GENERATED_FILES = \
 	format_srgb.c
diff --git a/src/util/rgtc.c b/src/util/rgtc.c
new file mode 100644
index 0000000..6886ac0
--- /dev/null
+++ b/src/util/rgtc.c
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2011 Red Hat Inc.
+ * 
+ * block compression parts are:
+ * Copyright (C) 2004  Roland Scheidegger   All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Author:
+ *    Dave Airlie
+ */
+
+#include <inttypes.h>
+#include "macros.h"
+
+#include "rgtc.h"
+
+#define RGTC_DEBUG 0
+
+#define TAG(x) util_format_unsigned_##x
+
+#define TYPE unsigned char
+#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) util_format_signed_##x
+#define TYPE signed char
+#define T_MIN (signed char)-128
+#define T_MAX (signed char)127
+
+#include "texcompress_rgtc_tmp.h"
+
+#undef TAG
+#undef TYPE
+#undef T_MIN
+#undef T_MAX
+
diff --git a/src/util/rgtc.h b/src/util/rgtc.h
new file mode 100644
index 0000000..6bba9f2
--- /dev/null
+++ b/src/util/rgtc.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright © 2014 Red Hat
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ */
+
+#ifndef _RGTC_H
+#define _RGTC_H
+
+void util_format_unsigned_fetch_texel_rgtc(unsigned srcRowStride, const unsigned char *pixdata,
+                                           unsigned i, unsigned j, unsigned char *value, unsigned comps);
+
+void util_format_signed_fetch_texel_rgtc(unsigned srcRowStride, const signed char *pixdata,
+                                           unsigned i, unsigned j, signed char *value, unsigned comps);
+
+void util_format_unsigned_encode_rgtc_ubyte(unsigned char *blkaddr, unsigned char srccolors[4][4],
+                                            int numxpixels, int numypixels);
+
+void util_format_signed_encode_rgtc_ubyte(signed char *blkaddr, signed char srccolors[4][4],
+                                            int numxpixels, int numypixels);
+#endif /* _RGTC_H */
diff --git a/src/mesa/main/texcompress_rgtc_tmp.h b/src/util/texcompress_rgtc_tmp.h
similarity index 97%
rename from src/mesa/main/texcompress_rgtc_tmp.h
rename to src/util/texcompress_rgtc_tmp.h
index 5fa9de6..6bbae5e 100644
--- a/src/mesa/main/texcompress_rgtc_tmp.h
+++ b/src/util/texcompress_rgtc_tmp.h
@@ -29,8 +29,8 @@
 
 /* included by texcompress_rgtc to define byte/ubyte compressors */
 
-static void TAG(fetch_texel_rgtc)(unsigned srcRowStride, const TYPE *pixdata,
-				  unsigned i, unsigned j, TYPE *value, unsigned comps)
+void TAG(fetch_texel_rgtc)(unsigned srcRowStride, const TYPE *pixdata,
+	                   unsigned i, unsigned j, TYPE *value, unsigned comps)
 {
    TYPE decode;
    const TYPE *blksrc = (pixdata + ((srcRowStride + 3) / 4 * (j / 4) + (i / 4)) * 8 * comps);
@@ -59,9 +59,9 @@ static void TAG(fetch_texel_rgtc)(unsigned srcRowStride, const TYPE *pixdata,
 }
 
 static void TAG(write_rgtc_encoded_channel)(TYPE *blkaddr,
-					    TYPE alphabase1,
-					    TYPE alphabase2,
-					    TYPE alphaenc[16])
+                                            TYPE alphabase1,
+                                            TYPE alphabase2,
+                                            TYPE alphaenc[16])
 {
    *blkaddr++ = alphabase1;
    *blkaddr++ = alphabase2;
@@ -73,8 +73,8 @@ static void TAG(write_rgtc_encoded_channel)(TYPE *blkaddr,
    *blkaddr++ = (alphaenc[13] >> 1) | (alphaenc[14] << 2) | (alphaenc[15] << 5);
 }
 
-static void TAG(encode_rgtc_ubyte)(TYPE *blkaddr, TYPE srccolors[4][4],
-			     int numxpixels, int numypixels)
+void TAG(encode_rgtc_ubyte)(TYPE *blkaddr, TYPE srccolors[4][4],
+                            int numxpixels, int numypixels)
 {
    TYPE alphabase[2], alphause[2];
    short alphatest[2] = { 0 };




More information about the mesa-commit mailing list