xref: /aosp_15_r20/external/gmmlib/Source/GmmLib/ULT/GmmGen12ResourceULT.cpp (revision 35ffd701415c9e32e53136d61a677a8d0a8fc4a5)
1*35ffd701SAndroid Build Coastguard Worker /*==============================================================================
2*35ffd701SAndroid Build Coastguard Worker Copyright(c) 2019 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 "GmmGen12ResourceULT.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 /// @see    CTestGen12Resource::SetUpTestCase()
33*35ffd701SAndroid Build Coastguard Worker ///
34*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
SetUpTestCase()35*35ffd701SAndroid Build Coastguard Worker void CTestGen12Resource::SetUpTestCase()
36*35ffd701SAndroid Build Coastguard Worker {
37*35ffd701SAndroid Build Coastguard Worker     printf("%s\n", __FUNCTION__);
38*35ffd701SAndroid Build Coastguard Worker     GfxPlatform.eProductFamily    = IGFX_TIGERLAKE_LP;
39*35ffd701SAndroid Build Coastguard Worker     GfxPlatform.eRenderCoreFamily = IGFX_GEN12_CORE;
40*35ffd701SAndroid Build Coastguard Worker 
41*35ffd701SAndroid Build Coastguard Worker     pGfxAdapterInfo = (ADAPTER_INFO *)malloc(sizeof(ADAPTER_INFO));
42*35ffd701SAndroid Build Coastguard Worker     if(pGfxAdapterInfo)
43*35ffd701SAndroid Build Coastguard Worker     {
44*35ffd701SAndroid Build Coastguard Worker         memset(pGfxAdapterInfo, 0, sizeof(ADAPTER_INFO));
45*35ffd701SAndroid Build Coastguard Worker 
46*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrLinearCCS = 1; //legacy y =>0 - test both
47*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrTileY     = 1;
48*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->SkuTable.FtrLLCBypass = 0;
49*35ffd701SAndroid Build Coastguard Worker         pGfxAdapterInfo->WaTable.WaAuxTable64KGranular= 1;
50*35ffd701SAndroid Build Coastguard Worker 	CommonULT::SetUpTestCase();
51*35ffd701SAndroid Build Coastguard Worker     }
52*35ffd701SAndroid Build Coastguard Worker }
53*35ffd701SAndroid Build Coastguard Worker 
54*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
55*35ffd701SAndroid Build Coastguard Worker /// cleans up once all the tests finish execution.  It also calls TearDownTestCase
56*35ffd701SAndroid Build Coastguard Worker /// from CommonULT to destroy global context and others.
57*35ffd701SAndroid Build Coastguard Worker ///
58*35ffd701SAndroid Build Coastguard Worker /// @see    CTestGen12Resource::TearDownTestCase()
59*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
TearDownTestCase()60*35ffd701SAndroid Build Coastguard Worker void CTestGen12Resource::TearDownTestCase()
61*35ffd701SAndroid Build Coastguard Worker {
62*35ffd701SAndroid Build Coastguard Worker     printf("%s\n", __FUNCTION__);
63*35ffd701SAndroid Build Coastguard Worker 
64*35ffd701SAndroid Build Coastguard Worker     CommonULT::TearDownTestCase();
65*35ffd701SAndroid Build Coastguard Worker }
66*35ffd701SAndroid Build Coastguard Worker 
67*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for 2D TileYs Compressed Resource
68*35ffd701SAndroid Build Coastguard Worker /// tests both Separate and Unified CCS allcoation
TEST_F(CTestGen12Resource,Test2DTileYsCompressedResource)69*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, Test2DTileYsCompressedResource)
70*35ffd701SAndroid Build Coastguard Worker {
71*35ffd701SAndroid Build Coastguard Worker     const uint32_t HAlign[TEST_BPP_MAX] = {256, 256, 128, 128, 64}; //REM-comment: YS-shape in pixels per-bpp
72*35ffd701SAndroid Build Coastguard Worker     const uint32_t VAlign[TEST_BPP_MAX] = {256, 128, 128, 64, 64};
73*35ffd701SAndroid Build Coastguard Worker 
74*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[TEST_BPP_MAX][2] = {{256, 256}, //REM-comment: YS-shape in bytes per-bpp
75*35ffd701SAndroid Build Coastguard Worker                                                 {512, 128},
76*35ffd701SAndroid Build Coastguard Worker                                                 {512, 128},
77*35ffd701SAndroid Build Coastguard Worker                                                 {1024, 64},
78*35ffd701SAndroid Build Coastguard Worker                                                 {1024, 64}};
79*35ffd701SAndroid Build Coastguard Worker 
80*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams        = {};
81*35ffd701SAndroid Build Coastguard Worker     gmmParams.Type                        = RESOURCE_2D;
82*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory                 = 1;
83*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledY           = 1;
84*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledYs          = 1;
85*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.Texture           = 1;
86*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.RenderCompressed = 1;
87*35ffd701SAndroid Build Coastguard Worker     // Turn on .MC or .RC flag - mandatory to tell compression-type, for Yf its also used to pad surf
88*35ffd701SAndroid Build Coastguard Worker     // to 4x1 tile (reqd by HW for perf reasons)
89*35ffd701SAndroid Build Coastguard Worker     // If unifiedAuxSurf reqd (mandatory for displayable or cross-adapter shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
90*35ffd701SAndroid Build Coastguard Worker 
91*35ffd701SAndroid Build Coastguard Worker     //Allocate 1x1 surface
92*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
93*35ffd701SAndroid Build Coastguard Worker     {
94*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
95*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
96*35ffd701SAndroid Build Coastguard Worker 
97*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
98*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = DEFINE_TILE(YS_2D, bpp);
99*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format       = SetResourceFormat(bpp);
100*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64  = 0x1;
101*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight   = 0x1;
102*35ffd701SAndroid Build Coastguard Worker 
103*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
104*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
105*35ffd701SAndroid Build Coastguard Worker 
106*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign[i]);
107*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign[i]);
108*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, TileSize[i][0]); // As wide as 1 Tile
109*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 1);       // 1 Tile wide
110*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(64));   // 1 Tile Big
111*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0);            // Not Tested
112*35ffd701SAndroid Build Coastguard Worker 
113*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
114*35ffd701SAndroid Build Coastguard Worker         //For Yf test main surface pitch is 16KB aligned
115*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
116*35ffd701SAndroid Build Coastguard Worker         //EXPECT_EQ(0, ResourceInfo->GetRenderPitchInTiles() % GMM_KBYTE(16));   // Check on YF only
117*35ffd701SAndroid Build Coastguard Worker 
118*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
119*35ffd701SAndroid Build Coastguard Worker         {
120*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
121*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
122*35ffd701SAndroid Build Coastguard Worker         }
123*35ffd701SAndroid Build Coastguard Worker         else
124*35ffd701SAndroid Build Coastguard Worker         {
125*35ffd701SAndroid Build Coastguard Worker             //Test AuxSurf H/Valign, size etc (Not POR- can be removed)
126*35ffd701SAndroid Build Coastguard Worker             ALIGNMENT UnitAlign;
127*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->GetExtendedTextureAlign(CCS_MODE(TileMode), UnitAlign);
128*35ffd701SAndroid Build Coastguard Worker 
129*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(UnitAlign.Width, ResourceInfo->GetAuxHAlign());
130*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(UnitAlign.Height, ResourceInfo->GetAuxVAlign());
131*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0x80, ResourceInfo->GetUnifiedAuxPitch()); //TileY = 0x80 x 0x20
132*35ffd701SAndroid Build Coastguard Worker         }
133*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
134*35ffd701SAndroid Build Coastguard Worker 
135*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
136*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
137*35ffd701SAndroid Build Coastguard Worker 
138*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
139*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
140*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
141*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
142*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
143*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeAllocation());
144*35ffd701SAndroid Build Coastguard Worker 
145*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
146*35ffd701SAndroid Build Coastguard Worker         }
147*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
148*35ffd701SAndroid Build Coastguard Worker     }
149*35ffd701SAndroid Build Coastguard Worker 
150*35ffd701SAndroid Build Coastguard Worker     // Allocate surface that requires multi tiles in two dimension
151*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X dimension
152*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
153*35ffd701SAndroid Build Coastguard Worker     {
154*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
155*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
156*35ffd701SAndroid Build Coastguard Worker 
157*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
158*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = DEFINE_TILE(YS_2D, bpp);
159*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format       = SetResourceFormat(bpp);
160*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64  = (TileSize[i][0] / GetBppValue(bpp)) + 1; // 1 pixel larger than 1 tile width
161*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight   = 0x1;
162*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth        = 0x1;
163*35ffd701SAndroid Build Coastguard Worker 
164*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
165*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
166*35ffd701SAndroid Build Coastguard Worker 
167*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign[i]);
168*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign[i]);
169*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, TileSize[i][0] * 2); // As wide as 2 tile
170*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 2);           // 2 tile wide
171*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(64) * 2);   // 2 tile big
172*35ffd701SAndroid Build Coastguard Worker 
173*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // Not tested
174*35ffd701SAndroid Build Coastguard Worker 
175*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
176*35ffd701SAndroid Build Coastguard Worker         //For Yf test main surface pitch is 16KB aligned
177*35ffd701SAndroid Build Coastguard Worker 
178*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
179*35ffd701SAndroid Build Coastguard Worker         {
180*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
181*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
182*35ffd701SAndroid Build Coastguard Worker         }
183*35ffd701SAndroid Build Coastguard Worker         else
184*35ffd701SAndroid Build Coastguard Worker         { //Not POR
185*35ffd701SAndroid Build Coastguard Worker         }
186*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
187*35ffd701SAndroid Build Coastguard Worker 
188*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
189*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
190*35ffd701SAndroid Build Coastguard Worker 
191*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
192*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
193*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
194*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
195*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
196*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
197*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
198*35ffd701SAndroid Build Coastguard Worker         }
199*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
200*35ffd701SAndroid Build Coastguard Worker     }
201*35ffd701SAndroid Build Coastguard Worker 
202*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X/Y dimension
203*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
204*35ffd701SAndroid Build Coastguard Worker     {
205*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
206*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
207*35ffd701SAndroid Build Coastguard Worker 
208*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
209*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = DEFINE_TILE(YS_2D, bpp);
210*35ffd701SAndroid Build Coastguard Worker 
211*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format      = SetResourceFormat(bpp);
212*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64 = (TileSize[i][0] / GetBppValue(bpp)) + 1; // 1 pixel larger than 1 tile width
213*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight  = TileSize[i][1] + 1;                      // 1 row larger than 1 tile height
214*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth       = 0x1;
215*35ffd701SAndroid Build Coastguard Worker 
216*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
217*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
218*35ffd701SAndroid Build Coastguard Worker 
219*35ffd701SAndroid Build Coastguard Worker         //**Not compression specific -BEGIN
220*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign[i]);
221*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign[i]);
222*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, TileSize[i][0] * 2); // As wide as 2 tile
223*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 2);           // 2 tile wide
224*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(64) * 4);   // 4 tile big
225*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0);                // Not tested
226*35ffd701SAndroid Build Coastguard Worker         //**Not compression specific -END
227*35ffd701SAndroid Build Coastguard Worker 
228*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
229*35ffd701SAndroid Build Coastguard Worker         {
230*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
231*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
232*35ffd701SAndroid Build Coastguard Worker         }
233*35ffd701SAndroid Build Coastguard Worker 
234*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
235*35ffd701SAndroid Build Coastguard Worker 
236*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
237*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
238*35ffd701SAndroid Build Coastguard Worker 
239*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
240*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
241*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
242*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
243*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
244*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
245*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
246*35ffd701SAndroid Build Coastguard Worker         }
247*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
248*35ffd701SAndroid Build Coastguard Worker     }
249*35ffd701SAndroid Build Coastguard Worker }
250*35ffd701SAndroid Build Coastguard Worker 
251*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for 2D TileYf Compressed Resource
TEST_F(CTestGen12Resource,Test2DTileYfCompressedResource)252*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, Test2DTileYfCompressedResource)
253*35ffd701SAndroid Build Coastguard Worker {
254*35ffd701SAndroid Build Coastguard Worker     const uint32_t HAlign[TEST_BPP_MAX] = {64, 64, 32, 32, 16};
255*35ffd701SAndroid Build Coastguard Worker     const uint32_t VAlign[TEST_BPP_MAX] = {64, 32, 32, 16, 16};
256*35ffd701SAndroid Build Coastguard Worker 
257*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[TEST_BPP_MAX][2] = {{64, 64},
258*35ffd701SAndroid Build Coastguard Worker                                                 {128, 32},
259*35ffd701SAndroid Build Coastguard Worker                                                 {128, 32},
260*35ffd701SAndroid Build Coastguard Worker                                                 {256, 16},
261*35ffd701SAndroid Build Coastguard Worker                                                 {256, 16}};
262*35ffd701SAndroid Build Coastguard Worker 
263*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams        = {};
264*35ffd701SAndroid Build Coastguard Worker     gmmParams.Type                        = RESOURCE_2D;
265*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory                 = 1;
266*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledY           = 1;
267*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledYf          = 1;
268*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.Texture           = 1;
269*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.RenderCompressed = 1;
270*35ffd701SAndroid Build Coastguard Worker     // Turn on .MC or .RC flag - mandatory to tell compression-type, for Yf its also used to pad surf
271*35ffd701SAndroid Build Coastguard Worker     // to 4x1 tile (reqd by HW )
272*35ffd701SAndroid Build Coastguard Worker     // If unifiedAuxSurf reqd (mandatory for displayable or cross-adapter shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
273*35ffd701SAndroid Build Coastguard Worker 
274*35ffd701SAndroid Build Coastguard Worker     //Allocate 1x1 surface
275*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
276*35ffd701SAndroid Build Coastguard Worker     {
277*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
278*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
279*35ffd701SAndroid Build Coastguard Worker 
280*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
281*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = DEFINE_TILE(YF_2D, bpp);
282*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format       = SetResourceFormat(bpp);
283*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64  = 0x1;
284*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight   = 0x1;
285*35ffd701SAndroid Build Coastguard Worker 
286*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
287*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
288*35ffd701SAndroid Build Coastguard Worker 
289*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign[i]);
290*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign[i]);
291*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, 4 * TileSize[i][0]); // As wide as 4 Tile
292*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 4);           // 4 Tile wide
293*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, 4 * GMM_KBYTE(4));    // 4 Tile Big
294*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0);                // Not Tested
295*35ffd701SAndroid Build Coastguard Worker 
296*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
297*35ffd701SAndroid Build Coastguard Worker         //For Yf/Y test main surface pitch is 4-tileYF/Y aligned
298*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
299*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4);
300*35ffd701SAndroid Build Coastguard Worker 
301*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
302*35ffd701SAndroid Build Coastguard Worker         {
303*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
304*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
305*35ffd701SAndroid Build Coastguard Worker         }
306*35ffd701SAndroid Build Coastguard Worker 
307*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
308*35ffd701SAndroid Build Coastguard Worker 
309*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
310*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
311*35ffd701SAndroid Build Coastguard Worker 
312*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
313*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
314*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
315*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
316*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
317*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
318*35ffd701SAndroid Build Coastguard Worker 
319*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
320*35ffd701SAndroid Build Coastguard Worker         }
321*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
322*35ffd701SAndroid Build Coastguard Worker     }
323*35ffd701SAndroid Build Coastguard Worker 
324*35ffd701SAndroid Build Coastguard Worker     // Allocate surface that requires multi tiles in two dimension
325*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X dimension
326*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
327*35ffd701SAndroid Build Coastguard Worker     {
328*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
329*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
330*35ffd701SAndroid Build Coastguard Worker 
331*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
332*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = DEFINE_TILE(YF_2D, bpp);
333*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format       = SetResourceFormat(bpp);
334*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64  = (TileSize[i][0] / GetBppValue(bpp)) + 1; // 1 pixel larger than 1 tile width
335*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight   = 0x1;
336*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth        = 0x1;
337*35ffd701SAndroid Build Coastguard Worker 
338*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
339*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
340*35ffd701SAndroid Build Coastguard Worker 
341*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign[i]);
342*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign[i]);
343*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, TileSize[i][0] * 4); // As wide as 2 tile, but 4-tile pitch alignment
344*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 4);           // 2 tile wide, but 4-tile pitch alignment
345*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(4) * 4);    // 2 tile big, but 4-tile pitch alignment
346*35ffd701SAndroid Build Coastguard Worker 
347*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // Not tested
348*35ffd701SAndroid Build Coastguard Worker 
349*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
350*35ffd701SAndroid Build Coastguard Worker         //For Yf/Y test main surface pitch is 4-tileYF/Y aligned
351*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
352*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4);
353*35ffd701SAndroid Build Coastguard Worker 
354*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
355*35ffd701SAndroid Build Coastguard Worker         {
356*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
357*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
358*35ffd701SAndroid Build Coastguard Worker         }
359*35ffd701SAndroid Build Coastguard Worker 
360*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
361*35ffd701SAndroid Build Coastguard Worker 
362*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
363*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
364*35ffd701SAndroid Build Coastguard Worker 
365*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
366*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
367*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
368*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
369*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
370*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
371*35ffd701SAndroid Build Coastguard Worker 
372*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
373*35ffd701SAndroid Build Coastguard Worker         }
374*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
375*35ffd701SAndroid Build Coastguard Worker     }
376*35ffd701SAndroid Build Coastguard Worker 
377*35ffd701SAndroid Build Coastguard Worker     // Allocate surface that requires multi tiles in two dimension
378*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X/Y dimension
379*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
380*35ffd701SAndroid Build Coastguard Worker     {
381*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
382*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
383*35ffd701SAndroid Build Coastguard Worker 
384*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
385*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = DEFINE_TILE(YF_2D, bpp);
386*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format       = SetResourceFormat(bpp);
387*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64  = (TileSize[i][0] / GetBppValue(bpp)) + 1; // 1 pixel larger than 1 tile width
388*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight   = TileSize[i][1] + 1;                      // 1 row larger than 1 tile height
389*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth        = 0x1;
390*35ffd701SAndroid Build Coastguard Worker 
391*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
392*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
393*35ffd701SAndroid Build Coastguard Worker 
394*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign[i]);
395*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign[i]);
396*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, TileSize[i][0] * 4);  // As wide as 2 tile, but 4-tile pitch alignment
397*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 4);            // 2 tile wide, but 4-tile pitch alignment
398*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(4) * 4 * 2); // 4 tile wide; and 2-tile high
399*35ffd701SAndroid Build Coastguard Worker 
400*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // Not tested
401*35ffd701SAndroid Build Coastguard Worker                                                       //test main surface base alignment is 64KB
402*35ffd701SAndroid Build Coastguard Worker                                                       //For Yf/Y test main surface pitch is 4-tileYF/Y aligned
403*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
404*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4);
405*35ffd701SAndroid Build Coastguard Worker 
406*35ffd701SAndroid Build Coastguard Worker 
407*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
408*35ffd701SAndroid Build Coastguard Worker         {
409*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
410*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
411*35ffd701SAndroid Build Coastguard Worker         }
412*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
413*35ffd701SAndroid Build Coastguard Worker 
414*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
415*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
416*35ffd701SAndroid Build Coastguard Worker 
417*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
418*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
419*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
420*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
421*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
422*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
423*35ffd701SAndroid Build Coastguard Worker 
424*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
425*35ffd701SAndroid Build Coastguard Worker         }
426*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
427*35ffd701SAndroid Build Coastguard Worker     }
428*35ffd701SAndroid Build Coastguard Worker }
429*35ffd701SAndroid Build Coastguard Worker 
430*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for 2D TileY Compressed Resource
TEST_F(CTestGen12Resource,Test2DTileYCompressedResource)431*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, Test2DTileYCompressedResource)
432*35ffd701SAndroid Build Coastguard Worker {
433*35ffd701SAndroid Build Coastguard Worker     const uint32_t HAlign = {16};
434*35ffd701SAndroid Build Coastguard Worker     const uint32_t VAlign = {4};
435*35ffd701SAndroid Build Coastguard Worker 
436*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[2] = {128, 32};
437*35ffd701SAndroid Build Coastguard Worker 
438*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams = {};
439*35ffd701SAndroid Build Coastguard Worker     gmmParams.Type                 = RESOURCE_2D;
440*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory          = 1;
441*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledY    = 1;
442*35ffd701SAndroid Build Coastguard Worker 
443*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.Texture           = 1;
444*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.RenderCompressed = 1;
445*35ffd701SAndroid Build Coastguard Worker     // Turn on .MC or .RC flag - mandatory to tell compression-type, for Yf/Y its also used to pad surf
446*35ffd701SAndroid Build Coastguard Worker     // to 4x1 tile (reqd by HW for perf reasons)
447*35ffd701SAndroid Build Coastguard Worker     // If unifiedAuxSurf reqd (mandatory for displayable or cross-adapter shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
448*35ffd701SAndroid Build Coastguard Worker 
449*35ffd701SAndroid Build Coastguard Worker     //Allocate 1x1 surface
450*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
451*35ffd701SAndroid Build Coastguard Worker     {
452*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
453*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
454*35ffd701SAndroid Build Coastguard Worker 
455*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
456*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = LEGACY_TILE_Y;
457*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format       = SetResourceFormat(bpp);
458*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64  = 0x1;
459*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight   = 0x1;
460*35ffd701SAndroid Build Coastguard Worker 
461*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
462*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
463*35ffd701SAndroid Build Coastguard Worker 
464*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign);
465*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign);
466*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, 4 * TileSize[0]); // As wide as 4 Tile
467*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 4);        // 4 Tile wide
468*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, 4 * GMM_KBYTE(4)); // 4 Tile Big
469*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0);             // Not Tested
470*35ffd701SAndroid Build Coastguard Worker 
471*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
472*35ffd701SAndroid Build Coastguard Worker         //For Yf/Y test main surface pitch is 4-tileYF/Y aligned
473*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
474*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4);
475*35ffd701SAndroid Build Coastguard Worker 
476*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
477*35ffd701SAndroid Build Coastguard Worker         {
478*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
479*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
480*35ffd701SAndroid Build Coastguard Worker         }
481*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
482*35ffd701SAndroid Build Coastguard Worker 
483*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
484*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
485*35ffd701SAndroid Build Coastguard Worker 
486*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
487*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
488*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
489*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
490*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
491*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
492*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
493*35ffd701SAndroid Build Coastguard Worker         }
494*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
495*35ffd701SAndroid Build Coastguard Worker     }
496*35ffd701SAndroid Build Coastguard Worker 
497*35ffd701SAndroid Build Coastguard Worker     // Allocate surface that requires multi tiles in two dimension
498*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X dimension
499*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
500*35ffd701SAndroid Build Coastguard Worker     {
501*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
502*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
503*35ffd701SAndroid Build Coastguard Worker 
504*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
505*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = LEGACY_TILE_Y;
506*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format       = SetResourceFormat(bpp);
507*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64  = (TileSize[0] / GetBppValue(bpp)) + 1; // 1 pixel larger than 1 tile width
508*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight   = 0x1;
509*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth        = 0x1;
510*35ffd701SAndroid Build Coastguard Worker 
511*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
512*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
513*35ffd701SAndroid Build Coastguard Worker 
514*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign);
515*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign);
516*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, TileSize[0] * 4); // As wide as 2 tile, but 4-tile pitch alignment
517*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 4);        // 2 tile wide, but 4-tile pitch alignment
518*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(4) * 4); // 2 tile big, but 4-tile pitch alignment
519*35ffd701SAndroid Build Coastguard Worker 
520*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // Not tested
521*35ffd701SAndroid Build Coastguard Worker 
522*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
523*35ffd701SAndroid Build Coastguard Worker         //For Yf test main surface pitch is 4-tileYF aligned
524*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
525*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4); // Check on YF only
526*35ffd701SAndroid Build Coastguard Worker 
527*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
528*35ffd701SAndroid Build Coastguard Worker         {
529*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
530*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
531*35ffd701SAndroid Build Coastguard Worker         }
532*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
533*35ffd701SAndroid Build Coastguard Worker 
534*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
535*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
536*35ffd701SAndroid Build Coastguard Worker 
537*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
538*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
539*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
540*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
541*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
542*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
543*35ffd701SAndroid Build Coastguard Worker 
544*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
545*35ffd701SAndroid Build Coastguard Worker         }
546*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
547*35ffd701SAndroid Build Coastguard Worker     }
548*35ffd701SAndroid Build Coastguard Worker 
549*35ffd701SAndroid Build Coastguard Worker     // Allocate surface that requires multi tiles in two dimension
550*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X/Y dimension
551*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
552*35ffd701SAndroid Build Coastguard Worker     {
553*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
554*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
555*35ffd701SAndroid Build Coastguard Worker 
556*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
557*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = LEGACY_TILE_Y;
558*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format       = SetResourceFormat(bpp);
559*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64  = (TileSize[0] / GetBppValue(bpp)) + 1; // 1 pixel larger than 1 tile width
560*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight   = TileSize[1] + 1;                      // 1 row larger than 1 tile height
561*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth        = 0x1;
562*35ffd701SAndroid Build Coastguard Worker 
563*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
564*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
565*35ffd701SAndroid Build Coastguard Worker 
566*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign);
567*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign);
568*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, TileSize[0] * 4);     // As wide as 2 tile, but 4-tile pitch alignment
569*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 4);            // 2 tile wide, but 4-tile pitch alignment
570*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(4) * 4 * 2); // 4 tile wide; and 2-tile high
571*35ffd701SAndroid Build Coastguard Worker 
572*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // Not tested
573*35ffd701SAndroid Build Coastguard Worker                                                       //test main surface base alignment is 64KB
574*35ffd701SAndroid Build Coastguard Worker                                                       //For Yf/Y test main surface pitch is 4-tileYF/Y aligned
575*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
576*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4); // Check on YF only
577*35ffd701SAndroid Build Coastguard Worker 
578*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
579*35ffd701SAndroid Build Coastguard Worker         {
580*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
581*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
582*35ffd701SAndroid Build Coastguard Worker         }
583*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
584*35ffd701SAndroid Build Coastguard Worker 
585*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
586*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
587*35ffd701SAndroid Build Coastguard Worker 
588*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
589*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
590*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
591*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
592*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
593*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
594*35ffd701SAndroid Build Coastguard Worker 
595*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
596*35ffd701SAndroid Build Coastguard Worker         }
597*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
598*35ffd701SAndroid Build Coastguard Worker     }
599*35ffd701SAndroid Build Coastguard Worker }
600*35ffd701SAndroid Build Coastguard Worker 
601*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for 2D TileY lossless Compressed lossy Resource
TEST_F(CTestGen12Resource,Test2DTileYLossyCompressedResource)602*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, Test2DTileYLossyCompressedResource)
603*35ffd701SAndroid Build Coastguard Worker {
604*35ffd701SAndroid Build Coastguard Worker     const uint32_t HAlign = {4};
605*35ffd701SAndroid Build Coastguard Worker     const uint32_t VAlign = {4};
606*35ffd701SAndroid Build Coastguard Worker 
607*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[2] = {128, 32};
608*35ffd701SAndroid Build Coastguard Worker 
609*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams = {};
610*35ffd701SAndroid Build Coastguard Worker     gmmParams.Type                 = RESOURCE_2D;
611*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory          = 1;
612*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledY    = 1;
613*35ffd701SAndroid Build Coastguard Worker 
614*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.Texture           = 1;
615*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.RenderCompressed = 1;
616*35ffd701SAndroid Build Coastguard Worker     // Turn on .MC or .RC flag - mandatory to tell compression-type, for Yf its also used to pad surf
617*35ffd701SAndroid Build Coastguard Worker     // to 4x1 tile (reqd by HW for perf reasons)
618*35ffd701SAndroid Build Coastguard Worker     // If unifiedAuxSurf reqd (mandatory for displayable or cross-adapter shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
619*35ffd701SAndroid Build Coastguard Worker 
620*35ffd701SAndroid Build Coastguard Worker     //Allocate 1x1 surface
621*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
622*35ffd701SAndroid Build Coastguard Worker     {
623*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
624*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
625*35ffd701SAndroid Build Coastguard Worker 
626*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
627*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = LEGACY_TILE_Y;
628*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format       = GMM_FORMAT_ETC2_RGB8;
629*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64  = 0x80;
630*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight   = 0x20;
631*35ffd701SAndroid Build Coastguard Worker 
632*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
633*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
634*35ffd701SAndroid Build Coastguard Worker 
635*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign);
636*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign);
637*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, 4 * TileSize[0]); // As wide as 4 Tile
638*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 4);        // 4 Tile wide
639*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, 4 * GMM_KBYTE(4)); // 4 Tile Big
640*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0);             // Not Tested
641*35ffd701SAndroid Build Coastguard Worker 
642*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
643*35ffd701SAndroid Build Coastguard Worker         //For Yf/Y test main surface pitch is 4-tileYF/Y aligned
644*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
645*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4);
646*35ffd701SAndroid Build Coastguard Worker 
647*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
648*35ffd701SAndroid Build Coastguard Worker         {
649*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
650*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
651*35ffd701SAndroid Build Coastguard Worker         }
652*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
653*35ffd701SAndroid Build Coastguard Worker 
654*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
655*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
656*35ffd701SAndroid Build Coastguard Worker 
657*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
658*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
659*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
660*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
661*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
662*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
663*35ffd701SAndroid Build Coastguard Worker 
664*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
665*35ffd701SAndroid Build Coastguard Worker         }
666*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
667*35ffd701SAndroid Build Coastguard Worker     }
668*35ffd701SAndroid Build Coastguard Worker 
669*35ffd701SAndroid Build Coastguard Worker     // Allocate surface that requires multi tiles in two dimension
670*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X dimension
671*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
672*35ffd701SAndroid Build Coastguard Worker     {
673*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
674*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
675*35ffd701SAndroid Build Coastguard Worker 
676*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
677*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = LEGACY_TILE_Y;
678*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format       = GMM_FORMAT_ETC2_RGB8;
679*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64  = (TileSize[0] / GetBppValue(bpp)) + 1; // 1 pixel larger than 1 tile width
680*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight   = 0x1;
681*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth        = 0x1;
682*35ffd701SAndroid Build Coastguard Worker 
683*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
684*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
685*35ffd701SAndroid Build Coastguard Worker 
686*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign);
687*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign);
688*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, TileSize[0] * 4); // As wide as 2 tile, but 4-tile pitch alignment
689*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 4);        // 2 tile wide, but 4-tile pitch alignment
690*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(4) * 4); // 2 tile big, but 4-tile pitch alignment
691*35ffd701SAndroid Build Coastguard Worker 
692*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // Not tested
693*35ffd701SAndroid Build Coastguard Worker 
694*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
695*35ffd701SAndroid Build Coastguard Worker         //For Yf/Y test main surface pitch is 4-tileYF/Y aligned
696*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
697*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4);
698*35ffd701SAndroid Build Coastguard Worker 
699*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
700*35ffd701SAndroid Build Coastguard Worker         {
701*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
702*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
703*35ffd701SAndroid Build Coastguard Worker         }
704*35ffd701SAndroid Build Coastguard Worker 
705*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
706*35ffd701SAndroid Build Coastguard Worker 
707*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
708*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
709*35ffd701SAndroid Build Coastguard Worker 
710*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
711*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
712*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
713*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
714*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
715*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
716*35ffd701SAndroid Build Coastguard Worker 
717*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
718*35ffd701SAndroid Build Coastguard Worker         }
719*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
720*35ffd701SAndroid Build Coastguard Worker     }
721*35ffd701SAndroid Build Coastguard Worker 
722*35ffd701SAndroid Build Coastguard Worker     // Allocate surface that requires multi tiles in two dimension
723*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X/Y dimension
724*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
725*35ffd701SAndroid Build Coastguard Worker     {
726*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
727*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
728*35ffd701SAndroid Build Coastguard Worker 
729*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
730*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = LEGACY_TILE_Y;
731*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format       = GMM_FORMAT_ETC2_RGB8;
732*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64  = (TileSize[0] / GetBppValue(bpp)) + 1; // 1 pixel larger than 1 tile width
733*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight   = TileSize[1] + 1;                      // 1 row larger than 1 tile height
734*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth        = 0x1;
735*35ffd701SAndroid Build Coastguard Worker 
736*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
737*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
738*35ffd701SAndroid Build Coastguard Worker 
739*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign);
740*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign);
741*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, TileSize[0] * 4); // As wide as 2 tile, but 4-tile pitch alignment
742*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 4);        // 2 tile wide, but 4-tile pitch alignment
743*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(4) * 4); // 4 tile wide; max compressed height = 0x24/4 = 9, so fits in 1 tile-height
744*35ffd701SAndroid Build Coastguard Worker 
745*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // Not tested
746*35ffd701SAndroid Build Coastguard Worker                                                       //test main surface base alignment is 64KB
747*35ffd701SAndroid Build Coastguard Worker                                                       //For Yf/Y test main surface pitch is 4-tileYF/Y aligned
748*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
749*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4);
750*35ffd701SAndroid Build Coastguard Worker 
751*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
752*35ffd701SAndroid Build Coastguard Worker         {
753*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
754*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
755*35ffd701SAndroid Build Coastguard Worker         }
756*35ffd701SAndroid Build Coastguard Worker 
757*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
758*35ffd701SAndroid Build Coastguard Worker 
759*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
760*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
761*35ffd701SAndroid Build Coastguard Worker 
762*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
763*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
764*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
765*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
766*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
767*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
768*35ffd701SAndroid Build Coastguard Worker 
769*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
770*35ffd701SAndroid Build Coastguard Worker         }
771*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
772*35ffd701SAndroid Build Coastguard Worker     }
773*35ffd701SAndroid Build Coastguard Worker }
774*35ffd701SAndroid Build Coastguard Worker 
775*35ffd701SAndroid Build Coastguard Worker //Y416(64bpp -how is 10/12/16bit depth given?)
776*35ffd701SAndroid Build Coastguard Worker //Y410(32bpp), Y216(64bpp), YCRCB_NORMAL(16bpp), YCRCB_SWAPUV(16bpp),
777*35ffd701SAndroid Build Coastguard Worker //YCRCB_SWAPUVY(16bpp), YCRCB_SWAPY(16bpp)
778*35ffd701SAndroid Build Coastguard Worker 
779*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for Planar Compressed Resource
TEST_F(CTestGen12Resource,DISABLED_TestPlanarYfCompressedResource)780*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, DISABLED_TestPlanarYfCompressedResource)
781*35ffd701SAndroid Build Coastguard Worker {
782*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[TEST_BPP_MAX][2] = {
783*35ffd701SAndroid Build Coastguard Worker     {64, 64}, {128, 32}, {128, 32}, {256, 16}, {256, 16}}; // TileYf
784*35ffd701SAndroid Build Coastguard Worker 
785*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams = {};
786*35ffd701SAndroid Build Coastguard Worker     gmmParams.Type                 = RESOURCE_2D;
787*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory          = 1;
788*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.Texture    = 1;
789*35ffd701SAndroid Build Coastguard Worker     //gmmParams.Flags.Gpu.MMC = 1;
790*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.CCS              = 1;
791*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.MediaCompressed = 1;
792*35ffd701SAndroid Build Coastguard Worker     gmmParams.BaseWidth64                = 0x100;
793*35ffd701SAndroid Build Coastguard Worker     gmmParams.BaseHeight                 = 0x50;
794*35ffd701SAndroid Build Coastguard Worker     gmmParams.Depth                      = 0x1;
795*35ffd701SAndroid Build Coastguard Worker     SetTileFlag(gmmParams, TEST_TILEYF); // TileYF only
796*35ffd701SAndroid Build Coastguard Worker 
797*35ffd701SAndroid Build Coastguard Worker     //UV-Packed formats
798*35ffd701SAndroid Build Coastguard Worker     GMM_RESOURCE_FORMAT Format[4] = {GMM_FORMAT_NV12, GMM_FORMAT_NV21, GMM_FORMAT_P010, GMM_FORMAT_P016};
799*35ffd701SAndroid Build Coastguard Worker     for(auto fmt : Format)
800*35ffd701SAndroid Build Coastguard Worker     {
801*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format = fmt; // 8bpp (NV12, NV21), 16bpp (P016,P010)
802*35ffd701SAndroid Build Coastguard Worker 
803*35ffd701SAndroid Build Coastguard Worker         TEST_BPP Ybpp, UVbpp;
804*35ffd701SAndroid Build Coastguard Worker         //Yf/Ys could be accessed on CPU/app where UV plane bpp is double
805*35ffd701SAndroid Build Coastguard Worker         switch(pGmmULTClientContext->GetPlatformInfo().FormatTable[fmt].Element.BitsPer)
806*35ffd701SAndroid Build Coastguard Worker         {
807*35ffd701SAndroid Build Coastguard Worker             case 8:
808*35ffd701SAndroid Build Coastguard Worker                 Ybpp  = TEST_BPP_8;
809*35ffd701SAndroid Build Coastguard Worker                 UVbpp = TEST_BPP_16;
810*35ffd701SAndroid Build Coastguard Worker                 break;
811*35ffd701SAndroid Build Coastguard Worker             case 16:
812*35ffd701SAndroid Build Coastguard Worker                 Ybpp  = TEST_BPP_16;
813*35ffd701SAndroid Build Coastguard Worker                 UVbpp = TEST_BPP_32;
814*35ffd701SAndroid Build Coastguard Worker                 break;
815*35ffd701SAndroid Build Coastguard Worker             default:
816*35ffd701SAndroid Build Coastguard Worker                 return;
817*35ffd701SAndroid Build Coastguard Worker         }
818*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1;
819*35ffd701SAndroid Build Coastguard Worker 
820*35ffd701SAndroid Build Coastguard Worker         /*Aux is TileY (later Linear), not redescribing, its bytes are allocated using one bpp*/
821*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = DEFINE_TILE(YF_2D, Ybpp);
822*35ffd701SAndroid Build Coastguard Worker 
823*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
824*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
825*35ffd701SAndroid Build Coastguard Worker 
826*35ffd701SAndroid Build Coastguard Worker         //Redescribed Pitch isn't modified unless Y, UV pitch differ
827*35ffd701SAndroid Build Coastguard Worker         //But, original Pitch is padded to have even Tile, hence use Ybpp ExpectedPitch
828*35ffd701SAndroid Build Coastguard Worker         //to verify Pitch, but redescribed size
829*35ffd701SAndroid Build Coastguard Worker         uint32_t ExpectedPitch    = GMM_ULT_ALIGN(gmmParams.BaseWidth64 * (int)pow(2.0, Ybpp), TileSize[Ybpp][0] * 4);
830*35ffd701SAndroid Build Coastguard Worker         uint32_t RedescribedPitch = GMM_ULT_ALIGN(gmmParams.BaseWidth64 / 2 * (int)pow(2.0, UVbpp), TileSize[UVbpp][0] * 4);
831*35ffd701SAndroid Build Coastguard Worker 
832*35ffd701SAndroid Build Coastguard Worker         //ExpectedPitch = GMM_ULT_ALIGN(ExpectedPitch, 2 * TileSize[Ybpp][0]);   //pad to even tile
833*35ffd701SAndroid Build Coastguard Worker         if(ExpectedPitch != RedescribedPitch)
834*35ffd701SAndroid Build Coastguard Worker         {
835*35ffd701SAndroid Build Coastguard Worker             ExpectedPitch = RedescribedPitch;
836*35ffd701SAndroid Build Coastguard Worker         }
837*35ffd701SAndroid Build Coastguard Worker 
838*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, ExpectedPitch);
839*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, ExpectedPitch / TileSize[Ybpp][0]);
840*35ffd701SAndroid Build Coastguard Worker 
841*35ffd701SAndroid Build Coastguard Worker         int YSizeInTiles = (GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[Ybpp][1]) / TileSize[Ybpp][1]) *
842*35ffd701SAndroid Build Coastguard Worker                            RedescribedPitch / TileSize[Ybpp][0];
843*35ffd701SAndroid Build Coastguard Worker         int UVSizeInTiles = (GMM_ULT_ALIGN(gmmParams.BaseHeight / 2, TileSize[UVbpp][1]) / TileSize[UVbpp][1]) *
844*35ffd701SAndroid Build Coastguard Worker                             RedescribedPitch / TileSize[UVbpp][0];
845*35ffd701SAndroid Build Coastguard Worker 
846*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(4) * (YSizeInTiles + UVSizeInTiles));
847*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, TileSize[UVbpp][0] / pow(2.0, UVbpp)); // For Yf/Ys planar redescription causes UV width, Y height alignment
848*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, TileSize[Ybpp][1]);
849*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // N/A for non-mipped surface
850*35ffd701SAndroid Build Coastguard Worker 
851*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
852*35ffd701SAndroid Build Coastguard Worker         //For Yf test main surface pitch is 4-tileYF aligned
853*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
854*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4); // Check on YF only
855*35ffd701SAndroid Build Coastguard Worker 
856*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
857*35ffd701SAndroid Build Coastguard Worker         {
858*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
859*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
860*35ffd701SAndroid Build Coastguard Worker         }
861*35ffd701SAndroid Build Coastguard Worker 
862*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4) * 2, ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS)); // Y and UV Aux are on separate tiles
863*35ffd701SAndroid Build Coastguard Worker 
864*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
865*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
866*35ffd701SAndroid Build Coastguard Worker 
867*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
868*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
869*35ffd701SAndroid Build Coastguard Worker 
870*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(GMM_KBYTE(4) * 2, AuxResourceInfo->GetSizeSurface());
871*35ffd701SAndroid Build Coastguard Worker 
872*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
873*35ffd701SAndroid Build Coastguard Worker         }
874*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
875*35ffd701SAndroid Build Coastguard Worker     }
876*35ffd701SAndroid Build Coastguard Worker }
877*35ffd701SAndroid Build Coastguard Worker 
878*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for Planar Y Compressed Resource
TEST_F(CTestGen12Resource,TestPlanarYCompressedResource)879*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, TestPlanarYCompressedResource)
880*35ffd701SAndroid Build Coastguard Worker {
881*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[2] = {128, 32};
882*35ffd701SAndroid Build Coastguard Worker     const uint32_t HAlign      = 16;
883*35ffd701SAndroid Build Coastguard Worker     const uint32_t VAlign      = 4;
884*35ffd701SAndroid Build Coastguard Worker 
885*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams         = {};
886*35ffd701SAndroid Build Coastguard Worker     gmmParams.Type                         = RESOURCE_2D;
887*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory                  = 1;
888*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.Texture            = 1;
889*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.RenderTarget       = 1;
890*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.MMC                = 1;
891*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.CCS                = 1;
892*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.IndirectClearColor = 1;
893*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.MediaCompressed   = 1;
894*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.NotLockable       = 1;
895*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.Cacheable         = 1;
896*35ffd701SAndroid Build Coastguard Worker     gmmParams.BaseWidth64                  = 0xB2;
897*35ffd701SAndroid Build Coastguard Worker     gmmParams.BaseHeight                   = 0x92;
898*35ffd701SAndroid Build Coastguard Worker     gmmParams.Depth                        = 0x1;
899*35ffd701SAndroid Build Coastguard Worker     SetTileFlag(gmmParams, TEST_TILEY); // TileYF only
900*35ffd701SAndroid Build Coastguard Worker 
901*35ffd701SAndroid Build Coastguard Worker     GMM_RESOURCE_FORMAT Format[4] = {GMM_FORMAT_NV12, GMM_FORMAT_NV21, GMM_FORMAT_P010, GMM_FORMAT_P016};
902*35ffd701SAndroid Build Coastguard Worker     for(auto fmt : Format)
903*35ffd701SAndroid Build Coastguard Worker     {
904*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format = fmt; // 8bpp (NV12, NV21), 16bpp (P016, P010)
905*35ffd701SAndroid Build Coastguard Worker 
906*35ffd701SAndroid Build Coastguard Worker         TEST_BPP Ybpp, UVbpp;
907*35ffd701SAndroid Build Coastguard Worker         //Yf/Ys could be accessed on CPU/app where UV plane bpp is double
908*35ffd701SAndroid Build Coastguard Worker         switch(pGmmULTClientContext->GetPlatformInfo().FormatTable[fmt].Element.BitsPer)
909*35ffd701SAndroid Build Coastguard Worker         {
910*35ffd701SAndroid Build Coastguard Worker             case 8:
911*35ffd701SAndroid Build Coastguard Worker                 Ybpp  = TEST_BPP_8;
912*35ffd701SAndroid Build Coastguard Worker                 UVbpp = TEST_BPP_16;
913*35ffd701SAndroid Build Coastguard Worker                 break;
914*35ffd701SAndroid Build Coastguard Worker             case 16:
915*35ffd701SAndroid Build Coastguard Worker                 Ybpp  = TEST_BPP_16;
916*35ffd701SAndroid Build Coastguard Worker                 UVbpp = TEST_BPP_32;
917*35ffd701SAndroid Build Coastguard Worker                 break;
918*35ffd701SAndroid Build Coastguard Worker             default:
919*35ffd701SAndroid Build Coastguard Worker                 return;
920*35ffd701SAndroid Build Coastguard Worker         }
921*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1;
922*35ffd701SAndroid Build Coastguard Worker 
923*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE      TileMode = LEGACY_TILE_Y;
924*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
925*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
926*35ffd701SAndroid Build Coastguard Worker 
927*35ffd701SAndroid Build Coastguard Worker         //Redescribed Pitch isn't modified unless Y, UV pitch differ
928*35ffd701SAndroid Build Coastguard Worker         //But, original Pitch is padded to have even Tile, hence use Ybpp ExpectedPitch
929*35ffd701SAndroid Build Coastguard Worker         //to verify Pitch, but redescribed size
930*35ffd701SAndroid Build Coastguard Worker         uint32_t ExpectedPitch    = GMM_ULT_ALIGN(gmmParams.BaseWidth64 * (int)pow(2.0, Ybpp), TileSize[0] * 4);
931*35ffd701SAndroid Build Coastguard Worker         uint32_t RedescribedPitch = GMM_ULT_ALIGN(gmmParams.BaseWidth64 / 2 * (int)pow(2.0, UVbpp), TileSize[0] * 4);
932*35ffd701SAndroid Build Coastguard Worker 
933*35ffd701SAndroid Build Coastguard Worker         //ExpectedPitch = GMM_ULT_ALIGN(ExpectedPitch, 2 * TileSize[Ybpp][0]);   //pad to even tile
934*35ffd701SAndroid Build Coastguard Worker         if(ExpectedPitch != RedescribedPitch)
935*35ffd701SAndroid Build Coastguard Worker         {
936*35ffd701SAndroid Build Coastguard Worker             ExpectedPitch = RedescribedPitch;
937*35ffd701SAndroid Build Coastguard Worker         }
938*35ffd701SAndroid Build Coastguard Worker 
939*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, ExpectedPitch);
940*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, ExpectedPitch / TileSize[0]);
941*35ffd701SAndroid Build Coastguard Worker 
942*35ffd701SAndroid Build Coastguard Worker         int YSizeInTiles = (GMM_ULT_ALIGN(gmmParams.BaseHeight, 4 * TileSize[1]) / TileSize[1]) * //Default 64K-alignment for Y/UV base (AuxT 64K)
943*35ffd701SAndroid Build Coastguard Worker                            RedescribedPitch / TileSize[0];
944*35ffd701SAndroid Build Coastguard Worker         int UVSizeInTiles = (GMM_ULT_ALIGN(gmmParams.BaseHeight / 2, 4 * TileSize[1]) / TileSize[1]) * //Default 64K-alignment for Y/UV base (AuxT 64K)
945*35ffd701SAndroid Build Coastguard Worker                             RedescribedPitch / TileSize[0];
946*35ffd701SAndroid Build Coastguard Worker 
947*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(4) * (YSizeInTiles + UVSizeInTiles)); //when main-surf planes are tile-aligned, make it verify-true
948*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign);
949*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign);
950*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // N/A for non-mipped surface
951*35ffd701SAndroid Build Coastguard Worker 
952*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
953*35ffd701SAndroid Build Coastguard Worker         //For Yf test main surface pitch is 4-tileY aligned
954*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
955*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4);
956*35ffd701SAndroid Build Coastguard Worker 
957*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
958*35ffd701SAndroid Build Coastguard Worker         {
959*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
960*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_UV_CCS) % PAGE_SIZE);
961*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
962*35ffd701SAndroid Build Coastguard Worker         }
963*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4) * 2, ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS)); // Y and UV Aux are on separate tiles
964*35ffd701SAndroid Build Coastguard Worker 
965*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
966*35ffd701SAndroid Build Coastguard Worker     }
967*35ffd701SAndroid Build Coastguard Worker }
968*35ffd701SAndroid Build Coastguard Worker 
969*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for Planar Ys Compressed resource
TEST_F(CTestGen12Resource,DISABLED_TestPlanarYsCompressedResource)970*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, DISABLED_TestPlanarYsCompressedResource)
971*35ffd701SAndroid Build Coastguard Worker {
972*35ffd701SAndroid Build Coastguard Worker     const TEST_TILE_TYPE TileTypeSupported = {TEST_TILEYS};
973*35ffd701SAndroid Build Coastguard Worker 
974*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[TEST_BPP_MAX][2] = {
975*35ffd701SAndroid Build Coastguard Worker     {256, 256}, {512, 128}, {512, 128}, {1024, 64}, {1024, 64}}; // TileYS
976*35ffd701SAndroid Build Coastguard Worker 
977*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams = {};
978*35ffd701SAndroid Build Coastguard Worker     gmmParams.Type                 = RESOURCE_2D;
979*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory          = 1;
980*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.Texture    = 1;
981*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.MMC        = 1;
982*35ffd701SAndroid Build Coastguard Worker     //gmmParams.Flags.Gpu.CCS = 1;
983*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.UnifiedAuxSurface = 1;
984*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.MediaCompressed  = 1;
985*35ffd701SAndroid Build Coastguard Worker     gmmParams.BaseWidth64                 = 0x100;
986*35ffd701SAndroid Build Coastguard Worker     gmmParams.BaseHeight                  = 0x50;
987*35ffd701SAndroid Build Coastguard Worker     gmmParams.Depth                       = 0x1;
988*35ffd701SAndroid Build Coastguard Worker     SetTileFlag(gmmParams, TEST_TILEYS); // TileYS only
989*35ffd701SAndroid Build Coastguard Worker 
990*35ffd701SAndroid Build Coastguard Worker     GMM_RESOURCE_FORMAT Format[4] = {GMM_FORMAT_NV12, GMM_FORMAT_NV21, GMM_FORMAT_P010, GMM_FORMAT_P016};
991*35ffd701SAndroid Build Coastguard Worker     for(auto fmt : Format)
992*35ffd701SAndroid Build Coastguard Worker     {
993*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format = fmt; // 8bpp(NV12) , P016 (16bpp), P010 (16bpp), NV21(8bpp)
994*35ffd701SAndroid Build Coastguard Worker 
995*35ffd701SAndroid Build Coastguard Worker         TEST_BPP Ybpp, UVbpp;
996*35ffd701SAndroid Build Coastguard Worker         //Yf/Ys could be accessed on CPU/app where UV plane bpp is double
997*35ffd701SAndroid Build Coastguard Worker         switch(pGmmULTClientContext->GetPlatformInfo().FormatTable[gmmParams.Format].Element.BitsPer)
998*35ffd701SAndroid Build Coastguard Worker         {
999*35ffd701SAndroid Build Coastguard Worker             case 8:
1000*35ffd701SAndroid Build Coastguard Worker                 Ybpp  = TEST_BPP_8;
1001*35ffd701SAndroid Build Coastguard Worker                 UVbpp = TEST_BPP_16;
1002*35ffd701SAndroid Build Coastguard Worker                 break;
1003*35ffd701SAndroid Build Coastguard Worker             case 16:
1004*35ffd701SAndroid Build Coastguard Worker                 Ybpp  = TEST_BPP_16;
1005*35ffd701SAndroid Build Coastguard Worker                 UVbpp = TEST_BPP_32;
1006*35ffd701SAndroid Build Coastguard Worker                 break;
1007*35ffd701SAndroid Build Coastguard Worker             default:
1008*35ffd701SAndroid Build Coastguard Worker                 return;
1009*35ffd701SAndroid Build Coastguard Worker         }
1010*35ffd701SAndroid Build Coastguard Worker 
1011*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1;
1012*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode                = DEFINE_TILE(YS_2D, Ybpp);
1013*35ffd701SAndroid Build Coastguard Worker 
1014*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
1015*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1016*35ffd701SAndroid Build Coastguard Worker 
1017*35ffd701SAndroid Build Coastguard Worker         //Redescribed Pitch isn't modified unless Y, UV pitch differ
1018*35ffd701SAndroid Build Coastguard Worker         //But, original Pitch is padded to have even Tile, hence use Ybpp ExpectedPitch
1019*35ffd701SAndroid Build Coastguard Worker         //to verify Pitch, but redescribed pitch to verify size
1020*35ffd701SAndroid Build Coastguard Worker         uint32_t ExpectedPitch    = GMM_ULT_ALIGN(gmmParams.BaseWidth64 * (int)pow(2.0, Ybpp), TileSize[Ybpp][0]);
1021*35ffd701SAndroid Build Coastguard Worker         uint32_t RedescribedPitch = GMM_ULT_ALIGN(gmmParams.BaseWidth64 / 2 * (int)pow(2.0, UVbpp), TileSize[UVbpp][0]);
1022*35ffd701SAndroid Build Coastguard Worker 
1023*35ffd701SAndroid Build Coastguard Worker         if(ExpectedPitch != RedescribedPitch)
1024*35ffd701SAndroid Build Coastguard Worker         {
1025*35ffd701SAndroid Build Coastguard Worker             ExpectedPitch = RedescribedPitch;
1026*35ffd701SAndroid Build Coastguard Worker         }
1027*35ffd701SAndroid Build Coastguard Worker         else
1028*35ffd701SAndroid Build Coastguard Worker         {
1029*35ffd701SAndroid Build Coastguard Worker             //ExpectedPitch = GMM_ULT_ALIGN(ExpectedPitch, 2 * TileSize[Ybpp][0]); //pad to even tile
1030*35ffd701SAndroid Build Coastguard Worker             //ExpectedPitch = GMM_ULT_ALIGN(ExpectedPitch, (2 * TileSize[UVbpp][0]/ (int)pow(2.0, UVbpp))); //pad to even tile
1031*35ffd701SAndroid Build Coastguard Worker         }
1032*35ffd701SAndroid Build Coastguard Worker 
1033*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, ExpectedPitch);
1034*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, ExpectedPitch / TileSize[Ybpp][0]);
1035*35ffd701SAndroid Build Coastguard Worker 
1036*35ffd701SAndroid Build Coastguard Worker         int YSizeInTiles = (GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[Ybpp][1]) / TileSize[Ybpp][1]) *
1037*35ffd701SAndroid Build Coastguard Worker                            RedescribedPitch / TileSize[Ybpp][0];
1038*35ffd701SAndroid Build Coastguard Worker         int UVSizeInTiles = (GMM_ULT_ALIGN(gmmParams.BaseHeight / 2, TileSize[UVbpp][1]) / TileSize[UVbpp][1]) *
1039*35ffd701SAndroid Build Coastguard Worker                             RedescribedPitch / TileSize[UVbpp][0];
1040*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(64) * (YSizeInTiles + UVSizeInTiles));
1041*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, TileSize[UVbpp][0] / pow(2.0, UVbpp)); // For Yf/Ys planar redescription causes UV width, Y height alignment
1042*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, TileSize[Ybpp][1]);
1043*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // N/A for non-mipped surface
1044*35ffd701SAndroid Build Coastguard Worker 
1045*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
1046*35ffd701SAndroid Build Coastguard Worker         //For Yf test main surface pitch is 4-tileYF aligned
1047*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
1048*35ffd701SAndroid Build Coastguard Worker         //EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4);   // Check on YF only
1049*35ffd701SAndroid Build Coastguard Worker 
1050*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
1051*35ffd701SAndroid Build Coastguard Worker         {
1052*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
1053*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_UV_CCS) % PAGE_SIZE);
1054*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
1055*35ffd701SAndroid Build Coastguard Worker         }
1056*35ffd701SAndroid Build Coastguard Worker 
1057*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4) * 2, ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS)); // Y and UV Aux are on separate tiles
1058*35ffd701SAndroid Build Coastguard Worker 
1059*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
1060*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
1061*35ffd701SAndroid Build Coastguard Worker 
1062*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
1063*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1064*35ffd701SAndroid Build Coastguard Worker 
1065*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
1066*35ffd701SAndroid Build Coastguard Worker 
1067*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
1068*35ffd701SAndroid Build Coastguard Worker         }
1069*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
1070*35ffd701SAndroid Build Coastguard Worker     }
1071*35ffd701SAndroid Build Coastguard Worker }
1072*35ffd701SAndroid Build Coastguard Worker 
1073*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for 2D arrayed compressed Resource
TEST_F(CTestGen12Resource,TestArrayedCompressedResource)1074*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, TestArrayedCompressedResource)
1075*35ffd701SAndroid Build Coastguard Worker {
1076*35ffd701SAndroid Build Coastguard Worker     //printf("%s\n", __FUNCTION__);
1077*35ffd701SAndroid Build Coastguard Worker     //Test for 3D array
1078*35ffd701SAndroid Build Coastguard Worker }
1079*35ffd701SAndroid Build Coastguard Worker 
1080*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for mip-mapped compressed Resource
TEST_F(CTestGen12Resource,TestMipMapCompressedResource)1081*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, TestMipMapCompressedResource)
1082*35ffd701SAndroid Build Coastguard Worker {
1083*35ffd701SAndroid Build Coastguard Worker     //printf("%s\n", __FUNCTION__);
1084*35ffd701SAndroid Build Coastguard Worker }
1085*35ffd701SAndroid Build Coastguard Worker 
1086*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for cube Compressed Resource
TEST_F(CTestGen12Resource,TestCubeCompressedResource)1087*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, TestCubeCompressedResource)
1088*35ffd701SAndroid Build Coastguard Worker {
1089*35ffd701SAndroid Build Coastguard Worker     //Tests 2D array
1090*35ffd701SAndroid Build Coastguard Worker     const uint32_t HAlign[5][TEST_BPP_MAX] = {{0}, {0}, {0}, {256, 256, 128, 128, 64}, {64, 64, 32, 32, 16}};
1091*35ffd701SAndroid Build Coastguard Worker     const uint32_t VAlign[5][TEST_BPP_MAX] = {{0}, {0}, {0}, {256, 128, 128, 64, 64}, {64, 32, 32, 16, 16}};
1092*35ffd701SAndroid Build Coastguard Worker 
1093*35ffd701SAndroid Build Coastguard Worker     const TEST_TILE_TYPE TileTypeSupported[2] = {TEST_TILEYS, TEST_TILEYF};
1094*35ffd701SAndroid Build Coastguard Worker 
1095*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[5][TEST_BPP_MAX][2] = {
1096*35ffd701SAndroid Build Coastguard Worker     {0},
1097*35ffd701SAndroid Build Coastguard Worker     {0},
1098*35ffd701SAndroid Build Coastguard Worker     {0},
1099*35ffd701SAndroid Build Coastguard Worker     {{256, 256}, {512, 128}, {512, 128}, {1024, 64}, {1024, 64}}, // TileYS
1100*35ffd701SAndroid Build Coastguard Worker     {{64, 64}, {128, 32}, {128, 32}, {256, 16}, {256, 16}}};      //TileYf
1101*35ffd701SAndroid Build Coastguard Worker 
1102*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams        = {};
1103*35ffd701SAndroid Build Coastguard Worker     gmmParams.Type                        = RESOURCE_CUBE;
1104*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory                 = 1;
1105*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.Texture           = 1;
1106*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.RenderCompressed = 1;
1107*35ffd701SAndroid Build Coastguard Worker 
1108*35ffd701SAndroid Build Coastguard Worker     // Allocate 1x1 surface so that it occupies 1 Tile in X dimension
1109*35ffd701SAndroid Build Coastguard Worker     for(auto Tiling : TileTypeSupported)
1110*35ffd701SAndroid Build Coastguard Worker     {
1111*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Info.TiledY  = 1;
1112*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Info.TiledYf = (Tiling == TEST_TILEYF);
1113*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Info.TiledYs = (Tiling == TEST_TILEYS);
1114*35ffd701SAndroid Build Coastguard Worker         for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
1115*35ffd701SAndroid Build Coastguard Worker         {
1116*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 1;
1117*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.CCS               = 1;
1118*35ffd701SAndroid Build Coastguard Worker 
1119*35ffd701SAndroid Build Coastguard Worker             TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
1120*35ffd701SAndroid Build Coastguard Worker             GMM_TILE_MODE TileMode = (Tiling == TEST_TILEYF) ? DEFINE_TILE(YF_2D, bpp) : DEFINE_TILE(YS_2D, bpp);
1121*35ffd701SAndroid Build Coastguard Worker 
1122*35ffd701SAndroid Build Coastguard Worker             gmmParams.Format      = SetResourceFormat(bpp);
1123*35ffd701SAndroid Build Coastguard Worker             gmmParams.BaseWidth64 = 0x1;
1124*35ffd701SAndroid Build Coastguard Worker             gmmParams.BaseHeight  = 0x1;
1125*35ffd701SAndroid Build Coastguard Worker             gmmParams.Depth       = 0x1;
1126*35ffd701SAndroid Build Coastguard Worker 
1127*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *ResourceInfo;
1128*35ffd701SAndroid Build Coastguard Worker             ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1129*35ffd701SAndroid Build Coastguard Worker 
1130*35ffd701SAndroid Build Coastguard Worker             VerifyResourceHAlign<true>(ResourceInfo, HAlign[Tiling][i]);
1131*35ffd701SAndroid Build Coastguard Worker             VerifyResourceVAlign<true>(ResourceInfo, VAlign[Tiling][i]);
1132*35ffd701SAndroid Build Coastguard Worker 
1133*35ffd701SAndroid Build Coastguard Worker             uint32_t ExpectedPitch = 4 * TileSize[TEST_TILEYF][i][0];
1134*35ffd701SAndroid Build Coastguard Worker             VerifyResourcePitch<true>(ResourceInfo, ExpectedPitch);                          // As wide as 4 tile-YF
1135*35ffd701SAndroid Build Coastguard Worker             VerifyResourcePitchInTiles<true>(ResourceInfo, (Tiling == TEST_TILEYF) ? 4 : 1); // 1 tile wide
1136*35ffd701SAndroid Build Coastguard Worker 
1137*35ffd701SAndroid Build Coastguard Worker             uint32_t ExpectedQPitch = VAlign[Tiling][i];
1138*35ffd701SAndroid Build Coastguard Worker             VerifyResourceQPitch<true>(ResourceInfo, ExpectedQPitch); // Each face should be VAlign rows apart within a tile
1139*35ffd701SAndroid Build Coastguard Worker 
1140*35ffd701SAndroid Build Coastguard Worker             VerifyResourceSize<true>(ResourceInfo, // PitchInBytes * Rows where Rows = __GMM_MAX_CUBE_FACE x QPitch, then aligned to tile boundary
1141*35ffd701SAndroid Build Coastguard Worker                                      ExpectedPitch *
1142*35ffd701SAndroid Build Coastguard Worker                                      __GMM_MAX_CUBE_FACE * ExpectedQPitch);
1143*35ffd701SAndroid Build Coastguard Worker 
1144*35ffd701SAndroid Build Coastguard Worker             //test main surface base alignment is 64KB
1145*35ffd701SAndroid Build Coastguard Worker             //For Yf test main surface pitch is 4-tileYF aligned
1146*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
1147*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % ((Tiling == TEST_TILEYF) ? 4 : 1));
1148*35ffd701SAndroid Build Coastguard Worker 
1149*35ffd701SAndroid Build Coastguard Worker             if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
1150*35ffd701SAndroid Build Coastguard Worker             {
1151*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
1152*35ffd701SAndroid Build Coastguard Worker                 EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
1153*35ffd701SAndroid Build Coastguard Worker             }
1154*35ffd701SAndroid Build Coastguard Worker 
1155*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1156*35ffd701SAndroid Build Coastguard Worker 
1157*35ffd701SAndroid Build Coastguard Worker             { //separate Aux
1158*35ffd701SAndroid Build Coastguard Worker                 gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
1159*35ffd701SAndroid Build Coastguard Worker 
1160*35ffd701SAndroid Build Coastguard Worker                 GMM_RESOURCE_INFO *AuxResourceInfo;
1161*35ffd701SAndroid Build Coastguard Worker                 AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1162*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
1163*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
1164*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
1165*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
1166*35ffd701SAndroid Build Coastguard Worker                 pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
1167*35ffd701SAndroid Build Coastguard Worker             }
1168*35ffd701SAndroid Build Coastguard Worker 
1169*35ffd701SAndroid Build Coastguard Worker             for(uint32_t CubeFaceIndex = 0; CubeFaceIndex < __GMM_MAX_CUBE_FACE; CubeFaceIndex++)
1170*35ffd701SAndroid Build Coastguard Worker             {
1171*35ffd701SAndroid Build Coastguard Worker                 GMM_REQ_OFFSET_INFO OffsetInfo = {};
1172*35ffd701SAndroid Build Coastguard Worker                 OffsetInfo.ReqRender           = 1;
1173*35ffd701SAndroid Build Coastguard Worker                 OffsetInfo.CubeFace            = static_cast<GMM_CUBE_FACE_ENUM>(CubeFaceIndex);
1174*35ffd701SAndroid Build Coastguard Worker                 ResourceInfo->GetOffset(OffsetInfo);
1175*35ffd701SAndroid Build Coastguard Worker 
1176*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ((CubeFaceIndex * ExpectedQPitch) * ExpectedPitch,
1177*35ffd701SAndroid Build Coastguard Worker                           OffsetInfo.Render.Offset64);   // Render offset is tile's base address on which cube face begins.
1178*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(0, OffsetInfo.Render.XOffset); // X Offset should be 0 as cube face starts on tile boundary
1179*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(0, OffsetInfo.Render.YOffset); // Y Offset should be 0 as cube face starts on tile boundary
1180*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(0, OffsetInfo.Render.ZOffset); // Z offset N/A should be 0
1181*35ffd701SAndroid Build Coastguard Worker             }
1182*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
1183*35ffd701SAndroid Build Coastguard Worker         }
1184*35ffd701SAndroid Build Coastguard Worker 
1185*35ffd701SAndroid Build Coastguard Worker         // Allocate 2 tiles in X dimension.
1186*35ffd701SAndroid Build Coastguard Worker         // Width and Height must be equal
1187*35ffd701SAndroid Build Coastguard Worker         for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
1188*35ffd701SAndroid Build Coastguard Worker         {
1189*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 1;
1190*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.CCS               = 1;
1191*35ffd701SAndroid Build Coastguard Worker             TEST_BPP      bpp                     = static_cast<TEST_BPP>(i);
1192*35ffd701SAndroid Build Coastguard Worker             GMM_TILE_MODE TileMode                = (Tiling == TEST_TILEYF) ? DEFINE_TILE(YF_2D, bpp) : DEFINE_TILE(YS_2D, bpp);
1193*35ffd701SAndroid Build Coastguard Worker 
1194*35ffd701SAndroid Build Coastguard Worker             gmmParams.Format      = SetResourceFormat(bpp);
1195*35ffd701SAndroid Build Coastguard Worker             gmmParams.BaseWidth64 = (TileSize[Tiling][i][0] / GetBppValue(bpp)) + 1; // 1 pixel larger than 1 tile width
1196*35ffd701SAndroid Build Coastguard Worker             gmmParams.BaseHeight  = gmmParams.BaseWidth64;                           // Heigth must be equal to width.
1197*35ffd701SAndroid Build Coastguard Worker             gmmParams.Depth       = 0x1;
1198*35ffd701SAndroid Build Coastguard Worker 
1199*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *ResourceInfo;
1200*35ffd701SAndroid Build Coastguard Worker             ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1201*35ffd701SAndroid Build Coastguard Worker 
1202*35ffd701SAndroid Build Coastguard Worker             VerifyResourceHAlign<true>(ResourceInfo, HAlign[Tiling][i]);
1203*35ffd701SAndroid Build Coastguard Worker             VerifyResourceVAlign<true>(ResourceInfo, VAlign[Tiling][i]);
1204*35ffd701SAndroid Build Coastguard Worker 
1205*35ffd701SAndroid Build Coastguard Worker             uint32_t ExpectedPitch = TileSize[Tiling][i][0] * 2 * ((Tiling == TEST_TILEYF) ? 2 : 1); // As wide as 2 tile, padded to 4 tile-pitch
1206*35ffd701SAndroid Build Coastguard Worker             VerifyResourcePitch<true>(ResourceInfo, ExpectedPitch);
1207*35ffd701SAndroid Build Coastguard Worker             VerifyResourcePitchInTiles<true>(ResourceInfo, 2 * ((Tiling == TEST_TILEYF) ? 2 : 1)); // 2 tile wide
1208*35ffd701SAndroid Build Coastguard Worker 
1209*35ffd701SAndroid Build Coastguard Worker             uint32_t ExpectedQPitch = GMM_ULT_ALIGN(gmmParams.BaseHeight, VAlign[Tiling][i]);
1210*35ffd701SAndroid Build Coastguard Worker             VerifyResourceQPitch<true>(ResourceInfo, ExpectedQPitch); // Each face should be Valigned-BaseHeight rows apart
1211*35ffd701SAndroid Build Coastguard Worker 
1212*35ffd701SAndroid Build Coastguard Worker             VerifyResourceSize<true>(ResourceInfo, // PitchInBytes * Rows where Rows = __GMM_MAX_CUBE_FACE x QPitch, then aligned to tile boundary
1213*35ffd701SAndroid Build Coastguard Worker                                      ExpectedPitch *
1214*35ffd701SAndroid Build Coastguard Worker                                      __GMM_MAX_CUBE_FACE * ExpectedQPitch);
1215*35ffd701SAndroid Build Coastguard Worker 
1216*35ffd701SAndroid Build Coastguard Worker             //test main surface base alignment is 64KB
1217*35ffd701SAndroid Build Coastguard Worker             //For Yf test main surface pitch is 4-tileYF aligned
1218*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
1219*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % ((Tiling == TEST_TILEYF) ? 4 : 1)); // Check on YF only
1220*35ffd701SAndroid Build Coastguard Worker 
1221*35ffd701SAndroid Build Coastguard Worker             if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
1222*35ffd701SAndroid Build Coastguard Worker             {
1223*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
1224*35ffd701SAndroid Build Coastguard Worker                 EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
1225*35ffd701SAndroid Build Coastguard Worker             }
1226*35ffd701SAndroid Build Coastguard Worker 
1227*35ffd701SAndroid Build Coastguard Worker             { //separate Aux
1228*35ffd701SAndroid Build Coastguard Worker                 gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
1229*35ffd701SAndroid Build Coastguard Worker 
1230*35ffd701SAndroid Build Coastguard Worker                 GMM_RESOURCE_INFO *AuxResourceInfo;
1231*35ffd701SAndroid Build Coastguard Worker                 AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1232*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
1233*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
1234*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
1235*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
1236*35ffd701SAndroid Build Coastguard Worker                 pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
1237*35ffd701SAndroid Build Coastguard Worker             }
1238*35ffd701SAndroid Build Coastguard Worker 
1239*35ffd701SAndroid Build Coastguard Worker             for(uint32_t CubeFaceIndex = 0; CubeFaceIndex < __GMM_MAX_CUBE_FACE; CubeFaceIndex++)
1240*35ffd701SAndroid Build Coastguard Worker             {
1241*35ffd701SAndroid Build Coastguard Worker                 GMM_REQ_OFFSET_INFO OffsetInfo = {};
1242*35ffd701SAndroid Build Coastguard Worker                 OffsetInfo.ReqRender           = 1;
1243*35ffd701SAndroid Build Coastguard Worker                 OffsetInfo.CubeFace            = static_cast<GMM_CUBE_FACE_ENUM>(CubeFaceIndex);
1244*35ffd701SAndroid Build Coastguard Worker                 ResourceInfo->GetOffset(OffsetInfo);
1245*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ((CubeFaceIndex * ExpectedQPitch) * ExpectedPitch,
1246*35ffd701SAndroid Build Coastguard Worker                           OffsetInfo.Render.Offset64);   // Render offset is tile's base address on which cube face begins.
1247*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(0, OffsetInfo.Render.XOffset); // X Offset should be 0 as cube face starts on tile boundary
1248*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(0, OffsetInfo.Render.YOffset); // Y Offset should be 0 as cube face starts on tile boundary
1249*35ffd701SAndroid Build Coastguard Worker                 EXPECT_EQ(0, OffsetInfo.Render.ZOffset); // Z offset N/A should be 0
1250*35ffd701SAndroid Build Coastguard Worker             }
1251*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
1252*35ffd701SAndroid Build Coastguard Worker         }
1253*35ffd701SAndroid Build Coastguard Worker     }
1254*35ffd701SAndroid Build Coastguard Worker }
1255*35ffd701SAndroid Build Coastguard Worker 
1256*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for 3D TileYs Compressed Resource
TEST_F(CTestGen12Resource,Test3DTileYsCompressedResource)1257*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, Test3DTileYsCompressedResource)
1258*35ffd701SAndroid Build Coastguard Worker {
1259*35ffd701SAndroid Build Coastguard Worker     if(!const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
1260*35ffd701SAndroid Build Coastguard Worker     {
1261*35ffd701SAndroid Build Coastguard Worker         return;
1262*35ffd701SAndroid Build Coastguard Worker     }
1263*35ffd701SAndroid Build Coastguard Worker     // Horizontal/Vertical pixel alignment
1264*35ffd701SAndroid Build Coastguard Worker     const uint32_t HAlign[TEST_BPP_MAX] = {64, 32, 32, 32, 16};
1265*35ffd701SAndroid Build Coastguard Worker     const uint32_t VAlign[TEST_BPP_MAX] = {32, 32, 32, 16, 16};
1266*35ffd701SAndroid Build Coastguard Worker 
1267*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[TEST_BPP_MAX][3] = {{64, 32, 32},
1268*35ffd701SAndroid Build Coastguard Worker                                                 {64, 32, 32},
1269*35ffd701SAndroid Build Coastguard Worker                                                 {128, 32, 16},
1270*35ffd701SAndroid Build Coastguard Worker                                                 {256, 16, 16},
1271*35ffd701SAndroid Build Coastguard Worker                                                 {256, 16, 16}};
1272*35ffd701SAndroid Build Coastguard Worker 
1273*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams        = {};
1274*35ffd701SAndroid Build Coastguard Worker     gmmParams.Type                        = RESOURCE_3D;
1275*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory                 = 1;
1276*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledY           = 1;
1277*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledYs          = 1;
1278*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.Texture           = 1;
1279*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.RenderCompressed = 1; // Turn on .MC or .RC flag - mandatory to tell compression-type, for Yf its also used to pad surf
1280*35ffd701SAndroid Build Coastguard Worker                                                // to 4x1 tile (reqd by HW for perf reasons)
1281*35ffd701SAndroid Build Coastguard Worker 
1282*35ffd701SAndroid Build Coastguard Worker     // Allocate 1x1x1 surface
1283*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
1284*35ffd701SAndroid Build Coastguard Worker     {
1285*35ffd701SAndroid Build Coastguard Worker         // If unifiedAuxSurf reqd (mandatory for displayable or cross-device shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
1286*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
1287*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
1288*35ffd701SAndroid Build Coastguard Worker 
1289*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
1290*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = DEFINE_TILE(YS_3D, bpp);
1291*35ffd701SAndroid Build Coastguard Worker 
1292*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format      = SetResourceFormat(bpp);
1293*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64 = 0x1;
1294*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight  = 0x1;
1295*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth       = 0x1;
1296*35ffd701SAndroid Build Coastguard Worker 
1297*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
1298*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1299*35ffd701SAndroid Build Coastguard Worker 
1300*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign[i]);
1301*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign[i]);
1302*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, TileSize[i][0]); // As wide as 1 tile
1303*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 1);       // 1 tile wide
1304*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<false>(ResourceInfo, GMM_KBYTE(64));  // 1 tile big
1305*35ffd701SAndroid Build Coastguard Worker 
1306*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // Not tested
1307*35ffd701SAndroid Build Coastguard Worker 
1308*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
1309*35ffd701SAndroid Build Coastguard Worker         //For Yf test main surface pitch is 4-tileYF aligned
1310*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
1311*35ffd701SAndroid Build Coastguard Worker 
1312*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
1313*35ffd701SAndroid Build Coastguard Worker         {
1314*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
1315*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
1316*35ffd701SAndroid Build Coastguard Worker         }
1317*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1318*35ffd701SAndroid Build Coastguard Worker 
1319*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
1320*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
1321*35ffd701SAndroid Build Coastguard Worker 
1322*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
1323*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1324*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
1325*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
1326*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
1327*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
1328*35ffd701SAndroid Build Coastguard Worker 
1329*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
1330*35ffd701SAndroid Build Coastguard Worker         }
1331*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
1332*35ffd701SAndroid Build Coastguard Worker     }
1333*35ffd701SAndroid Build Coastguard Worker 
1334*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X dimension
1335*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
1336*35ffd701SAndroid Build Coastguard Worker     {
1337*35ffd701SAndroid Build Coastguard Worker         // If unifiedAuxSurf reqd (mandatory for displayable or cross-device shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
1338*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
1339*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
1340*35ffd701SAndroid Build Coastguard Worker 
1341*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
1342*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = DEFINE_TILE(YS_3D, bpp);
1343*35ffd701SAndroid Build Coastguard Worker 
1344*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format      = SetResourceFormat(bpp);
1345*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64 = (TileSize[i][0] / GetBppValue(bpp)) + 1; // 1 pixel larger than 1 tile width
1346*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight  = 0x1;
1347*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth       = 0x1;
1348*35ffd701SAndroid Build Coastguard Worker 
1349*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
1350*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1351*35ffd701SAndroid Build Coastguard Worker 
1352*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign[i]);
1353*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign[i]);
1354*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, TileSize[i][0] * 2); // As wide as 2 tile
1355*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 2);           // 2 tile wide
1356*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<false>(ResourceInfo, GMM_KBYTE(64) * 2);  // 2 tile big
1357*35ffd701SAndroid Build Coastguard Worker 
1358*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // Not tested
1359*35ffd701SAndroid Build Coastguard Worker                                                       //test main surface base alignment is 64KB
1360*35ffd701SAndroid Build Coastguard Worker                                                       //For Yf test main surface pitch is 4-tileYF aligned
1361*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
1362*35ffd701SAndroid Build Coastguard Worker 
1363*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
1364*35ffd701SAndroid Build Coastguard Worker         {
1365*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
1366*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
1367*35ffd701SAndroid Build Coastguard Worker         }
1368*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1369*35ffd701SAndroid Build Coastguard Worker 
1370*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
1371*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
1372*35ffd701SAndroid Build Coastguard Worker 
1373*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
1374*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1375*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
1376*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
1377*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
1378*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
1379*35ffd701SAndroid Build Coastguard Worker 
1380*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
1381*35ffd701SAndroid Build Coastguard Worker         }
1382*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
1383*35ffd701SAndroid Build Coastguard Worker     }
1384*35ffd701SAndroid Build Coastguard Worker 
1385*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X/Y dimension
1386*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
1387*35ffd701SAndroid Build Coastguard Worker     {
1388*35ffd701SAndroid Build Coastguard Worker         // If unifiedAuxSurf reqd (mandatory for displayable or cross-device shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
1389*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
1390*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
1391*35ffd701SAndroid Build Coastguard Worker 
1392*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
1393*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = DEFINE_TILE(YS_3D, bpp);
1394*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format       = SetResourceFormat(bpp);
1395*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64  = (TileSize[i][0] / GetBppValue(bpp)) + 1; // 1 pixel larger than 1 tile width
1396*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight   = TileSize[i][1] + 1;                      // 1 row larger than 1 tile height
1397*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth        = 0x1;
1398*35ffd701SAndroid Build Coastguard Worker 
1399*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
1400*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1401*35ffd701SAndroid Build Coastguard Worker 
1402*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign[i]);
1403*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign[i]);
1404*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, TileSize[i][0] * 2); // As wide as 2 tile
1405*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 2);           // 2 tile wide
1406*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<false>(ResourceInfo, GMM_KBYTE(64) * 4);  // 4 tile big
1407*35ffd701SAndroid Build Coastguard Worker 
1408*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // Not tested
1409*35ffd701SAndroid Build Coastguard Worker 
1410*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
1411*35ffd701SAndroid Build Coastguard Worker         //For Yf test main surface pitch is 4-tileYF aligned
1412*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
1413*35ffd701SAndroid Build Coastguard Worker 
1414*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
1415*35ffd701SAndroid Build Coastguard Worker         {
1416*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
1417*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
1418*35ffd701SAndroid Build Coastguard Worker         }
1419*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1420*35ffd701SAndroid Build Coastguard Worker 
1421*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
1422*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
1423*35ffd701SAndroid Build Coastguard Worker 
1424*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
1425*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1426*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
1427*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
1428*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
1429*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
1430*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
1431*35ffd701SAndroid Build Coastguard Worker         }
1432*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
1433*35ffd701SAndroid Build Coastguard Worker     }
1434*35ffd701SAndroid Build Coastguard Worker 
1435*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X/Y/Z dimension
1436*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
1437*35ffd701SAndroid Build Coastguard Worker     {
1438*35ffd701SAndroid Build Coastguard Worker         // If unifiedAuxSurf reqd (mandatory for displayable or cross-device shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
1439*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
1440*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
1441*35ffd701SAndroid Build Coastguard Worker 
1442*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
1443*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = DEFINE_TILE(YS_3D, bpp);
1444*35ffd701SAndroid Build Coastguard Worker 
1445*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format      = SetResourceFormat(bpp);
1446*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64 = (TileSize[i][0] / GetBppValue(bpp)) + 1; // 1 pixel larger than 1 tile width
1447*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight  = TileSize[i][1] + 1;                      // 1 row larger than 1 tile height
1448*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth       = TileSize[i][2] + 1;                      // 1 plane larger than 1 tile depth
1449*35ffd701SAndroid Build Coastguard Worker 
1450*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
1451*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1452*35ffd701SAndroid Build Coastguard Worker 
1453*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign[i]);
1454*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign[i]);
1455*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, TileSize[i][0] * 2); // As wide as 2 tile
1456*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 2);           // 2 tile wide
1457*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(64) * 8);   // 8 tile big
1458*35ffd701SAndroid Build Coastguard Worker 
1459*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // Not tested
1460*35ffd701SAndroid Build Coastguard Worker                                                       //test main surface base alignment is 64KB
1461*35ffd701SAndroid Build Coastguard Worker                                                       //For Yf test main surface pitch is 4-tileYF aligned
1462*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
1463*35ffd701SAndroid Build Coastguard Worker 
1464*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
1465*35ffd701SAndroid Build Coastguard Worker         {
1466*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
1467*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
1468*35ffd701SAndroid Build Coastguard Worker         }
1469*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1470*35ffd701SAndroid Build Coastguard Worker 
1471*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
1472*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
1473*35ffd701SAndroid Build Coastguard Worker 
1474*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
1475*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1476*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
1477*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
1478*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
1479*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
1480*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
1481*35ffd701SAndroid Build Coastguard Worker         }
1482*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
1483*35ffd701SAndroid Build Coastguard Worker     }
1484*35ffd701SAndroid Build Coastguard Worker }
1485*35ffd701SAndroid Build Coastguard Worker 
1486*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for 3D TileYf Compressed Resource
TEST_F(CTestGen12Resource,Test3DTileYfCompressedResource)1487*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, Test3DTileYfCompressedResource)
1488*35ffd701SAndroid Build Coastguard Worker {
1489*35ffd701SAndroid Build Coastguard Worker     if(!const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
1490*35ffd701SAndroid Build Coastguard Worker     {
1491*35ffd701SAndroid Build Coastguard Worker         return;
1492*35ffd701SAndroid Build Coastguard Worker     }
1493*35ffd701SAndroid Build Coastguard Worker     // Horizontal/Verticle pixel alignment
1494*35ffd701SAndroid Build Coastguard Worker     const uint32_t HAlign[TEST_BPP_MAX]      = {16, 8, 8, 8, 4};
1495*35ffd701SAndroid Build Coastguard Worker     const uint32_t VAlign[TEST_BPP_MAX]      = {16, 16, 16, 8, 8};
1496*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[TEST_BPP_MAX][3] = {{16, 16, 16},
1497*35ffd701SAndroid Build Coastguard Worker                                                 {16, 16, 16},
1498*35ffd701SAndroid Build Coastguard Worker                                                 {32, 16, 8},
1499*35ffd701SAndroid Build Coastguard Worker                                                 {64, 8, 8},
1500*35ffd701SAndroid Build Coastguard Worker                                                 {64, 8, 8}};
1501*35ffd701SAndroid Build Coastguard Worker 
1502*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams        = {};
1503*35ffd701SAndroid Build Coastguard Worker     gmmParams.Type                        = RESOURCE_3D;
1504*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory                 = 1;
1505*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledY           = 1;
1506*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledYf          = 1;
1507*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.Texture           = 1;
1508*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.RenderCompressed = 1; // Turn on .MC or .RC flag - mandatory to tell compression-type, for Yf its also used to pad surf
1509*35ffd701SAndroid Build Coastguard Worker                                                // to 4x1 tile (reqd by HW for perf reasons)
1510*35ffd701SAndroid Build Coastguard Worker 
1511*35ffd701SAndroid Build Coastguard Worker     // Allocate 1x1x1 surface
1512*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
1513*35ffd701SAndroid Build Coastguard Worker     {
1514*35ffd701SAndroid Build Coastguard Worker         // If unifiedAuxSurf reqd (mandatory for displayable or cross-device shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
1515*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
1516*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
1517*35ffd701SAndroid Build Coastguard Worker                                                    //gmmParams.Flags.Gpu.MMC = 0;              //Turn on to check unifiedaux creation
1518*35ffd701SAndroid Build Coastguard Worker 
1519*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
1520*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = DEFINE_TILE(YF_3D, bpp);
1521*35ffd701SAndroid Build Coastguard Worker 
1522*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format = SetResourceFormat(bpp);
1523*35ffd701SAndroid Build Coastguard Worker         //gmmParams.BaseWidth64 = 0x30;
1524*35ffd701SAndroid Build Coastguard Worker         //gmmParams.BaseHeight = 0x30;
1525*35ffd701SAndroid Build Coastguard Worker         //gmmParams.Depth = 0x20;
1526*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64         = 1;
1527*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight          = 1;
1528*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth               = 1;
1529*35ffd701SAndroid Build Coastguard Worker         const uint32_t PitchAlignment = 32;
1530*35ffd701SAndroid Build Coastguard Worker 
1531*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
1532*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1533*35ffd701SAndroid Build Coastguard Worker 
1534*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign[i]);
1535*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign[i]);
1536*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, GMM_ULT_ALIGN(gmmParams.BaseWidth64, TileSize[i][0] * 4));
1537*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, GMM_ULT_ALIGN(gmmParams.BaseWidth64, TileSize[i][0] * 4) / TileSize[i][0]);
1538*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, (GMM_ULT_ALIGN(gmmParams.BaseWidth64, TileSize[i][0] * 4) / TileSize[i][0]) *
1539*35ffd701SAndroid Build Coastguard Worker                                                (GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[i][1]) / TileSize[i][1]) *
1540*35ffd701SAndroid Build Coastguard Worker                                                (GMM_ULT_ALIGN(gmmParams.Depth, TileSize[i][2]) / TileSize[i][2]) * GMM_KBYTE(4));
1541*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<true>(ResourceInfo, (GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[i][1])));
1542*35ffd701SAndroid Build Coastguard Worker 
1543*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
1544*35ffd701SAndroid Build Coastguard Worker         //For Yf test main surface pitch is 4-tileYF aligned
1545*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
1546*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4); // Check on YF only
1547*35ffd701SAndroid Build Coastguard Worker 
1548*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
1549*35ffd701SAndroid Build Coastguard Worker         {
1550*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
1551*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
1552*35ffd701SAndroid Build Coastguard Worker         }
1553*35ffd701SAndroid Build Coastguard Worker         ASSERT_LE(GMM_ULT_ALIGN(ResourceInfo->GetSizeMainSurface() / (GMM_KBYTE(16) / GMM_BYTES(64)), GMM_KBYTE(4)),
1554*35ffd701SAndroid Build Coastguard Worker                   ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1555*35ffd701SAndroid Build Coastguard Worker 
1556*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
1557*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
1558*35ffd701SAndroid Build Coastguard Worker 
1559*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
1560*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1561*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
1562*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
1563*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
1564*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
1565*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
1566*35ffd701SAndroid Build Coastguard Worker         }
1567*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
1568*35ffd701SAndroid Build Coastguard Worker     }
1569*35ffd701SAndroid Build Coastguard Worker 
1570*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X dimension
1571*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
1572*35ffd701SAndroid Build Coastguard Worker     {
1573*35ffd701SAndroid Build Coastguard Worker         // If unifiedAuxSurf reqd (mandatory for displayable or cross-device shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
1574*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
1575*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
1576*35ffd701SAndroid Build Coastguard Worker 
1577*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
1578*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = DEFINE_TILE(YF_3D, bpp);
1579*35ffd701SAndroid Build Coastguard Worker 
1580*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format              = SetResourceFormat(bpp);
1581*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64         = (TileSize[i][0] / GetBppValue(bpp)) + 1;
1582*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight          = 0x1;
1583*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth               = 0x1;
1584*35ffd701SAndroid Build Coastguard Worker         const uint32_t PitchAlignment = 32;
1585*35ffd701SAndroid Build Coastguard Worker 
1586*35ffd701SAndroid Build Coastguard Worker 
1587*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
1588*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1589*35ffd701SAndroid Build Coastguard Worker 
1590*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign[i]);
1591*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign[i]);
1592*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, GMM_ULT_ALIGN(TileSize[i][0] * 4, PitchAlignment));
1593*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, GMM_ULT_ALIGN(TileSize[i][0] * 4, PitchAlignment) / TileSize[i][0]);
1594*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_ULT_ALIGN(TileSize[i][0] * 4, PitchAlignment) / TileSize[i][0] * GMM_KBYTE(4));
1595*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<true>(ResourceInfo, TileSize[i][1]);
1596*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
1597*35ffd701SAndroid Build Coastguard Worker         //For Yf test main surface pitch is 4-tileYF aligned
1598*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
1599*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4); // Check on YF only
1600*35ffd701SAndroid Build Coastguard Worker 
1601*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
1602*35ffd701SAndroid Build Coastguard Worker         {
1603*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
1604*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
1605*35ffd701SAndroid Build Coastguard Worker         }
1606*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1607*35ffd701SAndroid Build Coastguard Worker         ASSERT_LE(GMM_ULT_ALIGN(ResourceInfo->GetSizeMainSurface() / (GMM_KBYTE(16) / GMM_BYTES(64)), GMM_KBYTE(4)),
1608*35ffd701SAndroid Build Coastguard Worker                   ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1609*35ffd701SAndroid Build Coastguard Worker 
1610*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
1611*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
1612*35ffd701SAndroid Build Coastguard Worker 
1613*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
1614*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1615*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
1616*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
1617*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
1618*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
1619*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
1620*35ffd701SAndroid Build Coastguard Worker         }
1621*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
1622*35ffd701SAndroid Build Coastguard Worker     }
1623*35ffd701SAndroid Build Coastguard Worker 
1624*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X/Y dimension
1625*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
1626*35ffd701SAndroid Build Coastguard Worker     {
1627*35ffd701SAndroid Build Coastguard Worker         // If unifiedAuxSurf reqd (mandatory for displayable or cross-device shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
1628*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
1629*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
1630*35ffd701SAndroid Build Coastguard Worker 
1631*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
1632*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = DEFINE_TILE(YF_3D, bpp);
1633*35ffd701SAndroid Build Coastguard Worker 
1634*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format              = SetResourceFormat(bpp);
1635*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64         = (TileSize[i][0] / GetBppValue(bpp)) + 1;
1636*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight          = TileSize[i][1] + 1;
1637*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth               = 0x1;
1638*35ffd701SAndroid Build Coastguard Worker         const uint32_t PitchAlignment = 32;
1639*35ffd701SAndroid Build Coastguard Worker 
1640*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
1641*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1642*35ffd701SAndroid Build Coastguard Worker 
1643*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign[i]);
1644*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign[i]);
1645*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, GMM_ULT_ALIGN(TileSize[i][0] * 4, PitchAlignment));
1646*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, GMM_ULT_ALIGN(TileSize[i][0] * 4, PitchAlignment) / TileSize[i][0]);
1647*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_ULT_ALIGN(TileSize[i][0] * 4, PitchAlignment) / TileSize[i][0] * 2 * GMM_KBYTE(4));
1648*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<true>(ResourceInfo, TileSize[i][1] * 2);
1649*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
1650*35ffd701SAndroid Build Coastguard Worker         //For Yf test main surface pitch is 4-tileYF aligned
1651*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
1652*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4); // Check on YF only
1653*35ffd701SAndroid Build Coastguard Worker 
1654*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
1655*35ffd701SAndroid Build Coastguard Worker         {
1656*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
1657*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
1658*35ffd701SAndroid Build Coastguard Worker         }
1659*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1660*35ffd701SAndroid Build Coastguard Worker         ASSERT_LE(GMM_ULT_ALIGN(ResourceInfo->GetSizeMainSurface() / (GMM_KBYTE(16) / GMM_BYTES(64)), GMM_KBYTE(4)),
1661*35ffd701SAndroid Build Coastguard Worker                   ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1662*35ffd701SAndroid Build Coastguard Worker 
1663*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
1664*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
1665*35ffd701SAndroid Build Coastguard Worker 
1666*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
1667*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1668*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
1669*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
1670*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
1671*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
1672*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
1673*35ffd701SAndroid Build Coastguard Worker         }
1674*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
1675*35ffd701SAndroid Build Coastguard Worker     }
1676*35ffd701SAndroid Build Coastguard Worker 
1677*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X/Y/Z dimension
1678*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
1679*35ffd701SAndroid Build Coastguard Worker     {
1680*35ffd701SAndroid Build Coastguard Worker         // If unifiedAuxSurf reqd (mandatory for displayable or cross-device shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
1681*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
1682*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
1683*35ffd701SAndroid Build Coastguard Worker 
1684*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
1685*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = DEFINE_TILE(YF_3D, bpp);
1686*35ffd701SAndroid Build Coastguard Worker 
1687*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format              = SetResourceFormat(bpp);
1688*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64         = (TileSize[i][0] / GetBppValue(bpp)) + 1;
1689*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight          = TileSize[i][1] + 1;
1690*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth               = TileSize[i][2] + 1;
1691*35ffd701SAndroid Build Coastguard Worker         const uint32_t PitchAlignment = 32;
1692*35ffd701SAndroid Build Coastguard Worker 
1693*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
1694*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1695*35ffd701SAndroid Build Coastguard Worker 
1696*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign[i]);
1697*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign[i]);
1698*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, GMM_ULT_ALIGN(TileSize[i][0] * 4, PitchAlignment));
1699*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, GMM_ULT_ALIGN(TileSize[i][0] * 4, PitchAlignment) / TileSize[i][0]);
1700*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_ULT_ALIGN(TileSize[i][0] * 4, PitchAlignment) / TileSize[i][0] * 2 * 2 * GMM_KBYTE(4));
1701*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<true>(ResourceInfo, TileSize[i][1] * 2);
1702*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
1703*35ffd701SAndroid Build Coastguard Worker         //For Yf test main surface pitch is 4-tileYF aligned
1704*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
1705*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4); // Check on YF only
1706*35ffd701SAndroid Build Coastguard Worker 
1707*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
1708*35ffd701SAndroid Build Coastguard Worker         {
1709*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
1710*35ffd701SAndroid Build Coastguard Worker             EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
1711*35ffd701SAndroid Build Coastguard Worker         }
1712*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1713*35ffd701SAndroid Build Coastguard Worker         ASSERT_LE(GMM_ULT_ALIGN(ResourceInfo->GetSizeMainSurface() / (GMM_KBYTE(16) / GMM_BYTES(64)), GMM_KBYTE(4)),
1714*35ffd701SAndroid Build Coastguard Worker                   ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1715*35ffd701SAndroid Build Coastguard Worker 
1716*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
1717*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
1718*35ffd701SAndroid Build Coastguard Worker 
1719*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
1720*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1721*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
1722*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
1723*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
1724*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
1725*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
1726*35ffd701SAndroid Build Coastguard Worker         }
1727*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
1728*35ffd701SAndroid Build Coastguard Worker     }
1729*35ffd701SAndroid Build Coastguard Worker }
1730*35ffd701SAndroid Build Coastguard Worker 
1731*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for 3D TileY Compressed Resource
TEST_F(CTestGen12Resource,Test3DTileYCompressedResource)1732*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, Test3DTileYCompressedResource)
1733*35ffd701SAndroid Build Coastguard Worker {
1734*35ffd701SAndroid Build Coastguard Worker     if(!const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
1735*35ffd701SAndroid Build Coastguard Worker     {
1736*35ffd701SAndroid Build Coastguard Worker         return;
1737*35ffd701SAndroid Build Coastguard Worker     }
1738*35ffd701SAndroid Build Coastguard Worker     // Horizontal/Verticle pixel alignment
1739*35ffd701SAndroid Build Coastguard Worker     const uint32_t HAlign      = {16};
1740*35ffd701SAndroid Build Coastguard Worker     const uint32_t VAlign      = {4};
1741*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[3] = {128, 32, 1};
1742*35ffd701SAndroid Build Coastguard Worker 
1743*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams        = {};
1744*35ffd701SAndroid Build Coastguard Worker     gmmParams.Type                        = RESOURCE_3D;
1745*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory                 = 1;
1746*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledY           = 1;
1747*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.Texture           = 1;
1748*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.RenderCompressed = 1; // Turn on .MC or .RC flag - mandatory to tell compression-type, for Yf its also used to pad surf
1749*35ffd701SAndroid Build Coastguard Worker                                                // to 4x1 tile (reqd by HW for perf reasons)
1750*35ffd701SAndroid Build Coastguard Worker 
1751*35ffd701SAndroid Build Coastguard Worker     // Allocate 1x1x1 surface
1752*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
1753*35ffd701SAndroid Build Coastguard Worker     {
1754*35ffd701SAndroid Build Coastguard Worker         // If unifiedAuxSurf reqd (mandatory for displayable or cross-device shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
1755*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
1756*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
1757*35ffd701SAndroid Build Coastguard Worker 
1758*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
1759*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = LEGACY_TILE_Y;
1760*35ffd701SAndroid Build Coastguard Worker 
1761*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format = SetResourceFormat(bpp);
1762*35ffd701SAndroid Build Coastguard Worker         //gmmParams.BaseWidth64 = 0x30;
1763*35ffd701SAndroid Build Coastguard Worker         //gmmParams.BaseHeight = 0x30;
1764*35ffd701SAndroid Build Coastguard Worker         //gmmParams.Depth = 0x20;
1765*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64         = 1;
1766*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight          = 1;
1767*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth               = 1;
1768*35ffd701SAndroid Build Coastguard Worker         const uint32_t PitchAlignment = 32;
1769*35ffd701SAndroid Build Coastguard Worker 
1770*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
1771*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1772*35ffd701SAndroid Build Coastguard Worker 
1773*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign);
1774*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign);
1775*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, GMM_ULT_ALIGN(gmmParams.BaseWidth64, TileSize[0] * 4));
1776*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, GMM_ULT_ALIGN(gmmParams.BaseWidth64, TileSize[0] * 4) / TileSize[0]);
1777*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, (GMM_ULT_ALIGN(gmmParams.BaseWidth64, TileSize[0] * 4) / TileSize[0]) *
1778*35ffd701SAndroid Build Coastguard Worker                                                (GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[1]) / TileSize[1]) *
1779*35ffd701SAndroid Build Coastguard Worker                                                (GMM_ULT_ALIGN(gmmParams.Depth, TileSize[2]) / TileSize[2]) * GMM_KBYTE(4));
1780*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<true>(ResourceInfo, (GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[1])));
1781*35ffd701SAndroid Build Coastguard Worker 
1782*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
1783*35ffd701SAndroid Build Coastguard Worker         //For Yf test main surface pitch is 4-tileYF aligned
1784*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
1785*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4); // Check on YF only
1786*35ffd701SAndroid Build Coastguard Worker 
1787*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
1788*35ffd701SAndroid Build Coastguard Worker         ASSERT_LE(GMM_ULT_ALIGN(ResourceInfo->GetSizeMainSurface() / (GMM_KBYTE(16) / GMM_BYTES(64)), GMM_KBYTE(4)),
1789*35ffd701SAndroid Build Coastguard Worker                   ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1790*35ffd701SAndroid Build Coastguard Worker 
1791*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
1792*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
1793*35ffd701SAndroid Build Coastguard Worker 
1794*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
1795*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1796*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
1797*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
1798*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
1799*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
1800*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
1801*35ffd701SAndroid Build Coastguard Worker         }
1802*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
1803*35ffd701SAndroid Build Coastguard Worker     }
1804*35ffd701SAndroid Build Coastguard Worker 
1805*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X dimension
1806*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
1807*35ffd701SAndroid Build Coastguard Worker     {
1808*35ffd701SAndroid Build Coastguard Worker         // If unifiedAuxSurf reqd (mandatory for displayable or cross-device shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
1809*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
1810*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
1811*35ffd701SAndroid Build Coastguard Worker 
1812*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp             = static_cast<TEST_BPP>(i);
1813*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode        = LEGACY_TILE_Y;
1814*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format              = SetResourceFormat(bpp);
1815*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64         = (TileSize[0] / GetBppValue(bpp)) + 1;
1816*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight          = 0x1;
1817*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth               = 0x1;
1818*35ffd701SAndroid Build Coastguard Worker         const uint32_t PitchAlignment = 32;
1819*35ffd701SAndroid Build Coastguard Worker 
1820*35ffd701SAndroid Build Coastguard Worker 
1821*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
1822*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1823*35ffd701SAndroid Build Coastguard Worker 
1824*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign);
1825*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign);
1826*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, GMM_ULT_ALIGN(TileSize[0] * 4, PitchAlignment));
1827*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, GMM_ULT_ALIGN(TileSize[0] * 4, PitchAlignment) / TileSize[0]);
1828*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_ULT_ALIGN(TileSize[0] * 4, PitchAlignment) / TileSize[0] * GMM_KBYTE(4));
1829*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<true>(ResourceInfo, TileSize[1]);
1830*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
1831*35ffd701SAndroid Build Coastguard Worker         //For Yf test main surface pitch is 4-tileYF aligned
1832*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
1833*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4); // Check on YF only
1834*35ffd701SAndroid Build Coastguard Worker 
1835*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1836*35ffd701SAndroid Build Coastguard Worker         ASSERT_LE(GMM_ULT_ALIGN(ResourceInfo->GetSizeMainSurface() / (GMM_KBYTE(16) / GMM_BYTES(64)), GMM_KBYTE(4)),
1837*35ffd701SAndroid Build Coastguard Worker                   ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1838*35ffd701SAndroid Build Coastguard Worker 
1839*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
1840*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
1841*35ffd701SAndroid Build Coastguard Worker 
1842*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
1843*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1844*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
1845*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
1846*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
1847*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
1848*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
1849*35ffd701SAndroid Build Coastguard Worker         }
1850*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
1851*35ffd701SAndroid Build Coastguard Worker     }
1852*35ffd701SAndroid Build Coastguard Worker 
1853*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X/Y dimension
1854*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
1855*35ffd701SAndroid Build Coastguard Worker     {
1856*35ffd701SAndroid Build Coastguard Worker         // If unifiedAuxSurf reqd (mandatory for displayable or cross-device shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
1857*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
1858*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
1859*35ffd701SAndroid Build Coastguard Worker 
1860*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp             = static_cast<TEST_BPP>(i);
1861*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode        = LEGACY_TILE_Y;
1862*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format              = SetResourceFormat(bpp);
1863*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64         = (TileSize[0] / GetBppValue(bpp)) + 1;
1864*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight          = TileSize[1] + 1;
1865*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth               = 0x1;
1866*35ffd701SAndroid Build Coastguard Worker         const uint32_t PitchAlignment = 32;
1867*35ffd701SAndroid Build Coastguard Worker 
1868*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
1869*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1870*35ffd701SAndroid Build Coastguard Worker 
1871*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign);
1872*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign);
1873*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, GMM_ULT_ALIGN(TileSize[0] * 4, PitchAlignment));
1874*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, GMM_ULT_ALIGN(TileSize[0] * 4, PitchAlignment) / TileSize[0]);
1875*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_ULT_ALIGN(TileSize[0] * 4, PitchAlignment) / TileSize[0] * 2 * GMM_KBYTE(4));
1876*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<true>(ResourceInfo, TileSize[1] * 2);
1877*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
1878*35ffd701SAndroid Build Coastguard Worker         //For Yf test main surface pitch is 4-tileYF aligned
1879*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
1880*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4); // Check on YF only
1881*35ffd701SAndroid Build Coastguard Worker 
1882*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
1883*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1884*35ffd701SAndroid Build Coastguard Worker         ASSERT_LE(GMM_ULT_ALIGN(ResourceInfo->GetSizeMainSurface() / (GMM_KBYTE(16) / GMM_BYTES(64)), GMM_KBYTE(4)),
1885*35ffd701SAndroid Build Coastguard Worker                   ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1886*35ffd701SAndroid Build Coastguard Worker 
1887*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
1888*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
1889*35ffd701SAndroid Build Coastguard Worker 
1890*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
1891*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1892*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
1893*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
1894*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
1895*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
1896*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
1897*35ffd701SAndroid Build Coastguard Worker         }
1898*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
1899*35ffd701SAndroid Build Coastguard Worker     }
1900*35ffd701SAndroid Build Coastguard Worker 
1901*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X/Y/Z dimension
1902*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
1903*35ffd701SAndroid Build Coastguard Worker     {
1904*35ffd701SAndroid Build Coastguard Worker         // If unifiedAuxSurf reqd (mandatory for displayable or cross-device shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
1905*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
1906*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
1907*35ffd701SAndroid Build Coastguard Worker 
1908*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp             = static_cast<TEST_BPP>(i);
1909*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode        = LEGACY_TILE_Y;
1910*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format              = SetResourceFormat(bpp);
1911*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64         = (TileSize[0] / GetBppValue(bpp)) + 1;
1912*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight          = TileSize[1] + 1;
1913*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth               = TileSize[2] + 1;
1914*35ffd701SAndroid Build Coastguard Worker         const uint32_t PitchAlignment = 32;
1915*35ffd701SAndroid Build Coastguard Worker 
1916*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
1917*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1918*35ffd701SAndroid Build Coastguard Worker 
1919*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign);
1920*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign);
1921*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, GMM_ULT_ALIGN(TileSize[0] * 4, PitchAlignment));
1922*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, GMM_ULT_ALIGN(TileSize[0] * 4, PitchAlignment) / TileSize[0]);
1923*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_ULT_ALIGN(TileSize[0] * 4, PitchAlignment) / TileSize[0] * 2 * 2 * GMM_KBYTE(4));
1924*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<true>(ResourceInfo, TileSize[1] * 2);
1925*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
1926*35ffd701SAndroid Build Coastguard Worker         //For Yf test main surface pitch is 4-tileYF aligned
1927*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
1928*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4); // Check on YF only
1929*35ffd701SAndroid Build Coastguard Worker 
1930*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
1931*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1932*35ffd701SAndroid Build Coastguard Worker         ASSERT_LE(GMM_ULT_ALIGN(ResourceInfo->GetSizeMainSurface() / (GMM_KBYTE(16) / GMM_BYTES(64)), GMM_KBYTE(4)),
1933*35ffd701SAndroid Build Coastguard Worker                   ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
1934*35ffd701SAndroid Build Coastguard Worker 
1935*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
1936*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
1937*35ffd701SAndroid Build Coastguard Worker 
1938*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
1939*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
1940*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
1941*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
1942*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
1943*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
1944*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
1945*35ffd701SAndroid Build Coastguard Worker         }
1946*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
1947*35ffd701SAndroid Build Coastguard Worker     }
1948*35ffd701SAndroid Build Coastguard Worker }
1949*35ffd701SAndroid Build Coastguard Worker 
1950*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for 2D Yf mipped compressed resource
TEST_F(CTestGen12Resource,Test2DTileYfMippedCompressedResource)1951*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, Test2DTileYfMippedCompressedResource)
1952*35ffd701SAndroid Build Coastguard Worker {
1953*35ffd701SAndroid Build Coastguard Worker     if(!const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
1954*35ffd701SAndroid Build Coastguard Worker     {
1955*35ffd701SAndroid Build Coastguard Worker         return;
1956*35ffd701SAndroid Build Coastguard Worker     }
1957*35ffd701SAndroid Build Coastguard Worker     const uint32_t HAlign[TEST_BPP_MAX] = {64, 64, 32, 32, 16};
1958*35ffd701SAndroid Build Coastguard Worker     const uint32_t VAlign[TEST_BPP_MAX] = {64, 32, 32, 16, 16};
1959*35ffd701SAndroid Build Coastguard Worker 
1960*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[TEST_BPP_MAX][2] = {{64, 64},
1961*35ffd701SAndroid Build Coastguard Worker                                                 {128, 32},
1962*35ffd701SAndroid Build Coastguard Worker                                                 {128, 32},
1963*35ffd701SAndroid Build Coastguard Worker                                                 {256, 16},
1964*35ffd701SAndroid Build Coastguard Worker                                                 {256, 16}};
1965*35ffd701SAndroid Build Coastguard Worker 
1966*35ffd701SAndroid Build Coastguard Worker     const uint32_t MtsWidth[TEST_BPP_MAX]  = {32, 32, 16, 16, 8};
1967*35ffd701SAndroid Build Coastguard Worker     const uint32_t MtsHeight[TEST_BPP_MAX] = {64, 32, 32, 16, 16};
1968*35ffd701SAndroid Build Coastguard Worker 
1969*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams        = {};
1970*35ffd701SAndroid Build Coastguard Worker     gmmParams.Type                        = RESOURCE_2D;
1971*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory                 = 1;
1972*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledY           = 1;
1973*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledYf          = 1;
1974*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.Texture           = 1;
1975*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.RenderCompressed = 1; // Turn on .MC or .RC flag - mandatory to tell compression-type, for Yf its also used to pad surf
1976*35ffd701SAndroid Build Coastguard Worker                                                // to 4x1 tile (reqd by HW for perf reasons)
1977*35ffd701SAndroid Build Coastguard Worker     gmmParams.MaxLod    = 4;
1978*35ffd701SAndroid Build Coastguard Worker     gmmParams.ArraySize = 4;
1979*35ffd701SAndroid Build Coastguard Worker 
1980*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
1981*35ffd701SAndroid Build Coastguard Worker     {
1982*35ffd701SAndroid Build Coastguard Worker         uint32_t AlignedWidth    = 0;
1983*35ffd701SAndroid Build Coastguard Worker         uint32_t AlignedHeight   = 0;
1984*35ffd701SAndroid Build Coastguard Worker         uint32_t ExpectedPitch   = 0;
1985*35ffd701SAndroid Build Coastguard Worker         uint32_t MipTailStartLod = 0;
1986*35ffd701SAndroid Build Coastguard Worker         // Valigned Mip Heights
1987*35ffd701SAndroid Build Coastguard Worker         uint32_t Mip0Height    = 0;
1988*35ffd701SAndroid Build Coastguard Worker         uint32_t Mip1Height    = 0;
1989*35ffd701SAndroid Build Coastguard Worker         uint32_t Mip2Height    = 0;
1990*35ffd701SAndroid Build Coastguard Worker         uint32_t Mip3Height    = 0;
1991*35ffd701SAndroid Build Coastguard Worker         uint32_t Mip2Higher    = 0; // Sum of aligned heights of Mip2 and above
1992*35ffd701SAndroid Build Coastguard Worker         uint32_t MipTailHeight = 0;
1993*35ffd701SAndroid Build Coastguard Worker         // Haligned Mip Widths
1994*35ffd701SAndroid Build Coastguard Worker         uint32_t Mip0Width = 0;
1995*35ffd701SAndroid Build Coastguard Worker         uint32_t Mip1Width = 0;
1996*35ffd701SAndroid Build Coastguard Worker         uint32_t Mip2Width = 0;
1997*35ffd701SAndroid Build Coastguard Worker 
1998*35ffd701SAndroid Build Coastguard Worker         TEST_BPP bpp          = static_cast<TEST_BPP>(i);
1999*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format      = SetResourceFormat(bpp);
2000*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64 = 0x38;
2001*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight  = 0x38;
2002*35ffd701SAndroid Build Coastguard Worker 
2003*35ffd701SAndroid Build Coastguard Worker         // If unifiedAuxSurf reqd (mandatory for displayable or cross-device shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
2004*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
2005*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
2006*35ffd701SAndroid Build Coastguard Worker 
2007*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
2008*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2009*35ffd701SAndroid Build Coastguard Worker 
2010*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign[i]);
2011*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign[i]);
2012*35ffd701SAndroid Build Coastguard Worker 
2013*35ffd701SAndroid Build Coastguard Worker         // find the miptail start level
2014*35ffd701SAndroid Build Coastguard Worker         {
2015*35ffd701SAndroid Build Coastguard Worker             uint32_t MipWidth  = gmmParams.BaseWidth64;
2016*35ffd701SAndroid Build Coastguard Worker             uint32_t MipHeight = gmmParams.BaseHeight;
2017*35ffd701SAndroid Build Coastguard Worker             while(!(MipWidth <= MtsWidth[i] && MipHeight <= MtsHeight[i]))
2018*35ffd701SAndroid Build Coastguard Worker             {
2019*35ffd701SAndroid Build Coastguard Worker                 MipTailStartLod++;
2020*35ffd701SAndroid Build Coastguard Worker                 MipWidth  = (uint32_t)(GMM_ULT_MAX(1, gmmParams.BaseWidth64 >> MipTailStartLod));
2021*35ffd701SAndroid Build Coastguard Worker                 MipHeight = GMM_ULT_MAX(1, gmmParams.BaseHeight >> MipTailStartLod);
2022*35ffd701SAndroid Build Coastguard Worker             }
2023*35ffd701SAndroid Build Coastguard Worker         }
2024*35ffd701SAndroid Build Coastguard Worker 
2025*35ffd701SAndroid Build Coastguard Worker         // Mip resource Aligned Width calculation
2026*35ffd701SAndroid Build Coastguard Worker         Mip0Width  = GMM_ULT_ALIGN(gmmParams.BaseWidth64, HAlign[i]);
2027*35ffd701SAndroid Build Coastguard Worker         Mip0Height = GMM_ULT_ALIGN(gmmParams.BaseHeight, VAlign[i]);
2028*35ffd701SAndroid Build Coastguard Worker 
2029*35ffd701SAndroid Build Coastguard Worker         if(MipTailStartLod == 1)
2030*35ffd701SAndroid Build Coastguard Worker         {
2031*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(1, ResourceInfo->GetPackedMipTailStartLod());
2032*35ffd701SAndroid Build Coastguard Worker             // Block height...Mip0Height + Max(Mip1Height, Sum of Mip2Height..MipnHeight)
2033*35ffd701SAndroid Build Coastguard Worker             Mip1Height   = GMM_ULT_ALIGN(gmmParams.BaseHeight >> 1, VAlign[i]);
2034*35ffd701SAndroid Build Coastguard Worker             AlignedWidth = Mip0Width;
2035*35ffd701SAndroid Build Coastguard Worker         }
2036*35ffd701SAndroid Build Coastguard Worker         if(MipTailStartLod == 2)
2037*35ffd701SAndroid Build Coastguard Worker         {
2038*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(2, ResourceInfo->GetPackedMipTailStartLod());
2039*35ffd701SAndroid Build Coastguard Worker             // Block height...Mip0Height + Max(Mip1Height, Sum of Mip2Height..MipnHeight)
2040*35ffd701SAndroid Build Coastguard Worker             Mip1Height = GMM_ULT_ALIGN(gmmParams.BaseHeight >> 1, VAlign[i]);
2041*35ffd701SAndroid Build Coastguard Worker             Mip2Height = Mip2Higher = GMM_ULT_ALIGN(gmmParams.BaseHeight >> 2, VAlign[i]);
2042*35ffd701SAndroid Build Coastguard Worker 
2043*35ffd701SAndroid Build Coastguard Worker             Mip1Width    = GMM_ULT_ALIGN(gmmParams.BaseWidth64 >> 1, HAlign[i]);
2044*35ffd701SAndroid Build Coastguard Worker             Mip2Width    = GMM_ULT_ALIGN(gmmParams.BaseWidth64 >> 2, HAlign[i]);
2045*35ffd701SAndroid Build Coastguard Worker             AlignedWidth = GMM_ULT_MAX(Mip0Width, Mip1Width + Mip2Width);
2046*35ffd701SAndroid Build Coastguard Worker         }
2047*35ffd701SAndroid Build Coastguard Worker         if(MipTailStartLod == 3)
2048*35ffd701SAndroid Build Coastguard Worker         {
2049*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(3, ResourceInfo->GetPackedMipTailStartLod());
2050*35ffd701SAndroid Build Coastguard Worker             // Block height...Mip0Height + Max(Mip1Height, Sum of Mip2Height..MipnHeight)
2051*35ffd701SAndroid Build Coastguard Worker             Mip1Height = GMM_ULT_ALIGN(gmmParams.BaseHeight >> 1, VAlign[i]);
2052*35ffd701SAndroid Build Coastguard Worker             Mip2Height = GMM_ULT_ALIGN(gmmParams.BaseHeight >> 2, VAlign[i]);
2053*35ffd701SAndroid Build Coastguard Worker             // Miptail started lod
2054*35ffd701SAndroid Build Coastguard Worker             MipTailHeight = VAlign[i];
2055*35ffd701SAndroid Build Coastguard Worker             Mip2Higher    = Mip2Height + Mip3Height + MipTailHeight;
2056*35ffd701SAndroid Build Coastguard Worker 
2057*35ffd701SAndroid Build Coastguard Worker             Mip1Width    = GMM_ULT_ALIGN(gmmParams.BaseWidth64 >> 1, HAlign[i]);
2058*35ffd701SAndroid Build Coastguard Worker             Mip2Width    = GMM_ULT_ALIGN(gmmParams.BaseWidth64 >> 2, HAlign[i]);
2059*35ffd701SAndroid Build Coastguard Worker             AlignedWidth = GMM_ULT_MAX(Mip0Width, Mip1Width + Mip2Width);
2060*35ffd701SAndroid Build Coastguard Worker         }
2061*35ffd701SAndroid Build Coastguard Worker 
2062*35ffd701SAndroid Build Coastguard Worker         uint32_t MaxHeight = GMM_ULT_MAX(Mip1Height, Mip2Higher);
2063*35ffd701SAndroid Build Coastguard Worker         AlignedHeight      = Mip0Height + MaxHeight;
2064*35ffd701SAndroid Build Coastguard Worker         AlignedHeight      = GMM_ULT_ALIGN(AlignedHeight, VAlign[i]);
2065*35ffd701SAndroid Build Coastguard Worker 
2066*35ffd701SAndroid Build Coastguard Worker         ExpectedPitch = AlignedWidth * GetBppValue(bpp);
2067*35ffd701SAndroid Build Coastguard Worker         ExpectedPitch = GMM_ULT_ALIGN(ExpectedPitch, GMM_BYTES(32));
2068*35ffd701SAndroid Build Coastguard Worker         ExpectedPitch = GMM_ULT_ALIGN(ExpectedPitch, TileSize[i][0] * 4); //Only for displayables - 16K pitch align
2069*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, ExpectedPitch);
2070*35ffd701SAndroid Build Coastguard Worker 
2071*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, static_cast<uint32_t>(ExpectedPitch / TileSize[i][0]));
2072*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_ULT_ALIGN(ExpectedPitch * AlignedHeight * gmmParams.ArraySize, PAGE_SIZE));
2073*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, AlignedHeight);
2074*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
2075*35ffd701SAndroid Build Coastguard Worker         //For Yf test main surface pitch is 4-tileYF aligned
2076*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
2077*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4); // Check on YF only
2078*35ffd701SAndroid Build Coastguard Worker 
2079*35ffd701SAndroid Build Coastguard Worker         //Aux-size enough to cover all
2080*35ffd701SAndroid Build Coastguard Worker         if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
2081*35ffd701SAndroid Build Coastguard Worker         {
2082*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
2083*35ffd701SAndroid Build Coastguard Worker         }
2084*35ffd701SAndroid Build Coastguard Worker 
2085*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
2086*35ffd701SAndroid Build Coastguard Worker         ASSERT_LE(GMM_ULT_ALIGN(ResourceInfo->GetSizeMainSurface() / (GMM_KBYTE(16) / GMM_BYTES(64)), GMM_KBYTE(4)),
2087*35ffd701SAndroid Build Coastguard Worker                   ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
2088*35ffd701SAndroid Build Coastguard Worker 
2089*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
2090*35ffd701SAndroid Build Coastguard Worker     }
2091*35ffd701SAndroid Build Coastguard Worker }
2092*35ffd701SAndroid Build Coastguard Worker 
2093*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for Linear Buffer Compressed Resource
TEST_F(CTestGen12Resource,TestLinearCompressedResource)2094*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, TestLinearCompressedResource)
2095*35ffd701SAndroid Build Coastguard Worker {
2096*35ffd701SAndroid Build Coastguard Worker     // Horizontal pixel alignment
2097*35ffd701SAndroid Build Coastguard Worker     const uint32_t MinPitch = 32;
2098*35ffd701SAndroid Build Coastguard Worker 
2099*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams        = {};
2100*35ffd701SAndroid Build Coastguard Worker     gmmParams.Type                        = RESOURCE_BUFFER;
2101*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory                 = 1;
2102*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.Linear           = 1;
2103*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.Texture           = 1;
2104*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.RenderCompressed = 1;
2105*35ffd701SAndroid Build Coastguard Worker 
2106*35ffd701SAndroid Build Coastguard Worker     // Allocate 1x1 surface
2107*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
2108*35ffd701SAndroid Build Coastguard Worker     {
2109*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
2110*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
2111*35ffd701SAndroid Build Coastguard Worker 
2112*35ffd701SAndroid Build Coastguard Worker         TEST_BPP bpp                             = static_cast<TEST_BPP>(i);
2113*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format                         = SetResourceFormat(bpp);
2114*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64                    = 0x1;
2115*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight                     = 1;
2116*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Info.AllowVirtualPadding = (bpp != TEST_BPP_8); //OCL uses 8bpp buffers. doc doesn't comment if Linear buffer compr allowed or not on bpp!=8.
2117*35ffd701SAndroid Build Coastguard Worker 
2118*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
2119*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2120*35ffd701SAndroid Build Coastguard Worker 
2121*35ffd701SAndroid Build Coastguard Worker         uint32_t AlignedWidth = GMM_ULT_ALIGN(gmmParams.BaseWidth64, MinPitch);
2122*35ffd701SAndroid Build Coastguard Worker         uint32_t PitchInBytes = AlignedWidth * GetBppValue(bpp);
2123*35ffd701SAndroid Build Coastguard Worker         uint32_t AlignedSize  = GMM_ULT_ALIGN(PitchInBytes, PAGE_SIZE);
2124*35ffd701SAndroid Build Coastguard Worker 
2125*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<false>(ResourceInfo, 0);
2126*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<false>(ResourceInfo, 0);       // N/A for buffer
2127*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<false>(ResourceInfo, 0);        // N/A for buffer
2128*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<false>(ResourceInfo, 0); // N/A for linear
2129*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, AlignedSize);
2130*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // N/A for non-arrayed
2131*35ffd701SAndroid Build Coastguard Worker 
2132*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
2133*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
2134*35ffd701SAndroid Build Coastguard Worker 
2135*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
2136*35ffd701SAndroid Build Coastguard Worker         ASSERT_LE(GMM_ULT_ALIGN(ResourceInfo->GetSizeMainSurface() / (GMM_KBYTE(16) / GMM_BYTES(64)), GMM_KBYTE(4)),
2137*35ffd701SAndroid Build Coastguard Worker                   ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
2138*35ffd701SAndroid Build Coastguard Worker 
2139*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
2140*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
2141*35ffd701SAndroid Build Coastguard Worker 
2142*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
2143*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2144*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
2145*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
2146*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
2147*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
2148*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
2149*35ffd701SAndroid Build Coastguard Worker         }
2150*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
2151*35ffd701SAndroid Build Coastguard Worker     }
2152*35ffd701SAndroid Build Coastguard Worker 
2153*35ffd701SAndroid Build Coastguard Worker 
2154*35ffd701SAndroid Build Coastguard Worker     // Allocate more than 1 page
2155*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
2156*35ffd701SAndroid Build Coastguard Worker     {
2157*35ffd701SAndroid Build Coastguard Worker         TEST_BPP bpp                             = static_cast<TEST_BPP>(i);
2158*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format                         = SetResourceFormat(bpp);
2159*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64                    = 0x1001;
2160*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight                     = 1;
2161*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Info.AllowVirtualPadding = (bpp != TEST_BPP_8); //OCL uses 8bpp buffers. document doesn't comment if Linear buffer compr allowed or not on bpp!=8.
2162*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface    = 1;          //Turn off for separate aux creation
2163*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS                  = 1;
2164*35ffd701SAndroid Build Coastguard Worker 
2165*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
2166*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2167*35ffd701SAndroid Build Coastguard Worker 
2168*35ffd701SAndroid Build Coastguard Worker         uint32_t AlignedWidth = GMM_ULT_ALIGN(gmmParams.BaseWidth64, MinPitch);
2169*35ffd701SAndroid Build Coastguard Worker         uint32_t PitchInBytes = AlignedWidth * GetBppValue(bpp);
2170*35ffd701SAndroid Build Coastguard Worker         uint32_t AlignedSize  = GMM_ULT_ALIGN(PitchInBytes, PAGE_SIZE);
2171*35ffd701SAndroid Build Coastguard Worker 
2172*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<false>(ResourceInfo, MinPitch);
2173*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<false>(ResourceInfo, 0);       // N/A for buffer
2174*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<false>(ResourceInfo, 0);        // N/A for buffer
2175*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<false>(ResourceInfo, 0); // N/A for linear
2176*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, AlignedSize);
2177*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // N/A for non-arrayed
2178*35ffd701SAndroid Build Coastguard Worker 
2179*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
2180*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
2181*35ffd701SAndroid Build Coastguard Worker 
2182*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
2183*35ffd701SAndroid Build Coastguard Worker         ASSERT_LE(GMM_ULT_ALIGN(ResourceInfo->GetSizeMainSurface() / (GMM_KBYTE(16) / GMM_BYTES(64)), GMM_KBYTE(4)),
2184*35ffd701SAndroid Build Coastguard Worker                   ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
2185*35ffd701SAndroid Build Coastguard Worker 
2186*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
2187*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
2188*35ffd701SAndroid Build Coastguard Worker 
2189*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
2190*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2191*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
2192*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
2193*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
2194*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
2195*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
2196*35ffd701SAndroid Build Coastguard Worker         }
2197*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
2198*35ffd701SAndroid Build Coastguard Worker     }
2199*35ffd701SAndroid Build Coastguard Worker }
2200*35ffd701SAndroid Build Coastguard Worker ///TODO Add MSAA/Depth Compressed Resource tests
TEST_F(CTestGen12Resource,TestLosslessMSAACompressedResource)2201*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, TestLosslessMSAACompressedResource)
2202*35ffd701SAndroid Build Coastguard Worker {
2203*35ffd701SAndroid Build Coastguard Worker }
2204*35ffd701SAndroid Build Coastguard Worker 
TEST_F(CTestGen12Resource,TestDepthHiZNotCompressedResource)2205*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, TestDepthHiZNotCompressedResource)
2206*35ffd701SAndroid Build Coastguard Worker {
2207*35ffd701SAndroid Build Coastguard Worker     const uint32_t HAlign = 8; //HiZ alignment (16x4 ie general alignment), [Depth 16bit: 8x8; ow 8x4]
2208*35ffd701SAndroid Build Coastguard Worker     uint32_t       VAlign = 4;
2209*35ffd701SAndroid Build Coastguard Worker 
2210*35ffd701SAndroid Build Coastguard Worker     const uint32_t AllocTileSize[1][2] = {128, 32}; //HiZ is TileY
2211*35ffd701SAndroid Build Coastguard Worker 
2212*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams        = {};
2213*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory                 = 1;
2214*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledY           = 1; //Not supported for Depth buffer, but HiZ output is TileY
2215*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.Depth             = 1; //GPU Flags= Depth + HiZ
2216*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.HiZ               = 1;
2217*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.CCS               = 0;
2218*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.RenderCompressed = 0;
2219*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.UnifiedAuxSurface = 1;
2220*35ffd701SAndroid Build Coastguard Worker 
2221*35ffd701SAndroid Build Coastguard Worker     for(uint32_t k = 0; k <= 1; k++)
2222*35ffd701SAndroid Build Coastguard Worker     {
2223*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.IndirectClearColor = k;
2224*35ffd701SAndroid Build Coastguard Worker 
2225*35ffd701SAndroid Build Coastguard Worker         // Allocate 1x1 surface so that it occupies 1 Tile in X dimension
2226*35ffd701SAndroid Build Coastguard Worker         for(uint32_t j = TEST_BPP_8; j <= TEST_BPP_128; j++) //Depth bpp doesn't matter, Depth px dimensions decide HiZ size in HW
2227*35ffd701SAndroid Build Coastguard Worker         {
2228*35ffd701SAndroid Build Coastguard Worker             {
2229*35ffd701SAndroid Build Coastguard Worker                 VAlign = (j == TEST_BPP_16) ? 8 : 4;
2230*35ffd701SAndroid Build Coastguard Worker             }
2231*35ffd701SAndroid Build Coastguard Worker             gmmParams.Format = SetResourceFormat(static_cast<TEST_BPP>(j)); //Only 16,24,32 supported; But driver creates the resource even for other bpps without failing
2232*35ffd701SAndroid Build Coastguard Worker             for(uint32_t i = RESOURCE_2D; i <= RESOURCE_CUBE; i++)          //3D doesn't support HiZ
2233*35ffd701SAndroid Build Coastguard Worker             {
2234*35ffd701SAndroid Build Coastguard Worker                 gmmParams.Type        = static_cast<GMM_RESOURCE_TYPE>(i);
2235*35ffd701SAndroid Build Coastguard Worker                 gmmParams.BaseWidth64 = 0x1;
2236*35ffd701SAndroid Build Coastguard Worker                 gmmParams.BaseHeight  = 0x1; //0x24; //not 1 tile
2237*35ffd701SAndroid Build Coastguard Worker                                              //gmmParams.MaxLod      = 6; --add expectedheight calc- mip0+max{mip1, sum{mip2,...n}}
2238*35ffd701SAndroid Build Coastguard Worker                 gmmParams.Depth = 0x1;
2239*35ffd701SAndroid Build Coastguard Worker 
2240*35ffd701SAndroid Build Coastguard Worker                 if(i == RESOURCE_1D || i == RESOURCE_3D) // SKL+ 1D and 3D do not support HiZ
2241*35ffd701SAndroid Build Coastguard Worker                 {
2242*35ffd701SAndroid Build Coastguard Worker                     gmmParams.Flags.Gpu.HiZ = 0;
2243*35ffd701SAndroid Build Coastguard Worker                 }
2244*35ffd701SAndroid Build Coastguard Worker                 else
2245*35ffd701SAndroid Build Coastguard Worker                 {
2246*35ffd701SAndroid Build Coastguard Worker                     gmmParams.Flags.Gpu.HiZ = 1;
2247*35ffd701SAndroid Build Coastguard Worker                 }
2248*35ffd701SAndroid Build Coastguard Worker 
2249*35ffd701SAndroid Build Coastguard Worker                 GMM_RESOURCE_INFO *ResourceInfo = NULL;
2250*35ffd701SAndroid Build Coastguard Worker                 ResourceInfo                    = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2251*35ffd701SAndroid Build Coastguard Worker                 //EXPECT_NE(NULL, ResourceInfo);
2252*35ffd701SAndroid Build Coastguard Worker 
2253*35ffd701SAndroid Build Coastguard Worker                 VerifyResourceHAlign<true>(ResourceInfo, HAlign);
2254*35ffd701SAndroid Build Coastguard Worker                 VerifyResourceVAlign<true>(ResourceInfo, VAlign);
2255*35ffd701SAndroid Build Coastguard Worker                 uint32_t ExpectedPitch = AllocTileSize[0][0];
2256*35ffd701SAndroid Build Coastguard Worker                 VerifyResourcePitch<true>(ResourceInfo, ExpectedPitch);
2257*35ffd701SAndroid Build Coastguard Worker                 VerifyResourcePitchInTiles<true>(ResourceInfo, 1); // 1 tileY wide
2258*35ffd701SAndroid Build Coastguard Worker                 uint32_t ExpectedHeight = GMM_ULT_ALIGN(gmmParams.BaseHeight, VAlign);
2259*35ffd701SAndroid Build Coastguard Worker 
2260*35ffd701SAndroid Build Coastguard Worker                 if(gmmParams.ArraySize > 1 || gmmParams.Type == RESOURCE_CUBE)
2261*35ffd701SAndroid Build Coastguard Worker                 {
2262*35ffd701SAndroid Build Coastguard Worker                     uint32_t ExpectedQPitch = GMM_ULT_ALIGN(gmmParams.BaseHeight, VAlign);
2263*35ffd701SAndroid Build Coastguard Worker                     ExpectedHeight *= (gmmParams.Type == RESOURCE_CUBE) ? 6 : 1;
2264*35ffd701SAndroid Build Coastguard Worker 
2265*35ffd701SAndroid Build Coastguard Worker                     VerifyResourceQPitch<true>(ResourceInfo, ExpectedQPitch); // Each face should be VAlign rows apart within a tile,
2266*35ffd701SAndroid Build Coastguard Worker                 }
2267*35ffd701SAndroid Build Coastguard Worker 
2268*35ffd701SAndroid Build Coastguard Worker                 VerifyResourceSize<true>(ResourceInfo,
2269*35ffd701SAndroid Build Coastguard Worker                                          GFX_ALIGN(ExpectedPitch * ExpectedHeight, 1 * PAGE_SIZE)); //1 Tile should be enough
2270*35ffd701SAndroid Build Coastguard Worker 
2271*35ffd701SAndroid Build Coastguard Worker                 if(gmmParams.Flags.Gpu.IndirectClearColor)
2272*35ffd701SAndroid Build Coastguard Worker                 {
2273*35ffd701SAndroid Build Coastguard Worker                     VerifyResourceAuxCCSize<true>(ResourceInfo, PAGE_SIZE);
2274*35ffd701SAndroid Build Coastguard Worker                 }
2275*35ffd701SAndroid Build Coastguard Worker                 else
2276*35ffd701SAndroid Build Coastguard Worker                 {
2277*35ffd701SAndroid Build Coastguard Worker                     VerifyResourceAuxCCSize<true>(ResourceInfo, 0);
2278*35ffd701SAndroid Build Coastguard Worker                 }
2279*35ffd701SAndroid Build Coastguard Worker 
2280*35ffd701SAndroid Build Coastguard Worker                 pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
2281*35ffd701SAndroid Build Coastguard Worker             }
2282*35ffd701SAndroid Build Coastguard Worker 
2283*35ffd701SAndroid Build Coastguard Worker             // Allocate 2 tiles in X dimension. (muti-tiles Tiles in Y dimension for cube/array)
2284*35ffd701SAndroid Build Coastguard Worker             for(uint32_t i = RESOURCE_2D; i <= RESOURCE_CUBE; i++)
2285*35ffd701SAndroid Build Coastguard Worker             {
2286*35ffd701SAndroid Build Coastguard Worker                 gmmParams.Type        = static_cast<GMM_RESOURCE_TYPE>(i);
2287*35ffd701SAndroid Build Coastguard Worker                 gmmParams.BaseWidth64 = AllocTileSize[0][0] + 0x1;
2288*35ffd701SAndroid Build Coastguard Worker                 gmmParams.BaseHeight  = (gmmParams.Type == RESOURCE_1D) ? 0x1 :
2289*35ffd701SAndroid Build Coastguard Worker                                                                          (gmmParams.Type == RESOURCE_CUBE) ? gmmParams.BaseWidth64 :
2290*35ffd701SAndroid Build Coastguard Worker                                                                                                              VAlign / 2;
2291*35ffd701SAndroid Build Coastguard Worker                 gmmParams.ArraySize = (gmmParams.Type != RESOURCE_3D) ? VAlign : 1;
2292*35ffd701SAndroid Build Coastguard Worker                 gmmParams.Depth     = 0x1;
2293*35ffd701SAndroid Build Coastguard Worker 
2294*35ffd701SAndroid Build Coastguard Worker                 if(i == RESOURCE_1D || i == RESOURCE_3D)
2295*35ffd701SAndroid Build Coastguard Worker                 {
2296*35ffd701SAndroid Build Coastguard Worker                     gmmParams.Flags.Gpu.HiZ = 0;
2297*35ffd701SAndroid Build Coastguard Worker                 }
2298*35ffd701SAndroid Build Coastguard Worker                 else
2299*35ffd701SAndroid Build Coastguard Worker                 {
2300*35ffd701SAndroid Build Coastguard Worker                     gmmParams.Flags.Gpu.HiZ = 1;
2301*35ffd701SAndroid Build Coastguard Worker                 }
2302*35ffd701SAndroid Build Coastguard Worker 
2303*35ffd701SAndroid Build Coastguard Worker                 GMM_RESOURCE_INFO *ResourceInfo;
2304*35ffd701SAndroid Build Coastguard Worker                 ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2305*35ffd701SAndroid Build Coastguard Worker 
2306*35ffd701SAndroid Build Coastguard Worker                 VerifyResourceHAlign<true>(ResourceInfo, HAlign);
2307*35ffd701SAndroid Build Coastguard Worker                 VerifyResourceVAlign<true>(ResourceInfo, VAlign);
2308*35ffd701SAndroid Build Coastguard Worker                 uint32_t ExpectedPitch = GFX_ALIGN(gmmParams.BaseWidth * (int)pow(2, j), AllocTileSize[0][0]);
2309*35ffd701SAndroid Build Coastguard Worker                 VerifyResourcePitch<true>(ResourceInfo, ExpectedPitch);
2310*35ffd701SAndroid Build Coastguard Worker                 VerifyResourcePitchInTiles<true>(ResourceInfo, ExpectedPitch / AllocTileSize[0][0]);
2311*35ffd701SAndroid Build Coastguard Worker 
2312*35ffd701SAndroid Build Coastguard Worker                 uint32_t ExpectedQPitch = 0;
2313*35ffd701SAndroid Build Coastguard Worker                 if(gmmParams.ArraySize > 1 || gmmParams.Type == RESOURCE_CUBE)
2314*35ffd701SAndroid Build Coastguard Worker                 {
2315*35ffd701SAndroid Build Coastguard Worker                     ExpectedQPitch = GMM_ULT_ALIGN(gmmParams.BaseHeight, VAlign);
2316*35ffd701SAndroid Build Coastguard Worker                     VerifyResourceQPitch<true>(ResourceInfo, ExpectedQPitch); // Each face should be VAlign rows apart within a tile.
2317*35ffd701SAndroid Build Coastguard Worker                 }
2318*35ffd701SAndroid Build Coastguard Worker 
2319*35ffd701SAndroid Build Coastguard Worker                 VerifyResourceSize<true>(ResourceInfo, // PitchInBytes * Rows where Rows = (__GMM_MAX_CUBE_FACE x QPitch) /2 (Stencil height = halved due to interleaving), then aligned to tile boundary
2320*35ffd701SAndroid Build Coastguard Worker                                          ((gmmParams.Type == RESOURCE_CUBE) ?
2321*35ffd701SAndroid Build Coastguard Worker                                           ExpectedPitch * GMM_ULT_ALIGN(ExpectedQPitch * gmmParams.ArraySize * __GMM_MAX_CUBE_FACE, AllocTileSize[0][1]) : //cube
2322*35ffd701SAndroid Build Coastguard Worker                                           ((gmmParams.ArraySize > 1) ?
2323*35ffd701SAndroid Build Coastguard Worker                                            ExpectedPitch * GMM_ULT_ALIGN(ExpectedQPitch * gmmParams.ArraySize, AllocTileSize[0][1]) : //array
2324*35ffd701SAndroid Build Coastguard Worker                                            ExpectedPitch * GMM_ULT_ALIGN(gmmParams.BaseHeight, AllocTileSize[0][1]))));
2325*35ffd701SAndroid Build Coastguard Worker 
2326*35ffd701SAndroid Build Coastguard Worker                 if(gmmParams.Flags.Gpu.IndirectClearColor)
2327*35ffd701SAndroid Build Coastguard Worker                 {
2328*35ffd701SAndroid Build Coastguard Worker                     VerifyResourceAuxCCSize<true>(ResourceInfo, PAGE_SIZE);
2329*35ffd701SAndroid Build Coastguard Worker                 }
2330*35ffd701SAndroid Build Coastguard Worker                 else
2331*35ffd701SAndroid Build Coastguard Worker                 {
2332*35ffd701SAndroid Build Coastguard Worker                     VerifyResourceAuxCCSize<true>(ResourceInfo, 0);
2333*35ffd701SAndroid Build Coastguard Worker                 }
2334*35ffd701SAndroid Build Coastguard Worker 
2335*35ffd701SAndroid Build Coastguard Worker                 pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
2336*35ffd701SAndroid Build Coastguard Worker             }
2337*35ffd701SAndroid Build Coastguard Worker 
2338*35ffd701SAndroid Build Coastguard Worker             // Allocate 2 tiles in X, 3 tiles in Y dimension (non-arrayed) Multi-tiles for 3D
2339*35ffd701SAndroid Build Coastguard Worker             for(uint32_t i = RESOURCE_2D; i <= RESOURCE_3D; i++)
2340*35ffd701SAndroid Build Coastguard Worker             {
2341*35ffd701SAndroid Build Coastguard Worker                 gmmParams.Type        = static_cast<GMM_RESOURCE_TYPE>(i);
2342*35ffd701SAndroid Build Coastguard Worker                 gmmParams.BaseWidth64 = AllocTileSize[0][0] + 0x1;
2343*35ffd701SAndroid Build Coastguard Worker                 gmmParams.BaseHeight  = 2 * AllocTileSize[0][1] + 0x1; //Half-Depth Height or QPitch (lod!=0), aligned to 8 required by HW
2344*35ffd701SAndroid Build Coastguard Worker                 gmmParams.Depth       = (gmmParams.Type == RESOURCE_2D) ? 0x1 :
2345*35ffd701SAndroid Build Coastguard Worker                                                                     VAlign + 1;
2346*35ffd701SAndroid Build Coastguard Worker                 gmmParams.ArraySize = 1;
2347*35ffd701SAndroid Build Coastguard Worker 
2348*35ffd701SAndroid Build Coastguard Worker                 if(i == RESOURCE_1D || i == RESOURCE_3D)
2349*35ffd701SAndroid Build Coastguard Worker                 {
2350*35ffd701SAndroid Build Coastguard Worker                     gmmParams.Flags.Gpu.HiZ = 0;
2351*35ffd701SAndroid Build Coastguard Worker                 }
2352*35ffd701SAndroid Build Coastguard Worker                 else
2353*35ffd701SAndroid Build Coastguard Worker                 {
2354*35ffd701SAndroid Build Coastguard Worker                     gmmParams.Flags.Gpu.HiZ = 1;
2355*35ffd701SAndroid Build Coastguard Worker                 }
2356*35ffd701SAndroid Build Coastguard Worker 
2357*35ffd701SAndroid Build Coastguard Worker                 GMM_RESOURCE_INFO *ResourceInfo;
2358*35ffd701SAndroid Build Coastguard Worker                 ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2359*35ffd701SAndroid Build Coastguard Worker 
2360*35ffd701SAndroid Build Coastguard Worker                 VerifyResourceHAlign<true>(ResourceInfo, HAlign);
2361*35ffd701SAndroid Build Coastguard Worker                 VerifyResourceVAlign<true>(ResourceInfo, VAlign);
2362*35ffd701SAndroid Build Coastguard Worker                 uint32_t ExpectedPitch = GFX_ALIGN(gmmParams.BaseWidth * (int)pow(2, j), AllocTileSize[0][0]);
2363*35ffd701SAndroid Build Coastguard Worker                 VerifyResourcePitch<true>(ResourceInfo, ExpectedPitch);
2364*35ffd701SAndroid Build Coastguard Worker                 VerifyResourcePitchInTiles<true>(ResourceInfo, ExpectedPitch / AllocTileSize[0][0]); // 2 tile wide
2365*35ffd701SAndroid Build Coastguard Worker 
2366*35ffd701SAndroid Build Coastguard Worker                 uint32_t TwoDQPitch, ExpectedQPitch = 0;
2367*35ffd701SAndroid Build Coastguard Worker                 if(gmmParams.Type == RESOURCE_3D)
2368*35ffd701SAndroid Build Coastguard Worker                 {
2369*35ffd701SAndroid Build Coastguard Worker                     TwoDQPitch     = GMM_ULT_ALIGN(gmmParams.BaseHeight, VAlign);
2370*35ffd701SAndroid Build Coastguard Worker                     ExpectedQPitch = GFX_ALIGN(TwoDQPitch, AllocTileSize[0][1]); //Depth slices arranged as 2D-arrayed slices.
2371*35ffd701SAndroid Build Coastguard Worker                     VerifyResourceQPitch<true>(ResourceInfo, ExpectedQPitch);
2372*35ffd701SAndroid Build Coastguard Worker                 }
2373*35ffd701SAndroid Build Coastguard Worker                 else
2374*35ffd701SAndroid Build Coastguard Worker                 {
2375*35ffd701SAndroid Build Coastguard Worker                     //HiZ for 3D not supported. Driver still allocates like IVB/HSW.
2376*35ffd701SAndroid Build Coastguard Worker                     VerifyResourceSize<true>(ResourceInfo, ExpectedPitch * GMM_ULT_ALIGN(gmmParams.BaseHeight, AllocTileSize[0][1]));
2377*35ffd701SAndroid Build Coastguard Worker                 }
2378*35ffd701SAndroid Build Coastguard Worker                 pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
2379*35ffd701SAndroid Build Coastguard Worker             }
2380*35ffd701SAndroid Build Coastguard Worker         }
2381*35ffd701SAndroid Build Coastguard Worker     }
2382*35ffd701SAndroid Build Coastguard Worker }
2383*35ffd701SAndroid Build Coastguard Worker ///TODO Add MSAA/Depth Compressed Resource tests
TEST_F(CTestGen12Resource,DISABLED_TestDepthCompressedResource)2384*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, DISABLED_TestDepthCompressedResource)
2385*35ffd701SAndroid Build Coastguard Worker {
2386*35ffd701SAndroid Build Coastguard Worker     const uint32_t HAlign = 8; //HiZ alignment (16x4 ie general alignment), [Depth 16bit: 8x8; ow 8x4]
2387*35ffd701SAndroid Build Coastguard Worker     uint32_t       VAlign = 4; // 8; Need to debug why driver uses VAlign/2
2388*35ffd701SAndroid Build Coastguard Worker 
2389*35ffd701SAndroid Build Coastguard Worker     //const uint32_t DepthTileSize[1][2] = { 64, 64 };  //Depth/Stencil buffer should be TileY/Ys/Yf only (16,24,32 bpp only) no 3D or MSAA
2390*35ffd701SAndroid Build Coastguard Worker     const uint32_t AllocTileSize[1][2] = {128, 32}; //HiZ is TileY
2391*35ffd701SAndroid Build Coastguard Worker 
2392*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams         = {};
2393*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory                  = 1;
2394*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledY            = 1; //Not supported for Depth buffer, but HiZ output is TileY
2395*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.Depth              = 1; //GPU Flags= Depth/SeparateStencil + HiZ
2396*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.HiZ                = 1;
2397*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.IndirectClearColor = 1;
2398*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.CCS                = 1;
2399*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.RenderCompressed  = 1;
2400*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.UnifiedAuxSurface  = 1;
2401*35ffd701SAndroid Build Coastguard Worker 
2402*35ffd701SAndroid Build Coastguard Worker     // Allocate 1x1 surface so that it occupies 1 Tile in X dimension
2403*35ffd701SAndroid Build Coastguard Worker     for(uint32_t j = TEST_BPP_8; j <= TEST_BPP_128; j++) //Depth bpp doesn't matter, Depth px dimensions decide HiZ size in HW
2404*35ffd701SAndroid Build Coastguard Worker     {
2405*35ffd701SAndroid Build Coastguard Worker         {
2406*35ffd701SAndroid Build Coastguard Worker             VAlign = (j == TEST_BPP_16) ? 8 : 4;
2407*35ffd701SAndroid Build Coastguard Worker         }
2408*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format = SetResourceFormat(static_cast<TEST_BPP>(j)); //Only 16,24,32 supported; But driver creates the resource even for other bpps without failing
2409*35ffd701SAndroid Build Coastguard Worker         for(uint32_t i = RESOURCE_2D; i <= RESOURCE_CUBE; i++)          //3D doesn't support HiZ - test driver returns proper?
2410*35ffd701SAndroid Build Coastguard Worker         {
2411*35ffd701SAndroid Build Coastguard Worker             gmmParams.Type        = static_cast<GMM_RESOURCE_TYPE>(i);
2412*35ffd701SAndroid Build Coastguard Worker             gmmParams.BaseWidth64 = 0x1;
2413*35ffd701SAndroid Build Coastguard Worker             gmmParams.BaseHeight  = 0x1; //0x24; //not 1 tile
2414*35ffd701SAndroid Build Coastguard Worker             //gmmParams.MaxLod      = 6; --add expectedheight calc- mip0+max{mip1, sum{mip2,...n}}
2415*35ffd701SAndroid Build Coastguard Worker             gmmParams.Depth = 0x1;
2416*35ffd701SAndroid Build Coastguard Worker             if(i == RESOURCE_1D || i == RESOURCE_3D)
2417*35ffd701SAndroid Build Coastguard Worker             {
2418*35ffd701SAndroid Build Coastguard Worker                 gmmParams.Flags.Gpu.HiZ = 0;
2419*35ffd701SAndroid Build Coastguard Worker             }
2420*35ffd701SAndroid Build Coastguard Worker 
2421*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *ResourceInfo = NULL;
2422*35ffd701SAndroid Build Coastguard Worker             ResourceInfo                    = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2423*35ffd701SAndroid Build Coastguard Worker             //EXPECT_NE(NULL, ResourceInfo);
2424*35ffd701SAndroid Build Coastguard Worker 
2425*35ffd701SAndroid Build Coastguard Worker             VerifyResourceHAlign<true>(ResourceInfo, HAlign);
2426*35ffd701SAndroid Build Coastguard Worker             VerifyResourceVAlign<true>(ResourceInfo, VAlign);
2427*35ffd701SAndroid Build Coastguard Worker             uint32_t ExpectedPitch = AllocTileSize[0][0] * 4;
2428*35ffd701SAndroid Build Coastguard Worker             VerifyResourcePitch<true>(ResourceInfo, ExpectedPitch);
2429*35ffd701SAndroid Build Coastguard Worker             VerifyResourcePitchInTiles<true>(ResourceInfo, 4); // 1 tileY wide
2430*35ffd701SAndroid Build Coastguard Worker             uint32_t ExpectedHeight = GMM_ULT_ALIGN(gmmParams.BaseHeight, VAlign);
2431*35ffd701SAndroid Build Coastguard Worker 
2432*35ffd701SAndroid Build Coastguard Worker             if(gmmParams.ArraySize > 1 || gmmParams.Type == RESOURCE_CUBE)
2433*35ffd701SAndroid Build Coastguard Worker             {
2434*35ffd701SAndroid Build Coastguard Worker                 uint32_t ExpectedQPitch = GMM_ULT_ALIGN(gmmParams.BaseHeight, VAlign); //Apply formula as per specification
2435*35ffd701SAndroid Build Coastguard Worker                 ExpectedQPitch          = GMM_ULT_ALIGN(ExpectedQPitch / 2, VAlign);
2436*35ffd701SAndroid Build Coastguard Worker                 ExpectedHeight *= (gmmParams.Type == RESOURCE_CUBE) ? 6 : 1;
2437*35ffd701SAndroid Build Coastguard Worker 
2438*35ffd701SAndroid Build Coastguard Worker                 VerifyResourceQPitch<false>(ResourceInfo, ExpectedQPitch); // Each face should be VAlign rows apart within a tile, Turn on verification after clarity
2439*35ffd701SAndroid Build Coastguard Worker             }
2440*35ffd701SAndroid Build Coastguard Worker 
2441*35ffd701SAndroid Build Coastguard Worker             VerifyResourceSize<true>(ResourceInfo,
2442*35ffd701SAndroid Build Coastguard Worker                                      GFX_ALIGN(ExpectedPitch * ExpectedHeight, 4 * PAGE_SIZE)); //1 Tile should be enough
2443*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
2444*35ffd701SAndroid Build Coastguard Worker         }
2445*35ffd701SAndroid Build Coastguard Worker 
2446*35ffd701SAndroid Build Coastguard Worker         // Allocate 2 tiles in X dimension. (muti-tiles Tiles in Y dimension for cube/array)
2447*35ffd701SAndroid Build Coastguard Worker         for(uint32_t i = RESOURCE_2D; i <= RESOURCE_CUBE; i++)
2448*35ffd701SAndroid Build Coastguard Worker         {
2449*35ffd701SAndroid Build Coastguard Worker             gmmParams.Type        = static_cast<GMM_RESOURCE_TYPE>(i);
2450*35ffd701SAndroid Build Coastguard Worker             gmmParams.BaseWidth64 = AllocTileSize[0][0] + 0x1;
2451*35ffd701SAndroid Build Coastguard Worker             gmmParams.BaseHeight  = (gmmParams.Type == RESOURCE_1D) ? 0x1 :
2452*35ffd701SAndroid Build Coastguard Worker                                                                      (gmmParams.Type == RESOURCE_CUBE) ? gmmParams.BaseWidth64 :
2453*35ffd701SAndroid Build Coastguard Worker                                                                                                          VAlign / 2;
2454*35ffd701SAndroid Build Coastguard Worker             gmmParams.ArraySize = (gmmParams.Type != RESOURCE_3D) ? VAlign : 1; // Gen8 doesn't support 3D-arrays (so HiZ not supported) [test 3d arrays once -- HiZ would fail but ResCreate doesn't?]
2455*35ffd701SAndroid Build Coastguard Worker             gmmParams.Depth     = 0x1;
2456*35ffd701SAndroid Build Coastguard Worker 
2457*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *ResourceInfo;
2458*35ffd701SAndroid Build Coastguard Worker             ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2459*35ffd701SAndroid Build Coastguard Worker 
2460*35ffd701SAndroid Build Coastguard Worker             VerifyResourceHAlign<true>(ResourceInfo, HAlign);
2461*35ffd701SAndroid Build Coastguard Worker             VerifyResourceVAlign<true>(ResourceInfo, VAlign);
2462*35ffd701SAndroid Build Coastguard Worker             uint32_t ExpectedPitch = GFX_ALIGN(gmmParams.BaseWidth * (int)pow(2, j), AllocTileSize[0][0] * 4);
2463*35ffd701SAndroid Build Coastguard Worker             VerifyResourcePitch<true>(ResourceInfo, ExpectedPitch);
2464*35ffd701SAndroid Build Coastguard Worker             VerifyResourcePitchInTiles<true>(ResourceInfo, 4); // 2 tileY wide
2465*35ffd701SAndroid Build Coastguard Worker 
2466*35ffd701SAndroid Build Coastguard Worker             uint32_t ExpectedQPitch = 0;
2467*35ffd701SAndroid Build Coastguard Worker             if(gmmParams.ArraySize > 1 || gmmParams.Type == RESOURCE_CUBE)
2468*35ffd701SAndroid Build Coastguard Worker             {
2469*35ffd701SAndroid Build Coastguard Worker                 ExpectedQPitch = GMM_ULT_ALIGN(gmmParams.BaseHeight, VAlign);
2470*35ffd701SAndroid Build Coastguard Worker                 //ExpectedQPitch = GMM_ULT_ALIGN(ExpectedQPitch / 2, VAlign);
2471*35ffd701SAndroid Build Coastguard Worker 
2472*35ffd701SAndroid Build Coastguard Worker                 VerifyResourceQPitch<false>(ResourceInfo, ExpectedQPitch); // Each face should be VAlign rows apart within a tile. Turn on verification after clarity
2473*35ffd701SAndroid Build Coastguard Worker             }
2474*35ffd701SAndroid Build Coastguard Worker 
2475*35ffd701SAndroid Build Coastguard Worker             VerifyResourceSize<true>(ResourceInfo, // PitchInBytes * Rows where Rows = (__GMM_MAX_CUBE_FACE x QPitch) /2 (Stencil height = halved due to interleaving), then aligned to tile boundary
2476*35ffd701SAndroid Build Coastguard Worker                                      ((gmmParams.Type == RESOURCE_CUBE) ?
2477*35ffd701SAndroid Build Coastguard Worker                                       ExpectedPitch * GMM_ULT_ALIGN(ExpectedQPitch * gmmParams.ArraySize * __GMM_MAX_CUBE_FACE, AllocTileSize[0][1]) : //cube
2478*35ffd701SAndroid Build Coastguard Worker                                       ((gmmParams.ArraySize > 1) ?
2479*35ffd701SAndroid Build Coastguard Worker                                        ExpectedPitch * GMM_ULT_ALIGN(ExpectedQPitch * gmmParams.ArraySize, AllocTileSize[0][1]) : //array
2480*35ffd701SAndroid Build Coastguard Worker                                        4 * GMM_KBYTE(4))));
2481*35ffd701SAndroid Build Coastguard Worker 
2482*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
2483*35ffd701SAndroid Build Coastguard Worker         }
2484*35ffd701SAndroid Build Coastguard Worker 
2485*35ffd701SAndroid Build Coastguard Worker         // Allocate 2 tiles in X/Y dimension (non-arrayed) Multi-tiles for 3D
2486*35ffd701SAndroid Build Coastguard Worker         for(uint32_t i = RESOURCE_2D; i <= RESOURCE_3D; i++)
2487*35ffd701SAndroid Build Coastguard Worker         {
2488*35ffd701SAndroid Build Coastguard Worker             gmmParams.Type        = static_cast<GMM_RESOURCE_TYPE>(i);
2489*35ffd701SAndroid Build Coastguard Worker             gmmParams.BaseWidth64 = AllocTileSize[0][0] + 0x1;
2490*35ffd701SAndroid Build Coastguard Worker             gmmParams.BaseHeight  = 2 * AllocTileSize[0][1] + 0x1; //Half-Depth Height or QPitch (lod!=0), aligned to 8 required by HW
2491*35ffd701SAndroid Build Coastguard Worker             gmmParams.Depth       = (gmmParams.Type == RESOURCE_2D) ? 0x1 :
2492*35ffd701SAndroid Build Coastguard Worker                                                                 VAlign + 1;
2493*35ffd701SAndroid Build Coastguard Worker             gmmParams.ArraySize = 1;
2494*35ffd701SAndroid Build Coastguard Worker 
2495*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *ResourceInfo;
2496*35ffd701SAndroid Build Coastguard Worker             ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2497*35ffd701SAndroid Build Coastguard Worker 
2498*35ffd701SAndroid Build Coastguard Worker             VerifyResourceHAlign<true>(ResourceInfo, HAlign);
2499*35ffd701SAndroid Build Coastguard Worker             VerifyResourceVAlign<true>(ResourceInfo, VAlign);
2500*35ffd701SAndroid Build Coastguard Worker             uint32_t ExpectedPitch = AllocTileSize[0][0] * 4;
2501*35ffd701SAndroid Build Coastguard Worker             VerifyResourcePitch<true>(ResourceInfo, ExpectedPitch);
2502*35ffd701SAndroid Build Coastguard Worker             VerifyResourcePitchInTiles<true>(ResourceInfo, 4); // 2 tile wide
2503*35ffd701SAndroid Build Coastguard Worker 
2504*35ffd701SAndroid Build Coastguard Worker             uint32_t TwoDQPitch, ExpectedQPitch = 0;
2505*35ffd701SAndroid Build Coastguard Worker             if(gmmParams.Type == RESOURCE_3D)
2506*35ffd701SAndroid Build Coastguard Worker             {
2507*35ffd701SAndroid Build Coastguard Worker                 TwoDQPitch     = GMM_ULT_ALIGN(gmmParams.BaseHeight, VAlign);
2508*35ffd701SAndroid Build Coastguard Worker                 ExpectedQPitch = gmmParams.Depth * GMM_ULT_ALIGN(TwoDQPitch / 2, VAlign); //Depth slices arranged as 2D-arrayed slices.
2509*35ffd701SAndroid Build Coastguard Worker             }
2510*35ffd701SAndroid Build Coastguard Worker             else
2511*35ffd701SAndroid Build Coastguard Worker             {
2512*35ffd701SAndroid Build Coastguard Worker                 //HiZ for 3D not supported. Driver still allocates like IVB/HSW. (should Qpitch or only overall buffer height be Valigned ?)
2513*35ffd701SAndroid Build Coastguard Worker                 VerifyResourceSize<true>(ResourceInfo,
2514*35ffd701SAndroid Build Coastguard Worker                                          ((gmmParams.Type == RESOURCE_3D) ?
2515*35ffd701SAndroid Build Coastguard Worker                                           ExpectedPitch * GMM_ULT_ALIGN(ExpectedQPitch, AllocTileSize[0][1]) :
2516*35ffd701SAndroid Build Coastguard Worker                                           2 * 2 * GMM_KBYTE(4)));
2517*35ffd701SAndroid Build Coastguard Worker             }
2518*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
2519*35ffd701SAndroid Build Coastguard Worker         }
2520*35ffd701SAndroid Build Coastguard Worker     }
2521*35ffd701SAndroid Build Coastguard Worker }
2522*35ffd701SAndroid Build Coastguard Worker 
TEST_F(CTestGen12Resource,TestStencilCompressedResource)2523*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, TestStencilCompressedResource)
2524*35ffd701SAndroid Build Coastguard Worker {
2525*35ffd701SAndroid Build Coastguard Worker     const uint32_t HAlign = {16};
2526*35ffd701SAndroid Build Coastguard Worker     const uint32_t VAlign = {8};
2527*35ffd701SAndroid Build Coastguard Worker 
2528*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[2] = {128, 32};
2529*35ffd701SAndroid Build Coastguard Worker 
2530*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams = {};
2531*35ffd701SAndroid Build Coastguard Worker     gmmParams.Type                 = RESOURCE_2D;
2532*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory          = 1;
2533*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledY    = 1;
2534*35ffd701SAndroid Build Coastguard Worker     //gmmParams.ArraySize = 4;
2535*35ffd701SAndroid Build Coastguard Worker 
2536*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.SeparateStencil   = 1;
2537*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.RenderCompressed = 1;
2538*35ffd701SAndroid Build Coastguard Worker     // Turn on .MC or .RC flag - mandatory to tell compression-type, for Yf its also used to pad surf
2539*35ffd701SAndroid Build Coastguard Worker     // to 4x1 tile (reqd by HW for perf reasons)
2540*35ffd701SAndroid Build Coastguard Worker     // If unifiedAuxSurf reqd (mandatory for displayable or cross-adapter shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
2541*35ffd701SAndroid Build Coastguard Worker 
2542*35ffd701SAndroid Build Coastguard Worker     //Allocate 1x1 surface
2543*35ffd701SAndroid Build Coastguard Worker     {
2544*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface  = 1; //Turn off for separate aux creation
2545*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS                = 1; //Turn off for separate aux creation
2546*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.IndirectClearColor = 1;
2547*35ffd701SAndroid Build Coastguard Worker 
2548*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(TEST_BPP_8);
2549*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = LEGACY_TILE_Y;
2550*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format       = SetResourceFormat(bpp);
2551*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64  = 0x1;
2552*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight   = 0x1;
2553*35ffd701SAndroid Build Coastguard Worker 
2554*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
2555*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2556*35ffd701SAndroid Build Coastguard Worker 
2557*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign);
2558*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign);
2559*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, 4 * TileSize[0]); // As wide as 4 Tile
2560*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 4);        // 4 Tile wide
2561*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, 4 * GMM_KBYTE(4)); // 4 Tile Big
2562*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0);             // Not Tested
2563*35ffd701SAndroid Build Coastguard Worker 
2564*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
2565*35ffd701SAndroid Build Coastguard Worker         //For Yf test main surface pitch is 4-tileYF aligned
2566*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
2567*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4); // Check on YF only
2568*35ffd701SAndroid Build Coastguard Worker 
2569*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
2570*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
2571*35ffd701SAndroid Build Coastguard Worker 
2572*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
2573*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
2574*35ffd701SAndroid Build Coastguard Worker 
2575*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
2576*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2577*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
2578*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
2579*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
2580*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
2581*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
2582*35ffd701SAndroid Build Coastguard Worker         }
2583*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
2584*35ffd701SAndroid Build Coastguard Worker     }
2585*35ffd701SAndroid Build Coastguard Worker 
2586*35ffd701SAndroid Build Coastguard Worker     // Allocate surface that requires multi tiles in two dimension
2587*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X dimension
2588*35ffd701SAndroid Build Coastguard Worker     {
2589*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
2590*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
2591*35ffd701SAndroid Build Coastguard Worker 
2592*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(TEST_BPP_8);
2593*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = LEGACY_TILE_Y;
2594*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format       = SetResourceFormat(bpp);
2595*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64  = (TileSize[0] / GetBppValue(bpp)) + 1; // 1 pixel larger than 1 tile width
2596*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight   = 0x1;
2597*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth        = 0x1;
2598*35ffd701SAndroid Build Coastguard Worker 
2599*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
2600*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2601*35ffd701SAndroid Build Coastguard Worker 
2602*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign);
2603*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign);
2604*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, TileSize[0] * 4); // As wide as 2 tile, but 4-tile pitch alignment
2605*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 4);        // 2 tile wide, but 4-tile pitch alignment
2606*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(4) * 4); // 2 tile big, but 4-tile pitch alignment
2607*35ffd701SAndroid Build Coastguard Worker 
2608*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // Not tested
2609*35ffd701SAndroid Build Coastguard Worker 
2610*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 64KB
2611*35ffd701SAndroid Build Coastguard Worker         //For Y test main surface pitch is 4-tileY aligned
2612*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
2613*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4);
2614*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
2615*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
2616*35ffd701SAndroid Build Coastguard Worker 
2617*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
2618*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
2619*35ffd701SAndroid Build Coastguard Worker 
2620*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
2621*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2622*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
2623*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
2624*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
2625*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
2626*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
2627*35ffd701SAndroid Build Coastguard Worker         }
2628*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
2629*35ffd701SAndroid Build Coastguard Worker     }
2630*35ffd701SAndroid Build Coastguard Worker 
2631*35ffd701SAndroid Build Coastguard Worker     // Allocate surface that requires multi tiles in two dimension
2632*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X/Y dimension
2633*35ffd701SAndroid Build Coastguard Worker     {
2634*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface  = 1; //Turn off for separate aux creation
2635*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS                = 1; //Turn off for separate aux creation
2636*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.IndirectClearColor = 1;
2637*35ffd701SAndroid Build Coastguard Worker 
2638*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(TEST_BPP_8);
2639*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = LEGACY_TILE_Y;
2640*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format       = SetResourceFormat(bpp);
2641*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64  = (TileSize[0] / GetBppValue(bpp)) + 1; // 1 pixel larger than 1 tile width
2642*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight   = TileSize[1] + 1;                      // 1 row larger than 1 tile height
2643*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth        = 0x1;
2644*35ffd701SAndroid Build Coastguard Worker 
2645*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
2646*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2647*35ffd701SAndroid Build Coastguard Worker 
2648*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign);
2649*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign);
2650*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, TileSize[0] * 4);     // As wide as 2 tile, but 4-tile pitch alignment
2651*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 4);            // 2 tile wide, but 4-tile pitch alignment
2652*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(4) * 4 * 2); // 4 tile wide; and 2-tile high
2653*35ffd701SAndroid Build Coastguard Worker 
2654*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // Not tested
2655*35ffd701SAndroid Build Coastguard Worker                                                       //test main surface base alignment is 64KB
2656*35ffd701SAndroid Build Coastguard Worker                                                       //For Y test main surface pitch is 4-tileY aligned
2657*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
2658*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4);
2659*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
2660*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
2661*35ffd701SAndroid Build Coastguard Worker 
2662*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
2663*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
2664*35ffd701SAndroid Build Coastguard Worker 
2665*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
2666*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2667*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
2668*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
2669*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
2670*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
2671*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
2672*35ffd701SAndroid Build Coastguard Worker         }
2673*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
2674*35ffd701SAndroid Build Coastguard Worker     }
2675*35ffd701SAndroid Build Coastguard Worker }
2676*35ffd701SAndroid Build Coastguard Worker 
2677*35ffd701SAndroid Build Coastguard Worker 
2678*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for 2D TileYf Compressed Resource
TEST_F(CTestGen12Resource,Test2DTileYfAMFSResource)2679*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, Test2DTileYfAMFSResource)
2680*35ffd701SAndroid Build Coastguard Worker {
2681*35ffd701SAndroid Build Coastguard Worker     const uint32_t HAlign[TEST_BPP_MAX] = {64, 64, 32, 32, 16};
2682*35ffd701SAndroid Build Coastguard Worker     const uint32_t VAlign[TEST_BPP_MAX] = {64, 32, 32, 16, 16};
2683*35ffd701SAndroid Build Coastguard Worker 
2684*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[TEST_BPP_MAX][2] = {{64, 64},
2685*35ffd701SAndroid Build Coastguard Worker                                                 {128, 32},
2686*35ffd701SAndroid Build Coastguard Worker                                                 {128, 32},
2687*35ffd701SAndroid Build Coastguard Worker                                                 {256, 16},
2688*35ffd701SAndroid Build Coastguard Worker                                                 {256, 16}};
2689*35ffd701SAndroid Build Coastguard Worker 
2690*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams        = {};
2691*35ffd701SAndroid Build Coastguard Worker     gmmParams.Type                        = RESOURCE_2D;
2692*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory                 = 1;
2693*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledY           = 1;
2694*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledYf          = 1;
2695*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.Texture           = 1;
2696*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.ProceduralTexture = 1;
2697*35ffd701SAndroid Build Coastguard Worker     // If unifiedAuxSurf reqd (mandatory for displayable or cross-adapter shared), turn on .CCS/.MMC and .UnifiedAuxSurface too
2698*35ffd701SAndroid Build Coastguard Worker 
2699*35ffd701SAndroid Build Coastguard Worker     //Allocate 1x1 surface
2700*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
2701*35ffd701SAndroid Build Coastguard Worker     {
2702*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
2703*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
2704*35ffd701SAndroid Build Coastguard Worker                                                    //gmmParams.Flags.Gpu.MMC = 0;              //Turn on to check unifiedaux creation
2705*35ffd701SAndroid Build Coastguard Worker 
2706*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
2707*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = DEFINE_TILE(YF_2D, bpp);
2708*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format       = SetResourceFormat(bpp);
2709*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64  = 0x1;
2710*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight   = 0x1;
2711*35ffd701SAndroid Build Coastguard Worker 
2712*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
2713*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2714*35ffd701SAndroid Build Coastguard Worker 
2715*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign[i]);
2716*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign[i]);
2717*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, TileSize[i][0]); // As wide as 1 Tile
2718*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 1);       // 1 Tile wide
2719*35ffd701SAndroid Build Coastguard Worker         //VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(4));    // 1 Tile Big,  old behaviour consuming bytes for main-surface (paired Texture dimensions) only used to obtain GPUVA for indirect (Auxtable mapped) CCS access by sampler.
2720*35ffd701SAndroid Build Coastguard Worker 	VerifyResourceSize<true>(ResourceInfo, 0);    // New behaviour, optimized SFT size, sampler doesn't access CCS via main.. kernels refer the CCS-via its GPUVA (w/o main).
2721*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0);            // Not Tested
2722*35ffd701SAndroid Build Coastguard Worker 
2723*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 4KB, since AMFS PT isn't compressed
2724*35ffd701SAndroid Build Coastguard Worker         //but uses same linear CCS as compression
2725*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetBaseAlignment());
2726*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
2727*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
2728*35ffd701SAndroid Build Coastguard Worker 
2729*35ffd701SAndroid Build Coastguard Worker 
2730*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
2731*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
2732*35ffd701SAndroid Build Coastguard Worker 
2733*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
2734*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2735*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
2736*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
2737*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
2738*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
2739*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, AuxResourceInfo->GmmGetTileMode());
2740*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
2741*35ffd701SAndroid Build Coastguard Worker         }
2742*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
2743*35ffd701SAndroid Build Coastguard Worker     }
2744*35ffd701SAndroid Build Coastguard Worker 
2745*35ffd701SAndroid Build Coastguard Worker     // Allocate surface that requires multi tiles in two dimension
2746*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X dimension
2747*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
2748*35ffd701SAndroid Build Coastguard Worker     {
2749*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
2750*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
2751*35ffd701SAndroid Build Coastguard Worker 
2752*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
2753*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = DEFINE_TILE(YF_2D, bpp);
2754*35ffd701SAndroid Build Coastguard Worker 
2755*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format      = SetResourceFormat(bpp);
2756*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64 = (TileSize[i][0] / GetBppValue(bpp)) + 1; // 1 pixel larger than 1 tile width
2757*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight  = 0x1;
2758*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth       = 0x1;
2759*35ffd701SAndroid Build Coastguard Worker 
2760*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
2761*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2762*35ffd701SAndroid Build Coastguard Worker 
2763*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign[i]);
2764*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign[i]);
2765*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, TileSize[i][0] * 2); // As wide as 2 tile
2766*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 2);           // 2 tile wide
2767*35ffd701SAndroid Build Coastguard Worker         //VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(4) * 2);    // 2 tile big, old behaviour consuming bytes for main-surface (paired Texture dimensions) only used to obtain GPUVA for indirect (Auxtable mapped) CCS access by sampler.
2768*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, 0); // New behaviour, optimized SFT size, sampler doesn't access CCS via main.. kernels refer the CCS-via its GPUVA (w/o main).
2769*35ffd701SAndroid Build Coastguard Worker 
2770*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // Not tested
2771*35ffd701SAndroid Build Coastguard Worker 
2772*35ffd701SAndroid Build Coastguard Worker         //test main surface base alignment is 4KB
2773*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetBaseAlignment());
2774*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
2775*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
2776*35ffd701SAndroid Build Coastguard Worker 
2777*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
2778*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
2779*35ffd701SAndroid Build Coastguard Worker 
2780*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
2781*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2782*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
2783*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
2784*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
2785*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
2786*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, AuxResourceInfo->GmmGetTileMode());
2787*35ffd701SAndroid Build Coastguard Worker 
2788*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
2789*35ffd701SAndroid Build Coastguard Worker         }
2790*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
2791*35ffd701SAndroid Build Coastguard Worker     }
2792*35ffd701SAndroid Build Coastguard Worker 
2793*35ffd701SAndroid Build Coastguard Worker     // Allocate surface that requires multi tiles in two dimension
2794*35ffd701SAndroid Build Coastguard Worker     // Allocate 2 tiles in X/Y dimension
2795*35ffd701SAndroid Build Coastguard Worker     for(uint32_t i = 0; i < TEST_BPP_MAX; i++)
2796*35ffd701SAndroid Build Coastguard Worker     {
2797*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.UnifiedAuxSurface = 1; //Turn off for separate aux creation
2798*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.CCS               = 1; //Turn off for separate aux creation
2799*35ffd701SAndroid Build Coastguard Worker 
2800*35ffd701SAndroid Build Coastguard Worker         TEST_BPP      bpp      = static_cast<TEST_BPP>(i);
2801*35ffd701SAndroid Build Coastguard Worker         GMM_TILE_MODE TileMode = DEFINE_TILE(YF_2D, bpp);
2802*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format       = SetResourceFormat(bpp);
2803*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64  = (TileSize[i][0] / GetBppValue(bpp)) + 1; // 1 pixel larger than 1 tile width
2804*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight   = TileSize[i][1] + 1;                      // 1 row larger than 1 tile height
2805*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth        = 0x1;
2806*35ffd701SAndroid Build Coastguard Worker 
2807*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
2808*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2809*35ffd701SAndroid Build Coastguard Worker 
2810*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<true>(ResourceInfo, HAlign[i]);
2811*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<true>(ResourceInfo, VAlign[i]);
2812*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, TileSize[i][0] * 2);  // As wide as 2 tile
2813*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitchInTiles<true>(ResourceInfo, 2);            // 2 tile wide
2814*35ffd701SAndroid Build Coastguard Worker         //VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(4) * 2 * 2); // 2 tile wide; and 2-tile high, old behaviour consuming bytes for main-surface (paired Texture dimensions) only used to obtain GPUVA for indirect (Auxtable mapped) CCS access by sampler.
2815*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, 0); // New behaviour, optimized SFT size, sampler doesn't access CCS via main.. kernels refer the CCS-via its GPUVA (w/o main).
2816*35ffd701SAndroid Build Coastguard Worker 
2817*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // Not tested
2818*35ffd701SAndroid Build Coastguard Worker                                                       //test main surface base alignment is 4KB
2819*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetBaseAlignment());
2820*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
2821*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(GMM_KBYTE(4), ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
2822*35ffd701SAndroid Build Coastguard Worker 
2823*35ffd701SAndroid Build Coastguard Worker         { //separate Aux
2824*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
2825*35ffd701SAndroid Build Coastguard Worker 
2826*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *AuxResourceInfo;
2827*35ffd701SAndroid Build Coastguard Worker             AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2828*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxHAlign(), AuxResourceInfo->GetHAlign());
2829*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetAuxVAlign(), AuxResourceInfo->GetVAlign());
2830*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetUnifiedAuxPitch(), AuxResourceInfo->GetRenderPitch());
2831*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
2832*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(0, AuxResourceInfo->GmmGetTileMode());
2833*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
2834*35ffd701SAndroid Build Coastguard Worker         }
2835*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
2836*35ffd701SAndroid Build Coastguard Worker     }
2837*35ffd701SAndroid Build Coastguard Worker }
2838*35ffd701SAndroid Build Coastguard Worker 
2839*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for MSAA Resource - TODO adddepth MSAA, MCS surf param verificaton, compression case
TEST_F(CTestGen12Resource,TestColorMSAA)2840*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen12Resource, TestColorMSAA)
2841*35ffd701SAndroid Build Coastguard Worker {
2842*35ffd701SAndroid Build Coastguard Worker     //Tile dimensions in Bytes
2843*35ffd701SAndroid Build Coastguard Worker     const uint32_t MCSTileSize[1][2] = {128, 32}; //MCS is TileY
2844*35ffd701SAndroid Build Coastguard Worker 
2845*35ffd701SAndroid Build Coastguard Worker     const uint32_t TestDimensions[4][2] = {
2846*35ffd701SAndroid Build Coastguard Worker     //Input dimensions in #Tiles
2847*35ffd701SAndroid Build Coastguard Worker     {15, 20}, //16 Tiles x 20 <Max Width: Depth MSS crosses Pitch limit beyond this>
2848*35ffd701SAndroid Build Coastguard Worker     {0, 0},   //1x1x1
2849*35ffd701SAndroid Build Coastguard Worker     {1, 0},   //2 Tilesx1
2850*35ffd701SAndroid Build Coastguard Worker     {1, 1},   //2 Tiles x 2
2851*35ffd701SAndroid Build Coastguard Worker     };
2852*35ffd701SAndroid Build Coastguard Worker 
2853*35ffd701SAndroid Build Coastguard Worker     uint32_t TestArraySize[2] = {1, 5};
2854*35ffd701SAndroid Build Coastguard Worker     uint32_t MinPitch         = 32;
2855*35ffd701SAndroid Build Coastguard Worker 
2856*35ffd701SAndroid Build Coastguard Worker     uint32_t HAlign, VAlign, TileDimX, TileDimY, MCSHAlign, MCSVAlign, TileSize;
2857*35ffd701SAndroid Build Coastguard Worker     uint32_t ExpectedMCSBpp;
2858*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
2859*35ffd701SAndroid Build Coastguard Worker     auto Size = BuildInputIterator(List, 4, 2, false);      // Size of arrays TestDimensions, TestArraySize
2860*35ffd701SAndroid Build Coastguard Worker 
2861*35ffd701SAndroid Build Coastguard Worker     for(auto element : List)
2862*35ffd701SAndroid Build Coastguard Worker     {
2863*35ffd701SAndroid Build Coastguard Worker         GMM_RESCREATE_PARAMS gmmParams = {};
2864*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Info           = {0};
2865*35ffd701SAndroid Build Coastguard Worker 
2866*35ffd701SAndroid Build Coastguard Worker         TEST_TILE_TYPE     Tiling     = (TEST_TILE_TYPE)std::get<0>(element);
2867*35ffd701SAndroid Build Coastguard Worker         TEST_BPP           Bpp        = (TEST_BPP)std::get<1>(element);
2868*35ffd701SAndroid Build Coastguard Worker         TEST_RESOURCE_TYPE ResType    = (TEST_RESOURCE_TYPE)std::get<2>(element);
2869*35ffd701SAndroid Build Coastguard Worker         bool               IsRT       = std::get<3>(element); // True for RT, False for Depth
2870*35ffd701SAndroid Build Coastguard Worker         int                TestDimIdx = std::get<4>(element); //index into TestDimensions array
2871*35ffd701SAndroid Build Coastguard Worker         int                ArrayIdx   = std::get<5>(element); //index into TestArraySize
2872*35ffd701SAndroid Build Coastguard Worker         TileSize                      = (Tiling == TEST_TILEYS) ? GMM_KBYTE(64) : GMM_KBYTE(4);
2873*35ffd701SAndroid Build Coastguard Worker 
2874*35ffd701SAndroid Build Coastguard Worker         //Discard un-supported Tiling/Res_type/bpp for this test
2875*35ffd701SAndroid Build Coastguard Worker         if(ResType != TEST_RESOURCE_2D ||                            //No 1D/3D/Cube. Supported 2D mip-maps/array
2876*35ffd701SAndroid Build Coastguard Worker            (!IsRT && (Tiling == TEST_TILEX ||                        // doesn't support TileX for Depth
2877*35ffd701SAndroid Build Coastguard Worker                       !(Bpp == TEST_BPP_16 || Bpp == TEST_BPP_32)))) //depth supported on 16bit, 32bit formats only
2878*35ffd701SAndroid Build Coastguard Worker             continue;
2879*35ffd701SAndroid Build Coastguard Worker 
2880*35ffd701SAndroid Build Coastguard Worker         if(!IsRT)
2881*35ffd701SAndroid Build Coastguard Worker             continue; //comment depth msaa for now (requires change in h/v align)
2882*35ffd701SAndroid Build Coastguard Worker 
2883*35ffd701SAndroid Build Coastguard Worker         SetTileFlag(gmmParams, Tiling);
2884*35ffd701SAndroid Build Coastguard Worker         SetResType(gmmParams, ResType);
2885*35ffd701SAndroid Build Coastguard Worker         SetResGpuFlags(gmmParams, IsRT);
2886*35ffd701SAndroid Build Coastguard Worker         SetResArraySize(gmmParams, TestArraySize[ArrayIdx]);
2887*35ffd701SAndroid Build Coastguard Worker 
2888*35ffd701SAndroid Build Coastguard Worker         gmmParams.NoGfxMemory = 1;
2889*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format      = SetResourceFormat(Bpp);
2890*35ffd701SAndroid Build Coastguard Worker         for(uint32_t k = MSAA_2x; k <= MSAA_16x; k++)
2891*35ffd701SAndroid Build Coastguard Worker         {
2892*35ffd701SAndroid Build Coastguard Worker             GetAlignmentAndTileDimensionsForMSAA(Bpp, IsRT, Tiling, (TEST_MSAA)k,
2893*35ffd701SAndroid Build Coastguard Worker                                                  TileDimX, TileDimY, HAlign, VAlign,
2894*35ffd701SAndroid Build Coastguard Worker                                                  ExpectedMCSBpp, MCSHAlign, MCSVAlign);
2895*35ffd701SAndroid Build Coastguard Worker 
2896*35ffd701SAndroid Build Coastguard Worker             //gmmParams.BaseWidth64 = TestDimensions[TestDimIdx][0] * TileDimX + 0x1;
2897*35ffd701SAndroid Build Coastguard Worker             //gmmParams.BaseHeight = TestDimensions[TestDimIdx][1] * TileDimY + 0x1;
2898*35ffd701SAndroid Build Coastguard Worker             gmmParams.BaseWidth64     = 4;
2899*35ffd701SAndroid Build Coastguard Worker             gmmParams.BaseHeight      = 4;
2900*35ffd701SAndroid Build Coastguard Worker             gmmParams.Depth           = 0x1;
2901*35ffd701SAndroid Build Coastguard Worker             gmmParams.MSAA.NumSamples = static_cast<uint32_t>(pow((double)2, k));
2902*35ffd701SAndroid Build Coastguard Worker             gmmParams.Flags.Gpu.MCS   = 0;
2903*35ffd701SAndroid Build Coastguard Worker 
2904*35ffd701SAndroid Build Coastguard Worker             //MSS surface
2905*35ffd701SAndroid Build Coastguard Worker             GMM_RESOURCE_INFO *MSSResourceInfo;
2906*35ffd701SAndroid Build Coastguard Worker             MSSResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
2907*35ffd701SAndroid Build Coastguard Worker 
2908*35ffd701SAndroid Build Coastguard Worker             if(MSSResourceInfo)
2909*35ffd701SAndroid Build Coastguard Worker             {
2910*35ffd701SAndroid Build Coastguard Worker                 VerifyResourceHAlign<true>(MSSResourceInfo, HAlign);
2911*35ffd701SAndroid Build Coastguard Worker                 VerifyResourceVAlign<true>(MSSResourceInfo, VAlign);
2912*35ffd701SAndroid Build Coastguard Worker                 if(IsRT) //Arrayed MSS
2913*35ffd701SAndroid Build Coastguard Worker                 {
2914*35ffd701SAndroid Build Coastguard Worker                     uint32_t ExpectedPitch = 0, ExpectedQPitch = 0;
2915*35ffd701SAndroid Build Coastguard Worker                     ExpectedPitch = GMM_ULT_ALIGN(GMM_ULT_ALIGN(gmmParams.BaseWidth64, HAlign) * (int)pow(2.0, Bpp), TileDimX); // Aligned width * bpp, aligned to TileWidth
2916*35ffd701SAndroid Build Coastguard Worker                     ExpectedPitch = GFX_MAX(ExpectedPitch, MinPitch);
2917*35ffd701SAndroid Build Coastguard Worker                     VerifyResourcePitch<true>(MSSResourceInfo, ExpectedPitch);
2918*35ffd701SAndroid Build Coastguard Worker                     if(Tiling != TEST_LINEAR)
2919*35ffd701SAndroid Build Coastguard Worker                         VerifyResourcePitchInTiles<true>(MSSResourceInfo, ExpectedPitch / TileDimX);
2920*35ffd701SAndroid Build Coastguard Worker 
2921*35ffd701SAndroid Build Coastguard Worker                     ExpectedQPitch = GMM_ULT_ALIGN(gmmParams.BaseHeight, VAlign);
2922*35ffd701SAndroid Build Coastguard Worker                     if(gmmParams.ArraySize > 1) //Gen9: Qpitch is distance between array slices (not sample slices)
2923*35ffd701SAndroid Build Coastguard Worker                     {
2924*35ffd701SAndroid Build Coastguard Worker                         VerifyResourceQPitch<true>(MSSResourceInfo, ExpectedQPitch);
2925*35ffd701SAndroid Build Coastguard Worker                     }
2926*35ffd701SAndroid Build Coastguard Worker 
2927*35ffd701SAndroid Build Coastguard Worker                     uint32_t ExpectedHeight = GMM_ULT_ALIGN(ExpectedQPitch * gmmParams.MSAA.NumSamples * gmmParams.ArraySize, TileDimY); //Align Height =ExpectedPitch * NumSamples * ExpectedQPitch, to Tile-Height
2928*35ffd701SAndroid Build Coastguard Worker                     VerifyResourceSize<true>(MSSResourceInfo, GMM_ULT_ALIGN(ExpectedPitch * ExpectedHeight, TileSize));
2929*35ffd701SAndroid Build Coastguard Worker                 }
2930*35ffd701SAndroid Build Coastguard Worker             }
2931*35ffd701SAndroid Build Coastguard Worker 
2932*35ffd701SAndroid Build Coastguard Worker             pGmmULTClientContext->DestroyResInfoObject(MSSResourceInfo);
2933*35ffd701SAndroid Build Coastguard Worker         } //NumSamples = k
2934*35ffd701SAndroid Build Coastguard Worker     }     //Iterate through all Input types
2935*35ffd701SAndroid Build Coastguard Worker 
2936*35ffd701SAndroid Build Coastguard Worker     //Mip-mapped, MSAA case:
2937*35ffd701SAndroid Build Coastguard Worker }
2938