[Mesa-dev] [PATCH 4/4] gallium/util: use the just imported txc_dxtn code rather than dlopen libtxc_dxtn

Jon Severinsson jon at severinsson.net
Sun Mar 6 15:47:49 PST 2011


---
 src/gallium/auxiliary/util/u_format_s3tc.c |  174 ++++++----------------------
 src/gallium/auxiliary/util/u_format_s3tc.h |   22 ----
 src/gallium/drivers/llvmpipe/Makefile      |    4 +-
 3 files changed, 38 insertions(+), 162 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_format_s3tc.c b/src/gallium/auxiliary/util/u_format_s3tc.c
index bb989c2..f798961 100644
--- a/src/gallium/auxiliary/util/u_format_s3tc.c
+++ b/src/gallium/auxiliary/util/u_format_s3tc.c
@@ -22,137 +22,29 @@
  *
  **************************************************************************/
 
-#include "u_dl.h"
 #include "u_math.h"
 #include "u_format.h"
 #include "u_format_s3tc.h"
-
-
-#if defined(_WIN32) || defined(WIN32)
-#define DXTN_LIBNAME "dxtn.dll"
-#elif defined(__APPLE__)
-#define DXTN_LIBNAME "libtxc_dxtn.dylib"
-#else
-#define DXTN_LIBNAME "libtxc_dxtn.so"
-#endif
-
-
-static void
-util_format_dxt1_rgb_fetch_stub(int src_stride,
-                                const uint8_t *src,
-                                int col, int row,
-                                uint8_t *dst)
-{
-   assert(0);
-}
-
-
-static void
-util_format_dxt1_rgba_fetch_stub(int src_stride,
-                                 const uint8_t *src,
-                                 int col, int row,
-                                 uint8_t *dst )
-{
-   assert(0);
-}
-
-
-static void
-util_format_dxt3_rgba_fetch_stub(int src_stride,
-                                 const uint8_t *src,
-                                 int col, int row,
-                                 uint8_t *dst )
-{
-   assert(0);
-}
-
-
-static void
-util_format_dxt5_rgba_fetch_stub(int src_stride,
-                                 const uint8_t *src,
-                                 int col, int row,
-                                 uint8_t *dst )
-{
-   assert(0);
-}
-
-
-static void
-util_format_dxtn_pack_stub(int src_comps,
-                           int width, int height,
-                           const uint8_t *src,
-                           enum util_format_dxtn dst_format,
-                           uint8_t *dst,
-                           int dst_stride)
-{
-   assert(0);
-}
+#include "txc_dxtn.h"
 
 
 boolean util_format_s3tc_enabled = FALSE;
 
-util_format_dxtn_fetch_t util_format_dxt1_rgb_fetch = util_format_dxt1_rgb_fetch_stub;
-util_format_dxtn_fetch_t util_format_dxt1_rgba_fetch = util_format_dxt1_rgba_fetch_stub;
-util_format_dxtn_fetch_t util_format_dxt3_rgba_fetch = util_format_dxt3_rgba_fetch_stub;
-util_format_dxtn_fetch_t util_format_dxt5_rgba_fetch = util_format_dxt5_rgba_fetch_stub;
-
-util_format_dxtn_pack_t util_format_dxtn_pack = util_format_dxtn_pack_stub;
-
-
 void
 util_format_s3tc_init(void)
 {
    static boolean first_time = TRUE;
-   struct util_dl_library *library = NULL;
-   util_dl_proc fetch_2d_texel_rgb_dxt1;
-   util_dl_proc fetch_2d_texel_rgba_dxt1;
-   util_dl_proc fetch_2d_texel_rgba_dxt3;
-   util_dl_proc fetch_2d_texel_rgba_dxt5;
-   util_dl_proc tx_compress_dxtn;
 
    if (!first_time)
       return;
    first_time = FALSE;
 
-   if (util_format_s3tc_enabled)
-      return;
-
-   library = util_dl_open(DXTN_LIBNAME);
-   if (!library) {
-      debug_printf("couldn't open " DXTN_LIBNAME ", software DXTn "
-         "compression/decompression unavailable\n");
-      return;
-   }
-
-   fetch_2d_texel_rgb_dxt1 =
-         util_dl_get_proc_address(library, "fetch_2d_texel_rgb_dxt1");
-   fetch_2d_texel_rgba_dxt1 =
-         util_dl_get_proc_address(library, "fetch_2d_texel_rgba_dxt1");
-   fetch_2d_texel_rgba_dxt3 =
-         util_dl_get_proc_address(library, "fetch_2d_texel_rgba_dxt3");
-   fetch_2d_texel_rgba_dxt5 =
-         util_dl_get_proc_address(library, "fetch_2d_texel_rgba_dxt5");
-   tx_compress_dxtn =
-         util_dl_get_proc_address(library, "tx_compress_dxtn");
-
-   if (!util_format_dxt1_rgb_fetch ||
-       !util_format_dxt1_rgba_fetch ||
-       !util_format_dxt3_rgba_fetch ||
-       !util_format_dxt5_rgba_fetch ||
-       !util_format_dxtn_pack) {
-      debug_printf("couldn't reference all symbols in " DXTN_LIBNAME
-                   ", software DXTn compression/decompression "
-                   "unavailable\n");
-      util_dl_close(library);
-      return;
-   }
-
-   util_format_dxt1_rgb_fetch = (util_format_dxtn_fetch_t)fetch_2d_texel_rgb_dxt1;
-   util_format_dxt1_rgba_fetch = (util_format_dxtn_fetch_t)fetch_2d_texel_rgba_dxt1;
-   util_format_dxt3_rgba_fetch = (util_format_dxtn_fetch_t)fetch_2d_texel_rgba_dxt3;
-   util_format_dxt5_rgba_fetch = (util_format_dxtn_fetch_t)fetch_2d_texel_rgba_dxt5;
-   util_format_dxtn_pack = (util_format_dxtn_pack_t)tx_compress_dxtn;
+#ifndef ENABLE_PATENTED
+   debug_printf("mesa compiled without --enable-patented, "
+      "software DXTn compression/decompression unavailable\n");
+#else /* ENABLE_PATENTED */
    util_format_s3tc_enabled = TRUE;
+#endif /* ENABLE_PATENTED */
 }
 
 
@@ -163,32 +55,32 @@ util_format_s3tc_init(void)
 void
 util_format_dxt1_rgb_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j)
 {
-   util_format_dxt1_rgb_fetch(0, src, i, j, dst);
+   fetch_2d_texel_rgb_dxt1(0, src, i, j, dst);
 }
 
 void
 util_format_dxt1_rgba_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j)
 {
-   util_format_dxt1_rgba_fetch(0, src, i, j, dst);
+   fetch_2d_texel_rgba_dxt1(0, src, i, j, dst);
 }
 
 void
 util_format_dxt3_rgba_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j)
 {
-   util_format_dxt3_rgba_fetch(0, src, i, j, dst);
+   fetch_2d_texel_rgba_dxt3(0, src, i, j, dst);
 }
 
 void
 util_format_dxt5_rgba_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, unsigned i, unsigned j)
 {
-   util_format_dxt5_rgba_fetch(0, src, i, j, dst);
+   fetch_2d_texel_rgba_dxt5(0, src, i, j, dst);
 }
 
 void
 util_format_dxt1_rgb_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j)
 {
    uint8_t tmp[4];
-   util_format_dxt1_rgb_fetch(0, src, i, j, tmp);
+   fetch_2d_texel_rgb_dxt1(0, src, i, j, tmp);
    dst[0] = ubyte_to_float(tmp[0]);
    dst[1] = ubyte_to_float(tmp[1]);
    dst[2] = ubyte_to_float(tmp[2]);
@@ -199,7 +91,7 @@ void
 util_format_dxt1_rgba_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j)
 {
    uint8_t tmp[4];
-   util_format_dxt1_rgba_fetch(0, src, i, j, tmp);
+   fetch_2d_texel_rgba_dxt1(0, src, i, j, tmp);
    dst[0] = ubyte_to_float(tmp[0]);
    dst[1] = ubyte_to_float(tmp[1]);
    dst[2] = ubyte_to_float(tmp[2]);
@@ -210,7 +102,7 @@ void
 util_format_dxt3_rgba_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j)
 {
    uint8_t tmp[4];
-   util_format_dxt3_rgba_fetch(0, src, i, j, tmp);
+   fetch_2d_texel_rgba_dxt3(0, src, i, j, tmp);
    dst[0] = ubyte_to_float(tmp[0]);
    dst[1] = ubyte_to_float(tmp[1]);
    dst[2] = ubyte_to_float(tmp[2]);
@@ -221,7 +113,7 @@ void
 util_format_dxt5_rgba_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j)
 {
    uint8_t tmp[4];
-   util_format_dxt5_rgba_fetch(0, src, i, j, tmp);
+   fetch_2d_texel_rgba_dxt5(0, src, i, j, tmp);
    dst[0] = ubyte_to_float(tmp[0]);
    dst[1] = ubyte_to_float(tmp[1]);
    dst[2] = ubyte_to_float(tmp[2]);
@@ -233,6 +125,12 @@ util_format_dxt5_rgba_fetch_rgba_float(float *dst, const uint8_t *src, unsigned
  * Block decompression.
  */
 
+typedef void
+(*util_format_dxtn_fetch_t)( int src_stride,
+                             const uint8_t *src,
+                             int col, int row,
+                             void *dst );
+
 static INLINE void
 util_format_dxtn_rgb_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride,
                                         const uint8_t *src_row, unsigned src_stride,
@@ -265,7 +163,7 @@ util_format_dxt1_rgb_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride,
    util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride,
                                            src_row, src_stride,
                                            width, height,
-                                           util_format_dxt1_rgb_fetch, 8);
+                                           fetch_2d_texel_rgb_dxt1, 8);
 }
 
 void
