mirror of https://gitlab.freedesktop.org/mesa/mesa
182 lines
4.1 KiB
C++
182 lines
4.1 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
|
|
},
|
|
{
|
|
"MRT test that requires spilling to consider alignment requirements",
|
|
4,
|
|
{
|
|
PIPE_FORMAT_R32_FLOAT,
|
|
PIPE_FORMAT_R32_FLOAT,
|
|
PIPE_FORMAT_R32_FLOAT,
|
|
PIPE_FORMAT_R32_FLOAT,
|
|
PIPE_FORMAT_R32_FLOAT,
|
|
PIPE_FORMAT_R32_FLOAT,
|
|
PIPE_FORMAT_R32_FLOAT,
|
|
PIPE_FORMAT_R32_FLOAT,
|
|
},
|
|
{
|
|
.spilled = { false, false, false, false, false, false, true, true },
|
|
._offset_B = { 0, 4, 8, 12, 16, 20, 0, 0},
|
|
.sample_size_B = 24,
|
|
.nr_samples = 4,
|
|
.tile_size = { 16, 16 },
|
|
},
|
|
24576
|
|
},
|
|
|
|
};
|
|
/* 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, false);
|
|
|
|
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;
|
|
}
|
|
}
|