Thanks, will do. I'm also a little concerned that my claims of the pack/unpack functions not being used are false... I'll need to test whether e.g. the generate-mipmap stuff doesn't hit it. I don't think the piglits were ready before, but now they hopefully are. (I should probably also rebase on the latest version of Neil's code.)
On Thu, Aug 7, 2014 at 6:20 PM, Marek Olšák <mar...@gmail.com> wrote: > These functions should be updated too: > > util_format_srgb > util_format_linear > util_format_fits_8unorm > > Marek > > On Wed, Jul 23, 2014 at 3:11 AM, Ilia Mirkin <imir...@alum.mit.edu> wrote: >> Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu> >> --- >> >> So... the pack/unpack functions just assert. As far as I can tell, these are >> entirely unused until e.g. softpipe or llvmpipe try to make use of this >> format. Whoever adds bptc texturing support to those drivers can add the >> mesa/texstore integration. >> >> src/gallium/auxiliary/Makefile.sources | 1 + >> src/gallium/auxiliary/util/u_format.c | 5 ++ >> src/gallium/auxiliary/util/u_format.csv | 6 ++ >> src/gallium/auxiliary/util/u_format.h | 8 +- >> src/gallium/auxiliary/util/u_format_bptc.c | 26 +++++++ >> src/gallium/auxiliary/util/u_format_bptc.h | 109 >> +++++++++++++++++++++++++++ >> src/gallium/auxiliary/util/u_format_pack.py | 2 +- >> src/gallium/auxiliary/util/u_format_table.py | 3 +- >> src/gallium/include/pipe/p_format.h | 5 ++ >> 9 files changed, 162 insertions(+), 3 deletions(-) >> create mode 100644 src/gallium/auxiliary/util/u_format_bptc.c >> create mode 100644 src/gallium/auxiliary/util/u_format_bptc.h >> >> diff --git a/src/gallium/auxiliary/Makefile.sources >> b/src/gallium/auxiliary/Makefile.sources >> index 8919783..8b06c4f 100644 >> --- a/src/gallium/auxiliary/Makefile.sources >> +++ b/src/gallium/auxiliary/Makefile.sources >> @@ -113,6 +113,7 @@ C_SOURCES := \ >> util/u_format_s3tc.c \ >> util/u_format_rgtc.c \ >> util/u_format_etc.c \ >> + util/u_format_bptc.c \ >> util/u_format_tests.c \ >> util/u_format_yuv.c \ >> util/u_format_zs.c \ >> diff --git a/src/gallium/auxiliary/util/u_format.c >> b/src/gallium/auxiliary/util/u_format.c >> index a53ed6f..cf355e5 100644 >> --- a/src/gallium/auxiliary/util/u_format.c >> +++ b/src/gallium/auxiliary/util/u_format.c >> @@ -496,6 +496,11 @@ util_format_fits_8unorm(const struct >> util_format_description *format_desc) >> format_desc->format == PIPE_FORMAT_LATC2_SNORM) >> return FALSE; >> return TRUE; >> + case UTIL_FORMAT_LAYOUT_BPTC: >> + if (format_desc->format == PIPE_FORMAT_BPTC_RGBA_UNORM || >> + format_desc->format == PIPE_FORMAT_BPTC_SRGBA_UNORM) >> + return TRUE; >> + return FALSE; >> >> case UTIL_FORMAT_LAYOUT_PLAIN: >> /* >> diff --git a/src/gallium/auxiliary/util/u_format.csv >> b/src/gallium/auxiliary/util/u_format.csv >> index 8aa5c36..570ea5a 100644 >> --- a/src/gallium/auxiliary/util/u_format.csv >> +++ b/src/gallium/auxiliary/util/u_format.csv >> @@ -160,6 +160,7 @@ PIPE_FORMAT_R8G8Bx_SNORM , other, 1, 1, >> sn8 , sn8 , , , x >> # - http://www.opengl.org/registry/specs/EXT/texture_compression_s3tc.txt >> # - http://www.opengl.org/registry/specs/ARB/texture_compression_rgtc.txt >> # - http://www.opengl.org/registry/specs/EXT/texture_compression_latc.txt >> +# - http://www.opengl.org/registry/specs/ARB/texture_compression_bptc.txt >> # - >> http://www.khronos.org/registry/gles/extensions/OES/OES_compressed_ETC1_RGB8_texture.txt >> # - http://msdn.microsoft.com/en-us/library/bb694531.aspx >> PIPE_FORMAT_DXT1_RGB , s3tc, 4, 4, x64 , , , , >> xyz1, rgb >> @@ -183,6 +184,11 @@ PIPE_FORMAT_LATC2_SNORM , rgtc, 4, 4, x128, >> , , , xxxy, rg >> >> PIPE_FORMAT_ETC1_RGB8 , etc, 4, 4, x64, , , , >> xyz1, rgb >> >> +PIPE_FORMAT_BPTC_RGBA_UNORM , bptc, 4, 4, x128, , , , >> xyzw, rgb >> +PIPE_FORMAT_BPTC_SRGBA_UNORM , bptc, 4, 4, x128, , , , >> xyzw, srgb >> +PIPE_FORMAT_BPTC_RGB_FLOAT , bptc, 4, 4, x128, , , , >> xyz1, rgb >> +PIPE_FORMAT_BPTC_RGB_UFLOAT , bptc, 4, 4, x128, , , , >> xyz1, rgb >> + >> # Straightforward D3D10-like formats (also used for >> # vertex buffer element description) >> # >> diff --git a/src/gallium/auxiliary/util/u_format.h >> b/src/gallium/auxiliary/util/u_format.h >> index 2e2bf02..1789a28 100644 >> --- a/src/gallium/auxiliary/util/u_format.h >> +++ b/src/gallium/auxiliary/util/u_format.h >> @@ -79,9 +79,14 @@ enum util_format_layout { >> UTIL_FORMAT_LAYOUT_ETC = 6, >> >> /** >> + * BC6/7 Texture Compression >> + */ >> + UTIL_FORMAT_LAYOUT_BPTC = 7, >> + >> + /** >> * Everything else that doesn't fit in any of the above layouts. >> */ >> - UTIL_FORMAT_LAYOUT_OTHER = 7 >> + UTIL_FORMAT_LAYOUT_OTHER = 8 >> }; >> >> >> @@ -475,6 +480,7 @@ util_format_is_compressed(enum pipe_format format) >> case UTIL_FORMAT_LAYOUT_S3TC: >> case UTIL_FORMAT_LAYOUT_RGTC: >> case UTIL_FORMAT_LAYOUT_ETC: >> + case UTIL_FORMAT_LAYOUT_BPTC: >> /* XXX add other formats in the future */ >> return TRUE; >> default: >> diff --git a/src/gallium/auxiliary/util/u_format_bptc.c >> b/src/gallium/auxiliary/util/u_format_bptc.c >> new file mode 100644 >> index 0000000..8fb002f >> --- /dev/null >> +++ b/src/gallium/auxiliary/util/u_format_bptc.c >> @@ -0,0 +1,26 @@ >> +#include "u_format.h" >> +#include "u_format_bptc.h" >> + >> +#define fake(format) \ >> +void \ >> +util_format_##format##_fetch_rgba_8unorm(uint8_t *dst, const uint8_t *src, >> unsigned i, unsigned j) {assert(0);} \ >> +\ >> +void \ >> +util_format_##format##_unpack_rgba_8unorm(uint8_t *dst_row, unsigned >> dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, >> unsigned height) {assert(0);} \ >> +\ >> +void \ >> +util_format_##format##_pack_rgba_8unorm(uint8_t *dst_row, unsigned >> dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, >> unsigned height) {assert(0);} \ >> +\ >> +void \ >> +util_format_##format##_unpack_rgba_float(float *dst_row, unsigned >> dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, >> unsigned height) {assert(0);} \ >> +\ >> +void \ >> +util_format_##format##_pack_rgba_float(uint8_t *dst_row, unsigned >> dst_stride, const float *src_row, unsigned src_stride, unsigned width, >> unsigned height) {assert(0);} \ >> +\ >> +void \ >> +util_format_##format##_fetch_rgba_float(float *dst, const uint8_t *src, >> unsigned i, unsigned j) {assert(0);} >> + >> +fake(bptc_rgba_unorm) >> +fake(bptc_srgba_unorm) >> +fake(bptc_rgb_float) >> +fake(bptc_rgb_ufloat) >> diff --git a/src/gallium/auxiliary/util/u_format_bptc.h >> b/src/gallium/auxiliary/util/u_format_bptc.h >> new file mode 100644 >> index 0000000..77bedfd >> --- /dev/null >> +++ b/src/gallium/auxiliary/util/u_format_bptc.h >> @@ -0,0 +1,109 @@ >> +/************************************************************************** >> + * >> + * Copyright 2011 Red Hat Inc. >> + * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL >> + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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. >> + * >> + * The above copyright notice and this permission notice (including the >> + * next paragraph) shall be included in all copies or substantial portions >> + * of the Software. >> + * >> + **************************************************************************/ >> + >> +#ifndef U_FORMAT_BPTC_H_ >> +#define U_FORMAT_BPTC_H_ >> + >> +void >> +util_format_bptc_rgba_unorm_fetch_rgba_8unorm(uint8_t *dst, const uint8_t >> *src, unsigned i, unsigned j); >> + >> +void >> +util_format_bptc_rgba_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned >> dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, >> unsigned height); >> + >> +void >> +util_format_bptc_rgba_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned >> dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, >> unsigned height); >> + >> +void >> +util_format_bptc_rgba_unorm_unpack_rgba_float(float *dst_row, unsigned >> dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, >> unsigned height); >> + >> +void >> +util_format_bptc_rgba_unorm_pack_rgba_float(uint8_t *dst_row, unsigned >> dst_stride, const float *src_row, unsigned src_stride, unsigned width, >> unsigned height); >> + >> +void >> +util_format_bptc_rgba_unorm_fetch_rgba_float(float *dst, const uint8_t >> *src, unsigned i, unsigned j); >> + >> + >> + >> +void >> +util_format_bptc_srgba_unorm_fetch_rgba_8unorm(uint8_t *dst, const uint8_t >> *src, unsigned i, unsigned j); >> + >> +void >> +util_format_bptc_srgba_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned >> dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, >> unsigned height); >> + >> +void >> +util_format_bptc_srgba_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned >> dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, >> unsigned height); >> + >> +void >> +util_format_bptc_srgba_unorm_unpack_rgba_float(float *dst_row, unsigned >> dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, >> unsigned height); >> + >> +void >> +util_format_bptc_srgba_unorm_pack_rgba_float(uint8_t *dst_row, unsigned >> dst_stride, const float *src_row, unsigned src_stride, unsigned width, >> unsigned height); >> + >> +void >> +util_format_bptc_srgba_unorm_fetch_rgba_float(float *dst, const uint8_t >> *src, unsigned i, unsigned j); >> + >> + >> + >> +void >> +util_format_bptc_rgb_float_fetch_rgba_8unorm(uint8_t *dst, const uint8_t >> *src, unsigned i, unsigned j); >> + >> +void >> +util_format_bptc_rgb_float_unpack_rgba_8unorm(uint8_t *dst_row, unsigned >> dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, >> unsigned height); >> + >> +void >> +util_format_bptc_rgb_float_pack_rgba_8unorm(uint8_t *dst_row, unsigned >> dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, >> unsigned height); >> + >> +void >> +util_format_bptc_rgb_float_unpack_rgba_float(float *dst_row, unsigned >> dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, >> unsigned height); >> + >> +void >> +util_format_bptc_rgb_float_pack_rgba_float(uint8_t *dst_row, unsigned >> dst_stride, const float *src_row, unsigned src_stride, unsigned width, >> unsigned height); >> + >> +void >> +util_format_bptc_rgb_float_fetch_rgba_float(float *dst, const uint8_t *src, >> unsigned i, unsigned j); >> + >> + >> +void >> +util_format_bptc_rgb_ufloat_fetch_rgba_8unorm(uint8_t *dst, const uint8_t >> *src, unsigned i, unsigned j); >> + >> +void >> +util_format_bptc_rgb_ufloat_unpack_rgba_8unorm(uint8_t *dst_row, unsigned >> dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, >> unsigned height); >> + >> +void >> +util_format_bptc_rgb_ufloat_pack_rgba_8unorm(uint8_t *dst_row, unsigned >> dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, >> unsigned height); >> + >> +void >> +util_format_bptc_rgb_ufloat_unpack_rgba_float(float *dst_row, unsigned >> dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, >> unsigned height); >> + >> +void >> +util_format_bptc_rgb_ufloat_pack_rgba_float(uint8_t *dst_row, unsigned >> dst_stride, const float *src_row, unsigned src_stride, unsigned width, >> unsigned height); >> + >> +void >> +util_format_bptc_rgb_ufloat_fetch_rgba_float(float *dst, const uint8_t >> *src, unsigned i, unsigned j); >> + >> + >> +#endif >> diff --git a/src/gallium/auxiliary/util/u_format_pack.py >> b/src/gallium/auxiliary/util/u_format_pack.py >> index f9496de..49f7cd6 100644 >> --- a/src/gallium/auxiliary/util/u_format_pack.py >> +++ b/src/gallium/auxiliary/util/u_format_pack.py >> @@ -659,7 +659,7 @@ def generate_format_fetch(format, dst_channel, >> dst_native_type, dst_suffix): >> >> >> def is_format_hand_written(format): >> - return format.layout in ('s3tc', 'rgtc', 'etc', 'subsampled', 'other') >> or format.colorspace == ZS >> + return format.layout in ('s3tc', 'rgtc', 'etc', 'bptc', 'subsampled', >> 'other') or format.colorspace == ZS >> >> >> def generate(formats): >> diff --git a/src/gallium/auxiliary/util/u_format_table.py >> b/src/gallium/auxiliary/util/u_format_table.py >> index 81fd399..ad582e4 100755 >> --- a/src/gallium/auxiliary/util/u_format_table.py >> +++ b/src/gallium/auxiliary/util/u_format_table.py >> @@ -90,6 +90,7 @@ def write_format_table(formats): >> print '#include "u_format_rgtc.h"' >> print '#include "u_format_latc.h"' >> print '#include "u_format_etc.h"' >> + print '#include "u_format_bptc.h"' >> print >> >> u_format_pack.generate(formats) >> @@ -141,7 +142,7 @@ def write_format_table(formats): >> if format.colorspace != ZS and not format.is_pure_color(): >> print " &util_format_%s_unpack_rgba_8unorm," % >> format.short_name() >> print " &util_format_%s_pack_rgba_8unorm," % >> format.short_name() >> - if format.layout == 's3tc' or format.layout == 'rgtc': >> + if format.layout == 's3tc' or format.layout == 'rgtc' or >> format.layout == 'bptc': >> print " &util_format_%s_fetch_rgba_8unorm," % >> format.short_name() >> else: >> print " NULL, /* fetch_rgba_8unorm */" >> diff --git a/src/gallium/include/pipe/p_format.h >> b/src/gallium/include/pipe/p_format.h >> index a7fdcd0..a29b9d6 100644 >> --- a/src/gallium/include/pipe/p_format.h >> +++ b/src/gallium/include/pipe/p_format.h >> @@ -344,6 +344,11 @@ enum pipe_format { >> >> PIPE_FORMAT_B5G6R5_SRGB = 254, >> >> + PIPE_FORMAT_BPTC_RGBA_UNORM = 255, >> + PIPE_FORMAT_BPTC_SRGBA_UNORM = 256, >> + PIPE_FORMAT_BPTC_RGB_FLOAT = 257, >> + PIPE_FORMAT_BPTC_RGB_UFLOAT = 258, >> + >> PIPE_FORMAT_COUNT >> }; >> >> -- >> 1.8.5.5 >> >> _______________________________________________ >> mesa-dev mailing list >> mesa-dev@lists.freedesktop.org >> http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev