Files
mesa/src/asahi/lib/tests/test-tilebuffer.cpp
T
Alyssa Rosenzweig c1f175c9fa asahi: Manually format some parts of the code
clang-format will mangle these.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20434>
2022-12-27 22:46:29 +00:00

161 lines
3.5 KiB
C++

/*
* Copyright 2022 Alyssa Rosenzweig
* SPDX-License-Identifier: MIT
*/
#include "util/format/u_format.h"
#include "agx_tilebuffer.h"
#include <gtest/gtest.h>
struct test {
const char *name;
uint8_t nr_samples;
enum pipe_format formats[8];
struct agx_tilebuffer_layout layout;
uint32_t total_size;
};
/* clang-format off */
struct test tests[] = {
{
"Simple test",
1,
{ PIPE_FORMAT_R8G8B8A8_UNORM },
{
.offset_B = { 0 },
.sample_size_B = 8,
.nr_samples = 1,
.tile_size = { 32, 32 },
},
8192
},
{
"MSAA 2x",
2,
{ PIPE_FORMAT_R8G8B8A8_UNORM },
{
.offset_B = { 0 },
.sample_size_B = 8,
.nr_samples = 2,
.tile_size = { 32, 32 },
},
16384
},
{
"MSAA 4x",
4,
{ PIPE_FORMAT_R8G8B8A8_UNORM },
{
.offset_B = { 0 },
.sample_size_B = 8,
.nr_samples = 4,
.tile_size = { 32, 16 },
},
16384
},
{
"MRT",
1,
{
PIPE_FORMAT_R16_SINT,
PIPE_FORMAT_R32G32_FLOAT,
PIPE_FORMAT_R8_SINT,
PIPE_FORMAT_R32G32_SINT,
},
{
.offset_B = { 0, 4, 12, 16 },
.sample_size_B = 24,
.nr_samples = 1,
.tile_size = { 32, 32 },
},
24576
},
{
"MRT with MSAA 2x",
2,
{
PIPE_FORMAT_R16_SINT,
PIPE_FORMAT_R32G32_FLOAT,
PIPE_FORMAT_R8_SINT,
PIPE_FORMAT_R32G32_SINT,
},
{
.offset_B = { 0, 4, 12, 16 },
.sample_size_B = 24,
.nr_samples = 2,
.tile_size = { 32, 16 },
},
24576
},
{
"MRT with MSAA 4x",
4,
{
PIPE_FORMAT_R16_SINT,
PIPE_FORMAT_R32G32_FLOAT,
PIPE_FORMAT_R8_SINT,
PIPE_FORMAT_R32G32_SINT,
},
{
.offset_B = { 0, 4, 12, 16 },
.sample_size_B = 24,
.nr_samples = 4,
.tile_size = { 16, 16 },
},
24576
},
{
"MRT test requiring 2 alignment on the second RT",
1,
{ PIPE_FORMAT_R8_UNORM, PIPE_FORMAT_R16G16_SNORM },
{
.offset_B = { 0, 2 },
.sample_size_B = 8,
.nr_samples = 1,
.tile_size = { 32, 32 },
},
8192
},
{
"Simple MRT test requiring 4 alignment on the second RT",
1,
{ PIPE_FORMAT_R8_UNORM, PIPE_FORMAT_R10G10B10A2_UNORM },
{
.offset_B = { 0, 4 },
.sample_size_B = 8,
.nr_samples = 1,
.tile_size = { 32, 32 },
},
8192
}
};
/* clang-format on */
TEST(Tilebuffer, Layouts)
{
for (unsigned i = 0; i < ARRAY_SIZE(tests); ++i) {
unsigned nr_cbufs;
for (nr_cbufs = 0;
nr_cbufs < ARRAY_SIZE(tests[i].formats) &&
tests[i].formats[nr_cbufs] != PIPE_FORMAT_NONE;
++nr_cbufs);
struct agx_tilebuffer_layout actual =
agx_build_tilebuffer_layout(tests[i].formats, nr_cbufs,
tests[i].nr_samples);
ASSERT_EQ(tests[i].layout.sample_size_B, actual.sample_size_B) <<
tests[i].name;
ASSERT_EQ(tests[i].layout.nr_samples, actual.nr_samples) << tests[i].name;
ASSERT_EQ(tests[i].layout.tile_size.width, actual.tile_size.width) <<
tests[i].name;
ASSERT_EQ(tests[i].layout.tile_size.height, actual.tile_size.height) <<
tests[i].name;
ASSERT_EQ(tests[i].total_size,
agx_tilebuffer_total_size(&tests[i].layout)) <<
tests[i].name;
}
}