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

Author: Yogesh Mohan Marimuthu <[email protected]>
Date:   Fri Aug 11 14:28:10 2023 +0530

ac/surface: add astc block size to bpe_to_format() function

v2: remove old comment (Chia-I Wu)
v3: add comment on matching BC3 and ASTC4x4 (Chia-I Wu)

Acked-by: : Chia-I Wu <[email protected]>
Acked-by: Bas Nieuwenhuizen <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24672>

---

 src/amd/common/ac_surface.c | 54 +++++++++++++++++++++++++++++++++++----------
 1 file changed, 42 insertions(+), 12 deletions(-)

diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c
index 271793798d1..f10f6dd4e17 100644
--- a/src/amd/common/ac_surface.c
+++ b/src/amd/common/ac_surface.c
@@ -636,18 +636,48 @@ static int surf_config_sanity(const struct ac_surf_config 
*config, unsigned flag
 
 static unsigned bpe_to_format(struct radeon_surf *surf)
 {
-   /* The format must be set correctly for the allocation of compressed
-    * textures to work. In other cases, setting the bpp is sufficient.
-    */
-   if (surf->blk_w == 4 && surf->blk_h == 4) {
-      switch (surf->bpe) {
-      case 8:
-         return ADDR_FMT_BC1;
-      case 16:
-         return ADDR_FMT_BC3;
-      default:
-         unreachable("invalid compressed bpe");
-      }
+   if (surf->blk_w != 1 || surf->blk_h != 1) {
+      if (surf->blk_w == 4 && surf->blk_h == 4) {
+         switch (surf->bpe) {
+         case 8:
+            return ADDR_FMT_BC1;
+         case 16:
+            /* since BC3 and ASTC4x4 has same blk dimension and bpe reporting 
BC3 also for ASTC4x4.
+             * matching is fine since addrlib needs only blk_w, blk_h and bpe 
to compute surface
+             * properties.
+             * TODO: If compress_type can be passed to this function, then 
this ugly BC3 and ASTC4x4
+             *       matching can be avoided.
+             */
+            return ADDR_FMT_BC3;
+         default:
+            unreachable("invalid compressed bpe");
+         }
+      } else if (surf->blk_w == 5 && surf->blk_h == 4)
+         return ADDR_FMT_ASTC_5x4;
+      else if (surf->blk_w == 5 && surf->blk_h == 5)
+         return ADDR_FMT_ASTC_5x5;
+      else if (surf->blk_w == 6 && surf->blk_h == 5)
+         return ADDR_FMT_ASTC_6x5;
+      else if (surf->blk_w == 6 && surf->blk_h == 6)
+         return ADDR_FMT_ASTC_6x6;
+      else if (surf->blk_w == 8 && surf->blk_h == 5)
+         return ADDR_FMT_ASTC_8x5;
+      else if (surf->blk_w == 8 && surf->blk_h == 6)
+         return ADDR_FMT_ASTC_8x6;
+      else if (surf->blk_w == 8 && surf->blk_h == 8)
+         return ADDR_FMT_ASTC_8x8;
+      else if (surf->blk_w == 10 && surf->blk_h == 5)
+         return ADDR_FMT_ASTC_10x5;
+      else if (surf->blk_w == 10 && surf->blk_h == 6)
+         return ADDR_FMT_ASTC_10x6;
+      else if (surf->blk_w == 10 && surf->blk_h == 8)
+         return ADDR_FMT_ASTC_10x8;
+      else if (surf->blk_w == 10 && surf->blk_h == 10)
+         return ADDR_FMT_ASTC_10x10;
+      else if (surf->blk_w == 12 && surf->blk_h == 10)
+         return ADDR_FMT_ASTC_12x10;
+      else if (surf->blk_w == 12 && surf->blk_h == 12)
+         return ADDR_FMT_ASTC_12x12;
    } else {
       switch (surf->bpe) {
       case 1:

Reply via email to