util: Explicitly call the unpack functions from inside bptc pack/unpack.
authorEric Anholt <eric@anholt.net>
Thu, 13 Aug 2020 20:23:35 +0000 (13:23 -0700)
committerMarge Bot <eric+marge@anholt.net>
Thu, 20 Aug 2020 05:03:16 +0000 (05:03 +0000)
We were calling the table-based unpack functions from inside the pack and
unpack table's methods, so if anything included these pack functions (such
as a call to a table-based pack function), you'd pull in all of unpack as
well.

By calling them explicitly, we save some overhead in these functions
(switch statement, address math on the zero x,y arguments) anyway.

Reviewed-by: Jonathan Marek <jonathan@marek.ca>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6307>

src/util/SConscript
src/util/format/u_format_bptc.c
src/util/format/u_format_pack.py

index 410279d2d2d1a298fffe5d9f2663af55aa64189c..a4cbc2ffef776bb2adecdf95cf1bdd10cb550f94 100644 (file)
@@ -17,6 +17,7 @@ env.Prepend(CPPPATH = [
     '#src/gallium/auxiliary',
     '#src/util',
     '#src/util/format',
+    env.Dir('format'), # Build path corresponding to src/util/format
 ])
 
 env.CodeGenerate(
index 5482da3b7ec69370ca2b978f8d27dd815eeac5ce..337097465710cce84edf8da9e37302a6376cd3c8 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "util/format/u_format.h"
 #include "util/format/u_format_bptc.h"
+#include "u_format_pack.h"
 #include "util/format_srgb.h"
 #include "util/u_math.h"
 
@@ -61,10 +62,10 @@ util_format_bptc_rgba_unorm_unpack_rgba_float(void *dst_row, unsigned dst_stride
    decompress_rgba_unorm(width, height,
                          src_row, src_stride,
                          temp_block, width * 4 * sizeof(uint8_t));
-   util_format_read_4(PIPE_FORMAT_R8G8B8A8_UNORM,
+   util_format_r8g8b8a8_unorm_unpack_rgba_float(
                       dst_row, dst_stride,
                       temp_block, width * 4 * sizeof(uint8_t),
-                      0, 0, width, height);
+                      width, height);
    free((void *) temp_block);
 }
 
@@ -75,10 +76,10 @@ util_format_bptc_rgba_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_strid
 {
    uint8_t *temp_block;
    temp_block = malloc(width * height * 4 * sizeof(uint8_t));
-   util_format_read_4ub(PIPE_FORMAT_R32G32B32A32_FLOAT,
+   util_format_r32g32b32a32_float_unpack_rgba_8unorm(
                         temp_block, width * 4 * sizeof(uint8_t),
-                        src_row, src_stride,
-                        0, 0, width, height);
+                        (uint8_t *)src_row, src_stride,
+                        width, height);
    compress_rgba_unorm(width, height,
                        temp_block, width * 4 * sizeof(uint8_t),
                        dst_row, dst_stride);
@@ -130,10 +131,10 @@ util_format_bptc_srgba_unpack_rgba_float(void *dst_row, unsigned dst_stride,
    decompress_rgba_unorm(width, height,
                          src_row, src_stride,
                          temp_block, width * 4 * sizeof(uint8_t));
-   util_format_read_4(PIPE_FORMAT_R8G8B8A8_SRGB,
-                      dst_row, dst_stride,
-                      temp_block, width * 4 * sizeof(uint8_t),
-                      0, 0, width, height);
+   util_format_r8g8b8a8_srgb_unpack_rgba_float(dst_row, dst_stride,
+                                               temp_block, width * 4 * sizeof(uint8_t),
+                                               width, height);
+
    free((void *) temp_block);
 }
 
@@ -156,10 +157,7 @@ util_format_bptc_srgba_fetch_rgba(void *dst, const uint8_t *src,
 
    fetch_rgba_unorm_from_block(src + ((width * sizeof(uint8_t)) * (height / 4) + (width / 4)) * 16,
                                temp_block, (width % 4) + (height % 4) * 4);
-   util_format_read_4(PIPE_FORMAT_R8G8B8A8_SRGB,
-                      dst, 4 * sizeof(float),
-                      temp_block, width * 4 * sizeof(uint8_t),
-                      0, 0, 1, 1);
+   util_format_r8g8b8a8_srgb_fetch_rgba(dst, temp_block, 0, 0);
 }
 
 void
@@ -173,10 +171,10 @@ util_format_bptc_rgb_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_str
                         src_row, src_stride,
                         temp_block, width * 4 * sizeof(float),
                         true);
-   util_format_read_4ub(PIPE_FORMAT_R32G32B32A32_FLOAT,
+   util_format_r32g32b32a32_float_unpack_rgba_8unorm(
                         dst_row, dst_stride,
-                        temp_block, width * 4 * sizeof(float),
-                        0, 0, width, height);
+                        (const uint8_t *)temp_block, width * 4 * sizeof(float),
+                        width, height);
    free((void *) temp_block);
 }
 
@@ -231,10 +229,10 @@ util_format_bptc_rgb_ufloat_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_st
                         src_row, src_stride,
                         temp_block, width * 4 * sizeof(float),
                         false);
-   util_format_read_4ub(PIPE_FORMAT_R32G32B32A32_FLOAT,
+   util_format_r32g32b32a32_float_unpack_rgba_8unorm(
                         dst_row, dst_stride,
-                        temp_block, width * 4 * sizeof(float),
-                        0, 0, width, height);
+                        (const uint8_t *)temp_block, width * 4 * sizeof(float),
+                        width, height);
    free((void *) temp_block);
 }
 
index d6554bbf973bbf886421fdc674362b0cc7d83eff..a9a7792309594c259e41c9a123d75790b0f2fbec 100644 (file)
@@ -692,7 +692,6 @@ def generate_format_fetch(format, dst_channel, dst_native_type):
     name = format.short_name()
 
     proto = 'util_format_%s_fetch_rgba(void *in_dst, const uint8_t *src, UNUSED unsigned i, UNUSED unsigned j)' % (name)
-
     print('void %s;' % proto, file=sys.stdout2)
 
     print('void')