xref: /aosp_15_r20/external/gmmlib/Source/GmmLib/ULT/GmmXe2_LPGResourceULT.cpp (revision 35ffd701415c9e32e53136d61a677a8d0a8fc4a5)
1*35ffd701SAndroid Build Coastguard Worker /*==============================================================================
2*35ffd701SAndroid Build Coastguard Worker Copyright(c) 2024 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 #include "GmmXe2_LPGResourceULT.h"
24*35ffd701SAndroid Build Coastguard Worker 
25*35ffd701SAndroid Build Coastguard Worker using namespace std;
26*35ffd701SAndroid Build Coastguard Worker 
27*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
28*35ffd701SAndroid Build Coastguard Worker /// Sets up common environment for Resource fixture tests. this is called once per
29*35ffd701SAndroid Build Coastguard Worker /// test case before executing all tests under resource fixture test case.
30*35ffd701SAndroid Build Coastguard Worker //  It also calls SetupTestCase from CommonULT to initialize global context and others.
31*35ffd701SAndroid Build Coastguard Worker ///
32*35ffd701SAndroid Build Coastguard Worker ///
33*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
SetUpTestCase()34*35ffd701SAndroid Build Coastguard Worker void CTestXe2_LPGResource::SetUpTestCase()
35*35ffd701SAndroid Build Coastguard Worker {
36*35ffd701SAndroid Build Coastguard Worker }
37*35ffd701SAndroid Build Coastguard Worker 
38*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
39*35ffd701SAndroid Build Coastguard Worker /// cleans up once all the tests finish execution.  It also calls TearDownTestCase
40*35ffd701SAndroid Build Coastguard Worker /// from CommonULT to destroy global context and others.
41*35ffd701SAndroid Build Coastguard Worker ///
42*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
TearDownTestCase()43*35ffd701SAndroid Build Coastguard Worker void CTestXe2_LPGResource::TearDownTestCase()
44*35ffd701SAndroid Build Coastguard Worker {
45*35ffd701SAndroid Build Coastguard Worker }
46*35ffd701SAndroid Build Coastguard Worker 
SetUp_Xe2Variant(PRODUCT_FAMILY platform)47*35ffd701SAndroid Build Coastguard Worker void CTestXe2_LPGResource::SetUp_Xe2Variant(PRODUCT_FAMILY platform)
48*35ffd701SAndroid Build Coastguard Worker {
49*35ffd701SAndroid Build Coastguard Worker     printf("%s\n", __FUNCTION__);
50*35ffd701SAndroid Build Coastguard Worker 
51*35ffd701SAndroid Build Coastguard Worker     if (platform == IGFX_BMG)
52*35ffd701SAndroid Build Coastguard Worker     {
53*35ffd701SAndroid Build Coastguard Worker         GfxPlatform.eProductFamily    = IGFX_BMG;
54*35ffd701SAndroid Build Coastguard Worker         GfxPlatform.eRenderCoreFamily = IGFX_XE2_HPG_CORE;
55*35ffd701SAndroid Build Coastguard Worker     }
56*35ffd701SAndroid Build Coastguard Worker     else if (platform == IGFX_LUNARLAKE)
57*35ffd701SAndroid Build Coastguard Worker     {
58*35ffd701SAndroid Build Coastguard Worker         GfxPlatform.eProductFamily = IGFX_LUNARLAKE;
59*35ffd701SAndroid Build Coastguard Worker         GfxPlatform.eRenderCoreFamily = IGFX_XE2_LPG_CORE;
60*35ffd701SAndroid Build Coastguard Worker     }
61*35ffd701SAndroid Build Coastguard Worker 
62*35ffd701SAndroid Build Coastguard Worker     pGfxAdapterInfo = (ADAPTER_INFO*)malloc(sizeof(ADAPTER_INFO));
63*35ffd701SAndroid Build Coastguard Worker     if (pGfxAdapterInfo)
64*35ffd701SAndroid Build Coastguard Worker     {
65*35ffd701SAndroid Build Coastguard Worker         memset(pGfxAdapterInfo, 0, sizeof(ADAPTER_INFO));
66*35ffd701SAndroid Build Coastguard Worker 
67*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrLinearCCS = 1; //legacy y =>0
68*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrStandardMipTailFormat = 1;
69*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrTileY = 0;
70*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrXe2PlusTiling = 1;
71*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrXe2Compression = 1;
72*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrFlatPhysCCS = 1;
73*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrLocalMemory = 0;
74*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrDiscrete = 0;
75*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrE2ECompression = 1;
76*35ffd701SAndroid Build Coastguard Worker 
77*35ffd701SAndroid Build Coastguard Worker         if (platform == IGFX_BMG)
78*35ffd701SAndroid Build Coastguard Worker         {
79*35ffd701SAndroid Build Coastguard Worker             pGfxAdapterInfo->SkuTable.FtrLocalMemory = 1;
80*35ffd701SAndroid Build Coastguard Worker             pGfxAdapterInfo->SkuTable.FtrDiscrete    = 1;
81*35ffd701SAndroid Build Coastguard Worker         }
82*35ffd701SAndroid Build Coastguard Worker 
83*35ffd701SAndroid Build Coastguard Worker         if (platform == IGFX_LUNARLAKE || platform == IGFX_BMG)
84*35ffd701SAndroid Build Coastguard Worker         {
85*35ffd701SAndroid Build Coastguard Worker             pGfxAdapterInfo->WaTable.Wa_14018976079           = 1;
86*35ffd701SAndroid Build Coastguard Worker             pGfxAdapterInfo->WaTable.Wa_14018984349           = 1;
87*35ffd701SAndroid Build Coastguard Worker             pGfxAdapterInfo->SkuTable.FtrL3TransientDataFlush = 1;
88*35ffd701SAndroid Build Coastguard Worker         }
89*35ffd701SAndroid Build Coastguard Worker 
90*35ffd701SAndroid Build Coastguard Worker         CommonULT::SetUpTestCase();
91*35ffd701SAndroid Build Coastguard Worker     }
92*35ffd701SAndroid Build Coastguard Worker }
93*35ffd701SAndroid Build Coastguard Worker 
TearDown_Xe2Variant()94*35ffd701SAndroid Build Coastguard Worker void CTestXe2_LPGResource::TearDown_Xe2Variant()
95*35ffd701SAndroid Build Coastguard Worker {
96*35ffd701SAndroid Build Coastguard Worker     printf("%s\n", __FUNCTION__);
97*35ffd701SAndroid Build Coastguard Worker     CommonULT::TearDownTestCase();
98*35ffd701SAndroid Build Coastguard Worker }
99*35ffd701SAndroid Build Coastguard Worker 
TEST_F(CTestXe2_LPGResource,TestMSAA_BMG)100*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestXe2_LPGResource, TestMSAA_BMG)
101*35ffd701SAndroid Build Coastguard Worker {
102*35ffd701SAndroid Build Coastguard Worker     SetUp_Xe2Variant(IGFX_BMG);
103*35ffd701SAndroid Build Coastguard Worker     TestMSAA();
104*35ffd701SAndroid Build Coastguard Worker     TearDown_Xe2Variant();
105*35ffd701SAndroid Build Coastguard Worker }
106*35ffd701SAndroid Build Coastguard Worker 
TEST_F(CTestXe2_LPGResource,TestMSAA_LNL)107*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestXe2_LPGResource, TestMSAA_LNL)
108*35ffd701SAndroid Build Coastguard Worker {
109*35ffd701SAndroid Build Coastguard Worker     SetUp_Xe2Variant(IGFX_LUNARLAKE);
110*35ffd701SAndroid Build Coastguard Worker     TestMSAA();
111*35ffd701SAndroid Build Coastguard Worker     TearDown_Xe2Variant();
112*35ffd701SAndroid Build Coastguard Worker }
113*35ffd701SAndroid Build Coastguard Worker 
114*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for MSAA Resource - Depth and Colour MSAA verification for Tile64 resources
115*35ffd701SAndroid Build Coastguard Worker //  Note: Verify with and without FtrXe2PlusTiling in Setup, Default: FtrXe2PlusTiling
TestMSAA()116*35ffd701SAndroid Build Coastguard Worker void CTestXe2_LPGResource::TestMSAA()
117*35ffd701SAndroid Build Coastguard Worker {
118*35ffd701SAndroid Build Coastguard Worker     GMM_GFX_SIZE_T AuxCC, AuxCCS, AuxMCS;
119*35ffd701SAndroid Build Coastguard Worker     const uint32_t TestDimensions[4][2] = {
120*35ffd701SAndroid Build Coastguard Worker     //Input dimensions in #Tiles
121*35ffd701SAndroid Build Coastguard Worker     {16, 4},    //occupies single tile for Depth for all MSAAs and BPPs, multiple tiles for colours
122*35ffd701SAndroid Build Coastguard Worker     {128, 128}, // crosses a tile for > 4X MSAA for depth
123*35ffd701SAndroid Build Coastguard Worker     {128, 257}, // Crosses a tile in Y direction and for >4X MSAA, crosses in X direction too for depth
124*35ffd701SAndroid Build Coastguard Worker     {1, 1},
125*35ffd701SAndroid Build Coastguard Worker     };
126*35ffd701SAndroid Build Coastguard Worker 
127*35ffd701SAndroid Build Coastguard Worker     uint32_t TestArraySize[2] = {1, 5};
128*35ffd701SAndroid Build Coastguard Worker     uint32_t MinPitch         = 32;
129*35ffd701SAndroid Build Coastguard Worker 
130*35ffd701SAndroid Build Coastguard Worker     uint32_t HAlign, VAlign, TileDimX, TileDimY, MCSHAlign, MCSVAlign, TileSize;
131*35ffd701SAndroid Build Coastguard Worker     uint32_t ExpectedMCSBpp;
132*35ffd701SAndroid Build Coastguard Worker     std::vector<tuple<int, int, int, bool, int, int>> List; //TEST_TILE_TYPE, TEST_BPP, TEST_RESOURCE_TYPE, Depth or RT, TestDimension index, ArraySize
133*35ffd701SAndroid Build Coastguard Worker     auto Size = BuildInputIterator(List, 4, 2, true);       // Size of arrays TestDimensions, TestArraySize
134*35ffd701SAndroid Build Coastguard Worker 
135*35ffd701SAndroid Build Coastguard Worker     for(auto element : List)
136*35ffd701SAndroid Build Coastguard Worker     {
137*35ffd701SAndroid Build Coastguard Worker         GMM_RESCREATE_PARAMS gmmParams = {};
138*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Info           = {0};
139*35ffd701SAndroid Build Coastguard Worker 
140*35ffd701SAndroid Build Coastguard Worker         TEST_TILE_TYPE     Tiling     = (TEST_TILE_TYPE)std::get<0>(element);
141*35ffd701SAndroid Build Coastguard Worker         TEST_BPP           Bpp        = (TEST_BPP)std::get<1>(element);
142*35ffd701SAndroid Build Coastguard Worker         TEST_RESOURCE_TYPE ResType    = (TEST_RESOURCE_TYPE)std::get<2>(element);
143*35ffd701SAndroid Build Coastguard Worker         bool               IsRT       = std::get<3>(element); // True for RT, False for Depth
144*35ffd701SAndroid Build Coastguard Worker         int                TestDimIdx = std::get<4>(element); //index into TestDimensions array
145*35ffd701SAndroid Build Coastguard Worker         int                ArrayIdx   = std::get<5>(element); //index into TestArraySize
146*35ffd701SAndroid Build Coastguard Worker         TileSize                      = (Tiling == TEST_TILE64) ? GMM_KBYTE(64) : GMM_KBYTE(4);
147*35ffd701SAndroid Build Coastguard Worker 
148*35ffd701SAndroid Build Coastguard Worker         //Discard un-supported Tiling/Res_type/bpp for this test
149*35ffd701SAndroid Build Coastguard Worker         if((ResType != TEST_RESOURCE_2D) || //No 1D/3D/Cube. Supported 2D mip-maps/array
150*35ffd701SAndroid Build Coastguard Worker                                             // depth tested outside this function due to diff in halign/valign
151*35ffd701SAndroid Build Coastguard Worker            (Tiling != TEST_TILE64))         // MSAA not supported on Tile4
152*35ffd701SAndroid Build Coastguard Worker             continue;
153*35ffd701SAndroid Build Coastguard Worker 
154*35ffd701SAndroid Build Coastguard Worker         SetTileFlag(gmmParams, Tiling);
155*35ffd701SAndroid Build Coastguard Worker         SetResType(gmmParams, ResType);
156*35ffd701SAndroid Build Coastguard Worker         SetResGpuFlags(gmmParams, IsRT);
157*35ffd701SAndroid Build Coastguard Worker         SetResArraySize(gmmParams, TestArraySize[ArrayIdx]);
158*35ffd701SAndroid Build Coastguard Worker 
159*35ffd701SAndroid Build Coastguard Worker         gmmParams.NoGfxMemory = 1;
160*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format      = SetResourceFormat(Bpp);
161*35ffd701SAndroid Build Coastguard Worker         for(uint32_t k = MSAA_2x; k <= MSAA_16x; k++)
162*35ffd701SAndroid Build Coastguard Worker         {
163*35ffd701SAndroid Build Coastguard Worker             GetAlignmentAndTileDimensionsForMSAA(Bpp, IsRT, Tiling, (TEST_MSAA)k,
164*35ffd701SAndroid Build Coastguard Worker                                                  TileDimX, TileDimY, HAlign, VAlign,
165*35ffd701SAndroid Build Coastguard Worker                                                  ExpectedMCSBpp, MCSHAlign, MCSVAlign);
166*35ffd701SAndroid Build Coastguard Worker             gmmParams.BaseWidth64     = TestDimensions[TestDimIdx][0] * (unsigned int)pow(2.0, Bpp);
167*35ffd701SAndroid Build Coastguard Worker             gmmParams.BaseHeight                   = TestDimensions[TestDimIdx][1];
168*35ffd701SAndroid Build Coastguard Worker             gmmParams.Depth                        = 0x1;
169*35ffd701SAndroid Build Coastguard Worker             gmmParams.MSAA.NumSamples              = static_cast<uint32_t>(pow((double)2, k));
170*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.MCS                = 1;
171*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.CCS                = 1;
172*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface  = 1;
173*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.IndirectClearColor = 1;
174*35ffd701SAndroid Build Coastguard Worker             //MSS surface
175*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *MSSResourceInfo;
176*35ffd701SAndroid Build Coastguard Worker             MSSResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
177*35ffd701SAndroid Build Coastguard Worker 
178*35ffd701SAndroid Build Coastguard Worker             if(MSSResourceInfo)
179*35ffd701SAndroid Build Coastguard Worker             {
180*35ffd701SAndroid Build Coastguard Worker                 VerifyResourceHAlign<true>(MSSResourceInfo, HAlign);
181*35ffd701SAndroid Build Coastguard Worker                 VerifyResourceVAlign<true>(MSSResourceInfo, VAlign);
182*35ffd701SAndroid Build Coastguard Worker 
183*35ffd701SAndroid Build Coastguard Worker                 if (gmmParams.Flags.Gpu.IndirectClearColor && pGfxAdapterInfo->SkuTable.FtrXe2Compression && (gmmParams.MSAA.NumSamples > 1))
184*35ffd701SAndroid Build Coastguard Worker                 {
185*35ffd701SAndroid Build Coastguard Worker                     AuxCC  = MSSResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CC);
186*35ffd701SAndroid Build Coastguard Worker                     AuxMCS = MSSResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_MCS);
187*35ffd701SAndroid Build Coastguard Worker                     AuxCCS = MSSResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS);
188*35ffd701SAndroid Build Coastguard Worker 
189*35ffd701SAndroid Build Coastguard Worker                     EXPECT_EQ(AuxCC, AuxMCS);
190*35ffd701SAndroid Build Coastguard Worker                     EXPECT_EQ(AuxCCS, 0);
191*35ffd701SAndroid Build Coastguard Worker 
192*35ffd701SAndroid Build Coastguard Worker                     AuxCC  = MSSResourceInfo->GetSizeAuxSurface(GMM_AUX_CC);
193*35ffd701SAndroid Build Coastguard Worker                     AuxMCS = MSSResourceInfo->GetSizeAuxSurface(GMM_AUX_MCS);
194*35ffd701SAndroid Build Coastguard Worker                     AuxCCS = MSSResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS);
195*35ffd701SAndroid Build Coastguard Worker 
196*35ffd701SAndroid Build Coastguard Worker                     EXPECT_EQ(AuxCC, AuxMCS);
197*35ffd701SAndroid Build Coastguard Worker                     EXPECT_EQ(AuxCCS, 0);
198*35ffd701SAndroid Build Coastguard Worker                 }
199*35ffd701SAndroid Build Coastguard Worker                 if(IsRT) //Arrayed MSS
200*35ffd701SAndroid Build Coastguard Worker                 {
201*35ffd701SAndroid Build Coastguard Worker                     uint32_t ExpectedPitch = 0, ExpectedQPitch = 0, ExpectedHeight = 0;
202*35ffd701SAndroid Build Coastguard Worker                     ExpectedPitch = GMM_ULT_ALIGN(GMM_ULT_ALIGN(gmmParams.BaseWidth64, HAlign) * (unsigned int)pow(2.0, Bpp), TileDimX); // Aligned width * bpp, aligned to TileWidth
203*35ffd701SAndroid Build Coastguard Worker                     ExpectedPitch = GFX_MAX(ExpectedPitch, MinPitch);
204*35ffd701SAndroid Build Coastguard Worker                     VerifyResourcePitch<true>(MSSResourceInfo, ExpectedPitch);
205*35ffd701SAndroid Build Coastguard Worker                     if(Tiling != TEST_LINEAR)
206*35ffd701SAndroid Build Coastguard Worker                         VerifyResourcePitchInTiles<true>(MSSResourceInfo, ExpectedPitch / TileDimX);
207*35ffd701SAndroid Build Coastguard Worker 
208*35ffd701SAndroid Build Coastguard Worker                     ExpectedQPitch = GMM_ULT_ALIGN(gmmParams.BaseHeight, VAlign);
209*35ffd701SAndroid Build Coastguard Worker                     if(gmmParams.ArraySize > 1) //Gen9: Qpitch is distance between array slices (not sample slices)
210*35ffd701SAndroid Build Coastguard Worker                     {
211*35ffd701SAndroid Build Coastguard Worker                         VerifyResourceQPitch<true>(MSSResourceInfo, ExpectedQPitch);
212*35ffd701SAndroid Build Coastguard Worker                     }
213*35ffd701SAndroid Build Coastguard Worker 
214*35ffd701SAndroid Build Coastguard Worker                     ExpectedHeight = GMM_ULT_ALIGN(ExpectedQPitch * gmmParams.MSAA.NumSamples * gmmParams.ArraySize, TileDimY); // For Tile64 layout prior to Xe2Tiling, MSAA8x and 16x follows MSAA4x. MSAA4x*2 for MSAA8x and MSAA4x*4 for MSAA16x.
215*35ffd701SAndroid Build Coastguard Worker                                                                                                                                 // Height getting multiplied by numsamples here is good enough for these special layouts too
216*35ffd701SAndroid Build Coastguard Worker                     VerifyResourceSize<true>(MSSResourceInfo, GMM_ULT_ALIGN(ExpectedPitch * ExpectedHeight, TileSize));
217*35ffd701SAndroid Build Coastguard Worker                 }
218*35ffd701SAndroid Build Coastguard Worker                 else
219*35ffd701SAndroid Build Coastguard Worker                 {
220*35ffd701SAndroid Build Coastguard Worker                     uint32_t WidthMultiplier, HeightMultiplier;
221*35ffd701SAndroid Build Coastguard Worker                     GetInterleaveMSSPattern((TEST_MSAA)k, WidthMultiplier, HeightMultiplier, IsRT, Bpp);
222*35ffd701SAndroid Build Coastguard Worker                     gmmParams.BaseWidth64 = WidthMultiplier > 1 ? GMM_ULT_ALIGN(gmmParams.BaseWidth64, 2) : gmmParams.BaseWidth64;
223*35ffd701SAndroid Build Coastguard Worker                     gmmParams.BaseHeight  = HeightMultiplier > 1 ? GMM_ULT_ALIGN(gmmParams.BaseHeight, 2) : gmmParams.BaseHeight;
224*35ffd701SAndroid Build Coastguard Worker 
225*35ffd701SAndroid Build Coastguard Worker                     uint32_t ExpectedPitch = GMM_ULT_ALIGN(GMM_ULT_ALIGN(gmmParams.BaseWidth64 * WidthMultiplier, HAlign) * (uint32_t)pow(2.0, Bpp), TileDimX);
226*35ffd701SAndroid Build Coastguard Worker                     VerifyResourcePitch<true>(MSSResourceInfo, ExpectedPitch);
227*35ffd701SAndroid Build Coastguard Worker                     if(Tiling != TEST_LINEAR)
228*35ffd701SAndroid Build Coastguard Worker                     {
229*35ffd701SAndroid Build Coastguard Worker                         VerifyResourcePitchInTiles<true>(MSSResourceInfo, ExpectedPitch / TileDimX);
230*35ffd701SAndroid Build Coastguard Worker                     }
231*35ffd701SAndroid Build Coastguard Worker 
232*35ffd701SAndroid Build Coastguard Worker                     uint64_t ExpectedQPitch    = GMM_ULT_ALIGN(gmmParams.BaseHeight * HeightMultiplier, VAlign);
233*35ffd701SAndroid Build Coastguard Worker                     uint32_t ExpandedArraySize = gmmParams.ArraySize * (((MSSResourceInfo->GetTileType() == GMM_TILED_64) && !pGfxAdapterInfo->SkuTable.FtrTileY && !pGfxAdapterInfo->SkuTable.FtrXe2PlusTiling && (gmmParams.MSAA.NumSamples == 16)) ? 4 : // MSAA x8/x16 stored as pseudo array planes each with 4x samples
234*35ffd701SAndroid Build Coastguard Worker                                                                         ((MSSResourceInfo->GetTileType() == GMM_TILED_64) && !pGfxAdapterInfo->SkuTable.FtrTileY && !pGfxAdapterInfo->SkuTable.FtrXe2PlusTiling && (gmmParams.MSAA.NumSamples == 8)) ? 2 : 1);
235*35ffd701SAndroid Build Coastguard Worker                     if(ExpandedArraySize > 1)
236*35ffd701SAndroid Build Coastguard Worker                     {
237*35ffd701SAndroid Build Coastguard Worker                         VerifyResourceQPitch<true>(MSSResourceInfo, ExpectedQPitch);
238*35ffd701SAndroid Build Coastguard Worker                     }
239*35ffd701SAndroid Build Coastguard Worker                     uint64_t ExpectedHeight = GMM_ULT_ALIGN(ExpectedQPitch * ExpandedArraySize, TileDimY);              //Align Height = ExpectedQPitch*ArraySize, to Tile-Height
240*35ffd701SAndroid Build Coastguard Worker                     VerifyResourceSize<true>(MSSResourceInfo, GMM_ULT_ALIGN(ExpectedPitch * ExpectedHeight, TileSize)); //ExpectedPitch *ExpectedHeight
241*35ffd701SAndroid Build Coastguard Worker                 }
242*35ffd701SAndroid Build Coastguard Worker             }
243*35ffd701SAndroid Build Coastguard Worker 
244*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(MSSResourceInfo);
245*35ffd701SAndroid Build Coastguard Worker         } //NumSamples = k
246*35ffd701SAndroid Build Coastguard Worker     }     //Iterate through all Input types{
247*35ffd701SAndroid Build Coastguard Worker 
248*35ffd701SAndroid Build Coastguard Worker }
249