@@ -276,7 +174,7 @@ util_format_dxt1_rgba_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride,
    util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride,
                                            src_row, src_stride,
                                            width, height,
-                                           util_format_dxt1_rgba_fetch, 8);
+                                           fetch_2d_texel_rgba_dxt1, 8);
 }
 
 void
@@ -287,7 +185,7 @@ util_format_dxt3_rgba_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride,
    util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride,
                                            src_row, src_stride,
                                            width, height,
-                                           util_format_dxt3_rgba_fetch, 16);
+                                           fetch_2d_texel_rgba_dxt3, 16);
 }
 
 void
@@ -298,7 +196,7 @@ util_format_dxt5_rgba_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride,
    util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride,
                                            src_row, src_stride,
                                            width, height,
-                                           util_format_dxt5_rgba_fetch, 16);
+                                           fetch_2d_texel_rgba_dxt5, 16);
 }
 
 static INLINE void
@@ -337,7 +235,7 @@ util_format_dxt1_rgb_unpack_rgba_float(float *dst_row, unsigned dst_stride,
    util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride,
                                           src_row, src_stride,
                                           width, height,
-                                          util_format_dxt1_rgb_fetch, 8);
+                                          fetch_2d_texel_rgb_dxt1, 8);
 }
 
 void
@@ -348,7 +246,7 @@ util_format_dxt1_rgba_unpack_rgba_float(float *dst_row, unsigned dst_stride,
    util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride,
                                           src_row, src_stride,
                                           width, height,
-                                          util_format_dxt1_rgba_fetch, 8);
+                                          fetch_2d_texel_rgba_dxt1, 8);
 }
 
 void
@@ -359,7 +257,7 @@ util_format_dxt3_rgba_unpack_rgba_float(float *dst_row, unsigned dst_stride,
    util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride,
                                           src_row, src_stride,
                                           width, height,
-                                          util_format_dxt3_rgba_fetch, 16);
+                                          fetch_2d_texel_rgba_dxt3, 16);
 }
 
 void
@@ -370,7 +268,7 @@ util_format_dxt5_rgba_unpack_rgba_float(float *dst_row, unsigned dst_stride,
    util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride,
                                           src_row, src_stride,
                                           width, height,
-                                          util_format_dxt5_rgba_fetch, 16);
+                                          fetch_2d_texel_rgba_dxt5, 16);
 }
 
 
@@ -396,7 +294,7 @@ util_format_dxt1_rgb_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride,
                }
             }
          }
-         util_format_dxtn_pack(3, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT1_RGB, dst, 0);
+         tx_compress_dxtn(3, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT1_RGB, dst, 0);
          dst += bytes_per_block;
       }
       dst_row += dst_stride / sizeof(*dst_row);
@@ -421,7 +319,7 @@ util_format_dxt1_rgba_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride,
                }
             }
          }
-         util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT1_RGBA, dst, 0);
+         tx_compress_dxtn(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT1_RGBA, dst, 0);
          dst += bytes_per_block;
       }
       dst_row += dst_stride / sizeof(*dst_row);
@@ -446,7 +344,7 @@ util_format_dxt3_rgba_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride,
                }
             }
          }
-         util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT3_RGBA, dst, 0);
+         tx_compress_dxtn(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT3_RGBA, dst, 0);
          dst += bytes_per_block;
       }
       dst_row += dst_stride / sizeof(*dst_row);
@@ -472,7 +370,7 @@ util_format_dxt5_rgba_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride,
                }
             }
          }
