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