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:

Reply via email to