summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2019-11-27 02:41:47 -0800
committerKenneth Graunke <[email protected]>2019-12-01 22:55:21 -0800
commit1bdd342b60cf4426bfa29030032f23f1e4c80fb6 (patch)
tree699f14b679e9625723e9a584f156790d06f75413
parent3e21e17b2fecad442fa649f61b6511504596d2ec (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.c3
-rw-r--r--src/mesa/state_tracker/st_cb_texture.c2
-rw-r--r--src/mesa/state_tracker/st_extensions.c4
-rw-r--r--src/mesa/state_tracker/st_format.c6
-rw-r--r--src/util/format/u_format.h1
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: