From 1bdd342b60cf4426bfa29030032f23f1e4c80fb6 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Wed, 27 Nov 2019 02:41:47 -0800 Subject: [PATCH] st/mesa: Add GL_TDFX_texture_compression_FXT1 support MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Eric recently added PIPE_FORMAT_FXT1_RGB[A] as part of his format unification work. This was really most of the work of implementing the extension. We just need to handle it in a couple of places and expose the extension. v2: Reject the new formats in llvmpipe_is_format_supported to prevent crashes because it doesn't know how to handle the new formats. Reviewed-by: Marek Olšák [v1] Reviewed-by: Eric Anholt [v1] --- src/gallium/drivers/llvmpipe/lp_screen.c | 3 ++- src/mesa/state_tracker/st_cb_texture.c | 2 ++ src/mesa/state_tracker/st_extensions.c | 4 ++++ src/mesa/state_tracker/st_format.c | 6 ++---- src/util/format/u_format.h | 1 + 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c index c036108d318..080b0635c64 100644 --- a/src/gallium/drivers/llvmpipe/lp_screen.c +++ b/src/gallium/drivers/llvmpipe/lp_screen.c @@ -665,7 +665,8 @@ llvmpipe_is_format_supported( struct pipe_screen *_screen, } if (format_desc->layout == UTIL_FORMAT_LAYOUT_ASTC || - format_desc->layout == UTIL_FORMAT_LAYOUT_ATC) { + format_desc->layout == UTIL_FORMAT_LAYOUT_ATC || + format_desc->layout == UTIL_FORMAT_LAYOUT_FXT1) { /* Software decoding is not hooked up. */ return false; } diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index ace19c59b0e..df5f16efd62 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -2046,6 +2046,8 @@ st_GetTexSubImage(struct gl_context * ctx, case PIPE_FORMAT_ASTC_12x10: case PIPE_FORMAT_ASTC_12x12: case PIPE_FORMAT_BPTC_RGBA_UNORM: + case PIPE_FORMAT_FXT1_RGB: + case PIPE_FORMAT_FXT1_RGBA: dst_glformat = GL_RGBA8; break; case PIPE_FORMAT_RGTC1_SNORM: diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 252e04c0716..f31ea043ee0 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -877,6 +877,10 @@ void st_init_extensions(struct pipe_screen *screen, PIPE_FORMAT_BPTC_RGB_FLOAT, PIPE_FORMAT_BPTC_RGB_UFLOAT } }, + { { o(TDFX_texture_compression_FXT1) }, + { PIPE_FORMAT_FXT1_RGB, + PIPE_FORMAT_FXT1_RGBA } }, + { { o(KHR_texture_compression_astc_ldr), o(KHR_texture_compression_astc_sliced_3d) }, { PIPE_FORMAT_ASTC_4x4, diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c index c0e9e25c71d..4bbb781932d 100644 --- a/src/mesa/state_tracker/st_format.c +++ b/src/mesa/state_tracker/st_format.c @@ -332,16 +332,14 @@ static const struct format_mapping format_map[] = { { PIPE_FORMAT_DXT5_RGBA, 0 } }, -#if 0 { { GL_COMPRESSED_RGB_FXT1_3DFX, 0 }, - { PIPE_FORMAT_RGB_FXT1, 0 } + { PIPE_FORMAT_FXT1_RGB, 0 } }, { { GL_COMPRESSED_RGBA_FXT1_3DFX, 0 }, - { PIPE_FORMAT_RGBA_FXT1, 0 } + { PIPE_FORMAT_FXT1_RGBA, 0 } }, -#endif /* Depth formats */ { diff --git a/src/util/format/u_format.h b/src/util/format/u_format.h index eec7a185f94..b85bd217b2e 100644 --- a/src/util/format/u_format.h +++ b/src/util/format/u_format.h @@ -495,6 +495,7 @@ util_format_is_compressed(enum pipe_format format) case UTIL_FORMAT_LAYOUT_BPTC: case UTIL_FORMAT_LAYOUT_ASTC: case UTIL_FORMAT_LAYOUT_ATC: + case UTIL_FORMAT_LAYOUT_FXT1: /* XXX add other formats in the future */ return TRUE; default: -- 2.30.2