xref: /aosp_15_r20/external/gmmlib/Source/GmmLib/ULT/GmmResourceULT.h (revision 35ffd701415c9e32e53136d61a677a8d0a8fc4a5)
1*35ffd701SAndroid Build Coastguard Worker /*==============================================================================
2*35ffd701SAndroid Build Coastguard Worker Copyright(c) 2017 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 #pragma once
24*35ffd701SAndroid Build Coastguard Worker 
25*35ffd701SAndroid Build Coastguard Worker #include "GmmCommonULT.h"
26*35ffd701SAndroid Build Coastguard Worker 
27*35ffd701SAndroid Build Coastguard Worker //===========================================================================
28*35ffd701SAndroid Build Coastguard Worker // typedef:
29*35ffd701SAndroid Build Coastguard Worker //      TEST_RESOURCE_TYPE_ENUM
30*35ffd701SAndroid Build Coastguard Worker //
31*35ffd701SAndroid Build Coastguard Worker // Description:
32*35ffd701SAndroid Build Coastguard Worker //     Decribes Resource types to test
33*35ffd701SAndroid Build Coastguard Worker //     when editing/adding existing/new enum, make sure to update corresponding
34*35ffd701SAndroid Build Coastguard Worker //     string array CTestResource::TestResourceTypeStr[].
35*35ffd701SAndroid Build Coastguard Worker //----------------------------------------------------------------------------
36*35ffd701SAndroid Build Coastguard Worker typedef enum TEST_RESOURCE_TYPE_ENUM
37*35ffd701SAndroid Build Coastguard Worker {
38*35ffd701SAndroid Build Coastguard Worker     TEST_RESOURCE_1D,
39*35ffd701SAndroid Build Coastguard Worker     TEST_RESOURCE_2D,
40*35ffd701SAndroid Build Coastguard Worker     TEST_RESOURCE_3D,
41*35ffd701SAndroid Build Coastguard Worker     TEST_RESOURCE_CUBE,
42*35ffd701SAndroid Build Coastguard Worker     TEST_RESOURCE_BUFFER,
43*35ffd701SAndroid Build Coastguard Worker     TEST_RESOURCE_MAX
44*35ffd701SAndroid Build Coastguard Worker }TEST_RESOURCE_TYPE;
45*35ffd701SAndroid Build Coastguard Worker 
46*35ffd701SAndroid Build Coastguard Worker //===========================================================================
47*35ffd701SAndroid Build Coastguard Worker // typedef:
48*35ffd701SAndroid Build Coastguard Worker //      TEST_RESOURCE_TYPE_ENUM
49*35ffd701SAndroid Build Coastguard Worker //
50*35ffd701SAndroid Build Coastguard Worker // Description:
51*35ffd701SAndroid Build Coastguard Worker //     Decribes Resource Tile Types to test .
52*35ffd701SAndroid Build Coastguard Worker //     when editing/adding existing/new enum, make sure to update corresponding
53*35ffd701SAndroid Build Coastguard Worker //     string array CTestResource::TestTileTypeStr[].
54*35ffd701SAndroid Build Coastguard Worker //----------------------------------------------------------------------------
55*35ffd701SAndroid Build Coastguard Worker typedef enum TEST_TILE_TYPE_ENUM
56*35ffd701SAndroid Build Coastguard Worker {
57*35ffd701SAndroid Build Coastguard Worker     TEST_LINEAR,
58*35ffd701SAndroid Build Coastguard Worker     TEST_TILEX,
59*35ffd701SAndroid Build Coastguard Worker     TEST_TILEY,
60*35ffd701SAndroid Build Coastguard Worker     TEST_TILEYS,
61*35ffd701SAndroid Build Coastguard Worker     TEST_TILEYF,
62*35ffd701SAndroid Build Coastguard Worker     TEST_TILEY_MAX = TEST_TILEYF,
63*35ffd701SAndroid Build Coastguard Worker     TEST_TILE4,
64*35ffd701SAndroid Build Coastguard Worker     TEST_TILE64,
65*35ffd701SAndroid Build Coastguard Worker     TEST_TILE_MAX
66*35ffd701SAndroid Build Coastguard Worker }TEST_TILE_TYPE;
67*35ffd701SAndroid Build Coastguard Worker 
68*35ffd701SAndroid Build Coastguard Worker 
69*35ffd701SAndroid Build Coastguard Worker //===========================================================================
70*35ffd701SAndroid Build Coastguard Worker // typedef:
71*35ffd701SAndroid Build Coastguard Worker //      TEST_BPP_ENUM
72*35ffd701SAndroid Build Coastguard Worker //
73*35ffd701SAndroid Build Coastguard Worker // Description:
74*35ffd701SAndroid Build Coastguard Worker //     Decribes BPP to test - 8, 16, 32, 64, 128 (Ignore 24/96 until need arises)
75*35ffd701SAndroid Build Coastguard Worker //     when editing/adding existing/new enum, make sure to update corresponding
76*35ffd701SAndroid Build Coastguard Worker //     string array CTestResource::TestBppStr[].
77*35ffd701SAndroid Build Coastguard Worker //----------------------------------------------------------------------------
78*35ffd701SAndroid Build Coastguard Worker typedef enum TEST_BPP_ENUM
79*35ffd701SAndroid Build Coastguard Worker {
80*35ffd701SAndroid Build Coastguard Worker     TEST_BPP_8,
81*35ffd701SAndroid Build Coastguard Worker     TEST_BPP_16,
82*35ffd701SAndroid Build Coastguard Worker     TEST_BPP_32,
83*35ffd701SAndroid Build Coastguard Worker     TEST_BPP_64,
84*35ffd701SAndroid Build Coastguard Worker     TEST_BPP_128,
85*35ffd701SAndroid Build Coastguard Worker     TEST_BPP_MAX
86*35ffd701SAndroid Build Coastguard Worker }TEST_BPP;
87*35ffd701SAndroid Build Coastguard Worker 
88*35ffd701SAndroid Build Coastguard Worker typedef enum TEST_MSAA_Samples
89*35ffd701SAndroid Build Coastguard Worker {
90*35ffd701SAndroid Build Coastguard Worker     MSAA_None,
91*35ffd701SAndroid Build Coastguard Worker     MSAA_2x,
92*35ffd701SAndroid Build Coastguard Worker     MSAA_4x,
93*35ffd701SAndroid Build Coastguard Worker     MSAA_8x,
94*35ffd701SAndroid Build Coastguard Worker     MSAA_16x,
95*35ffd701SAndroid Build Coastguard Worker     TEST_MSAA_MAX = MSAA_16x        //Should be equal to last MSAA type
96*35ffd701SAndroid Build Coastguard Worker } TEST_MSAA;
97*35ffd701SAndroid Build Coastguard Worker 
98*35ffd701SAndroid Build Coastguard Worker //===========================================================================
99*35ffd701SAndroid Build Coastguard Worker // GmmLib ULT macros for size alignment. Compitable with 64-bit numbers.
100*35ffd701SAndroid Build Coastguard Worker //---------------------------------------------------------------------------
101*35ffd701SAndroid Build Coastguard Worker #define GMM_ULT_ALIGN(x, a)          (((x) + ((a) - 1)) - (((x) + ((a) - 1)) & ((a) - 1))) // Alt implementation with bitwise not (~) has issue with uint32 align used with 64-bit value, since ~'ed value will remain 32-bit.
102*35ffd701SAndroid Build Coastguard Worker #define GMM_ULT_ALIGN_FLOOR(x, a)    ((x) - ((x) & ((a) - 1)))
103*35ffd701SAndroid Build Coastguard Worker #define GMM_ULT_MAX(a, b)            ((a) > (b)) ? (a) : (b)
104*35ffd701SAndroid Build Coastguard Worker #define GMM_ULT_MIN(a,b)             (((a) < (b)) ? (a) : (b))
105*35ffd701SAndroid Build Coastguard Worker #define GMM_ULT_ALIGN_NP2(x, a)      (((a) > 0) ? ((x) + (((a) - 1) - (((x) + ((a) - 1)) % (a)))) : (x))  //Next power of 2
106*35ffd701SAndroid Build Coastguard Worker #define GMM_ULT_MAX_MIPMAP           15
107*35ffd701SAndroid Build Coastguard Worker #define GMM_ULT_MAX_MIPTAIL_SLOTS    15
108*35ffd701SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////
109*35ffd701SAndroid Build Coastguard Worker // typdef:
110*35ffd701SAndroid Build Coastguard Worker //     TEST_MIPTAIL_SLOT_OFFSET_REC
111*35ffd701SAndroid Build Coastguard Worker //
112*35ffd701SAndroid Build Coastguard Worker // Description:
113*35ffd701SAndroid Build Coastguard Worker //     Structure to hold the offset of the mip resources for unit level testing
114*35ffd701SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////
115*35ffd701SAndroid Build Coastguard Worker typedef struct TEST_MIPTAIL_SLOT_OFFSET_REC
116*35ffd701SAndroid Build Coastguard Worker {
117*35ffd701SAndroid Build Coastguard Worker     uint32_t X;
118*35ffd701SAndroid Build Coastguard Worker     uint32_t Y;
119*35ffd701SAndroid Build Coastguard Worker     uint32_t Z;
120*35ffd701SAndroid Build Coastguard Worker }TEST_MIPTAIL_SLOT_OFFSET;
121*35ffd701SAndroid Build Coastguard Worker 
122*35ffd701SAndroid Build Coastguard Worker 
123*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////
124*35ffd701SAndroid Build Coastguard Worker /// Fixture class for Resource. - This is Resource Test Case to test
125*35ffd701SAndroid Build Coastguard Worker /// all generic resource types, tile types, bpp and special allocations.
126*35ffd701SAndroid Build Coastguard Worker /// Contains Base implementation and inherits CommonULT class
127*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////
128*35ffd701SAndroid Build Coastguard Worker class CTestResource : public CommonULT
129*35ffd701SAndroid Build Coastguard Worker {
130*35ffd701SAndroid Build Coastguard Worker protected:
131*35ffd701SAndroid Build Coastguard Worker 
132*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
133*35ffd701SAndroid Build Coastguard Worker     /// Returns GMM format for given test BPP input.
134*35ffd701SAndroid Build Coastguard Worker     ///
135*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  Bpp: test Bpp value
136*35ffd701SAndroid Build Coastguard Worker     ///
137*35ffd701SAndroid Build Coastguard Worker     /// @return     ::GMM_RESOURCE_FORMAT
138*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
SetResourceFormat(TEST_BPP Bpp)139*35ffd701SAndroid Build Coastguard Worker     GMM_RESOURCE_FORMAT SetResourceFormat(TEST_BPP Bpp)
140*35ffd701SAndroid Build Coastguard Worker     {
141*35ffd701SAndroid Build Coastguard Worker         switch (Bpp)
142*35ffd701SAndroid Build Coastguard Worker         {
143*35ffd701SAndroid Build Coastguard Worker         case TEST_BPP_8:
144*35ffd701SAndroid Build Coastguard Worker             return GMM_FORMAT_GENERIC_8BIT;
145*35ffd701SAndroid Build Coastguard Worker         case TEST_BPP_16:
146*35ffd701SAndroid Build Coastguard Worker             return GMM_FORMAT_GENERIC_16BIT;
147*35ffd701SAndroid Build Coastguard Worker         case TEST_BPP_32:
148*35ffd701SAndroid Build Coastguard Worker             return GMM_FORMAT_GENERIC_32BIT;
149*35ffd701SAndroid Build Coastguard Worker         case TEST_BPP_64:
150*35ffd701SAndroid Build Coastguard Worker             return GMM_FORMAT_GENERIC_64BIT;
151*35ffd701SAndroid Build Coastguard Worker         case TEST_BPP_128:
152*35ffd701SAndroid Build Coastguard Worker             return GMM_FORMAT_GENERIC_128BIT;
153*35ffd701SAndroid Build Coastguard Worker         default:
154*35ffd701SAndroid Build Coastguard Worker             break;
155*35ffd701SAndroid Build Coastguard Worker         }
156*35ffd701SAndroid Build Coastguard Worker 
157*35ffd701SAndroid Build Coastguard Worker         return GMM_FORMAT_INVALID;
158*35ffd701SAndroid Build Coastguard Worker     }
159*35ffd701SAndroid Build Coastguard Worker 
160*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
161*35ffd701SAndroid Build Coastguard Worker     /// Returns Bpp (bytes per pixel) for a given bpp (bits per pixel) enum.
162*35ffd701SAndroid Build Coastguard Worker     ///
163*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  bpp: test bpp value
164*35ffd701SAndroid Build Coastguard Worker     ///
165*35ffd701SAndroid Build Coastguard Worker     /// @return     Bytes per pixel
166*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
GetBppValue(TEST_BPP bpp)167*35ffd701SAndroid Build Coastguard Worker     uint32_t GetBppValue(TEST_BPP bpp)
168*35ffd701SAndroid Build Coastguard Worker     {
169*35ffd701SAndroid Build Coastguard Worker         uint32_t Bpp = 0;
170*35ffd701SAndroid Build Coastguard Worker         switch (bpp)
171*35ffd701SAndroid Build Coastguard Worker         {
172*35ffd701SAndroid Build Coastguard Worker         case TEST_BPP_8:
173*35ffd701SAndroid Build Coastguard Worker             Bpp = 8;
174*35ffd701SAndroid Build Coastguard Worker             break;
175*35ffd701SAndroid Build Coastguard Worker         case TEST_BPP_16:
176*35ffd701SAndroid Build Coastguard Worker             Bpp = 16;
177*35ffd701SAndroid Build Coastguard Worker             break;
178*35ffd701SAndroid Build Coastguard Worker         case TEST_BPP_32:
179*35ffd701SAndroid Build Coastguard Worker             Bpp = 32;
180*35ffd701SAndroid Build Coastguard Worker             break;
181*35ffd701SAndroid Build Coastguard Worker         case TEST_BPP_64:
182*35ffd701SAndroid Build Coastguard Worker             Bpp = 64;
183*35ffd701SAndroid Build Coastguard Worker             break;
184*35ffd701SAndroid Build Coastguard Worker         case TEST_BPP_128:
185*35ffd701SAndroid Build Coastguard Worker             Bpp = 128;
186*35ffd701SAndroid Build Coastguard Worker             break;
187*35ffd701SAndroid Build Coastguard Worker         default:
188*35ffd701SAndroid Build Coastguard Worker             break;
189*35ffd701SAndroid Build Coastguard Worker         }
190*35ffd701SAndroid Build Coastguard Worker 
191*35ffd701SAndroid Build Coastguard Worker         return Bpp >> 3;
192*35ffd701SAndroid Build Coastguard Worker     }
193*35ffd701SAndroid Build Coastguard Worker 
194*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
195*35ffd701SAndroid Build Coastguard Worker     /// Set the tile flag in Gmm ResCreate Params
196*35ffd701SAndroid Build Coastguard Worker     ///
197*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  Parms: Gmm Rescreate params
198*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  Tile: Tile Type
199*35ffd701SAndroid Build Coastguard Worker     ///
200*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
SetTileFlag(GMM_RESCREATE_PARAMS & Params,TEST_TILE_TYPE Tile)201*35ffd701SAndroid Build Coastguard Worker     void SetTileFlag(GMM_RESCREATE_PARAMS &Params, TEST_TILE_TYPE Tile)
202*35ffd701SAndroid Build Coastguard Worker     {
203*35ffd701SAndroid Build Coastguard Worker         switch (Tile)
204*35ffd701SAndroid Build Coastguard Worker         {
205*35ffd701SAndroid Build Coastguard Worker             case TEST_LINEAR:
206*35ffd701SAndroid Build Coastguard Worker                 Params.Flags.Info.Linear = 1;
207*35ffd701SAndroid Build Coastguard Worker                 break;
208*35ffd701SAndroid Build Coastguard Worker             case TEST_TILEX:
209*35ffd701SAndroid Build Coastguard Worker                 Params.Flags.Info.TiledX = 1;
210*35ffd701SAndroid Build Coastguard Worker                 break;
211*35ffd701SAndroid Build Coastguard Worker             case TEST_TILEY:
212*35ffd701SAndroid Build Coastguard Worker 	            if (pGfxAdapterInfo->SkuTable.FtrTileY)
213*35ffd701SAndroid Build Coastguard Worker 	            {
214*35ffd701SAndroid Build Coastguard Worker 	                Params.Flags.Info.TiledY = 1;
215*35ffd701SAndroid Build Coastguard Worker 	            }
216*35ffd701SAndroid Build Coastguard Worker 	            else
217*35ffd701SAndroid Build Coastguard Worker 	            {
218*35ffd701SAndroid Build Coastguard Worker 	                Params.Flags.Info.Tile4 = 1;
219*35ffd701SAndroid Build Coastguard Worker 	            }
220*35ffd701SAndroid Build Coastguard Worker 	            break;
221*35ffd701SAndroid Build Coastguard Worker         case TEST_TILEYF:
222*35ffd701SAndroid Build Coastguard Worker             Params.Flags.Info.TiledY  = 1;
223*35ffd701SAndroid Build Coastguard Worker             Params.Flags.Info.TiledYf = 1;
224*35ffd701SAndroid Build Coastguard Worker             break;
225*35ffd701SAndroid Build Coastguard Worker         case TEST_TILEYS:
226*35ffd701SAndroid Build Coastguard Worker             if (pGfxAdapterInfo->SkuTable.FtrTileY)
227*35ffd701SAndroid Build Coastguard Worker             {
228*35ffd701SAndroid Build Coastguard Worker                 Params.Flags.Info.TiledY  = 1;
229*35ffd701SAndroid Build Coastguard Worker                 Params.Flags.Info.TiledYs = 1;
230*35ffd701SAndroid Build Coastguard Worker             }
231*35ffd701SAndroid Build Coastguard Worker             else
232*35ffd701SAndroid Build Coastguard Worker             {
233*35ffd701SAndroid Build Coastguard Worker                 Params.Flags.Info.Tile64 = 1;
234*35ffd701SAndroid Build Coastguard Worker             }
235*35ffd701SAndroid Build Coastguard Worker             break;
236*35ffd701SAndroid Build Coastguard Worker         default:
237*35ffd701SAndroid Build Coastguard Worker             break;
238*35ffd701SAndroid Build Coastguard Worker         }
239*35ffd701SAndroid Build Coastguard Worker     }
240*35ffd701SAndroid Build Coastguard Worker 
241*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
242*35ffd701SAndroid Build Coastguard Worker     /// Set the tile flag in Gmm Custom ResCreate Params
243*35ffd701SAndroid Build Coastguard Worker     ///
244*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  Parms: Gmm Rescreate params
245*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  Tile: Tile Type
246*35ffd701SAndroid Build Coastguard Worker     ///
247*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
SetTileFlag_Custom(GMM_RESCREATE_CUSTOM_PARAMS & Params,TEST_TILE_TYPE Tile)248*35ffd701SAndroid Build Coastguard Worker     void SetTileFlag_Custom(GMM_RESCREATE_CUSTOM_PARAMS& Params, TEST_TILE_TYPE Tile)
249*35ffd701SAndroid Build Coastguard Worker     {
250*35ffd701SAndroid Build Coastguard Worker         switch (Tile)
251*35ffd701SAndroid Build Coastguard Worker         {
252*35ffd701SAndroid Build Coastguard Worker         case TEST_LINEAR:
253*35ffd701SAndroid Build Coastguard Worker             Params.Flags.Info.Linear = 1;
254*35ffd701SAndroid Build Coastguard Worker             break;
255*35ffd701SAndroid Build Coastguard Worker         case TEST_TILEX:
256*35ffd701SAndroid Build Coastguard Worker             Params.Flags.Info.TiledX = 1;
257*35ffd701SAndroid Build Coastguard Worker             break;
258*35ffd701SAndroid Build Coastguard Worker         case TEST_TILEY:
259*35ffd701SAndroid Build Coastguard Worker             if (pGfxAdapterInfo->SkuTable.FtrTileY)
260*35ffd701SAndroid Build Coastguard Worker             {
261*35ffd701SAndroid Build Coastguard Worker                 Params.Flags.Info.TiledY = 1;
262*35ffd701SAndroid Build Coastguard Worker             }
263*35ffd701SAndroid Build Coastguard Worker             else
264*35ffd701SAndroid Build Coastguard Worker             {
265*35ffd701SAndroid Build Coastguard Worker                 Params.Flags.Info.Tile4 = 1;
266*35ffd701SAndroid Build Coastguard Worker             }
267*35ffd701SAndroid Build Coastguard Worker             break;
268*35ffd701SAndroid Build Coastguard Worker         case TEST_TILEYF:
269*35ffd701SAndroid Build Coastguard Worker             Params.Flags.Info.TiledY = 1;
270*35ffd701SAndroid Build Coastguard Worker             Params.Flags.Info.TiledYf = 1;
271*35ffd701SAndroid Build Coastguard Worker             break;
272*35ffd701SAndroid Build Coastguard Worker         case TEST_TILEYS:
273*35ffd701SAndroid Build Coastguard Worker             if (pGfxAdapterInfo->SkuTable.FtrTileY)
274*35ffd701SAndroid Build Coastguard Worker             {
275*35ffd701SAndroid Build Coastguard Worker                 Params.Flags.Info.TiledY  = 1;
276*35ffd701SAndroid Build Coastguard Worker                 Params.Flags.Info.TiledYs = 1;
277*35ffd701SAndroid Build Coastguard Worker             }
278*35ffd701SAndroid Build Coastguard Worker             else
279*35ffd701SAndroid Build Coastguard Worker             {
280*35ffd701SAndroid Build Coastguard Worker                 Params.Flags.Info.Tile64 = 1;
281*35ffd701SAndroid Build Coastguard Worker             }
282*35ffd701SAndroid Build Coastguard Worker             break;
283*35ffd701SAndroid Build Coastguard Worker         default:
284*35ffd701SAndroid Build Coastguard Worker             break;
285*35ffd701SAndroid Build Coastguard Worker         }
286*35ffd701SAndroid Build Coastguard Worker     }
287*35ffd701SAndroid Build Coastguard Worker 
288*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
289*35ffd701SAndroid Build Coastguard Worker     /// Sets Resource Type in GmmParams
290*35ffd701SAndroid Build Coastguard Worker     ///
291*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  Params: GmmParams
292*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ResType: Resource type
293*35ffd701SAndroid Build Coastguard Worker     ///
294*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
SetResType(GMM_RESCREATE_PARAMS & Params,TEST_RESOURCE_TYPE ResType)295*35ffd701SAndroid Build Coastguard Worker     void SetResType(GMM_RESCREATE_PARAMS& Params, TEST_RESOURCE_TYPE ResType)
296*35ffd701SAndroid Build Coastguard Worker     {
297*35ffd701SAndroid Build Coastguard Worker         Params.Type = static_cast<GMM_RESOURCE_TYPE>((ResType == TEST_RESOURCE_BUFFER) ? ResType + 2 : ResType + 1);
298*35ffd701SAndroid Build Coastguard Worker     }
299*35ffd701SAndroid Build Coastguard Worker 
300*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
301*35ffd701SAndroid Build Coastguard Worker     /// Sets RenderTarget or Depth Gpu Flags in GmmParams
302*35ffd701SAndroid Build Coastguard Worker     ///
303*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  Params: GmmParams
304*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  IsRT:  true for RT, false for Depth
305*35ffd701SAndroid Build Coastguard Worker     ///
306*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
SetResGpuFlags(GMM_RESCREATE_PARAMS & Params,bool IsRT)307*35ffd701SAndroid Build Coastguard Worker     void SetResGpuFlags(GMM_RESCREATE_PARAMS& Params, bool IsRT)
308*35ffd701SAndroid Build Coastguard Worker     {
309*35ffd701SAndroid Build Coastguard Worker         if (IsRT)
310*35ffd701SAndroid Build Coastguard Worker         {
311*35ffd701SAndroid Build Coastguard Worker             Params.Flags.Gpu.Depth = 0;
312*35ffd701SAndroid Build Coastguard Worker             Params.Flags.Gpu.RenderTarget = 1;
313*35ffd701SAndroid Build Coastguard Worker         }
314*35ffd701SAndroid Build Coastguard Worker         else
315*35ffd701SAndroid Build Coastguard Worker         {
316*35ffd701SAndroid Build Coastguard Worker             Params.Flags.Gpu.Depth = 1;
317*35ffd701SAndroid Build Coastguard Worker             Params.Flags.Gpu.RenderTarget = 0;
318*35ffd701SAndroid Build Coastguard Worker         }
319*35ffd701SAndroid Build Coastguard Worker     }
320*35ffd701SAndroid Build Coastguard Worker 
321*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
322*35ffd701SAndroid Build Coastguard Worker     /// Sets ArraySize in GmmParams
323*35ffd701SAndroid Build Coastguard Worker     ///
324*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  Params: GmmParams
325*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  Size: Array Size
326*35ffd701SAndroid Build Coastguard Worker     ///
327*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
SetResArraySize(GMM_RESCREATE_PARAMS & Params,int Size)328*35ffd701SAndroid Build Coastguard Worker     void SetResArraySize(GMM_RESCREATE_PARAMS& Params, int Size)
329*35ffd701SAndroid Build Coastguard Worker     {
330*35ffd701SAndroid Build Coastguard Worker         Params.ArraySize = Size;
331*35ffd701SAndroid Build Coastguard Worker     }
332*35ffd701SAndroid Build Coastguard Worker 
333*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
334*35ffd701SAndroid Build Coastguard Worker     /// Get the Tile dimension and H/V Align for MSS and MCS surfaces
335*35ffd701SAndroid Build Coastguard Worker     ///
336*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  Bpp: bits per pixel
337*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  isRT: Request is for RT or Depth MSS
338*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  Tiling: Tile Type
339*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  MSAA: Num of Samples
340*35ffd701SAndroid Build Coastguard Worker     /// @param[out] HAlign: H Align for MSS
341*35ffd701SAndroid Build Coastguard Worker     /// @param[out] VAlign: V Align for MSS
342*35ffd701SAndroid Build Coastguard Worker     /// @param[out] TileDimX: Tile Width for given Tile, Resource, bpp
343*35ffd701SAndroid Build Coastguard Worker     /// @param[out] TileDimY: Tile Height for given Tile, Resource, bpp
344*35ffd701SAndroid Build Coastguard Worker     /// @param[out] MCSHAlign: H Align for MCS
345*35ffd701SAndroid Build Coastguard Worker     /// @param[out] MCSVAlign: V Align for MCS
346*35ffd701SAndroid Build Coastguard Worker     ///
347*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
GetAlignmentAndTileDimensionsForMSAA(TEST_BPP Bpp,bool isRT,TEST_TILE_TYPE Tiling,TEST_MSAA MSAA,uint32_t & TileDimX,uint32_t & TileDimY,uint32_t & HAlign,uint32_t & VAlign,uint32_t & ExpectedMCSBpp,uint32_t & MCSHAlign,uint32_t & MCSVAlign)348*35ffd701SAndroid Build Coastguard Worker     void GetAlignmentAndTileDimensionsForMSAA(TEST_BPP Bpp, bool isRT, TEST_TILE_TYPE Tiling, TEST_MSAA MSAA,
349*35ffd701SAndroid Build Coastguard Worker         uint32_t& TileDimX, uint32_t& TileDimY, uint32_t& HAlign, uint32_t& VAlign,
350*35ffd701SAndroid Build Coastguard Worker         uint32_t& ExpectedMCSBpp, uint32_t &MCSHAlign, uint32_t &MCSVAlign)
351*35ffd701SAndroid Build Coastguard Worker     {
352*35ffd701SAndroid Build Coastguard Worker         const uint32_t MSSTileSize[TEST_TILE_MAX][TEST_BPP_MAX][2] = {
353*35ffd701SAndroid Build Coastguard Worker         {{64, 1}, {64, 1}, {64, 1}, {64, 1}, {64, 1}},                //Linear - no Tile Size, but min PitchAlign = 64
354*35ffd701SAndroid Build Coastguard Worker         {{512, 8}, {512, 8}, {512, 8}, {512, 8}, {512, 8}},           //TileX
355*35ffd701SAndroid Build Coastguard Worker         {{128, 32}, {128, 32}, {128, 32}, {128, 32}, {128, 32}},      //TileY
356*35ffd701SAndroid Build Coastguard Worker         {{256, 256}, {512, 128}, {512, 128}, {1024, 64}, {1024, 64}}, //TileYs
357*35ffd701SAndroid Build Coastguard Worker         {{64, 64}, {128, 32}, {128, 32}, {256, 16}, {256, 16}},       //TileYf
358*35ffd701SAndroid Build Coastguard Worker         {{128, 32}, {128, 32}, {128, 32}, {128, 32}, {128, 32}},      //Tile4
359*35ffd701SAndroid Build Coastguard Worker         {{256, 256}, {512, 128}, {512, 128}, {1024, 64}, {1024, 64}}  //Tile64
360*35ffd701SAndroid Build Coastguard Worker 		};
361*35ffd701SAndroid Build Coastguard Worker         uint32_t WMul = 1, HMul = 1;
362*35ffd701SAndroid Build Coastguard Worker 
363*35ffd701SAndroid Build Coastguard Worker         HAlign = 16;                              // RT H/VAlign
364*35ffd701SAndroid Build Coastguard Worker         VAlign = 4;
365*35ffd701SAndroid Build Coastguard Worker 
366*35ffd701SAndroid Build Coastguard Worker         if (!isRT)
367*35ffd701SAndroid Build Coastguard Worker         {
368*35ffd701SAndroid Build Coastguard Worker             HAlign = (Bpp == TEST_BPP_16) ? 8 : 4;     //Depth 16bit = 8x4, ow 4x4
369*35ffd701SAndroid Build Coastguard Worker             VAlign = 4;
370*35ffd701SAndroid Build Coastguard Worker             MCSHAlign = 4;                            //MCS uses base H/VAlign for 8bpp
371*35ffd701SAndroid Build Coastguard Worker         }
372*35ffd701SAndroid Build Coastguard Worker 
373*35ffd701SAndroid Build Coastguard Worker         uint32_t Tile[2] = {MSSTileSize[Tiling][Bpp][0], MSSTileSize[Tiling][Bpp][1]};
374*35ffd701SAndroid Build Coastguard Worker         if (Tiling == TEST_TILEYS || Tiling == TEST_TILEYF || Tiling == TEST_TILE64)
375*35ffd701SAndroid Build Coastguard Worker         {
376*35ffd701SAndroid Build Coastguard Worker             GetInterleaveMSSPattern(MSAA, WMul, HMul, isRT, Bpp);
377*35ffd701SAndroid Build Coastguard Worker 
378*35ffd701SAndroid Build Coastguard Worker             //Std Tiling interleaves MSAA into 1x, decreasing std Tile size for MSAA'd sample
379*35ffd701SAndroid Build Coastguard Worker             //Std Tiling types should have std size alignment always
380*35ffd701SAndroid Build Coastguard Worker             Tile[0] = HAlign = (isRT) ? (MSSTileSize[Tiling][Bpp][0] / WMul) : MSSTileSize[Tiling][Bpp][0];
381*35ffd701SAndroid Build Coastguard Worker             Tile[1] = VAlign = (isRT) ? (MSSTileSize[Tiling][Bpp][1] / HMul) : MSSTileSize[Tiling][Bpp][1];
382*35ffd701SAndroid Build Coastguard Worker 
383*35ffd701SAndroid Build Coastguard Worker             HAlign /= pow(2.0, Bpp);      //Unit alignment in pixels
384*35ffd701SAndroid Build Coastguard Worker         }
385*35ffd701SAndroid Build Coastguard Worker         TileDimX = Tile[0];
386*35ffd701SAndroid Build Coastguard Worker         TileDimY = Tile[1];
387*35ffd701SAndroid Build Coastguard Worker 
388*35ffd701SAndroid Build Coastguard Worker         ExpectedMCSBpp = (MSAA == MSAA_2x || MSAA == MSAA_4x) ? 1 :
389*35ffd701SAndroid Build Coastguard Worker             (MSAA == MSAA_8x) ? 4 : 8;
390*35ffd701SAndroid Build Coastguard Worker 
391*35ffd701SAndroid Build Coastguard Worker         uint32_t ExpectedMcsBppIdx = log2(ExpectedMCSBpp);
392*35ffd701SAndroid Build Coastguard Worker 
393*35ffd701SAndroid Build Coastguard Worker         MCSHAlign = isRT ? HAlign : MCSHAlign;              //MCS uses base H/V ALign for 8bpp
394*35ffd701SAndroid Build Coastguard Worker         MCSVAlign = VAlign;
395*35ffd701SAndroid Build Coastguard Worker 
396*35ffd701SAndroid Build Coastguard Worker         MCSHAlign = (isRT && (Tiling == TEST_TILEYS || Tiling == TEST_TILEYF)) ?
397*35ffd701SAndroid Build Coastguard Worker                              MSSTileSize[Tiling][ExpectedMcsBppIdx][0] / (WMul * ExpectedMCSBpp) :         //Std Tile dim in pixels
398*35ffd701SAndroid Build Coastguard Worker                             (Tiling == TEST_TILEYS || Tiling == TEST_TILEYF) ?
399*35ffd701SAndroid Build Coastguard Worker                              MSSTileSize[Tiling][ExpectedMcsBppIdx][0] / ExpectedMCSBpp : MCSHAlign;       //For legacy tile, MCS alignment is base (RT or Depth) alignment
400*35ffd701SAndroid Build Coastguard Worker         MCSVAlign = (isRT && (Tiling == TEST_TILEYS || Tiling == TEST_TILEYF)) ? MSSTileSize[Tiling][ExpectedMcsBppIdx][1] / HMul :
401*35ffd701SAndroid Build Coastguard Worker                             (Tiling == TEST_TILEYS || Tiling == TEST_TILEYF) ? MSSTileSize[Tiling][ExpectedMcsBppIdx][1] : MCSVAlign;
402*35ffd701SAndroid Build Coastguard Worker     }
403*35ffd701SAndroid Build Coastguard Worker 
404*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
405*35ffd701SAndroid Build Coastguard Worker     /// Get the interleave pattern for given Num Samples
406*35ffd701SAndroid Build Coastguard Worker     ///
407*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  MSAA: Num of Samples
408*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  IsRT: !RT means Depth resource
409*35ffd701SAndroid Build Coastguard Worker     /// @param[out] WidthMultiplier: Number of samples arranged side-by-side
410*35ffd701SAndroid Build Coastguard Worker     /// @param[out] HeightMultiplier: Number of samples arranged top-bottom
411*35ffd701SAndroid Build Coastguard Worker     ///
412*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
GetInterleaveMSSPattern(TEST_MSAA MSAA,uint32_t & WidthMultiplier,uint32_t & HeightMultiplier,bool IsRT,TEST_BPP Bpp)413*35ffd701SAndroid Build Coastguard Worker     void GetInterleaveMSSPattern(TEST_MSAA MSAA, uint32_t &WidthMultiplier, uint32_t &HeightMultiplier, bool IsRT, TEST_BPP Bpp)
414*35ffd701SAndroid Build Coastguard Worker     {
415*35ffd701SAndroid Build Coastguard Worker         WidthMultiplier = 1; HeightMultiplier = 1;
416*35ffd701SAndroid Build Coastguard Worker 
417*35ffd701SAndroid Build Coastguard Worker         switch (MSAA)
418*35ffd701SAndroid Build Coastguard Worker         {
419*35ffd701SAndroid Build Coastguard Worker         case MSAA_2x:
420*35ffd701SAndroid Build Coastguard Worker 	            if (IsRT && pGfxAdapterInfo->SkuTable.FtrXe2PlusTiling && (Bpp == TEST_BPP_128))
421*35ffd701SAndroid Build Coastguard Worker 	            {
422*35ffd701SAndroid Build Coastguard Worker 	                HeightMultiplier = 2;
423*35ffd701SAndroid Build Coastguard Worker 	            }
424*35ffd701SAndroid Build Coastguard Worker 	            else
425*35ffd701SAndroid Build Coastguard Worker 	            {
426*35ffd701SAndroid Build Coastguard Worker 	                WidthMultiplier = 2;
427*35ffd701SAndroid Build Coastguard Worker 	            }
428*35ffd701SAndroid Build Coastguard Worker                 break;
429*35ffd701SAndroid Build Coastguard Worker             case MSAA_4x:
430*35ffd701SAndroid Build Coastguard Worker                 WidthMultiplier  = 2;
431*35ffd701SAndroid Build Coastguard Worker                 HeightMultiplier = 2;
432*35ffd701SAndroid Build Coastguard Worker                 break;
433*35ffd701SAndroid Build Coastguard Worker             case MSAA_8x:
434*35ffd701SAndroid Build Coastguard Worker                 WidthMultiplier  = 4;
435*35ffd701SAndroid Build Coastguard Worker                 HeightMultiplier = 2;
436*35ffd701SAndroid Build Coastguard Worker 	            if (IsRT && pGfxAdapterInfo->SkuTable.FtrXe2PlusTiling && ((Bpp == TEST_BPP_8) || (Bpp == TEST_BPP_32)))
437*35ffd701SAndroid Build Coastguard Worker 	            {
438*35ffd701SAndroid Build Coastguard Worker 	                WidthMultiplier  = 2;
439*35ffd701SAndroid Build Coastguard Worker 	                HeightMultiplier = 4;
440*35ffd701SAndroid Build Coastguard Worker 	            }
441*35ffd701SAndroid Build Coastguard Worker 	            else if (IsRT && !pGfxAdapterInfo->SkuTable.FtrTileY && !pGfxAdapterInfo->SkuTable.FtrXe2PlusTiling)
442*35ffd701SAndroid Build Coastguard Worker                 {
443*35ffd701SAndroid Build Coastguard Worker                     WidthMultiplier  = 2;
444*35ffd701SAndroid Build Coastguard Worker                     HeightMultiplier = 2;
445*35ffd701SAndroid Build Coastguard Worker                 }
446*35ffd701SAndroid Build Coastguard Worker                 break;
447*35ffd701SAndroid Build Coastguard Worker             case MSAA_16x:
448*35ffd701SAndroid Build Coastguard Worker                 WidthMultiplier  = 4;
449*35ffd701SAndroid Build Coastguard Worker                 HeightMultiplier = 4;
450*35ffd701SAndroid Build Coastguard Worker 	            if (IsRT && pGfxAdapterInfo->SkuTable.FtrXe2PlusTiling && (Bpp == TEST_BPP_64))
451*35ffd701SAndroid Build Coastguard Worker 	            {
452*35ffd701SAndroid Build Coastguard Worker 	                WidthMultiplier  = 8;
453*35ffd701SAndroid Build Coastguard Worker 	                HeightMultiplier = 2;
454*35ffd701SAndroid Build Coastguard Worker 	            }
455*35ffd701SAndroid Build Coastguard Worker 	            else if (IsRT && !pGfxAdapterInfo->SkuTable.FtrTileY && !pGfxAdapterInfo->SkuTable.FtrXe2PlusTiling)
456*35ffd701SAndroid Build Coastguard Worker                 {
457*35ffd701SAndroid Build Coastguard Worker                     WidthMultiplier  = 2;
458*35ffd701SAndroid Build Coastguard Worker                     HeightMultiplier = 2;
459*35ffd701SAndroid Build Coastguard Worker                 }
460*35ffd701SAndroid Build Coastguard Worker                 break;
461*35ffd701SAndroid Build Coastguard Worker             default:
462*35ffd701SAndroid Build Coastguard Worker                 break;
463*35ffd701SAndroid Build Coastguard Worker 
464*35ffd701SAndroid Build Coastguard Worker         }
465*35ffd701SAndroid Build Coastguard Worker     }
466*35ffd701SAndroid Build Coastguard Worker 
467*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
468*35ffd701SAndroid Build Coastguard Worker     /// Verifies if HAlign matches the expected value.  Fails test if value doesn't match
469*35ffd701SAndroid Build Coastguard Worker     ///
470*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ResourceInfo: ResourceInfo returned by GmmLib
471*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ExpectedValue: expected value to check against
472*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
473*35ffd701SAndroid Build Coastguard Worker     template <bool Verify>
VerifyResourceHAlign(GMM_RESOURCE_INFO * ResourceInfo,uint32_t ExpectedValue)474*35ffd701SAndroid Build Coastguard Worker     void VerifyResourceHAlign(GMM_RESOURCE_INFO *ResourceInfo, uint32_t ExpectedValue)
475*35ffd701SAndroid Build Coastguard Worker     {
476*35ffd701SAndroid Build Coastguard Worker         if(Verify)
477*35ffd701SAndroid Build Coastguard Worker         {
478*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ExpectedValue, ResourceInfo->GetHAlign());
479*35ffd701SAndroid Build Coastguard Worker         }
480*35ffd701SAndroid Build Coastguard Worker     }
481*35ffd701SAndroid Build Coastguard Worker 
482*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
483*35ffd701SAndroid Build Coastguard Worker     /// Verifies if HAlign matches the expected value.  Fails test if value doesn't match
484*35ffd701SAndroid Build Coastguard Worker     ///
485*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ResourceInfo: ResourceInfo returned by GmmLib
486*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ExpectedValue: expected value to check against
487*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
488*35ffd701SAndroid Build Coastguard Worker     template <bool Verify>
VerifyResourceVAlign(GMM_RESOURCE_INFO * ResourceInfo,uint32_t ExpectedValue)489*35ffd701SAndroid Build Coastguard Worker     void VerifyResourceVAlign(GMM_RESOURCE_INFO *ResourceInfo, uint32_t ExpectedValue)
490*35ffd701SAndroid Build Coastguard Worker     {
491*35ffd701SAndroid Build Coastguard Worker         if(Verify)
492*35ffd701SAndroid Build Coastguard Worker         {
493*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ExpectedValue, ResourceInfo->GetVAlign());
494*35ffd701SAndroid Build Coastguard Worker         }
495*35ffd701SAndroid Build Coastguard Worker     }
496*35ffd701SAndroid Build Coastguard Worker 
497*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
498*35ffd701SAndroid Build Coastguard Worker     /// Verifies if Pitch (in bytes) matches the expected value.  Fails test if value
499*35ffd701SAndroid Build Coastguard Worker     /// doesn't match
500*35ffd701SAndroid Build Coastguard Worker     ///
501*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ResourceInfo: ResourceInfo returned by GmmLib
502*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ExpectedValue: expected value to check against
503*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
504*35ffd701SAndroid Build Coastguard Worker     template <bool Verify>
VerifyResourcePitch(GMM_RESOURCE_INFO * ResourceInfo,uint32_t ExpectedValue)505*35ffd701SAndroid Build Coastguard Worker     void VerifyResourcePitch(GMM_RESOURCE_INFO *ResourceInfo, uint32_t ExpectedValue)
506*35ffd701SAndroid Build Coastguard Worker     {
507*35ffd701SAndroid Build Coastguard Worker         if(Verify)
508*35ffd701SAndroid Build Coastguard Worker         {
509*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ExpectedValue, ResourceInfo->GetRenderPitch());
510*35ffd701SAndroid Build Coastguard Worker         }
511*35ffd701SAndroid Build Coastguard Worker     }
512*35ffd701SAndroid Build Coastguard Worker 
513*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
514*35ffd701SAndroid Build Coastguard Worker     /// Verifies if Pitch in tiles matches the expected value.  Fails test if value
515*35ffd701SAndroid Build Coastguard Worker     /// doesn't match
516*35ffd701SAndroid Build Coastguard Worker     ///
517*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ResourceInfo: ResourceInfo returned by GmmLib
518*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ExpectedValue: expected value to check against
519*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
520*35ffd701SAndroid Build Coastguard Worker     template <bool Verify>
VerifyResourcePitchInTiles(GMM_RESOURCE_INFO * ResourceInfo,uint32_t ExpectedValue)521*35ffd701SAndroid Build Coastguard Worker     void VerifyResourcePitchInTiles(GMM_RESOURCE_INFO *ResourceInfo, uint32_t ExpectedValue)
522*35ffd701SAndroid Build Coastguard Worker     {
523*35ffd701SAndroid Build Coastguard Worker         if(Verify)
524*35ffd701SAndroid Build Coastguard Worker         {
525*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ExpectedValue, ResourceInfo->GetRenderPitchTiles());
526*35ffd701SAndroid Build Coastguard Worker         }
527*35ffd701SAndroid Build Coastguard Worker     }
528*35ffd701SAndroid Build Coastguard Worker 
529*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
530*35ffd701SAndroid Build Coastguard Worker     /// Verifies if Size matches the expected value.  Fails test if value doesn't match
531*35ffd701SAndroid Build Coastguard Worker     ///
532*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ResourceInfo: ResourceInfo returned by GmmLib
533*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ExpectedValue: expected value to check against
534*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
535*35ffd701SAndroid Build Coastguard Worker     template <bool Verify>
VerifyResourceSize(GMM_RESOURCE_INFO * ResourceInfo,uint64_t ExpectedValue)536*35ffd701SAndroid Build Coastguard Worker     void VerifyResourceSize(GMM_RESOURCE_INFO *ResourceInfo, uint64_t ExpectedValue)
537*35ffd701SAndroid Build Coastguard Worker     {
538*35ffd701SAndroid Build Coastguard Worker         if(Verify)
539*35ffd701SAndroid Build Coastguard Worker         {
540*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ExpectedValue, ResourceInfo->GetSizeMainSurface());
541*35ffd701SAndroid Build Coastguard Worker         }
542*35ffd701SAndroid Build Coastguard Worker     }
543*35ffd701SAndroid Build Coastguard Worker 
544*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
545*35ffd701SAndroid Build Coastguard Worker     /// Verifies if AuxCCSize matches the expected value.  Fails test if value doesn't match
546*35ffd701SAndroid Build Coastguard Worker     ///
547*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ResourceInfo: ResourceInfo returned by GmmLib
548*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ExpectedValue: expected value to check against
549*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
550*35ffd701SAndroid Build Coastguard Worker     template <bool Verify>
VerifyResourceAuxCCSize(GMM_RESOURCE_INFO * ResourceInfo,uint64_t ExpectedValue)551*35ffd701SAndroid Build Coastguard Worker     void VerifyResourceAuxCCSize(GMM_RESOURCE_INFO *ResourceInfo, uint64_t ExpectedValue)
552*35ffd701SAndroid Build Coastguard Worker     {
553*35ffd701SAndroid Build Coastguard Worker         if(Verify)
554*35ffd701SAndroid Build Coastguard Worker         {
555*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ExpectedValue, ResourceInfo->GetSizeAuxSurface(GMM_AUX_CC));
556*35ffd701SAndroid Build Coastguard Worker         }
557*35ffd701SAndroid Build Coastguard Worker     }
558*35ffd701SAndroid Build Coastguard Worker 
559*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
560*35ffd701SAndroid Build Coastguard Worker     /// Verifies if QPitch matches the expected value.  Fails test if value doesn't match
561*35ffd701SAndroid Build Coastguard Worker     ///
562*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ResourceInfo: ResourceInfo returned by GmmLib
563*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ExpectedValue: expected value to check against
564*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
565*35ffd701SAndroid Build Coastguard Worker     template <bool Verify>
VerifyResourceQPitch(GMM_RESOURCE_INFO * ResourceInfo,uint64_t ExpectedValue)566*35ffd701SAndroid Build Coastguard Worker     void VerifyResourceQPitch(GMM_RESOURCE_INFO *ResourceInfo, uint64_t ExpectedValue)
567*35ffd701SAndroid Build Coastguard Worker     {
568*35ffd701SAndroid Build Coastguard Worker         if(Verify)
569*35ffd701SAndroid Build Coastguard Worker         {
570*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(ExpectedValue, ResourceInfo->GetQPitch());
571*35ffd701SAndroid Build Coastguard Worker         }
572*35ffd701SAndroid Build Coastguard Worker     }
573*35ffd701SAndroid Build Coastguard Worker 
574*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
575*35ffd701SAndroid Build Coastguard Worker     /// Verifies if Tile4 info flag is set or not.  Fails test if Tile4 flag is not set
576*35ffd701SAndroid Build Coastguard Worker     ///
577*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ResourceInfo: ResourceInfo returned by GmmLib
578*35ffd701SAndroid Build Coastguard Worker     /// @param[in]  ExpectedValue: expected value to check against
579*35ffd701SAndroid Build Coastguard Worker     /////////////////////////////////////////////////////////////////////////////////////
580*35ffd701SAndroid Build Coastguard Worker     template <bool Verify>
VerifyResourceTile4(GMM_RESOURCE_INFO * ResourceInfo,bool ExpectedValue)581*35ffd701SAndroid Build Coastguard Worker     void VerifyResourceTile4(GMM_RESOURCE_INFO *ResourceInfo, bool ExpectedValue)
582*35ffd701SAndroid Build Coastguard Worker     {
583*35ffd701SAndroid Build Coastguard Worker         if(Verify)
584*35ffd701SAndroid Build Coastguard Worker         {
585*35ffd701SAndroid Build Coastguard Worker             EXPECT_EQ(true, (GMM_IS_4KB_TILE(ResourceInfo->GetResFlags())));
586*35ffd701SAndroid Build Coastguard Worker         }
587*35ffd701SAndroid Build Coastguard Worker     }
588*35ffd701SAndroid Build Coastguard Worker 
589*35ffd701SAndroid Build Coastguard Worker public:
590*35ffd701SAndroid Build Coastguard Worker     CTestResource();
591*35ffd701SAndroid Build Coastguard Worker     ~CTestResource();
592*35ffd701SAndroid Build Coastguard Worker 
593*35ffd701SAndroid Build Coastguard Worker     static void SetUpTestCase();
594*35ffd701SAndroid Build Coastguard Worker     static void TearDownTestCase();
595*35ffd701SAndroid Build Coastguard Worker 
596*35ffd701SAndroid Build Coastguard Worker };
597*35ffd701SAndroid Build Coastguard Worker 
598*35ffd701SAndroid Build Coastguard Worker 
599*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////
600*35ffd701SAndroid Build Coastguard Worker /// Fixture class for Resources targeted for CpuBlt. This is CpuBlt resource
601*35ffd701SAndroid Build Coastguard Worker /// test case. Inherits CTestResource class.
602*35ffd701SAndroid Build Coastguard Worker /// @see      CTestResource class
603*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////
604*35ffd701SAndroid Build Coastguard Worker class CTestCpuBltResource : public CTestResource
605*35ffd701SAndroid Build Coastguard Worker {
606*35ffd701SAndroid Build Coastguard Worker public:
607*35ffd701SAndroid Build Coastguard Worker     CTestCpuBltResource();
608*35ffd701SAndroid Build Coastguard Worker     ~CTestCpuBltResource();
609*35ffd701SAndroid Build Coastguard Worker 
610*35ffd701SAndroid Build Coastguard Worker     static void SetUpTestCase();
611*35ffd701SAndroid Build Coastguard Worker     static void TearDownTestCase();
612*35ffd701SAndroid Build Coastguard Worker 
613*35ffd701SAndroid Build Coastguard Worker };
614*35ffd701SAndroid Build Coastguard Worker 
615*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////
616*35ffd701SAndroid Build Coastguard Worker /// Helper function - builds list of input tuples
617*35ffd701SAndroid Build Coastguard Worker ///
618*35ffd701SAndroid Build Coastguard Worker /// @param[in/out]  List: vector of tuple<int,int,int,bool,int,int>
619*35ffd701SAndroid Build Coastguard Worker /// @param[in]  maxTestDimension: Number of elements in TestDimensions[]
620*35ffd701SAndroid Build Coastguard Worker /// @param[in]  TestArray: Number fo elements in TestArraySize
621*35ffd701SAndroid Build Coastguard Worker ///
622*35ffd701SAndroid Build Coastguard Worker /// @return   Number of tuples in the list
623*35ffd701SAndroid Build Coastguard Worker /// @see      GmmGen9ResourceULT.cpp
624*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////
625*35ffd701SAndroid Build Coastguard Worker int BuildInputIterator(std::vector<std::tuple<int, int, int, bool, int, int>> &List, int maxTestDimension, int TestArray, bool XEHPPlus);
626