mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-20 04:48:07 +02:00
Just add a flag for it. We don't care about the actual # of layers when calculating the layout, only the boolean fact of being layered or not. The reason we need this at all is because the eMRT implementation needs to account for layering and that is only keyed off the tilebuffer layout. Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
158 lines
3.5 KiB
C++
158 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, 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;
|
|
}
|
|
}
|