diff options
author | Kenneth Graunke <[email protected]> | 2019-11-27 02:41:47 -0800 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2019-12-01 22:55:21 -0800 |
commit | 1bdd342b60cf4426bfa29030032f23f1e4c80fb6 (patch) | |
tree | 699f14b679e9625723e9a584f156790d06f75413 | |
parent | 3e21e17b2fecad442fa649f61b6511504596d2ec (diff) |
st/mesa: Add GL_TDFX_texture_compression_FXT1 support
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 <[email protected]> [v1]
Reviewed-by: Eric Anholt <[email protected]> [v1]
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_screen.c | 3 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_cb_texture.c | 2 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_extensions.c | 4 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_format.c | 6 | ||||
-rw-r--r-- | 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: |