Module: Mesa Branch: main Commit: 1735053de5fe77413df63a68382a9e381a525ee7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1735053de5fe77413df63a68382a9e381a525ee7
Author: Erik Faye-Lund <[email protected]> Date: Wed Aug 10 08:45:16 2022 +0200 mesa/st: implement fallback for rgtc Reviewed-by: Alyssa Rosenzweig <[email protected]> Acked-by: Eric Engestrom <[email protected]> Tested-by: Eric Engestrom <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18248> --- src/mesa/state_tracker/st_cb_texture.c | 9 +++++++++ src/mesa/state_tracker/st_format.c | 15 +++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index 2ebe8bbbb0a..aab0c1320a4 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -46,6 +46,7 @@ #include "main/texcompress_astc.h" #include "main/texcompress_bptc.h" #include "main/texcompress_etc.h" +#include "main/texcompress_rgtc.h" #include "main/texcompress_s3tc.h" #include "main/texgetimage.h" #include "main/teximage.h" @@ -442,6 +443,8 @@ st_compressed_format_fallback(struct st_context *st, mesa_format format) return !st->has_etc2; case MESA_FORMAT_LAYOUT_S3TC: return !st->has_s3tc; + case MESA_FORMAT_LAYOUT_RGTC: + return !st->has_rgtc; case MESA_FORMAT_LAYOUT_BPTC: return !st->has_bptc; case MESA_FORMAT_LAYOUT_ASTC: @@ -644,6 +647,12 @@ st_UnmapTextureImage(struct gl_context *ctx, itransfer->temp_stride, transfer->box.width, transfer->box.height, texImage->TexFormat); + } else if (_mesa_is_format_rgtc(texImage->TexFormat)) { + _mesa_unpack_rgtc(map, transfer->stride, + itransfer->temp_data, + itransfer->temp_stride, + transfer->box.width, transfer->box.height, + texImage->TexFormat); } else if (_mesa_is_format_bptc(texImage->TexFormat)) { _mesa_unpack_bptc(map, transfer->stride, itransfer->temp_data, diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c index 89ff5124081..041d2c89a36 100644 --- a/src/mesa/state_tracker/st_format.c +++ b/src/mesa/state_tracker/st_format.c @@ -124,6 +124,21 @@ st_mesa_format_to_pipe_format(const struct st_context *st, PIPE_FORMAT_R8G8B8A8_UNORM; } + if ((_mesa_is_format_rgtc(mesaFormat) && !st->has_rgtc)) { + switch (mesaFormat) { + case MESA_FORMAT_R_RGTC1_UNORM: + return PIPE_FORMAT_R8_UNORM; + case MESA_FORMAT_R_RGTC1_SNORM: + return PIPE_FORMAT_R8_SNORM; + case MESA_FORMAT_RG_RGTC2_UNORM: + return PIPE_FORMAT_R8G8_UNORM; + case MESA_FORMAT_RG_RGTC2_SNORM: + return PIPE_FORMAT_R8G8_SNORM; + default: + unreachable("Unknown RGTC format"); + } + } + if (_mesa_is_format_bptc(mesaFormat) && !st->has_bptc) { switch (mesaFormat) { case MESA_FORMAT_BPTC_RGB_SIGNED_FLOAT:
