aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2020-05-06 18:01:36 -0700
committerMarge Bot <[email protected]>2020-05-13 19:18:16 +0000
commitdc7ccdb3f526c2e43aa48a3f5d43fea948012371 (patch)
treee538eae10a227febb0cd68cc0075a0458d20f66c
parente32783c644fa7230c4de07f1062cfc900a7e0e9a (diff)
freedreno/a6xx: Add a testcase for UBWC buffer sharing.
These offsets are hand-computed referencing msm_media_info.h, and match our driver's current behavior. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4931>
-rw-r--r--src/freedreno/fdl/fd6_layout_test.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/freedreno/fdl/fd6_layout_test.c b/src/freedreno/fdl/fd6_layout_test.c
index a30b08983a0..45a973964f1 100644
--- a/src/freedreno/fdl/fd6_layout_test.c
+++ b/src/freedreno/fdl/fd6_layout_test.c
@@ -373,6 +373,23 @@ static const struct testcase testcases[] = {
},
},
+ /* Single-level RGBA8888 UBWC following UBWC alignment rules laid out in
+ * msm_media_info.h to verify that we don't break buffer sharing.
+ */
+ {
+ .format = PIPE_FORMAT_R8G8B8A8_UNORM,
+ .layout = {
+ .tile_mode = TILE6_3,
+ .ubwc = true,
+ .width0 = 16384, .height0 = 129,
+ .slices = {
+ { .offset = 1024 * 48, .pitch = 16384 * 4 },
+ },
+ .ubwc_slices = {
+ { .offset = 0, .pitch = 1024 },
+ },
+ },
+ },
};
static bool test_layout(const struct testcase *testcase)
@@ -385,7 +402,7 @@ static bool test_layout(const struct testcase *testcase)
int max_size = MAX2(testcase->layout.width0, testcase->layout.height0);
int mip_levels = 1;
- while (max_size > 1) {
+ while (max_size > 1 && testcase->layout.slices[mip_levels].pitch) {
mip_levels++;
max_size = u_minify(max_size, 1);
}
@@ -401,10 +418,11 @@ static bool test_layout(const struct testcase *testcase)
testcase->is_3d);
/* fdl lays out UBWC data before the color data, while all we have
- * recorded in this testcase are the color offsets. Shift the fdl layout
- * down so we can compare color offsets.
+ * recorded in this testcase are the color offsets (other than the UBWC
+ * buffer sharing test). Shift the fdl layout down so we can compare
+ * color offsets.
*/
- if (layout.ubwc) {
+ if (layout.ubwc && !testcase->layout.slices[0].offset) {
for (int l = 1; l < mip_levels; l++)
layout.slices[l].offset -= layout.slices[0].offset;
layout.slices[0].offset = 0;