xref: /aosp_15_r20/external/gmmlib/Source/GmmLib/ULT/GmmGen11ResourceULT.cpp (revision 35ffd701415c9e32e53136d61a677a8d0a8fc4a5)
1*35ffd701SAndroid Build Coastguard Worker /*==============================================================================
2*35ffd701SAndroid Build Coastguard Worker Copyright(c) 2016 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 "GmmGen11ResourceULT.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    CTestGen9Resource::SetUpTestCase()
33*35ffd701SAndroid Build Coastguard Worker ///
34*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
SetUpTestCase()35*35ffd701SAndroid Build Coastguard Worker void CTestGen11Resource::SetUpTestCase()
36*35ffd701SAndroid Build Coastguard Worker {
37*35ffd701SAndroid Build Coastguard Worker     printf("%s\n", __FUNCTION__);
38*35ffd701SAndroid Build Coastguard Worker     GfxPlatform.eProductFamily    = IGFX_LAKEFIELD;
39*35ffd701SAndroid Build Coastguard Worker     GfxPlatform.eRenderCoreFamily = IGFX_GEN11_CORE;
40*35ffd701SAndroid Build Coastguard Worker 
41*35ffd701SAndroid Build Coastguard Worker     CommonULT::SetUpTestCase();
42*35ffd701SAndroid Build Coastguard Worker }
43*35ffd701SAndroid Build Coastguard Worker 
44*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
45*35ffd701SAndroid Build Coastguard Worker /// cleans up once all the tests finish execution.  It also calls TearDownTestCase
46*35ffd701SAndroid Build Coastguard Worker /// from CommonULT to destroy global context and others.
47*35ffd701SAndroid Build Coastguard Worker ///
48*35ffd701SAndroid Build Coastguard Worker /// @see    CTestGen10Resource::TearDownTestCase()
49*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
TearDownTestCase()50*35ffd701SAndroid Build Coastguard Worker void CTestGen11Resource::TearDownTestCase()
51*35ffd701SAndroid Build Coastguard Worker {
52*35ffd701SAndroid Build Coastguard Worker     printf("%s\n", __FUNCTION__);
53*35ffd701SAndroid Build Coastguard Worker 
54*35ffd701SAndroid Build Coastguard Worker     CommonULT::TearDownTestCase();
55*35ffd701SAndroid Build Coastguard Worker }
56*35ffd701SAndroid Build Coastguard Worker 
57*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for 2D TileYs Resource
TEST_F(CTestGen11Resource,TestPlanar2D_NV12_MediaCompressed)58*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen11Resource, TestPlanar2D_NV12_MediaCompressed)
59*35ffd701SAndroid Build Coastguard Worker {
60*35ffd701SAndroid Build Coastguard Worker     /* Test planar surface with hybrid UV planes where UV plane is half the size
61*35ffd701SAndroid Build Coastguard Worker     of Y and U/V data is packed together */
62*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
63*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
64*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
65*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
66*35ffd701SAndroid Build Coastguard Worker     // [UV-Packing]
67*35ffd701SAndroid Build Coastguard Worker     // YccsYccsYccs
68*35ffd701SAndroid Build Coastguard Worker     // YccsYccsYccs
69*35ffd701SAndroid Build Coastguard Worker     // UVccsUVccsUVccs
70*35ffd701SAndroid Build Coastguard Worker     // UVccsUVccsUVccs
71*35ffd701SAndroid Build Coastguard Worker 
72*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[2] = {128, 32}; // TileY
73*35ffd701SAndroid Build Coastguard Worker 
74*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams        = {};
75*35ffd701SAndroid Build Coastguard Worker     gmmParams.Type                        = RESOURCE_2D;
76*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory                 = 1;
77*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.MMC               = 1;
78*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.Texture           = 1;
79*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.UnifiedAuxSurface = 1;
80*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledY           = 1;
81*35ffd701SAndroid Build Coastguard Worker     gmmParams.BaseWidth64                 = 0x2048; //8264
82*35ffd701SAndroid Build Coastguard Worker     gmmParams.BaseHeight                  = 0x274;  // 628
83*35ffd701SAndroid Build Coastguard Worker     gmmParams.Depth                       = 0x1;
84*35ffd701SAndroid Build Coastguard Worker     SetTileFlag(gmmParams, static_cast<TEST_TILE_TYPE>(TEST_TILEY));
85*35ffd701SAndroid Build Coastguard Worker     gmmParams.Format = GMM_FORMAT_NV12;
86*35ffd701SAndroid Build Coastguard Worker 
87*35ffd701SAndroid Build Coastguard Worker     GMM_RESOURCE_INFO *ResourceInfo;
88*35ffd701SAndroid Build Coastguard Worker     //__debugbreak();
89*35ffd701SAndroid Build Coastguard Worker     ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
90*35ffd701SAndroid Build Coastguard Worker 
91*35ffd701SAndroid Build Coastguard Worker     uint32_t Pitch = GMM_ULT_ALIGN(gmmParams.BaseWidth64, TileSize[0]);
92*35ffd701SAndroid Build Coastguard Worker 
93*35ffd701SAndroid Build Coastguard Worker     uint32_t Height = GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[1]) +
94*35ffd701SAndroid Build Coastguard Worker                    GMM_ULT_ALIGN(gmmParams.BaseHeight / 2, TileSize[1]);
95*35ffd701SAndroid Build Coastguard Worker     uint32_t Size = GMM_ULT_ALIGN(Pitch * Height, GMM_KBYTE(4));
96*35ffd701SAndroid Build Coastguard Worker 
97*35ffd701SAndroid Build Coastguard Worker     VerifyResourcePitch<true>(ResourceInfo, Pitch);
98*35ffd701SAndroid Build Coastguard Worker     VerifyResourcePitchInTiles<true>(ResourceInfo, Pitch / TileSize[0]);
99*35ffd701SAndroid Build Coastguard Worker 
100*35ffd701SAndroid Build Coastguard Worker     VerifyResourceSize<true>(ResourceInfo, Size);
101*35ffd701SAndroid Build Coastguard Worker     VerifyResourceHAlign<false>(ResourceInfo, 0); // Same as any other 2D surface -- tested elsewhere
102*35ffd701SAndroid Build Coastguard Worker     VerifyResourceVAlign<false>(ResourceInfo, 0); // Same as any other 2D surface -- tested elsewhere
103*35ffd701SAndroid Build Coastguard Worker     VerifyResourceQPitch<false>(ResourceInfo, 0); // N/A for planar
104*35ffd701SAndroid Build Coastguard Worker 
105*35ffd701SAndroid Build Coastguard Worker     // Y plane should be at 0,0
106*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_Y));
107*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(0, ResourceInfo->GetPlanarYOffset(GMM_PLANE_Y));
108*35ffd701SAndroid Build Coastguard Worker 
109*35ffd701SAndroid Build Coastguard Worker     // U/V plane should be at end of Y plane
110*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_U));
111*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[1]), ResourceInfo->GetPlanarYOffset(GMM_PLANE_U));
112*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_V));
113*35ffd701SAndroid Build Coastguard Worker 
114*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[1]), ResourceInfo->GetPlanarYOffset(GMM_PLANE_U));
115*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[1]), ResourceInfo->GetPlanarYOffset(GMM_PLANE_V));
116*35ffd701SAndroid Build Coastguard Worker 
117*35ffd701SAndroid Build Coastguard Worker     // Y Plane CCS should be at the end of NV12 surface.
118*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(Size, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS));
119*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(Size, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_Y_CCS));
120*35ffd701SAndroid Build Coastguard Worker 
121*35ffd701SAndroid Build Coastguard Worker     // UV Plane CCS offset
122*35ffd701SAndroid Build Coastguard Worker     uint32_t YCcsSize = GMM_ULT_ALIGN(((GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[1]) * Pitch) / 1024), PAGE_SIZE);
123*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(Size + YCcsSize, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_UV_CCS));
124*35ffd701SAndroid Build Coastguard Worker 
125*35ffd701SAndroid Build Coastguard Worker     uint32_t UVCcsSize        = GMM_ULT_ALIGN((Height - GFX_ALIGN(gmmParams.BaseHeight, TileSize[1])) * Pitch / 1024, PAGE_SIZE);
126*35ffd701SAndroid Build Coastguard Worker     uint32_t MediaStateOffset = Size + YCcsSize + UVCcsSize;
127*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(MediaStateOffset, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_COMP_STATE));
128*35ffd701SAndroid Build Coastguard Worker 
129*35ffd701SAndroid Build Coastguard Worker     pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
130*35ffd701SAndroid Build Coastguard Worker }
131*35ffd701SAndroid Build Coastguard Worker 
TEST_F(CTestGen11Resource,TestPlanar2D_NV12_MediaCompressedArray)132*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen11Resource, TestPlanar2D_NV12_MediaCompressedArray)
133*35ffd701SAndroid Build Coastguard Worker {
134*35ffd701SAndroid Build Coastguard Worker     /* Test planar surface with hybrid UV planes where UV plane is half the size
135*35ffd701SAndroid Build Coastguard Worker     of Y and U/V data is packed together */
136*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
137*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
138*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
139*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
140*35ffd701SAndroid Build Coastguard Worker     // [UV-Packing]
141*35ffd701SAndroid Build Coastguard Worker     // YccsYccsYccs
142*35ffd701SAndroid Build Coastguard Worker     // YccsYccsYccs
143*35ffd701SAndroid Build Coastguard Worker     // UVccsUVccsUVccs
144*35ffd701SAndroid Build Coastguard Worker     // UVccsUVccsUVccs
145*35ffd701SAndroid Build Coastguard Worker     // ...
146*35ffd701SAndroid Build Coastguard Worker 
147*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[2] = {128, 32}; // TileY
148*35ffd701SAndroid Build Coastguard Worker 
149*35ffd701SAndroid Build Coastguard Worker     GMM_RESCREATE_PARAMS gmmParams        = {};
150*35ffd701SAndroid Build Coastguard Worker     gmmParams.Type                        = RESOURCE_2D;
151*35ffd701SAndroid Build Coastguard Worker     gmmParams.NoGfxMemory                 = 1;
152*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.MMC               = 1;
153*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.Texture           = 1;
154*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Gpu.UnifiedAuxSurface = 1;
155*35ffd701SAndroid Build Coastguard Worker     gmmParams.Flags.Info.TiledY           = 1;
156*35ffd701SAndroid Build Coastguard Worker     gmmParams.BaseWidth64                 = 0x2048;
157*35ffd701SAndroid Build Coastguard Worker     gmmParams.BaseHeight                  = 0x274;
158*35ffd701SAndroid Build Coastguard Worker     gmmParams.Depth                       = 0x1;
159*35ffd701SAndroid Build Coastguard Worker     gmmParams.ArraySize                   = 20;
160*35ffd701SAndroid Build Coastguard Worker     SetTileFlag(gmmParams, static_cast<TEST_TILE_TYPE>(TEST_TILEY));
161*35ffd701SAndroid Build Coastguard Worker     gmmParams.Format = GMM_FORMAT_NV12;
162*35ffd701SAndroid Build Coastguard Worker 
163*35ffd701SAndroid Build Coastguard Worker     GMM_RESOURCE_INFO *ResourceInfo;
164*35ffd701SAndroid Build Coastguard Worker     //__debugbreak();
165*35ffd701SAndroid Build Coastguard Worker     ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
166*35ffd701SAndroid Build Coastguard Worker 
167*35ffd701SAndroid Build Coastguard Worker     uint32_t Pitch = GMM_ULT_ALIGN(gmmParams.BaseWidth64, TileSize[0]);
168*35ffd701SAndroid Build Coastguard Worker 
169*35ffd701SAndroid Build Coastguard Worker     uint32_t Height = GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[1]) +
170*35ffd701SAndroid Build Coastguard Worker                    GMM_ULT_ALIGN(gmmParams.BaseHeight / 2, TileSize[1]);
171*35ffd701SAndroid Build Coastguard Worker     uint32_t Size = GMM_ULT_ALIGN(Pitch * Height, GMM_KBYTE(4)) * gmmParams.ArraySize;
172*35ffd701SAndroid Build Coastguard Worker 
173*35ffd701SAndroid Build Coastguard Worker     VerifyResourcePitch<true>(ResourceInfo, Pitch);
174*35ffd701SAndroid Build Coastguard Worker     VerifyResourcePitchInTiles<true>(ResourceInfo, Pitch / TileSize[0]);
175*35ffd701SAndroid Build Coastguard Worker 
176*35ffd701SAndroid Build Coastguard Worker     VerifyResourceSize<true>(ResourceInfo, Size);
177*35ffd701SAndroid Build Coastguard Worker     VerifyResourceHAlign<false>(ResourceInfo, 0); // Same as any other 2D surface -- tested elsewhere
178*35ffd701SAndroid Build Coastguard Worker     VerifyResourceVAlign<false>(ResourceInfo, 0); // Same as any other 2D surface -- tested elsewhere
179*35ffd701SAndroid Build Coastguard Worker     VerifyResourceQPitch<false>(ResourceInfo, 0); // N/A for planar
180*35ffd701SAndroid Build Coastguard Worker 
181*35ffd701SAndroid Build Coastguard Worker     // Y plane should be at 0,0
182*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_Y));
183*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(0, ResourceInfo->GetPlanarYOffset(GMM_PLANE_Y));
184*35ffd701SAndroid Build Coastguard Worker 
185*35ffd701SAndroid Build Coastguard Worker     // U/V plane should be at end of Y plane
186*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_U));
187*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[1]), ResourceInfo->GetPlanarYOffset(GMM_PLANE_U));
188*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_V));
189*35ffd701SAndroid Build Coastguard Worker 
190*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[1]), ResourceInfo->GetPlanarYOffset(GMM_PLANE_U));
191*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[1]), ResourceInfo->GetPlanarYOffset(GMM_PLANE_V));
192*35ffd701SAndroid Build Coastguard Worker 
193*35ffd701SAndroid Build Coastguard Worker     // Y Plane CCS should be at the end of NV12 surface.
194*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(Size, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS));
195*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(Size, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_Y_CCS));
196*35ffd701SAndroid Build Coastguard Worker 
197*35ffd701SAndroid Build Coastguard Worker     // UV Plane CCS offset
198*35ffd701SAndroid Build Coastguard Worker     uint32_t YCcsSize = GMM_ULT_ALIGN(((GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[1]) * Pitch) / 1024), PAGE_SIZE);
199*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(Size + YCcsSize, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_UV_CCS));
200*35ffd701SAndroid Build Coastguard Worker 
201*35ffd701SAndroid Build Coastguard Worker     uint32_t UVCcsSize        = GMM_ULT_ALIGN((Height - GFX_ALIGN(gmmParams.BaseHeight, TileSize[1])) * Pitch / 1024, PAGE_SIZE);
202*35ffd701SAndroid Build Coastguard Worker     uint32_t MediaStateOffset = Size + YCcsSize + UVCcsSize;
203*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(MediaStateOffset, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_COMP_STATE));
204*35ffd701SAndroid Build Coastguard Worker 
205*35ffd701SAndroid Build Coastguard Worker     uint32_t AuxSize = YCcsSize + UVCcsSize + PAGE_SIZE;
206*35ffd701SAndroid Build Coastguard Worker     EXPECT_EQ(AuxSize * gmmParams.ArraySize, ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS));
207*35ffd701SAndroid Build Coastguard Worker 
208*35ffd701SAndroid Build Coastguard Worker     for(int i = 0; i < gmmParams.ArraySize; i++)
209*35ffd701SAndroid Build Coastguard Worker     {
210*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(Size + AuxSize * i, ResourceInfo->GetPlanarAuxOffset(i, GMM_AUX_Y_CCS));
211*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(Size + (AuxSize * i) + YCcsSize, ResourceInfo->GetPlanarAuxOffset(i, GMM_AUX_UV_CCS));
212*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(Size + (AuxSize * i) + (YCcsSize + UVCcsSize), ResourceInfo->GetPlanarAuxOffset(i, GMM_AUX_COMP_STATE));
213*35ffd701SAndroid Build Coastguard Worker     }
214*35ffd701SAndroid Build Coastguard Worker 
215*35ffd701SAndroid Build Coastguard Worker     pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
216*35ffd701SAndroid Build Coastguard Worker }
217*35ffd701SAndroid Build Coastguard Worker 
218*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for 2D TileYf Resource
TEST_F(CTestGen11Resource,Test2DTileYfResource)219*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen11Resource, Test2DTileYfResource)
220*35ffd701SAndroid Build Coastguard Worker {
221*35ffd701SAndroid Build Coastguard Worker     printf("%s\n", __FUNCTION__);
222*35ffd701SAndroid Build Coastguard Worker }
223*35ffd701SAndroid Build Coastguard Worker 
224*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for Plannar 2D Resource - RGBP
TEST_F(CTestGen11Resource,TestPlanar2D_RGBP)225*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen11Resource, TestPlanar2D_RGBP)
226*35ffd701SAndroid Build Coastguard Worker {
227*35ffd701SAndroid Build Coastguard Worker     /* Test planar surfaces where all planes are full-sized */
228*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
229*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
230*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
231*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
232*35ffd701SAndroid Build Coastguard Worker     // UUUUUUUU
233*35ffd701SAndroid Build Coastguard Worker     // UUUUUUUU
234*35ffd701SAndroid Build Coastguard Worker     // UUUUUUUU
235*35ffd701SAndroid Build Coastguard Worker     // UUUUUUUU
236*35ffd701SAndroid Build Coastguard Worker     // VVVVVVVV
237*35ffd701SAndroid Build Coastguard Worker     // VVVVVVVV
238*35ffd701SAndroid Build Coastguard Worker     // VVVVVVVV
239*35ffd701SAndroid Build Coastguard Worker     // VVVVVVVV
240*35ffd701SAndroid Build Coastguard Worker     const TEST_TILE_TYPE TileTypes[]       = {TEST_LINEAR, TEST_TILEX, TEST_TILEY};
241*35ffd701SAndroid Build Coastguard Worker     const uint32_t          PlaneRowAlignment = 16;
242*35ffd701SAndroid Build Coastguard Worker 
243*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[3][2] = {{1, 1},     //Linear
244*35ffd701SAndroid Build Coastguard Worker                                   {512, 8},   // TileX
245*35ffd701SAndroid Build Coastguard Worker                                   {128, 32}}; // TileY
246*35ffd701SAndroid Build Coastguard Worker     for(uint32_t TileIndex = 0; TileIndex < sizeof(TileTypes) / sizeof(TileTypes[0]); TileIndex++)
247*35ffd701SAndroid Build Coastguard Worker     {
248*35ffd701SAndroid Build Coastguard Worker         TEST_TILE_TYPE Tile = TileTypes[TileIndex];
249*35ffd701SAndroid Build Coastguard Worker 
250*35ffd701SAndroid Build Coastguard Worker         GMM_RESCREATE_PARAMS gmmParams = {};
251*35ffd701SAndroid Build Coastguard Worker         gmmParams.Type                 = RESOURCE_2D;
252*35ffd701SAndroid Build Coastguard Worker         gmmParams.NoGfxMemory          = 1;
253*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.Texture    = 1;
254*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64          = 0x101;
255*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight           = 0x101;
256*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth                = 0x1;
257*35ffd701SAndroid Build Coastguard Worker         SetTileFlag(gmmParams, static_cast<TEST_TILE_TYPE>(Tile));
258*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format = GMM_FORMAT_RGBP;
259*35ffd701SAndroid Build Coastguard Worker 
260*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
261*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
262*35ffd701SAndroid Build Coastguard Worker 
263*35ffd701SAndroid Build Coastguard Worker         uint32_t Pitch, Height;
264*35ffd701SAndroid Build Coastguard Worker         if(Tile != TEST_LINEAR)
265*35ffd701SAndroid Build Coastguard Worker         {
266*35ffd701SAndroid Build Coastguard Worker             Pitch = GMM_ULT_ALIGN(gmmParams.BaseWidth64, TileSize[TileIndex][0]);
267*35ffd701SAndroid Build Coastguard Worker             //Since Tile alignment factor is greater than GMM_IMCx_PLANE_ROW_ALIGNMENT=16
268*35ffd701SAndroid Build Coastguard Worker             Height = GMM_ULT_ALIGN(gmmParams.BaseHeight, PlaneRowAlignment);
269*35ffd701SAndroid Build Coastguard Worker             Height = GMM_ULT_ALIGN(Height, TileSize[TileIndex][1]) * 3 /*Y, U, V*/;
270*35ffd701SAndroid Build Coastguard Worker         }
271*35ffd701SAndroid Build Coastguard Worker         else
272*35ffd701SAndroid Build Coastguard Worker         {
273*35ffd701SAndroid Build Coastguard Worker             Pitch  = GMM_ULT_ALIGN(gmmParams.BaseWidth64, GMM_BYTES(64));
274*35ffd701SAndroid Build Coastguard Worker             Height = gmmParams.BaseHeight * 3 /*Y, U, V*/;
275*35ffd701SAndroid Build Coastguard Worker         }
276*35ffd701SAndroid Build Coastguard Worker 
277*35ffd701SAndroid Build Coastguard Worker         uint32_t Size = GMM_ULT_ALIGN(Pitch * Height, GMM_KBYTE(4));
278*35ffd701SAndroid Build Coastguard Worker 
279*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, Pitch);
280*35ffd701SAndroid Build Coastguard Worker         if(Tile != TEST_LINEAR)
281*35ffd701SAndroid Build Coastguard Worker         {
282*35ffd701SAndroid Build Coastguard Worker             VerifyResourcePitchInTiles<true>(ResourceInfo, Pitch / TileSize[TileIndex][0]);
283*35ffd701SAndroid Build Coastguard Worker         }
284*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, Size);
285*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<false>(ResourceInfo, 0); // Same as any other 2D surface -- tested elsewhere
286*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<false>(ResourceInfo, 0); // Same as any other 2D surface -- tested elsewhere
287*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // N/A for planar
288*35ffd701SAndroid Build Coastguard Worker 
289*35ffd701SAndroid Build Coastguard Worker         // Y plane should be at 0,0
290*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_Y));
291*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarYOffset(GMM_PLANE_Y));
292*35ffd701SAndroid Build Coastguard Worker 
293*35ffd701SAndroid Build Coastguard Worker         // U plane should be at end of Y plane
294*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_U));
295*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(Height / 3, ResourceInfo->GetPlanarYOffset(GMM_PLANE_U));
296*35ffd701SAndroid Build Coastguard Worker 
297*35ffd701SAndroid Build Coastguard Worker         // V plane should be at end of U plane
298*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_V));
299*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(2 * (Height / 3), ResourceInfo->GetPlanarYOffset(GMM_PLANE_V));
300*35ffd701SAndroid Build Coastguard Worker 
301*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
302*35ffd701SAndroid Build Coastguard Worker     }
303*35ffd701SAndroid Build Coastguard Worker }
304*35ffd701SAndroid Build Coastguard Worker 
305*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for Plannar 2D Resource - RGBP
TEST_F(CTestGen11Resource,TestPlanar2DCustom_RGBP)306*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen11Resource, TestPlanar2DCustom_RGBP)
307*35ffd701SAndroid Build Coastguard Worker {
308*35ffd701SAndroid Build Coastguard Worker     /* Test planar surfaces where all planes are full-sized */
309*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
310*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
311*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
312*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
313*35ffd701SAndroid Build Coastguard Worker     // UUUUUUUU
314*35ffd701SAndroid Build Coastguard Worker     // UUUUUUUU
315*35ffd701SAndroid Build Coastguard Worker     // UUUUUUUU
316*35ffd701SAndroid Build Coastguard Worker     // UUUUUUUU
317*35ffd701SAndroid Build Coastguard Worker     // VVVVVVVV
318*35ffd701SAndroid Build Coastguard Worker     // VVVVVVVV
319*35ffd701SAndroid Build Coastguard Worker     // VVVVVVVV
320*35ffd701SAndroid Build Coastguard Worker     // VVVVVVVV
321*35ffd701SAndroid Build Coastguard Worker     const TEST_TILE_TYPE TileTypes[]          = {TEST_LINEAR, TEST_TILEX, TEST_TILEY};
322*35ffd701SAndroid Build Coastguard Worker     const uint32_t          PlaneRowAlignment = 16;
323*35ffd701SAndroid Build Coastguard Worker 
324*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[3][2] = {{1, 1},     //Linear
325*35ffd701SAndroid Build Coastguard Worker                                   {512, 8},   // TileX
326*35ffd701SAndroid Build Coastguard Worker                                   {128, 32}}; // TileY
327*35ffd701SAndroid Build Coastguard Worker     for(uint32_t TileIndex = 0; TileIndex < sizeof(TileTypes) / sizeof(TileTypes[0]); TileIndex++)
328*35ffd701SAndroid Build Coastguard Worker     {
329*35ffd701SAndroid Build Coastguard Worker         TEST_TILE_TYPE Tile = TileTypes[TileIndex];
330*35ffd701SAndroid Build Coastguard Worker 
331*35ffd701SAndroid Build Coastguard Worker         GMM_RESCREATE_CUSTOM_PARAMS gmmParams = {};
332*35ffd701SAndroid Build Coastguard Worker         gmmParams.Type                        = RESOURCE_2D;
333*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.Texture           = 1;
334*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64                 = 0x101;
335*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight                  = GMM_ULT_ALIGN(0x101, PlaneRowAlignment);
336*35ffd701SAndroid Build Coastguard Worker         SetTileFlag_Custom(gmmParams, static_cast<TEST_TILE_TYPE>(Tile));
337*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format = GMM_FORMAT_RGBP;
338*35ffd701SAndroid Build Coastguard Worker 
339*35ffd701SAndroid Build Coastguard Worker         uint32_t Pitch, Height;
340*35ffd701SAndroid Build Coastguard Worker 
341*35ffd701SAndroid Build Coastguard Worker         Pitch  = GMM_ULT_ALIGN(gmmParams.BaseWidth64, GMM_BYTES(64));
342*35ffd701SAndroid Build Coastguard Worker         Height = GMM_ULT_ALIGN(gmmParams.BaseHeight, PlaneRowAlignment /* min16 rows*/) * 3 /*Y, U, V*/;
343*35ffd701SAndroid Build Coastguard Worker 
344*35ffd701SAndroid Build Coastguard Worker         uint32_t Size                        = Pitch * Height;
345*35ffd701SAndroid Build Coastguard Worker         gmmParams.Pitch                      = Pitch;
346*35ffd701SAndroid Build Coastguard Worker         gmmParams.Size                       = Size;
347*35ffd701SAndroid Build Coastguard Worker         gmmParams.PlaneOffset.X[GMM_PLANE_Y] = 0;
348*35ffd701SAndroid Build Coastguard Worker         gmmParams.PlaneOffset.Y[GMM_PLANE_Y] = 0;
349*35ffd701SAndroid Build Coastguard Worker         gmmParams.PlaneOffset.X[GMM_PLANE_U] = 0;
350*35ffd701SAndroid Build Coastguard Worker         gmmParams.PlaneOffset.Y[GMM_PLANE_U] = Height / 3;
351*35ffd701SAndroid Build Coastguard Worker         gmmParams.PlaneOffset.X[GMM_PLANE_V] = 0;
352*35ffd701SAndroid Build Coastguard Worker         gmmParams.PlaneOffset.Y[GMM_PLANE_V] = 2 * (Height / 3);
353*35ffd701SAndroid Build Coastguard Worker         gmmParams.NoOfPlanes                 = 3;
354*35ffd701SAndroid Build Coastguard Worker 
355*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
356*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateCustomResInfoObject(&gmmParams);
357*35ffd701SAndroid Build Coastguard Worker 
358*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, Pitch);
359*35ffd701SAndroid Build Coastguard Worker         if(Tile != TEST_LINEAR)
360*35ffd701SAndroid Build Coastguard Worker         {
361*35ffd701SAndroid Build Coastguard Worker             VerifyResourcePitchInTiles<true>(ResourceInfo, Pitch / TileSize[TileIndex][0]);
362*35ffd701SAndroid Build Coastguard Worker         }
363*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, Size);
364*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<false>(ResourceInfo, 0); // Same as any other 2D surface -- tested elsewhere
365*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<false>(ResourceInfo, 0); // Same as any other 2D surface -- tested elsewhere
366*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // N/A for planar
367*35ffd701SAndroid Build Coastguard Worker 
368*35ffd701SAndroid Build Coastguard Worker         // Y plane should be at 0,0
369*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_Y));
370*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarYOffset(GMM_PLANE_Y));
371*35ffd701SAndroid Build Coastguard Worker 
372*35ffd701SAndroid Build Coastguard Worker         // U plane should be at end of Y plane
373*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_U));
374*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(Height / 3, ResourceInfo->GetPlanarYOffset(GMM_PLANE_U));
375*35ffd701SAndroid Build Coastguard Worker 
376*35ffd701SAndroid Build Coastguard Worker         // V plane should be at end of U plane
377*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_V));
378*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(2 * (Height / 3), ResourceInfo->GetPlanarYOffset(GMM_PLANE_V));
379*35ffd701SAndroid Build Coastguard Worker 
380*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
381*35ffd701SAndroid Build Coastguard Worker     }
382*35ffd701SAndroid Build Coastguard Worker }
383*35ffd701SAndroid Build Coastguard Worker 
384*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for Plannar 2D Resource - MFX_JPEG_YUV422V , IMC1, IMC3
TEST_F(CTestGen11Resource,TestPlanar2D_MFX_JPEG_YUV422V)385*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen11Resource, TestPlanar2D_MFX_JPEG_YUV422V)
386*35ffd701SAndroid Build Coastguard Worker {
387*35ffd701SAndroid Build Coastguard Worker     /* Test planar surfaces where both U and V are half the size of Y */
388*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
389*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
390*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
391*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
392*35ffd701SAndroid Build Coastguard Worker     // UUUUUUUU
393*35ffd701SAndroid Build Coastguard Worker     // UUUUUUUU
394*35ffd701SAndroid Build Coastguard Worker     // VVVVVVVV
395*35ffd701SAndroid Build Coastguard Worker     // VVVVVVVV
396*35ffd701SAndroid Build Coastguard Worker     const TEST_TILE_TYPE TileTypes[]       = {TEST_LINEAR, TEST_TILEX, TEST_TILEY};
397*35ffd701SAndroid Build Coastguard Worker     const uint32_t          PlaneRowAlignment = 16;
398*35ffd701SAndroid Build Coastguard Worker     const uint32_t          TileSize[3][2]    = {{1, 1}, //Linear
399*35ffd701SAndroid Build Coastguard Worker                                   {512, 8},           // TileX
400*35ffd701SAndroid Build Coastguard Worker                                   {128, 32}};         // TileY
401*35ffd701SAndroid Build Coastguard Worker     for(uint32_t TileIndex = 0; TileIndex < sizeof(TileTypes) / sizeof(TileTypes[0]); TileIndex++)
402*35ffd701SAndroid Build Coastguard Worker     {
403*35ffd701SAndroid Build Coastguard Worker         TEST_TILE_TYPE Tile = TileTypes[TileIndex];
404*35ffd701SAndroid Build Coastguard Worker 
405*35ffd701SAndroid Build Coastguard Worker         GMM_RESCREATE_PARAMS gmmParams = {};
406*35ffd701SAndroid Build Coastguard Worker         gmmParams.Type                 = RESOURCE_2D;
407*35ffd701SAndroid Build Coastguard Worker         gmmParams.NoGfxMemory          = 1;
408*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.Texture    = 1;
409*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64          = 0x101;
410*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight           = 0x101;
411*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth                = 0x1;
412*35ffd701SAndroid Build Coastguard Worker         SetTileFlag(gmmParams, static_cast<TEST_TILE_TYPE>(Tile));
413*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format = GMM_FORMAT_MFX_JPEG_YUV422V;
414*35ffd701SAndroid Build Coastguard Worker 
415*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
416*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
417*35ffd701SAndroid Build Coastguard Worker 
418*35ffd701SAndroid Build Coastguard Worker         uint32_t Pitch, Height;
419*35ffd701SAndroid Build Coastguard Worker         uint32_t YHeight, VHeight;
420*35ffd701SAndroid Build Coastguard Worker         if(Tile != TEST_LINEAR)
421*35ffd701SAndroid Build Coastguard Worker         {
422*35ffd701SAndroid Build Coastguard Worker             Pitch   = GMM_ULT_ALIGN(gmmParams.BaseWidth64, TileSize[TileIndex][0]);
423*35ffd701SAndroid Build Coastguard Worker             YHeight = GMM_ULT_ALIGN(gmmParams.BaseHeight, PlaneRowAlignment);
424*35ffd701SAndroid Build Coastguard Worker             YHeight = GMM_ULT_ALIGN(YHeight, TileSize[TileIndex][1]);
425*35ffd701SAndroid Build Coastguard Worker 
426*35ffd701SAndroid Build Coastguard Worker             VHeight = GMM_ULT_ALIGN(GMM_ULT_ALIGN(gmmParams.BaseHeight, 2) / 2, PlaneRowAlignment);
427*35ffd701SAndroid Build Coastguard Worker             VHeight = GMM_ULT_ALIGN(VHeight, TileSize[TileIndex][1]);
428*35ffd701SAndroid Build Coastguard Worker         }
429*35ffd701SAndroid Build Coastguard Worker         else
430*35ffd701SAndroid Build Coastguard Worker         {
431*35ffd701SAndroid Build Coastguard Worker             Pitch   = GMM_ULT_ALIGN(gmmParams.BaseWidth64, GMM_BYTES(64));
432*35ffd701SAndroid Build Coastguard Worker             YHeight = GMM_ULT_ALIGN(gmmParams.BaseHeight, PlaneRowAlignment);
433*35ffd701SAndroid Build Coastguard Worker             VHeight = GMM_ULT_ALIGN(GMM_ULT_ALIGN(gmmParams.BaseHeight, 2) / 2, PlaneRowAlignment);
434*35ffd701SAndroid Build Coastguard Worker         }
435*35ffd701SAndroid Build Coastguard Worker         Height = YHeight + 2 * VHeight;
436*35ffd701SAndroid Build Coastguard Worker 
437*35ffd701SAndroid Build Coastguard Worker         uint32_t Size = GMM_ULT_ALIGN(Pitch * Height, GMM_KBYTE(4));
438*35ffd701SAndroid Build Coastguard Worker 
439*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, Pitch);
440*35ffd701SAndroid Build Coastguard Worker         if(Tile != TEST_LINEAR)
441*35ffd701SAndroid Build Coastguard Worker         {
442*35ffd701SAndroid Build Coastguard Worker             VerifyResourcePitchInTiles<true>(ResourceInfo, Pitch / TileSize[TileIndex][0]);
443*35ffd701SAndroid Build Coastguard Worker         }
444*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, Size);
445*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<false>(ResourceInfo, 0); // Same as any other 2D surface -- tested elsewhere
446*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<false>(ResourceInfo, 0); // Same as any other 2D surface -- tested elsewhere
447*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // N/A for planar
448*35ffd701SAndroid Build Coastguard Worker 
449*35ffd701SAndroid Build Coastguard Worker         // Y plane should be at 0,0
450*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_Y));
451*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarYOffset(GMM_PLANE_Y));
452*35ffd701SAndroid Build Coastguard Worker 
453*35ffd701SAndroid Build Coastguard Worker         // U plane should be at end of Y plane
454*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_U));
455*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(YHeight, ResourceInfo->GetPlanarYOffset(GMM_PLANE_U));
456*35ffd701SAndroid Build Coastguard Worker 
457*35ffd701SAndroid Build Coastguard Worker         // V plane should be at end of U plane
458*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_V));
459*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(YHeight + VHeight, ResourceInfo->GetPlanarYOffset(GMM_PLANE_V));
460*35ffd701SAndroid Build Coastguard Worker 
461*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
462*35ffd701SAndroid Build Coastguard Worker     }
463*35ffd701SAndroid Build Coastguard Worker }
464*35ffd701SAndroid Build Coastguard Worker 
465*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for Plannar 2D Resource - MFX_JPEG_YUV411R
TEST_F(CTestGen11Resource,TestPlanar2D_MFX_JPEG_YUV411R)466*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen11Resource, TestPlanar2D_MFX_JPEG_YUV411R)
467*35ffd701SAndroid Build Coastguard Worker {
468*35ffd701SAndroid Build Coastguard Worker     /* Test planar surfaces where both U and V are quarter the size of Y */
469*35ffd701SAndroid Build Coastguard Worker     //YYYYYYYY
470*35ffd701SAndroid Build Coastguard Worker     //YYYYYYYY
471*35ffd701SAndroid Build Coastguard Worker     //YYYYYYYY
472*35ffd701SAndroid Build Coastguard Worker     //YYYYYYYY
473*35ffd701SAndroid Build Coastguard Worker     //UUUUUUUU
474*35ffd701SAndroid Build Coastguard Worker     //VVVVVVVV
475*35ffd701SAndroid Build Coastguard Worker     const TEST_TILE_TYPE TileTypes[]       = {TEST_LINEAR, TEST_TILEX, TEST_TILEY};
476*35ffd701SAndroid Build Coastguard Worker     const uint32_t          PlaneRowAlignment = 16;
477*35ffd701SAndroid Build Coastguard Worker     const uint32_t          TileSize[3][2]    = {{1, 1}, //Linear
478*35ffd701SAndroid Build Coastguard Worker                                   {512, 8},           // TileX
479*35ffd701SAndroid Build Coastguard Worker                                   {128, 32}};         // TileY
480*35ffd701SAndroid Build Coastguard Worker     for(uint32_t TileIndex = 0; TileIndex < sizeof(TileTypes) / sizeof(TileTypes[0]); TileIndex++)
481*35ffd701SAndroid Build Coastguard Worker     {
482*35ffd701SAndroid Build Coastguard Worker         TEST_TILE_TYPE Tile = TileTypes[TileIndex];
483*35ffd701SAndroid Build Coastguard Worker 
484*35ffd701SAndroid Build Coastguard Worker         GMM_RESCREATE_PARAMS gmmParams = {};
485*35ffd701SAndroid Build Coastguard Worker         gmmParams.Type                 = RESOURCE_2D;
486*35ffd701SAndroid Build Coastguard Worker         gmmParams.NoGfxMemory          = 1;
487*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.Texture    = 1;
488*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64          = 0x101;
489*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight           = 0x101;
490*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth                = 0x1;
491*35ffd701SAndroid Build Coastguard Worker         SetTileFlag(gmmParams, static_cast<TEST_TILE_TYPE>(Tile));
492*35ffd701SAndroid Build Coastguard Worker 
493*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format = GMM_FORMAT_MFX_JPEG_YUV411R_TYPE;
494*35ffd701SAndroid Build Coastguard Worker 
495*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
496*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
497*35ffd701SAndroid Build Coastguard Worker 
498*35ffd701SAndroid Build Coastguard Worker         uint32_t Pitch, Height;
499*35ffd701SAndroid Build Coastguard Worker         uint32_t YHeight, VHeight;
500*35ffd701SAndroid Build Coastguard Worker         if(Tile != TEST_LINEAR)
501*35ffd701SAndroid Build Coastguard Worker         {
502*35ffd701SAndroid Build Coastguard Worker             Pitch   = GMM_ULT_ALIGN(gmmParams.BaseWidth64, TileSize[TileIndex][0]);
503*35ffd701SAndroid Build Coastguard Worker             YHeight = GMM_ULT_ALIGN(gmmParams.BaseHeight, PlaneRowAlignment);
504*35ffd701SAndroid Build Coastguard Worker             YHeight = GMM_ULT_ALIGN(YHeight, TileSize[TileIndex][1]);
505*35ffd701SAndroid Build Coastguard Worker 
506*35ffd701SAndroid Build Coastguard Worker             VHeight = GMM_ULT_ALIGN(GMM_ULT_ALIGN(gmmParams.BaseHeight, 4) / 4, PlaneRowAlignment);
507*35ffd701SAndroid Build Coastguard Worker             VHeight = GMM_ULT_ALIGN(VHeight, TileSize[TileIndex][1]);
508*35ffd701SAndroid Build Coastguard Worker         }
509*35ffd701SAndroid Build Coastguard Worker         else
510*35ffd701SAndroid Build Coastguard Worker         {
511*35ffd701SAndroid Build Coastguard Worker             Pitch   = GMM_ULT_ALIGN(gmmParams.BaseWidth64, GMM_BYTES(64));
512*35ffd701SAndroid Build Coastguard Worker             YHeight = GMM_ULT_ALIGN(gmmParams.BaseHeight, PlaneRowAlignment);
513*35ffd701SAndroid Build Coastguard Worker             VHeight = GMM_ULT_ALIGN(GMM_ULT_ALIGN(gmmParams.BaseHeight, 4) / 4, PlaneRowAlignment);
514*35ffd701SAndroid Build Coastguard Worker         }
515*35ffd701SAndroid Build Coastguard Worker 
516*35ffd701SAndroid Build Coastguard Worker         Height     = YHeight + 2 * VHeight;
517*35ffd701SAndroid Build Coastguard Worker         uint32_t Size = GMM_ULT_ALIGN(Pitch * Height, GMM_KBYTE(4));
518*35ffd701SAndroid Build Coastguard Worker 
519*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, Pitch);
520*35ffd701SAndroid Build Coastguard Worker 
521*35ffd701SAndroid Build Coastguard Worker         if(Tile != TEST_LINEAR)
522*35ffd701SAndroid Build Coastguard Worker         {
523*35ffd701SAndroid Build Coastguard Worker             VerifyResourcePitchInTiles<true>(ResourceInfo, Pitch / TileSize[TileIndex][0]);
524*35ffd701SAndroid Build Coastguard Worker         }
525*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, Size);
526*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<false>(ResourceInfo, 0); // Same as any other 2D surface -- tested elsewhere
527*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<false>(ResourceInfo, 0); // Same as any other 2D surface -- tested elsewhere
528*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // N/A for planar
529*35ffd701SAndroid Build Coastguard Worker 
530*35ffd701SAndroid Build Coastguard Worker         // Y plane should be at 0,0
531*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_Y));
532*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarYOffset(GMM_PLANE_Y));
533*35ffd701SAndroid Build Coastguard Worker 
534*35ffd701SAndroid Build Coastguard Worker         // U plane should be at end of Y plane
535*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_U));
536*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(YHeight, ResourceInfo->GetPlanarYOffset(GMM_PLANE_U));
537*35ffd701SAndroid Build Coastguard Worker 
538*35ffd701SAndroid Build Coastguard Worker         // V plane should be at end of U plane
539*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_V));
540*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(YHeight + VHeight, ResourceInfo->GetPlanarYOffset(GMM_PLANE_V));
541*35ffd701SAndroid Build Coastguard Worker 
542*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
543*35ffd701SAndroid Build Coastguard Worker     }
544*35ffd701SAndroid Build Coastguard Worker }
545*35ffd701SAndroid Build Coastguard Worker 
546*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for Plannar 2D Resource - NV12
TEST_F(CTestGen11Resource,TestPlanar2D_NV12)547*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen11Resource, TestPlanar2D_NV12)
548*35ffd701SAndroid Build Coastguard Worker {
549*35ffd701SAndroid Build Coastguard Worker     /* Test planar surface with hybrid UV planes where UV plane is half the size
550*35ffd701SAndroid Build Coastguard Worker     of Y and U/V data is packed together */
551*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
552*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
553*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
554*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
555*35ffd701SAndroid Build Coastguard Worker     // [UV-Packing]
556*35ffd701SAndroid Build Coastguard Worker     const TEST_TILE_TYPE TileTypes[] = {TEST_LINEAR, TEST_TILEX, TEST_TILEY};
557*35ffd701SAndroid Build Coastguard Worker 
558*35ffd701SAndroid Build Coastguard Worker     const uint32_t TileSize[3][2] = {{1, 1},     //Linear
559*35ffd701SAndroid Build Coastguard Worker                                   {512, 8},   // TileX
560*35ffd701SAndroid Build Coastguard Worker                                   {128, 32}}; // TileY
561*35ffd701SAndroid Build Coastguard Worker     for(uint32_t TileIndex = 0; TileIndex < sizeof(TileTypes) / sizeof(TileTypes[0]); TileIndex++)
562*35ffd701SAndroid Build Coastguard Worker     {
563*35ffd701SAndroid Build Coastguard Worker         TEST_TILE_TYPE Tile = TileTypes[TileIndex];
564*35ffd701SAndroid Build Coastguard Worker 
565*35ffd701SAndroid Build Coastguard Worker         GMM_RESCREATE_PARAMS gmmParams = {};
566*35ffd701SAndroid Build Coastguard Worker         gmmParams.Type                 = RESOURCE_2D;
567*35ffd701SAndroid Build Coastguard Worker         gmmParams.NoGfxMemory          = 1;
568*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.Texture    = 1;
569*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64          = 0x100;
570*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight           = 0x100;
571*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth                = 0x1;
572*35ffd701SAndroid Build Coastguard Worker         SetTileFlag(gmmParams, static_cast<TEST_TILE_TYPE>(Tile));
573*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format = GMM_FORMAT_NV12;
574*35ffd701SAndroid Build Coastguard Worker 
575*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
576*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
577*35ffd701SAndroid Build Coastguard Worker 
578*35ffd701SAndroid Build Coastguard Worker         uint32_t Pitch, Height;
579*35ffd701SAndroid Build Coastguard Worker 
580*35ffd701SAndroid Build Coastguard Worker         if(Tile != TEST_LINEAR)
581*35ffd701SAndroid Build Coastguard Worker         {
582*35ffd701SAndroid Build Coastguard Worker             Pitch = GMM_ULT_ALIGN(gmmParams.BaseWidth64, TileSize[TileIndex][0]);
583*35ffd701SAndroid Build Coastguard Worker 
584*35ffd701SAndroid Build Coastguard Worker             Height = GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[TileIndex][1]) +
585*35ffd701SAndroid Build Coastguard Worker                      GMM_ULT_ALIGN(gmmParams.BaseHeight / 2, TileSize[TileIndex][1]);
586*35ffd701SAndroid Build Coastguard Worker         }
587*35ffd701SAndroid Build Coastguard Worker         else
588*35ffd701SAndroid Build Coastguard Worker         {
589*35ffd701SAndroid Build Coastguard Worker             Pitch  = GMM_ULT_ALIGN(gmmParams.BaseWidth64, TileSize[TileIndex][0]);
590*35ffd701SAndroid Build Coastguard Worker             Height = GMM_ULT_ALIGN(gmmParams.BaseHeight /*Y*/ + gmmParams.BaseHeight / 2 /*UV*/, TileSize[TileIndex][1]);
591*35ffd701SAndroid Build Coastguard Worker         }
592*35ffd701SAndroid Build Coastguard Worker 
593*35ffd701SAndroid Build Coastguard Worker         uint32_t Size = GMM_ULT_ALIGN(Pitch * Height, GMM_KBYTE(4));
594*35ffd701SAndroid Build Coastguard Worker 
595*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, Pitch);
596*35ffd701SAndroid Build Coastguard Worker         if(Tile != TEST_LINEAR)
597*35ffd701SAndroid Build Coastguard Worker         {
598*35ffd701SAndroid Build Coastguard Worker             VerifyResourcePitchInTiles<true>(ResourceInfo, Pitch / TileSize[TileIndex][0]);
599*35ffd701SAndroid Build Coastguard Worker         }
600*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, Size);
601*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<false>(ResourceInfo, 0); // Same as any other 2D surface -- tested elsewhere
602*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<false>(ResourceInfo, 0); // Same as any other 2D surface -- tested elsewhere
603*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // N/A for planar
604*35ffd701SAndroid Build Coastguard Worker 
605*35ffd701SAndroid Build Coastguard Worker         // Y plane should be at 0,0
606*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_Y));
607*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarYOffset(GMM_PLANE_Y));
608*35ffd701SAndroid Build Coastguard Worker 
609*35ffd701SAndroid Build Coastguard Worker         // U/V plane should be at end of Y plane
610*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_U));
611*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_V));
612*35ffd701SAndroid Build Coastguard Worker 
613*35ffd701SAndroid Build Coastguard Worker         if(Tile != TEST_LINEAR)
614*35ffd701SAndroid Build Coastguard Worker         {
615*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[TileIndex][1]), ResourceInfo->GetPlanarYOffset(GMM_PLANE_U));
616*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[TileIndex][1]), ResourceInfo->GetPlanarYOffset(GMM_PLANE_V));
617*35ffd701SAndroid Build Coastguard Worker         }
618*35ffd701SAndroid Build Coastguard Worker         else
619*35ffd701SAndroid Build Coastguard Worker         {
620*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(gmmParams.BaseHeight, ResourceInfo->GetPlanarYOffset(GMM_PLANE_U));
621*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(gmmParams.BaseHeight, ResourceInfo->GetPlanarYOffset(GMM_PLANE_V));
622*35ffd701SAndroid Build Coastguard Worker         }
623*35ffd701SAndroid Build Coastguard Worker 
624*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
625*35ffd701SAndroid Build Coastguard Worker     }
626*35ffd701SAndroid Build Coastguard Worker }
627*35ffd701SAndroid Build Coastguard Worker 
628*35ffd701SAndroid Build Coastguard Worker /// @brief ULT for Planar 2D Resource - IMC4
TEST_F(CTestGen11Resource,TestPlanar2D_IMC4)629*35ffd701SAndroid Build Coastguard Worker TEST_F(CTestGen11Resource, TestPlanar2D_IMC4)
630*35ffd701SAndroid Build Coastguard Worker {
631*35ffd701SAndroid Build Coastguard Worker     /* Test planar surface V surface is on the right of U */
632*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
633*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
634*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
635*35ffd701SAndroid Build Coastguard Worker     // YYYYYYYY
636*35ffd701SAndroid Build Coastguard Worker     // UUUUVVVV
637*35ffd701SAndroid Build Coastguard Worker     // UUUUVVVV
638*35ffd701SAndroid Build Coastguard Worker     const TEST_TILE_TYPE TileTypes[]       = {TEST_LINEAR, TEST_TILEX, TEST_TILEY};
639*35ffd701SAndroid Build Coastguard Worker     const uint32_t          PlaneRowAlignment = 16;
640*35ffd701SAndroid Build Coastguard Worker     const uint32_t          TileSize[3][2]    = {{1, 1}, //Linear
641*35ffd701SAndroid Build Coastguard Worker                                   {512, 8},           // TileX
642*35ffd701SAndroid Build Coastguard Worker                                   {128, 32}};         // TileY
643*35ffd701SAndroid Build Coastguard Worker     for(uint32_t TileIndex = 0; TileIndex < sizeof(TileTypes) / sizeof(TileTypes[0]); TileIndex++)
644*35ffd701SAndroid Build Coastguard Worker     {
645*35ffd701SAndroid Build Coastguard Worker         TEST_TILE_TYPE Tile = TileTypes[TileIndex];
646*35ffd701SAndroid Build Coastguard Worker 
647*35ffd701SAndroid Build Coastguard Worker         GMM_RESCREATE_PARAMS gmmParams = {};
648*35ffd701SAndroid Build Coastguard Worker         gmmParams.Type                 = RESOURCE_2D;
649*35ffd701SAndroid Build Coastguard Worker         gmmParams.NoGfxMemory          = 1;
650*35ffd701SAndroid Build Coastguard Worker         gmmParams.Flags.Gpu.Texture    = 1;
651*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseWidth64          = 0x101;
652*35ffd701SAndroid Build Coastguard Worker         gmmParams.BaseHeight           = 0x101;
653*35ffd701SAndroid Build Coastguard Worker         gmmParams.Depth                = 0x1;
654*35ffd701SAndroid Build Coastguard Worker         SetTileFlag(gmmParams, static_cast<TEST_TILE_TYPE>(Tile));
655*35ffd701SAndroid Build Coastguard Worker         gmmParams.Format = GMM_FORMAT_IMC4;
656*35ffd701SAndroid Build Coastguard Worker 
657*35ffd701SAndroid Build Coastguard Worker         GMM_RESOURCE_INFO *ResourceInfo;
658*35ffd701SAndroid Build Coastguard Worker         ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
659*35ffd701SAndroid Build Coastguard Worker 
660*35ffd701SAndroid Build Coastguard Worker         uint32_t Pitch, Height;
661*35ffd701SAndroid Build Coastguard Worker         uint32_t YHeight, VHeight;
662*35ffd701SAndroid Build Coastguard Worker         if(Tile != TEST_LINEAR)
663*35ffd701SAndroid Build Coastguard Worker         {
664*35ffd701SAndroid Build Coastguard Worker             Pitch = GMM_ULT_ALIGN(gmmParams.BaseWidth64, TileSize[TileIndex][0]);
665*35ffd701SAndroid Build Coastguard Worker             if(Pitch / TileSize[TileIndex][0] % 2)
666*35ffd701SAndroid Build Coastguard Worker             {
667*35ffd701SAndroid Build Coastguard Worker                 Pitch += TileSize[TileIndex][0];
668*35ffd701SAndroid Build Coastguard Worker             }
669*35ffd701SAndroid Build Coastguard Worker 
670*35ffd701SAndroid Build Coastguard Worker             YHeight = GMM_ULT_ALIGN(gmmParams.BaseHeight, PlaneRowAlignment);
671*35ffd701SAndroid Build Coastguard Worker             VHeight = YHeight / 2;
672*35ffd701SAndroid Build Coastguard Worker 
673*35ffd701SAndroid Build Coastguard Worker             YHeight = GMM_ULT_ALIGN(YHeight, TileSize[TileIndex][1]);
674*35ffd701SAndroid Build Coastguard Worker             VHeight = GMM_ULT_ALIGN(VHeight, TileSize[TileIndex][1]); // No need of PlaneRowAlignment since last plane
675*35ffd701SAndroid Build Coastguard Worker         }
676*35ffd701SAndroid Build Coastguard Worker         else
677*35ffd701SAndroid Build Coastguard Worker         {
678*35ffd701SAndroid Build Coastguard Worker             Pitch   = GMM_ULT_ALIGN(gmmParams.BaseWidth64, GMM_BYTES(64));
679*35ffd701SAndroid Build Coastguard Worker             YHeight = GMM_ULT_ALIGN(gmmParams.BaseHeight, PlaneRowAlignment);
680*35ffd701SAndroid Build Coastguard Worker             VHeight = YHeight / 2;
681*35ffd701SAndroid Build Coastguard Worker         }
682*35ffd701SAndroid Build Coastguard Worker 
683*35ffd701SAndroid Build Coastguard Worker         Height = YHeight + VHeight;
684*35ffd701SAndroid Build Coastguard Worker 
685*35ffd701SAndroid Build Coastguard Worker         uint32_t Size = GMM_ULT_ALIGN(Pitch * Height, GMM_KBYTE(4));
686*35ffd701SAndroid Build Coastguard Worker 
687*35ffd701SAndroid Build Coastguard Worker         VerifyResourcePitch<true>(ResourceInfo, Pitch);
688*35ffd701SAndroid Build Coastguard Worker 
689*35ffd701SAndroid Build Coastguard Worker         if(Tile != TEST_LINEAR)
690*35ffd701SAndroid Build Coastguard Worker         {
691*35ffd701SAndroid Build Coastguard Worker             VerifyResourcePitchInTiles<true>(ResourceInfo, Pitch / TileSize[TileIndex][0]);
692*35ffd701SAndroid Build Coastguard Worker         }
693*35ffd701SAndroid Build Coastguard Worker         VerifyResourceSize<true>(ResourceInfo, Size);
694*35ffd701SAndroid Build Coastguard Worker         VerifyResourceHAlign<false>(ResourceInfo, 0); // Same as any other 2D surface -- tested elsewhere
695*35ffd701SAndroid Build Coastguard Worker         VerifyResourceVAlign<false>(ResourceInfo, 0); // Same as any other 2D surface -- tested elsewhere
696*35ffd701SAndroid Build Coastguard Worker         VerifyResourceQPitch<false>(ResourceInfo, 0); // N/A for planar
697*35ffd701SAndroid Build Coastguard Worker 
698*35ffd701SAndroid Build Coastguard Worker         // Y plane should be at 0,0
699*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_Y));
700*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarYOffset(GMM_PLANE_Y));
701*35ffd701SAndroid Build Coastguard Worker 
702*35ffd701SAndroid Build Coastguard Worker         // U plane should be at end of Y plane
703*35ffd701SAndroid Build Coastguard Worker         // V plane should be at end of U plane
704*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(0, ResourceInfo->GetPlanarXOffset(GMM_PLANE_U));
705*35ffd701SAndroid Build Coastguard Worker         EXPECT_EQ(Pitch / 2, ResourceInfo->GetPlanarXOffset(GMM_PLANE_V));
706*35ffd701SAndroid Build Coastguard Worker 
707*35ffd701SAndroid Build Coastguard Worker         if(Tile != TEST_LINEAR)
708*35ffd701SAndroid Build Coastguard Worker         {
709*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(YHeight, ResourceInfo->GetPlanarYOffset(GMM_PLANE_U));
710*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(YHeight, ResourceInfo->GetPlanarYOffset(GMM_PLANE_V));
711*35ffd701SAndroid Build Coastguard Worker         }
712*35ffd701SAndroid Build Coastguard Worker         else
713*35ffd701SAndroid Build Coastguard Worker         {
714*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(YHeight, ResourceInfo->GetPlanarYOffset(GMM_PLANE_U));
715*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(YHeight, ResourceInfo->GetPlanarYOffset(GMM_PLANE_V));
716*35ffd701SAndroid Build Coastguard Worker         }
717*35ffd701SAndroid Build Coastguard Worker 
718*35ffd701SAndroid Build Coastguard Worker         pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
719*35ffd701SAndroid Build Coastguard Worker     }
720*35ffd701SAndroid Build Coastguard Worker }
721