xref: /aosp_15_r20/external/gmmlib/Source/GmmLib/ULT/GmmGen9ResourceULT.h (revision 35ffd701415c9e32e53136d61a677a8d0a8fc4a5)
1*35ffd701SAndroid Build Coastguard Worker /*==============================================================================
2*35ffd701SAndroid Build Coastguard Worker Copyright(c) 2017 Intel Corporation
3*35ffd701SAndroid Build Coastguard Worker 
4*35ffd701SAndroid Build Coastguard Worker Permission is hereby granted, free of charge, to any person obtaining a
5*35ffd701SAndroid Build Coastguard Worker copy of this software and associated documentation files(the "Software"),
6*35ffd701SAndroid Build Coastguard Worker to deal in the Software without restriction, including without limitation
7*35ffd701SAndroid Build Coastguard Worker the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*35ffd701SAndroid Build Coastguard Worker and / or sell copies of the Software, and to permit persons to whom the
9*35ffd701SAndroid Build Coastguard Worker Software is furnished to do so, subject to the following conditions:
10*35ffd701SAndroid Build Coastguard Worker 
11*35ffd701SAndroid Build Coastguard Worker The above copyright notice and this permission notice shall be included
12*35ffd701SAndroid Build Coastguard Worker in all copies or substantial portions of the Software.
13*35ffd701SAndroid Build Coastguard Worker 
14*35ffd701SAndroid Build Coastguard Worker THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15*35ffd701SAndroid Build Coastguard Worker OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*35ffd701SAndroid Build Coastguard Worker FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17*35ffd701SAndroid Build Coastguard Worker THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18*35ffd701SAndroid Build Coastguard Worker OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19*35ffd701SAndroid Build Coastguard Worker ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20*35ffd701SAndroid Build Coastguard Worker OTHER DEALINGS IN THE SOFTWARE.
21*35ffd701SAndroid Build Coastguard Worker ============================================================================*/
22*35ffd701SAndroid Build Coastguard Worker 
23*35ffd701SAndroid Build Coastguard Worker #pragma once
24*35ffd701SAndroid Build Coastguard Worker 
25*35ffd701SAndroid Build Coastguard Worker #include "GmmResourceULT.h"
26*35ffd701SAndroid Build Coastguard Worker 
27*35ffd701SAndroid Build Coastguard Worker class CTestGen9Resource : public CTestResource
28*35ffd701SAndroid Build Coastguard Worker {
29*35ffd701SAndroid Build Coastguard Worker protected:
30*35ffd701SAndroid Build Coastguard Worker     void                FillExpectedPitch();
31*35ffd701SAndroid Build Coastguard Worker     void                FillExpectedPitchInTiles();
32*35ffd701SAndroid Build Coastguard Worker     void                FillExpectedHAlign();
33*35ffd701SAndroid Build Coastguard Worker     void                FillExpectedVAlign();
34*35ffd701SAndroid Build Coastguard Worker     void                FillExpectedDAlign();
35*35ffd701SAndroid Build Coastguard Worker     void                FillExpectedSize();
36*35ffd701SAndroid Build Coastguard Worker     void                FillExpectedQPitch();
37*35ffd701SAndroid Build Coastguard Worker 
38*35ffd701SAndroid Build Coastguard Worker     void                FillExpectedMipOffsets();
39*35ffd701SAndroid Build Coastguard Worker 
40*35ffd701SAndroid Build Coastguard Worker public:
41*35ffd701SAndroid Build Coastguard Worker     static void SetUpTestCase();
42*35ffd701SAndroid Build Coastguard Worker     static void TearDownTestCase();
43*35ffd701SAndroid Build Coastguard Worker 
44*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
45*35ffd701SAndroid Build Coastguard Worker     /// Get the Tile dimension and RT->CCS downscale factor
46*35ffd701SAndroid Build Coastguard Worker     ///
47*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  Bpp: bits per pixel
48*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  Tiling: Tile Type
49*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ResType: Resource Type
50*35ffd701SAndroid Build Coastguard Worker     /// @param[out] TileDimX: Tile Width for given Tile, Resource, bpp
51*35ffd701SAndroid Build Coastguard Worker     /// @param[out] TileDimY: Tile Height for given Tile, Resource, bpp
52*35ffd701SAndroid Build Coastguard Worker     /// @param[out] TileDimZ: Tile Depth for given Tile, Resource, bpp
53*35ffd701SAndroid Build Coastguard Worker     /// @param[out] WidthDivisor: RT->CCS width downscale factor
54*35ffd701SAndroid Build Coastguard Worker     /// @param[out] HeightDivisor: RT->CCS height downscale factor
55*35ffd701SAndroid Build Coastguard Worker     ///
56*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
GetAlignmentAndTileDimensionsForCCS(TEST_BPP Bpp,TEST_TILE_TYPE Tiling,TEST_RESOURCE_TYPE ResType,uint32_t & TileDimX,uint32_t & TileDimY,uint32_t & TileDimZ,uint32_t & WidthDivisor,uint32_t & HeightDivisor)57*35ffd701SAndroid Build Coastguard Worker     void GetAlignmentAndTileDimensionsForCCS(TEST_BPP Bpp, TEST_TILE_TYPE Tiling, TEST_RESOURCE_TYPE ResType,
58*35ffd701SAndroid Build Coastguard Worker                                         uint32_t &TileDimX, uint32_t &TileDimY, uint32_t & TileDimZ,
59*35ffd701SAndroid Build Coastguard Worker                                         uint32_t &WidthDivisor, uint32_t &HeightDivisor)
60*35ffd701SAndroid Build Coastguard Worker     {
61*35ffd701SAndroid Build Coastguard Worker         const uint32_t RT2DTileSize[TEST_TILE_MAX][TEST_BPP_MAX][3] = {
62*35ffd701SAndroid Build Coastguard Worker             { { 64, 1, 1 },{ 64, 1, 1 },{ 64, 1, 1 },{ 64, 1, 1 },{ 64, 1, 1 } },                  //Linear - no Tile Size, but min PitchAlign = 64 (cacheLine size)
63*35ffd701SAndroid Build Coastguard Worker             { { 512, 8, 1 },{ 512, 8,1 },{ 512, 8,1 },{ 512, 8, 1 },{ 512, 8, 1 } },                //TileX
64*35ffd701SAndroid Build Coastguard Worker             { { 128, 32, 1 },{ 128, 32, 1 },{ 128, 32, 1 },{ 128, 32, 1 },{ 128, 32, 1 } },        //TileY
65*35ffd701SAndroid Build Coastguard Worker             { { 256, 256, 1 },{ 512, 128, 1 },{ 512, 128, 1 },{ 1024, 64, 1 },{ 1024, 64, 1 } },   //TileYs
66*35ffd701SAndroid Build Coastguard Worker             { { 64, 64, 1 },{ 128, 32, 1 },{ 128, 32,1 },{ 256, 16, 1 },{ 256, 16, 1 } }           //TileYf
67*35ffd701SAndroid Build Coastguard Worker         };
68*35ffd701SAndroid Build Coastguard Worker 
69*35ffd701SAndroid Build Coastguard Worker         const uint32_t RT3DTileSize[TEST_TILE_MAX][TEST_BPP_MAX][3] = {
70*35ffd701SAndroid Build Coastguard Worker             { { 64, 1, 1 },{ 64, 1, 1 },{ 64, 1, 1 },{ 64, 1, 1 },{ 64, 1, 1 } },                 //Linear - no Tile Size, but min PitchAlign = 64 (cacheLine size)
71*35ffd701SAndroid Build Coastguard Worker             { { 512, 8, 1 },{ 512, 8, 1 },{ 512, 8, 1 },{ 512, 8, 1 },{ 512, 8, 1 } },            //TileX
72*35ffd701SAndroid Build Coastguard Worker             { { 128, 32, 1 },{ 128, 32, 1 },{ 128, 32, 1 },{ 128, 32, 1 },{ 128, 32, 1 } },       //TileY
73*35ffd701SAndroid Build Coastguard Worker             { { 64, 32, 32 },{ 64, 32, 32 },{ 128, 32, 16 },{ 256, 16, 16 },{ 512, 16, 16 } },    //TileYs
74*35ffd701SAndroid Build Coastguard Worker             { { 16, 16, 16 },{ 16, 16, 16 },{ 32, 16, 8 },{ 64, 8, 8 },{ 64, 8, 8 } }             //TileYf
75*35ffd701SAndroid Build Coastguard Worker         };
76*35ffd701SAndroid Build Coastguard Worker         uint32_t TileDim[3] = { RT2DTileSize[Tiling][Bpp][0], RT2DTileSize[Tiling][Bpp][1], RT2DTileSize[Tiling][Bpp][2] };
77*35ffd701SAndroid Build Coastguard Worker         if (ResType == TEST_RESOURCE_3D)
78*35ffd701SAndroid Build Coastguard Worker         {
79*35ffd701SAndroid Build Coastguard Worker             TileDim[0] = RT3DTileSize[Tiling][Bpp][0];
80*35ffd701SAndroid Build Coastguard Worker             TileDim[1] = RT3DTileSize[Tiling][Bpp][1];
81*35ffd701SAndroid Build Coastguard Worker             TileDim[2] = RT3DTileSize[Tiling][Bpp][2];
82*35ffd701SAndroid Build Coastguard Worker         }
83*35ffd701SAndroid Build Coastguard Worker         TileDimX = TileDim[0];
84*35ffd701SAndroid Build Coastguard Worker         TileDimY = TileDim[1];
85*35ffd701SAndroid Build Coastguard Worker         TileDimZ = TileDim[2];
86*35ffd701SAndroid Build Coastguard Worker 
87*35ffd701SAndroid Build Coastguard Worker         uint32_t ExpectedCCSBpp = 1;              //1 byte per pixel (contains 4 2b-CCS,
88*35ffd701SAndroid Build Coastguard Worker                                                //Each 2b covers 2CLs = 128B RT)
89*35ffd701SAndroid Build Coastguard Worker         /***
90*35ffd701SAndroid Build Coastguard Worker         2b-CCS  per 2CLs of RT (2:1 compression ie 2CL->1CL)
91*35ffd701SAndroid Build Coastguard Worker         1B-CCS covers 4x2 RT CLs (as square as possible in px)
92*35ffd701SAndroid Build Coastguard Worker 
93*35ffd701SAndroid Build Coastguard Worker         CL Byte size 16 x 4
94*35ffd701SAndroid Build Coastguard Worker         8CLs could cover {(16x32), (128x4), (64x8), (32x16)} Byte-blocks, of which last one is most-square hence should be used
95*35ffd701SAndroid Build Coastguard Worker         ie RT coverage by 1B CCS is 32x16, taking RT-bpp into account:
96*35ffd701SAndroid Build Coastguard Worker 
97*35ffd701SAndroid Build Coastguard Worker         bpp         RT-coverage in pixel by 1B CCS
98*35ffd701SAndroid Build Coastguard Worker         32         32/4  x 16 = 8x16
99*35ffd701SAndroid Build Coastguard Worker         64         32/8  x 16 = 4x16
100*35ffd701SAndroid Build Coastguard Worker         128        32/16 x 16 = 2x16
101*35ffd701SAndroid Build Coastguard Worker 
102*35ffd701SAndroid Build Coastguard Worker         Finally CCS needs to be Tile-aligned (TileY)
103*35ffd701SAndroid Build Coastguard Worker         ***/
104*35ffd701SAndroid Build Coastguard Worker         const uint32_t RTWidthDivisor[2][TEST_BPP_MAX] = { { 1, 1, 16, 8, 4 },{ 1, 1, 8, 4, 2 } }; //Divisor for TileX, TileY
105*35ffd701SAndroid Build Coastguard Worker         const uint32_t RTHeightDivisor[2] = { 8, 16 };
106*35ffd701SAndroid Build Coastguard Worker         uint32_t Idx = (Tiling == TEST_TILEX) ? 0 : 1;
107*35ffd701SAndroid Build Coastguard Worker 
108*35ffd701SAndroid Build Coastguard Worker         WidthDivisor = RTWidthDivisor[Idx][Bpp];
109*35ffd701SAndroid Build Coastguard Worker         HeightDivisor = RTHeightDivisor[Idx];
110*35ffd701SAndroid Build Coastguard Worker     }
111*35ffd701SAndroid Build Coastguard Worker 
112*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
113*35ffd701SAndroid Build Coastguard Worker     /// Verifies if Mip tail start Lod matches the expected value. Fails test if value
114*35ffd701SAndroid Build Coastguard Worker     /// doesn't match
115*35ffd701SAndroid Build Coastguard Worker     ///
116*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ResourceInfo: ResourceInfo returned by GmmLib
117*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ExpectedValue: expected value to check against
118*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
119*35ffd701SAndroid Build Coastguard Worker     template <bool Verify>
VerifyResourceMipTailStartLod(GMM_RESOURCE_INFO * ResourceInfo,uint32_t ExpectedValue)120*35ffd701SAndroid Build Coastguard Worker     void VerifyResourceMipTailStartLod(GMM_RESOURCE_INFO *ResourceInfo, uint32_t ExpectedValue)
121*35ffd701SAndroid Build Coastguard Worker     {
122*35ffd701SAndroid Build Coastguard Worker         if (Verify)
123*35ffd701SAndroid Build Coastguard Worker         {
124*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ExpectedValue, ResourceInfo->GetMipTailStartLodSurfaceState());
125*35ffd701SAndroid Build Coastguard Worker         }
126*35ffd701SAndroid Build Coastguard Worker     }
127*35ffd701SAndroid Build Coastguard Worker 
128*35ffd701SAndroid Build Coastguard Worker     CTestGen9Resource();
129*35ffd701SAndroid Build Coastguard Worker     ~CTestGen9Resource();
130*35ffd701SAndroid Build Coastguard Worker };
131*35ffd701SAndroid Build Coastguard Worker 
132