Mesa (main): freedreno/fdl: Add support for unit testing 3D texture array strides.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Nov 15 22:46:48 UTC 2021


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

Author: Emma Anholt <emma at anholt.net>
Date:   Thu Nov  4 16:20:56 2021 -0700

freedreno/fdl: Add support for unit testing 3D texture array strides.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13733>

---

 .../decode/scripts/texturator-to-unit-test.lua        | 19 +++++++++++++++----
 src/freedreno/fdl/fd_layout_test.c                    | 13 +++++++++++++
 src/freedreno/fdl/fd_layout_test.h                    |  1 +
 3 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/src/freedreno/decode/scripts/texturator-to-unit-test.lua b/src/freedreno/decode/scripts/texturator-to-unit-test.lua
index e08f29a35ea..81f8d6ec1cf 100644
--- a/src/freedreno/decode/scripts/texturator-to-unit-test.lua
+++ b/src/freedreno/decode/scripts/texturator-to-unit-test.lua
@@ -17,12 +17,12 @@ local found_tex = 0
 local allblits = {}
 local nallblits = 0
 
-function get_first_blit(base, width, height)
+function get_next_blit(base, width, height, prev_blit)
   local first_blit = nil
 
   for n = 0,nallblits-1 do
     local blit = allblits[n]
-    if blit.base == base and blit.width == width and blit.height == height then
+    if blit.base == base and blit.width == width and blit.height == height and (not prev_blit or prev_blit.addr < blit.addr) then
       if not first_blit or blit.addr < first_blit.addr then
         first_blit = blit
       end
@@ -32,6 +32,10 @@ function get_first_blit(base, width, height)
   return first_blit
 end
 
+function get_first_blit(base, width, height)
+  return get_next_blit(base, width, height, nil);
+end
+
 function minify(val, lvls)
   val = val >> lvls
   if val < 1 then
@@ -153,7 +157,7 @@ function A6XX_TEX_CONST(pkt, size)
   end
 
   if (tostring(pkt[2].TYPE) == "A6XX_TEX_3D") then
-    printf("			.width0 = %d, .height0 = %d, .depth = %d,\n", width0, height0, depth0)
+    printf("			.width0 = %d, .height0 = %d, .depth0 = %d,\n", width0, height0, depth0)
   else
     printf("			.width0 = %d, .height0 = %d,\n", width0, height0)
   end
@@ -167,9 +171,16 @@ function A6XX_TEX_CONST(pkt, size)
     local h = minify(height0, level)
     local blit = get_first_blit(basebase, w, h)
     if blit then
-      printf("				{ .offset = %d, .pitch = %u },\n",
+      printf("				{ .offset = %d, .pitch = %u",
           blit.addr - base,
           blit.pitch);
+      if (tostring(pkt[2].TYPE) == "A6XX_TEX_3D") then
+        local second = get_next_blit(basebase, w, h, blit);
+        if second then
+          printf(", .size0 = %u", second.addr - blit.addr);
+        end
+      end
+      printf(" },\n");
     end
     level = level + 1
   until w == 1 and h == 1
diff --git a/src/freedreno/fdl/fd_layout_test.c b/src/freedreno/fdl/fd_layout_test.c
index b546ac36a06..0a2f78ab4ec 100644
--- a/src/freedreno/fdl/fd_layout_test.c
+++ b/src/freedreno/fdl/fd_layout_test.c
@@ -87,6 +87,19 @@ fdl_test_layout(const struct testcase *testcase, int gpu_id)
          ok = false;
       }
 
+      /* Test optional requirement of the slice size.  Important for testing 3D
+       * layouts.
+       */
+      if (testcase->layout.slices[l].size0 && layout.slices[l].size0 !=
+          testcase->layout.slices[l].size0) {
+         fprintf(stderr, "%s %dx%dx%d@%dx lvl%d: slice size %d != %d\n",
+                 util_format_short_name(testcase->format), layout.width0,
+                 layout.height0, layout.depth0, layout.nr_samples, l,
+                 layout.slices[l].size0,
+                 testcase->layout.slices[l].size0);
+         ok = false;
+      }
+
       if (layout.ubwc_slices[l].offset !=
           testcase->layout.ubwc_slices[l].offset) {
          fprintf(stderr, "%s %dx%dx%d@%dx lvl%d: UBWC offset 0x%x != 0x%x\n",
diff --git a/src/freedreno/fdl/fd_layout_test.h b/src/freedreno/fdl/fd_layout_test.h
index 75280bf5dfe..9dda6c2e6a1 100644
--- a/src/freedreno/fdl/fd_layout_test.h
+++ b/src/freedreno/fdl/fd_layout_test.h
@@ -36,6 +36,7 @@ struct testcase {
       struct {
          uint32_t offset;
          uint32_t pitch;
+         uint32_t size0;
       } slices[FDL_MAX_MIP_LEVELS];
       struct {
          uint32_t offset;



More information about the mesa-commit mailing list