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