Mesa (amdgpu): winsys/amdgpu: use the new tiling flags

Alex Deucher agd5f at kemper.freedesktop.org
Fri May 22 13:57:01 UTC 2015


Module: Mesa
Branch: amdgpu
Commit: b7258d5db9052c275f52b58161285dc497f04374
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b7258d5db9052c275f52b58161285dc497f04374

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Fri May 15 00:36:54 2015 +0200

winsys/amdgpu: use the new tiling flags

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
Acked-by: Christian König <christian.koenig at amd.com>

---

 src/gallium/winsys/amdgpu/drm/amdgpu_bo.c |   64 ++++++++++++-----------------
 1 file changed, 26 insertions(+), 38 deletions(-)

diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
index 8065f46..0c0362f 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
@@ -402,23 +402,20 @@ static void amdgpu_bo_get_tiling(struct pb_buffer *_buf,
 
    *microtiled = RADEON_LAYOUT_LINEAR;
    *macrotiled = RADEON_LAYOUT_LINEAR;
-   if (tiling_flags & AMDGPU_TILING_MICRO)
-      *microtiled = RADEON_LAYOUT_TILED;
-   else if (tiling_flags & AMDGPU_TILING_MICRO_SQUARE)
-      *microtiled = RADEON_LAYOUT_SQUARETILED;
 
-   if (tiling_flags & AMDGPU_TILING_MACRO)
+   if (AMDGPU_TILING_GET(tiling_flags, ARRAY_MODE) == 4)  /* 2D_TILED_THIN1 */
       *macrotiled = RADEON_LAYOUT_TILED;
-   if (bankw && tile_split && stencil_tile_split && mtilea && tile_split) {
-      *bankw = (tiling_flags >> AMDGPU_TILING_EG_BANKW_SHIFT) & AMDGPU_TILING_EG_BANKW_MASK;
-      *bankh = (tiling_flags >> AMDGPU_TILING_EG_BANKH_SHIFT) & AMDGPU_TILING_EG_BANKH_MASK;
-      *tile_split = (tiling_flags >> AMDGPU_TILING_EG_TILE_SPLIT_SHIFT) & AMDGPU_TILING_EG_TILE_SPLIT_MASK;
-      *stencil_tile_split = (tiling_flags >> AMDGPU_TILING_EG_STENCIL_TILE_SPLIT_SHIFT) & AMDGPU_TILING_EG_STENCIL_TILE_SPLIT_MASK;
-      *mtilea = (tiling_flags >> AMDGPU_TILING_EG_MACRO_TILE_ASPECT_SHIFT) & AMDGPU_TILING_EG_MACRO_TILE_ASPECT_MASK;
-      *tile_split = eg_tile_split(*tile_split);
+   else if (AMDGPU_TILING_GET(tiling_flags, ARRAY_MODE) == 2) /* 1D_TILED_THIN1 */
+      *microtiled = RADEON_LAYOUT_TILED;
+
+   if (bankw && tile_split && mtilea && tile_split) {
+      *bankw = 1 << AMDGPU_TILING_GET(tiling_flags, BANK_WIDTH);
+      *bankh = 1 << AMDGPU_TILING_GET(tiling_flags, BANK_HEIGHT);
+      *tile_split = eg_tile_split(AMDGPU_TILING_GET(tiling_flags, TILE_SPLIT));
+      *mtilea = 1 << AMDGPU_TILING_GET(tiling_flags, MACRO_TILE_ASPECT);
    }
    if (scanout)
-      *scanout = !(tiling_flags & AMDGPU_TILING_R600_NO_SCANOUT);
+      *scanout = AMDGPU_TILING_GET(tiling_flags, MICRO_TILE_MODE) == 0; /* DISPLAY */
 }
 
 static void amdgpu_bo_set_tiling(struct pb_buffer *_buf,
@@ -437,7 +434,6 @@ static void amdgpu_bo_set_tiling(struct pb_buffer *_buf,
    struct amdgpu_bo_metadata metadata = {0};
    uint32_t tiling_flags = 0;
 
-
    /* Tiling determines how DRM treats the buffer data.
      * We must flush CS when changing it if the buffer is referenced. */
    if (cs && amdgpu_bo_is_referenced_by_cs(cs, bo)) {
@@ -448,31 +444,23 @@ static void amdgpu_bo_set_tiling(struct pb_buffer *_buf,
       sched_yield();
    }
 
-   if (microtiled == RADEON_LAYOUT_TILED)
-      tiling_flags |= AMDGPU_TILING_MICRO;
-   else if (microtiled == RADEON_LAYOUT_SQUARETILED)
-      tiling_flags |= AMDGPU_TILING_MICRO_SQUARE;
-
    if (macrotiled == RADEON_LAYOUT_TILED)
-      tiling_flags |= AMDGPU_TILING_MACRO;
-
-   tiling_flags |= (bankw & AMDGPU_TILING_EG_BANKW_MASK) <<
-                   AMDGPU_TILING_EG_BANKW_SHIFT;
-   tiling_flags |= (bankh & AMDGPU_TILING_EG_BANKH_MASK) <<
-                   AMDGPU_TILING_EG_BANKH_SHIFT;
-   if (tile_split) {
-      tiling_flags |= (eg_tile_split_rev(tile_split) &
-                       AMDGPU_TILING_EG_TILE_SPLIT_MASK) <<
-                      AMDGPU_TILING_EG_TILE_SPLIT_SHIFT;
-   }
-   tiling_flags |= (stencil_tile_split &
-                    AMDGPU_TILING_EG_STENCIL_TILE_SPLIT_MASK) <<
-                   AMDGPU_TILING_EG_STENCIL_TILE_SPLIT_SHIFT;
-   tiling_flags |= (mtilea & AMDGPU_TILING_EG_MACRO_TILE_ASPECT_MASK) <<
-                   AMDGPU_TILING_EG_MACRO_TILE_ASPECT_SHIFT;
-
-   if (!scanout)
-      tiling_flags |= AMDGPU_TILING_R600_NO_SCANOUT;
+      tiling_flags |= AMDGPU_TILING_SET(ARRAY_MODE, 4); /* 2D_TILED_THIN1 */
+   else if (microtiled == RADEON_LAYOUT_TILED)
+      tiling_flags |= AMDGPU_TILING_SET(ARRAY_MODE, 2); /* 1D_TILED_THIN1 */
+   else
+      tiling_flags |= AMDGPU_TILING_SET(ARRAY_MODE, 1); /* LINEAR_ALIGNED */
+
+   tiling_flags |= AMDGPU_TILING_SET(BANK_WIDTH, util_logbase2(bankw));
+   tiling_flags |= AMDGPU_TILING_SET(BANK_HEIGHT, util_logbase2(bankh));
+   if (tile_split)
+      tiling_flags |= AMDGPU_TILING_SET(TILE_SPLIT, eg_tile_split_rev(tile_split));
+   tiling_flags |= AMDGPU_TILING_SET(MACRO_TILE_ASPECT, util_logbase2(mtilea));
+
+   if (scanout)
+      tiling_flags |= AMDGPU_TILING_SET(MICRO_TILE_MODE, 0); /* DISPLAY_MICRO_TILING */
+   else
+      tiling_flags |= AMDGPU_TILING_SET(MICRO_TILE_MODE, 1); /* THIN_MICRO_TILING */
 
    metadata.tiling_info = tiling_flags;
 




More information about the mesa-commit mailing list