util: Explicitly call the unpack functions from inside bptc pack/unpack.

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>
This commit is contained in:
Eric Anholt 2020-08-13 13:23:35 -07:00 committed by Marge Bot
parent edf0aeb3cd
commit 8d38b25788
3 changed files with 18 additions and 20 deletions

View 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(

View 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);
}

View 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')