Module: Mesa
Branch: main
Commit: 4f4e28face6af5d93a5120d5c8701467790688ac
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4f4e28face6af5d93a5120d5c8701467790688ac

Author: Erik Faye-Lund <[email protected]>
Date:   Wed Aug 10 08:45:16 2022 +0200

mesa/st: implement fallback for bptc

Acked-by: Marek Olšák <[email protected]>
Acked-by: Soroush Kashani <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18012>

---

 src/mesa/state_tracker/st_cb_texture.c |  9 +++++++++
 src/mesa/state_tracker/st_format.c     | 11 +++++++++++
 2 files changed, 20 insertions(+)

diff --git a/src/mesa/state_tracker/st_cb_texture.c 
b/src/mesa/state_tracker/st_cb_texture.c
index f05a9788302..b369495e1f2 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -44,6 +44,7 @@
 #include "main/pixeltransfer.h"
 #include "main/texcompress.h"
 #include "main/texcompress_astc.h"
+#include "main/texcompress_bptc.h"
 #include "main/texcompress_etc.h"
 #include "main/texgetimage.h"
 #include "main/teximage.h"
@@ -438,6 +439,8 @@ st_compressed_format_fallback(struct st_context *st, 
mesa_format format)
       return !st->has_etc1;
    case MESA_FORMAT_LAYOUT_ETC2:
       return !st->has_etc2;
+   case MESA_FORMAT_LAYOUT_BPTC:
+      return !st->has_bptc;
    case MESA_FORMAT_LAYOUT_ASTC:
       return st_astc_format_fallback(st, format);
    default:
@@ -618,6 +621,12 @@ st_UnmapTextureImage(struct gl_context *ctx,
                                         itransfer->temp_stride,
                                         transfer->box.width, 
transfer->box.height,
                                         texImage->TexFormat);
+            } else if (_mesa_is_format_bptc(texImage->TexFormat)) {
+               _mesa_unpack_bptc(itransfer->map, transfer->stride,
+                                 itransfer->temp_data,
+                                 itransfer->temp_stride,
+                                 transfer->box.width, transfer->box.height,
+                                 texImage->TexFormat);
             } else {
                unreachable("unexpected format for a compressed format 
fallback");
             }
diff --git a/src/mesa/state_tracker/st_format.c 
b/src/mesa/state_tracker/st_format.c
index f951c81cf95..c3cbefe3de0 100644
--- a/src/mesa/state_tracker/st_format.c
+++ b/src/mesa/state_tracker/st_format.c
@@ -119,6 +119,17 @@ st_mesa_format_to_pipe_format(const struct st_context *st,
       }
    }
 
+   if (_mesa_is_format_bptc(mesaFormat) && !st->has_bptc) {
+      switch (mesaFormat) {
+      case MESA_FORMAT_BPTC_RGB_SIGNED_FLOAT:
+      case MESA_FORMAT_BPTC_RGB_UNSIGNED_FLOAT:
+         return PIPE_FORMAT_R32G32B32X32_FLOAT;
+      default:
+         return _mesa_is_format_srgb(mesaFormat) ? PIPE_FORMAT_R8G8B8A8_SRGB :
+                                                   PIPE_FORMAT_R8G8B8A8_UNORM;
+      }
+   }
+
    return mesaFormat;
 }
 

Reply via email to