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