-         util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT5_RGBA, dst, 0);
+         tx_compress_dxtn(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT5_RGBA, dst, 0);
          dst += bytes_per_block;
       }
       dst_row += dst_stride / sizeof(*dst_row);
@@ -496,7 +394,7 @@ util_format_dxt1_rgb_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride,
                }
             }
          }
-         util_format_dxtn_pack(3, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT1_RGB, dst, 0);
+         tx_compress_dxtn(3, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT1_RGB, dst, 0);
          dst += 8;
       }
       dst_row += 4*dst_stride/sizeof(*dst_row);
@@ -520,7 +418,7 @@ util_format_dxt1_rgba_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride,
                }
             }
          }
-         util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT1_RGBA, dst, 0);
+         tx_compress_dxtn(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT1_RGBA, dst, 0);
          dst += 8;
       }
       dst_row += 4*dst_stride/sizeof(*dst_row);
@@ -544,7 +442,7 @@ util_format_dxt3_rgba_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride,
                }
             }
          }
-         util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT3_RGBA, dst, 0);
+         tx_compress_dxtn(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT3_RGBA, dst, 0);
          dst += 16;
       }
       dst_row += 4*dst_stride/sizeof(*dst_row);
@@ -568,7 +466,7 @@ util_format_dxt5_rgba_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride,
                }
             }
          }
-         util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT5_RGBA, dst, 0);
+         tx_compress_dxtn(4, 4, 4, &tmp[0][0][0], UTIL_FORMAT_DXT5_RGBA, dst, 0);
          dst += 16;
       }
       dst_row += 4*dst_stride/sizeof(*dst_row);
diff --git a/src/gallium/auxiliary/util/u_format_s3tc.h b/src/gallium/auxiliary/util/u_format_s3tc.h
index 97770ab..d98f1e5 100644
--- a/src/gallium/auxiliary/util/u_format_s3tc.h
+++ b/src/gallium/auxiliary/util/u_format_s3tc.h
@@ -41,30 +41,8 @@ enum util_format_dxtn {
 };
 
 
-typedef void
-(*util_format_dxtn_fetch_t)( int src_stride,
-                             const uint8_t *src,
-                             int col, int row,
-                             uint8_t *dst );
-
-typedef void
-(*util_format_dxtn_pack_t)( int src_comps,
-                            int width, int height,
-                            const uint8_t *src,
-                            enum util_format_dxtn dst_format,
-                            uint8_t *dst,
-                            int dst_stride);
-
 extern boolean util_format_s3tc_enabled;
 
-extern util_format_dxtn_fetch_t util_format_dxt1_rgb_fetch;
-extern util_format_dxtn_fetch_t util_format_dxt1_rgba_fetch;
-extern util_format_dxtn_fetch_t util_format_dxt3_rgba_fetch;
-extern util_format_dxtn_fetch_t util_format_dxt5_rgba_fetch;
-
-extern util_format_dxtn_pack_t util_format_dxtn_pack;
-
-
 void
 util_format_s3tc_init(void);
 
diff --git a/src/gallium/drivers/llvmpipe/Makefile b/src/gallium/drivers/llvmpipe/Makefile
index 4068bed..d3b746c 100644
--- a/src/gallium/drivers/llvmpipe/Makefile
+++ b/src/gallium/drivers/llvmpipe/Makefile
@@ -64,13 +64,13 @@ include ../../Makefile.template
 
 lp_test_sincos.o : sse_mathfun.h
 
-PROGS_DEPS := ../../auxiliary/libgallium.a
+PROGS_DEPS := ../../auxiliary/libgallium.a ../../../mesa/libmesagallium.a
 
 lp_tile_soa.c: lp_tile_soa.py ../../auxiliary/util/u_format_parse.py ../../auxiliary/util/u_format_pack.py ../../auxiliary/util/u_format.csv
 	$(PYTHON2) $(PYTHON_FLAGS) lp_tile_soa.py ../../auxiliary/util/u_format.csv > $@
 
 LDFLAGS += $(LLVM_LDFLAGS)
-LIBS += -L../../auxiliary/ -lgallium libllvmpipe.a $(LLVM_LIBS) $(GL_LIB_DEPS)
+LIBS += -L../../auxiliary/ -L ../../../mesa/ -lgallium -lmesagallium libllvmpipe.a $(LLVM_LIBS) $(GL_LIB_DEPS)
 LD=g++
 
 $(PROGS): lp_test_main.o libllvmpipe.a
-- 
1.7.3.4



More information about the mesa-dev mailing list