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 <marek.olsak@amd.com> [v1]
Reviewed-by: Eric Anholt <eric@anholt.net> [v1]
This commit is contained in:
Kenneth Graunke 2019-11-27 02:41:47 -08:00
parent 3e21e17b2f
commit 1bdd342b60
5 changed files with 11 additions and 5 deletions

View File

@ -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;
}

View File

@ -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:

View File

@ -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,

View File

@ -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 */
{

View File

@ -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: