*/
#include "freedreno_layout.h"
+#include "fd_layout_test.h"
#include "adreno_common.xml.h"
+#include "adreno_pm4.xml.h"
#include "a6xx.xml.h"
#include <stdio.h>
-struct testcase {
- enum pipe_format format;
-
- int array_size; /* Size for array textures, or 0 otherwise. */
- bool is_3d;
-
- /* Partially filled layout of input parameters and expected results. */
- struct fdl_layout layout;
-};
-
static const struct testcase testcases[] = {
/* A straightforward first testcase, linear, with an obvious format. */
{
{ .offset = 8192, .pitch = 128 },
{ .offset = 12288, .pitch = 128 },
{ .offset = 16384, .pitch = 128 },
- { .offset = 20480, .pitch = 64 },
- { .offset = 20544, .pitch = 64 },
- { .offset = 20608, .pitch = 64 },
- { .offset = 20672, .pitch = 64 },
+ { .offset = 20480, .pitch = 128 },
+ { .offset = 20608, .pitch = 128 },
+ { .offset = 20736, .pitch = 128 },
+ { .offset = 20864, .pitch = 128 },
},
},
},
},
};
-static bool test_layout(const struct testcase *testcase)
-{
- struct fdl_layout layout = {
- .ubwc = testcase->layout.ubwc,
- .tile_mode = testcase->layout.tile_mode,
- };
- bool ok = true;
-
- int max_size = MAX2(testcase->layout.width0, testcase->layout.height0);
- int mip_levels = 1;
- while (max_size > 1 && testcase->layout.slices[mip_levels].pitch) {
- mip_levels++;
- max_size = u_minify(max_size, 1);
- }
-
- fdl6_layout(&layout,
- testcase->format,
- MAX2(testcase->layout.nr_samples, 1),
- testcase->layout.width0,
- MAX2(testcase->layout.height0, 1),
- MAX2(testcase->layout.depth0, 1),
- mip_levels,
- MAX2(testcase->array_size, 1),
- testcase->is_3d);
-
- /* fdl lays out UBWC data before the color data, while all we have
- * 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 && !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;
- }
-
- for (int l = 0; l < mip_levels; l++) {
- if (layout.slices[l].offset != testcase->layout.slices[l].offset) {
- fprintf(stderr, "%s %dx%dx%d@%dx lvl%d: offset 0x%x != 0x%x\n",
- util_format_short_name(testcase->format),
- layout.width0, layout.height0, layout.depth0,
- layout.nr_samples, l,
- layout.slices[l].offset,
- testcase->layout.slices[l].offset);
- ok = false;
- }
- if (layout.slices[l].pitch != testcase->layout.slices[l].pitch) {
- fprintf(stderr, "%s %dx%dx%d@%dx lvl%d: pitch %d != %d\n",
- util_format_short_name(testcase->format),
- layout.width0, layout.height0, layout.depth0,
- layout.nr_samples, l,
- layout.slices[l].pitch,
- testcase->layout.slices[l].pitch);
- 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",
- util_format_short_name(testcase->format),
- layout.width0, layout.height0, layout.depth0,
- layout.nr_samples, l,
- layout.ubwc_slices[l].offset,
- testcase->layout.ubwc_slices[l].offset);
- ok = false;
- }
- if (layout.ubwc_slices[l].pitch != testcase->layout.ubwc_slices[l].pitch) {
- fprintf(stderr, "%s %dx%dx%d@%dx lvl%d: UBWC pitch %d != %d\n",
- util_format_short_name(testcase->format),
- layout.width0, layout.height0, layout.depth0,
- layout.nr_samples, l,
- layout.ubwc_slices[l].pitch,
- testcase->layout.ubwc_slices[l].pitch);
- ok = false;
- }
- }
-
- if (!ok)
- fprintf(stderr, "\n");
-
- return ok;
-}
-
int
main(int argc, char **argv)
{
int ret = 0;
for (int i = 0; i < ARRAY_SIZE(testcases); i++) {
- if (!test_layout(&testcases[i]))
+ if (!fdl_test_layout(&testcases[i], 630))
ret = 1;
}