ac/surface/gfx10: allow "rotated" micro mode
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Thu, 28 Jun 2018 19:01:40 +0000 (21:01 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 3 Jul 2019 19:51:12 +0000 (15:51 -0400)
Standard mode does not support DCC.

The R is retconned to "render target" on gfx10.

Acked-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/amd/common/ac_surface.c
src/amd/common/ac_surface.h

index 8168b2e..d1ff060 100644 (file)
@@ -1612,7 +1612,7 @@ static int gfx9_compute_surface(ADDR_HANDLE addrlib,
                        surf->micro_tile_mode = RADEON_MICRO_MODE_DISPLAY;
                        break;
 
-               /* R = rotated. */
+               /* R = rotated (gfx9), render target (gfx10). */
                case ADDR_SW_256B_R:
                case ADDR_SW_4KB_R:
                case ADDR_SW_64KB_R:
@@ -1622,13 +1622,13 @@ static int gfx9_compute_surface(ADDR_HANDLE addrlib,
                case ADDR_SW_64KB_R_X:
                case ADDR_SW_VAR_R_X:
                        /* The rotated micro tile mode doesn't work if both CMASK and RB+ are
-                        * used at the same time. This case is not currently expected to occur
-                        * because we don't use rotated. Enforce this restriction on all chips
-                        * to facilitate testing.
+                        * used at the same time. We currently do not use rotated
+                        * in gfx9.
                         */
-                       assert(!"rotate micro tile mode is unsupported");
-                       r = ADDR_ERROR;
-                       goto error;
+                       assert(info->chip_class >= GFX10 ||
+                              !"rotate micro tile mode is unsupported");
+                       surf->micro_tile_mode = RADEON_MICRO_MODE_ROTATED;
+                       break;
 
                /* Z = depth. */
                case ADDR_SW_4KB_Z:
index a4144a4..9fb0932 100644 (file)
@@ -54,7 +54,7 @@ enum radeon_micro_mode {
     RADEON_MICRO_MODE_DISPLAY = 0,
     RADEON_MICRO_MODE_THIN = 1,
     RADEON_MICRO_MODE_DEPTH = 2,
-    RADEON_MICRO_MODE_ROTATED = 3,
+    RADEON_MICRO_MODE_ROTATED = 3, /* gfx10+: render target */
 };
 
 /* the first 16 bits are reserved for libdrm_radeon, don't use them */