xref: /aosp_15_r20/external/mesa3d/src/asahi/layout/tests/test-layout.cpp (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright 2022 Alyssa Rosenzweig
3*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker  */
5*61046927SAndroid Build Coastguard Worker 
6*61046927SAndroid Build Coastguard Worker #include <gtest/gtest.h>
7*61046927SAndroid Build Coastguard Worker #include "layout.h"
8*61046927SAndroid Build Coastguard Worker 
TEST(Cubemap,Nonmipmapped)9*61046927SAndroid Build Coastguard Worker TEST(Cubemap, Nonmipmapped)
10*61046927SAndroid Build Coastguard Worker {
11*61046927SAndroid Build Coastguard Worker    struct ail_layout layout = {
12*61046927SAndroid Build Coastguard Worker       .width_px = 512,
13*61046927SAndroid Build Coastguard Worker       .height_px = 512,
14*61046927SAndroid Build Coastguard Worker       .depth_px = 6,
15*61046927SAndroid Build Coastguard Worker       .sample_count_sa = 1,
16*61046927SAndroid Build Coastguard Worker       .levels = 1,
17*61046927SAndroid Build Coastguard Worker       .tiling = AIL_TILING_TWIDDLED,
18*61046927SAndroid Build Coastguard Worker       .format = PIPE_FORMAT_R8G8B8A8_UNORM,
19*61046927SAndroid Build Coastguard Worker    };
20*61046927SAndroid Build Coastguard Worker 
21*61046927SAndroid Build Coastguard Worker    ail_make_miptree(&layout);
22*61046927SAndroid Build Coastguard Worker 
23*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(layout.layer_stride_B, ALIGN_POT(512 * 512 * 4, 0x4000));
24*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(layout.size_B, ALIGN_POT(512 * 512 * 4 * 6, 0x4000));
25*61046927SAndroid Build Coastguard Worker }
26*61046927SAndroid Build Coastguard Worker 
TEST(Cubemap,RoundsToOnePage)27*61046927SAndroid Build Coastguard Worker TEST(Cubemap, RoundsToOnePage)
28*61046927SAndroid Build Coastguard Worker {
29*61046927SAndroid Build Coastguard Worker    struct ail_layout layout = {
30*61046927SAndroid Build Coastguard Worker       .width_px = 63,
31*61046927SAndroid Build Coastguard Worker       .height_px = 63,
32*61046927SAndroid Build Coastguard Worker       .depth_px = 6,
33*61046927SAndroid Build Coastguard Worker       .sample_count_sa = 1,
34*61046927SAndroid Build Coastguard Worker       .levels = 6,
35*61046927SAndroid Build Coastguard Worker       .tiling = AIL_TILING_TWIDDLED,
36*61046927SAndroid Build Coastguard Worker       .format = PIPE_FORMAT_R32_FLOAT,
37*61046927SAndroid Build Coastguard Worker    };
38*61046927SAndroid Build Coastguard Worker 
39*61046927SAndroid Build Coastguard Worker    ail_make_miptree(&layout);
40*61046927SAndroid Build Coastguard Worker 
41*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(layout.level_offsets_B[0], 0);
42*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(layout.level_offsets_B[1], 0x4000);
43*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(layout.level_offsets_B[2], 0x5000);
44*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(layout.level_offsets_B[3], 0x5400);
45*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(layout.level_offsets_B[4], 0x5500);
46*61046927SAndroid Build Coastguard Worker    EXPECT_TRUE(layout.page_aligned_layers);
47*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(layout.layer_stride_B, 0x8000);
48*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(layout.size_B, 0x30000);
49*61046927SAndroid Build Coastguard Worker }
50*61046927SAndroid Build Coastguard Worker 
TEST(Linear,SmokeTestBuffer)51*61046927SAndroid Build Coastguard Worker TEST(Linear, SmokeTestBuffer)
52*61046927SAndroid Build Coastguard Worker {
53*61046927SAndroid Build Coastguard Worker    struct ail_layout layout = {
54*61046927SAndroid Build Coastguard Worker       .width_px = 81946,
55*61046927SAndroid Build Coastguard Worker       .height_px = 1,
56*61046927SAndroid Build Coastguard Worker       .depth_px = 1,
57*61046927SAndroid Build Coastguard Worker       .sample_count_sa = 1,
58*61046927SAndroid Build Coastguard Worker       .levels = 1,
59*61046927SAndroid Build Coastguard Worker       .tiling = AIL_TILING_LINEAR,
60*61046927SAndroid Build Coastguard Worker       .format = PIPE_FORMAT_R8_UINT,
61*61046927SAndroid Build Coastguard Worker    };
62*61046927SAndroid Build Coastguard Worker 
63*61046927SAndroid Build Coastguard Worker    ail_make_miptree(&layout);
64*61046927SAndroid Build Coastguard Worker 
65*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(layout.size_B, ALIGN_POT(81946, AIL_CACHELINE));
66*61046927SAndroid Build Coastguard Worker }
67*61046927SAndroid Build Coastguard Worker 
TEST(Miptree,AllMipLevels)68*61046927SAndroid Build Coastguard Worker TEST(Miptree, AllMipLevels)
69*61046927SAndroid Build Coastguard Worker {
70*61046927SAndroid Build Coastguard Worker    struct ail_layout layout = {
71*61046927SAndroid Build Coastguard Worker       .width_px = 1024,
72*61046927SAndroid Build Coastguard Worker       .height_px = 1024,
73*61046927SAndroid Build Coastguard Worker       .depth_px = 1,
74*61046927SAndroid Build Coastguard Worker       .sample_count_sa = 1,
75*61046927SAndroid Build Coastguard Worker       .levels = 11,
76*61046927SAndroid Build Coastguard Worker       .tiling = AIL_TILING_TWIDDLED,
77*61046927SAndroid Build Coastguard Worker       .format = PIPE_FORMAT_R8G8B8A8_UINT,
78*61046927SAndroid Build Coastguard Worker    };
79*61046927SAndroid Build Coastguard Worker 
80*61046927SAndroid Build Coastguard Worker    ail_make_miptree(&layout);
81*61046927SAndroid Build Coastguard Worker 
82*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(layout.size_B, 0x555680);
83*61046927SAndroid Build Coastguard Worker }
84*61046927SAndroid Build Coastguard Worker 
TEST(Miptree,SomeMipLevels)85*61046927SAndroid Build Coastguard Worker TEST(Miptree, SomeMipLevels)
86*61046927SAndroid Build Coastguard Worker {
87*61046927SAndroid Build Coastguard Worker    struct ail_layout layout = {
88*61046927SAndroid Build Coastguard Worker       .width_px = 1024,
89*61046927SAndroid Build Coastguard Worker       .height_px = 1024,
90*61046927SAndroid Build Coastguard Worker       .depth_px = 1,
91*61046927SAndroid Build Coastguard Worker       .sample_count_sa = 1,
92*61046927SAndroid Build Coastguard Worker       .levels = 4,
93*61046927SAndroid Build Coastguard Worker       .tiling = AIL_TILING_TWIDDLED,
94*61046927SAndroid Build Coastguard Worker       .format = PIPE_FORMAT_R8G8B8A8_UINT,
95*61046927SAndroid Build Coastguard Worker    };
96*61046927SAndroid Build Coastguard Worker 
97*61046927SAndroid Build Coastguard Worker    ail_make_miptree(&layout);
98*61046927SAndroid Build Coastguard Worker 
99*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(layout.size_B, 0x555680);
100*61046927SAndroid Build Coastguard Worker }
101*61046927SAndroid Build Coastguard Worker 
TEST(Miptree,SmallPartialMiptree2DArray)102*61046927SAndroid Build Coastguard Worker TEST(Miptree, SmallPartialMiptree2DArray)
103*61046927SAndroid Build Coastguard Worker {
104*61046927SAndroid Build Coastguard Worker    struct ail_layout layout = {
105*61046927SAndroid Build Coastguard Worker       .width_px = 32,
106*61046927SAndroid Build Coastguard Worker       .height_px = 16,
107*61046927SAndroid Build Coastguard Worker       .depth_px = 64,
108*61046927SAndroid Build Coastguard Worker       .sample_count_sa = 1,
109*61046927SAndroid Build Coastguard Worker       .levels = 4,
110*61046927SAndroid Build Coastguard Worker       .tiling = AIL_TILING_TWIDDLED,
111*61046927SAndroid Build Coastguard Worker       .format = PIPE_FORMAT_R32_FLOAT,
112*61046927SAndroid Build Coastguard Worker    };
113*61046927SAndroid Build Coastguard Worker 
114*61046927SAndroid Build Coastguard Worker    ail_make_miptree(&layout);
115*61046927SAndroid Build Coastguard Worker 
116*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(layout.layer_stride_B, 0xc00);
117*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(layout.size_B, 0x30000);
118*61046927SAndroid Build Coastguard Worker }
119*61046927SAndroid Build Coastguard Worker 
TEST(Miptree,SmallPartialMiptree3D)120*61046927SAndroid Build Coastguard Worker TEST(Miptree, SmallPartialMiptree3D)
121*61046927SAndroid Build Coastguard Worker {
122*61046927SAndroid Build Coastguard Worker    struct ail_layout layout = {
123*61046927SAndroid Build Coastguard Worker       .width_px = 32,
124*61046927SAndroid Build Coastguard Worker       .height_px = 16,
125*61046927SAndroid Build Coastguard Worker       .depth_px = 64,
126*61046927SAndroid Build Coastguard Worker       .sample_count_sa = 1,
127*61046927SAndroid Build Coastguard Worker       .levels = 4,
128*61046927SAndroid Build Coastguard Worker       .mipmapped_z = true,
129*61046927SAndroid Build Coastguard Worker       .tiling = AIL_TILING_TWIDDLED,
130*61046927SAndroid Build Coastguard Worker       .format = PIPE_FORMAT_R32_FLOAT,
131*61046927SAndroid Build Coastguard Worker    };
132*61046927SAndroid Build Coastguard Worker 
133*61046927SAndroid Build Coastguard Worker    ail_make_miptree(&layout);
134*61046927SAndroid Build Coastguard Worker 
135*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(layout.layer_stride_B, 0xc80);
136*61046927SAndroid Build Coastguard Worker    EXPECT_EQ(layout.size_B, 0x32000);
137*61046927SAndroid Build Coastguard Worker }
138