The software fallback for GenerateMipmap is entirely done in mesa/main, so you don't have to worry about it.
Marek On Fri, Aug 8, 2014 at 12:34 AM, Ilia Mirkin <imir...@alum.mit.edu> wrote: > 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