1 /*========================== begin_copyright_notice ============================
2 
3 Copyright (C) 2017-2021 Intel Corporation
4 
5 SPDX-License-Identifier: MIT
6 
7 ============================= end_copyright_notice ===========================*/
8 
9 #pragma once
10 
11 #include "cmd_shared_enum_g8.h"
12 
13 // Set packing alignment to a single byte
14 #pragma pack(1)
15 
16 namespace G6HWC
17 {
18 
19 /*****************************************************************************\
20 STRUCT: SSharedStateBindingTableState (BINDING_TABLE_STATE)
21 \*****************************************************************************/
22 struct SSharedStateBindingTableState
23 {
24     // DWORD 0
25     union _DW0
26     {
27         struct _All
28         {
29             DWORD       _Unused                             : BITFIELD_RANGE(  0,4  );
30             DWORD       SurfaceStatePointer                 : BITFIELD_RANGE(  5,31 );  // GTT[31:5] S3DStateSurfaceState*
31         } All;
32 
33         DWORD           Value;
34     } DW0;
35 };
36 
37 static_assert(SIZE32(SSharedStateBindingTableState) == 1);
38 
39 /*****************************************************************************\
40 STRUCT: SGfxSamplerIndirectState (SAMPLER_INDIRECT_STATE)
41 \*****************************************************************************/
42 struct SGfxSamplerIndirectState
43 {
44     // DWORD 0
45     float   BorderColorRed;
46 
47     // DWORD 1
48     float   BorderColorGreen;
49 
50     // DWORD 2
51     float   BorderColorBlue;
52 
53     // DWORD 3
54     float   BorderColorAlpha;
55 
56     // DWORDs 4-11 should all be set to zero:
57     DWORD   _Unused1;
58     DWORD   _Unused2;
59     DWORD   _Unused3;
60     DWORD   _Unused4;
61     DWORD   _Unused5;
62     DWORD   _Unused6;
63     DWORD   _Unused7;
64     DWORD   _Unused8;
65 };
66 static_assert(SIZE32(SGfxSamplerIndirectState) == 12);
67 
68 /*****************************************************************************\
69 STRUCT: SSharedStateSamplerState ( SAMPLER_STATE )
70 \*****************************************************************************/
71 struct SSharedStateSamplerState
72 {
73     // DWORD 0
74     union _DW0
75     {
76         struct _All
77         {
78             DWORD       ShadowFunction                      : BITFIELD_RANGE(  0,2  );  // GFXSHAREDSTATE_PREFILTER_OPERATION
79             DWORD       TextureLODBias                      : BITFIELD_RANGE(  3,13 );  // 11-bit signed (S4.6) [-16.0, 16.0)
80             DWORD       MinModeFilter                       : BITFIELD_RANGE( 14,16 );  // GFXSHAREDSTATE_MAPFILTER
81             DWORD       MagModeFilter                       : BITFIELD_RANGE( 17,19 );  // GFXSHAREDSTATE_MAPFILTER
82             DWORD       MipModeFilter                       : BITFIELD_RANGE( 20,21 );  // GFXSHAREDSTATE_MIPFILTER
83             DWORD       BaseMipLevel                        : BITFIELD_RANGE( 22,26 );  // U4.1 [0,13]
84             DWORD       _Unused1                            : BITFIELD_BIT(      27 );
85             DWORD       LODPreClampEnable                   : BITFIELD_BIT(      28 );  // bool
86             DWORD       TextureBorderColorMode              : BITFIELD_BIT(      29 );  // GFXSHAREDSTATE_DEFAULTCOLOR_MODE
87             DWORD       _Unused2                            : BITFIELD_BIT(      30 );
88             DWORD       SamplerDisable                      : BITFIELD_BIT(      31 );  // bool
89         } All;
90 
91         struct _Gen7
92         {
93             DWORD       _Unused1                            : BITFIELD_BIT(      0  );  // Reserved
94             DWORD       TextureLODBias                      : BITFIELD_RANGE(  1,13 );  // S4.2 2's comp
95             DWORD       MinModeFilter                       : BITFIELD_RANGE( 14,16 );  // GFXSHAREDSTATE_MAPFILTER
96             DWORD       MagModeFilter                       : BITFIELD_RANGE( 17,19 );  // GFXSHAREDSTATE_MAPFILTER
97             DWORD       MipModeFilter                       : BITFIELD_RANGE( 20,21 );  // GFXSHAREDSTATE_MIPFILTER
98             DWORD       BaseMipLevel                        : BITFIELD_RANGE( 22,26 );  // U4.1 [0,13]
99             DWORD       _Unused2                            : BITFIELD_BIT(      27 );
100             DWORD       LODPreClampEnable                   : BITFIELD_BIT(      28 );  // bool
101             DWORD       TextureBorderColorMode              : BITFIELD_BIT(      29 );  // GFXSHAREDSTATE_DEFAULTCOLOR_MODE
102             DWORD       _Unused3                            : BITFIELD_BIT(      30 );
103             DWORD       SamplerDisable                      : BITFIELD_BIT(      31 );  // bool
104         } Gen7;
105 
106         struct _Gen9
107         {
108             DWORD       AnisotropicAlgorithm                : BITFIELD_BIT(      0  );  //
109             DWORD       TextureLODBias                      : BITFIELD_RANGE(  1,13 );  // S4.2 2's comp
110             DWORD       MinModeFilter                       : BITFIELD_RANGE( 14,16 );  // GFXSHAREDSTATE_MAPFILTER
111             DWORD       MagModeFilter                       : BITFIELD_RANGE( 17,19 );  // GFXSHAREDSTATE_MAPFILTER
112             DWORD       MipModeFilter                       : BITFIELD_RANGE( 20,21 );  // GFXSHAREDSTATE_MIPFILTER
113             DWORD       CoarseLODQualityMode                : BITFIELD_RANGE( 22,26 );  // U5
114             DWORD       _Unused1                            : BITFIELD_BIT(      27 );
115             DWORD       LODPreClampEnable                   : BITFIELD_BIT(      28 );  // bool
116             DWORD       TextureBorderColorMode              : BITFIELD_BIT(      29 );  // GFXSHAREDSTATE_DEFAULTCOLOR_MODE
117             DWORD       _Unused2                            : BITFIELD_BIT(      30 );
118             DWORD       SamplerDisable                      : BITFIELD_BIT(      31 );  // bool
119         } Gen9;
120 
121         struct _Gen10
122         {
123             DWORD       AnisotropicAlgorithm                : BITFIELD_BIT(      0  );  //
124             DWORD       TextureLODBias                      : BITFIELD_RANGE(  1,13 );  // S4.2 2's comp
125             DWORD       MinModeFilter                       : BITFIELD_RANGE( 14,16 );  // GFXSHAREDSTATE_MAPFILTER
126             DWORD       MagModeFilter                       : BITFIELD_RANGE( 17,19 );  // GFXSHAREDSTATE_MAPFILTER
127             DWORD       MipModeFilter                       : BITFIELD_RANGE( 20,21 );  // GFXSHAREDSTATE_MIPFILTER
128             DWORD       CoarseLODQualityMode                : BITFIELD_RANGE( 22,26 );  // U5
129             DWORD       LODPreClampEnable                   : BITFIELD_RANGE( 27,28 );  // bool
130             DWORD       TextureBorderColorMode              : BITFIELD_BIT(      29 );  // GFXSHAREDSTATE_DEFAULTCOLOR_MODE
131             DWORD       CpsLODCompensation                  : BITFIELD_BIT(      30 );  // CPS LOD Compensation Enable
132             DWORD       SamplerDisable                      : BITFIELD_BIT(      31 );  // bool
133         } Gen10;
134 
135         DWORD   Value;
136     } DW0;
137 
138     // DWORD 1
139     union _DW1
140     {
141         struct _All
142         {
143             DWORD       TCZAddressControlMode               : BITFIELD_RANGE(  0,2  );  // GFXSHAREDSTATE_TEXCOORDMODE
144             DWORD       TCYAddressControlMode               : BITFIELD_RANGE(  3,5  );  // GFXSHAREDSTATE_TEXCOORDMODE
145             DWORD       TCXAddressControlMode               : BITFIELD_RANGE(  6,8  );  // GFXSHAREDSTATE_TEXCOORDMODE
146             DWORD       CubeSurfaceControlMode              : BITFIELD_BIT(      9  );  // GFXSHAREDSTATE_CUBESURFACECONTROLMODE
147             DWORD       _Unused                             : BITFIELD_RANGE( 10,11 );
148             DWORD       MaxLOD                              : BITFIELD_RANGE( 12,21 );  // U4.6 in LOD units [0.0,13.0]
149             DWORD       MinLOD                              : BITFIELD_RANGE( 22,31 );  // U4.6 in LOD units [0.0,13.0]
150         } All;
151 
152         struct _Gen7
153         {
154             DWORD       CubeSurfaceControlMode              : BITFIELD_BIT(      0  );  // GFXSHAREDSTATE_CUBESURFACECONTROLMODE
155             DWORD       ShadowFunction                      : BITFIELD_RANGE(  1,3  );  // GFXSHAREDSTATE_PREFILTER_OPERATION
156             DWORD       _Unused                             : BITFIELD_RANGE(  4,7  );  // Reserved
157             DWORD       MaxLOD                              : BITFIELD_RANGE(  8,19 );  // U4.8
158             DWORD       MinLOD                              : BITFIELD_RANGE( 20,31 );  // U4.8
159         } Gen7;
160 
161         struct _Gen8
162         {
163             DWORD       ChromaKeyMode                       : BITFIELD_BIT(       4 );  // U1
164             DWORD       ChromaKeyIndex                      : BITFIELD_RANGE(  5,6  );  // U2
165             DWORD       ChromaKeyEnable                     : BITFIELD_BIT(       7 );  // bool
166         } Gen8;
167 
168         DWORD   Value;
169     } DW1;
170 
171     // DWORD 2
172     union _DW2
173     {
174         struct _All
175         {
176             DWORD       _Unused                             : BITFIELD_RANGE(  0,4  );
177             DWORD       BorderColorPointer                  : BITFIELD_RANGE(  5,31 );  // DynamicStateOffset[31:5]
178         } All;
179 
180         union _Gen8
181         {
182             struct _All
183             {
184                 DWORD       LODClampMagnificationMode           : BITFIELD_BIT(       0 );  // U1
185                 DWORD       FlexibleFilterVerticalAlignment     : BITFIELD_BIT(       1 );  // U1
186                 DWORD       FlexibleFilterHorizontalAlignment   : BITFIELD_BIT(       2 );  // U1
187                 DWORD       FlexibleFilterCoefficientSize       : BITFIELD_BIT(       3 );  // U1
188                 DWORD       FlexibleFilterMode                  : BITFIELD_BIT(       4 );  // GFXSHAREDSTATE_FLEXFILTERMODE
189                 DWORD       _Unused1                            : BITFIELD_BIT(       5 );  // Reserved
190                 DWORD       IndirectStatePointer                : BITFIELD_RANGE(  6,23 );  // DynamicStateOffset[23:6]
191                 DWORD       _Unused2                            : BITFIELD_RANGE( 24,31 );
192             } All;
193 
194             struct _FlexibleFilterSeparable
195             {
196                 DWORD       _Unused                             : BITFIELD_RANGE(  0,25 );
197                 DWORD       SeparableFilterHeight               : BITFIELD_RANGE( 26,27 );  // U2
198                 DWORD       SeparableFilterWidth                : BITFIELD_RANGE( 28,29 );  // U2
199                 DWORD       SeparableFilterCoefficientTableSize : BITFIELD_RANGE( 30,31 );  // U2
200             } FlexibleFilterSeparable;
201 
202             struct _FlexibleFilterNonSeparable
203             {
204                 DWORD       _Unused                             : BITFIELD_RANGE(  0,23 );
205                 DWORD       NonSeparableFilterFootprintMask     : BITFIELD_RANGE( 24,31 );  // Mask
206             } FlexibleFilterNonSeparable;
207 
208         } Gen8;
209 
210         struct _Gen10
211         {
212             DWORD       LODClampMagnificationMode           : BITFIELD_BIT(       0 );  // U1
213             DWORD       _Unused                             : BITFIELD_RANGE(  1,4  );
214             DWORD       ForceGather4                        : BITFIELD_BIT(       5 );  //
215             DWORD       IndirectStatePointer                : BITFIELD_RANGE(  6,23 );  // DynamicStateOffset[23:6]
216             DWORD       _Unused2                            : BITFIELD_RANGE( 24,31 );
217         } Gen10;
218 
219         DWORD   Value;
220     } DW2;
221 
222     // DWORD 3
223     union _DW3
224     {
225         struct _All
226         {
227             DWORD       NonNormalizedCoordinatesEnable          : BITFIELD_BIT(       1 );  // bool
228             DWORD       _Unused1                                : BITFIELD_RANGE(  1,12 );  // Reserved
229             DWORD       RAddressMinFilterAddressRoundingEnable  : BITFIELD_BIT(      13 );  // bool
230             DWORD       RAddressMagFilterAddressRoundingEnable  : BITFIELD_BIT(      14 );  // bool
231             DWORD       VAddressMinFilterAddressRoundingEnable  : BITFIELD_BIT(      15 );  // bool
232             DWORD       VAddressMagFilterAddressRoundingEnable  : BITFIELD_BIT(      16 );  // bool
233             DWORD       UAddressMinFilterAddressRoundingEnable  : BITFIELD_BIT(      17 );  // bool
234             DWORD       UAddressMagFilterAddressRoundingEnable  : BITFIELD_BIT(      18 );  // bool
235             DWORD       MaximumAnisotropy                       : BITFIELD_RANGE( 19,21 );  // GFXSHAREDSTATE_ANISORATIO
236             DWORD       ChromaKeyMode                           : BITFIELD_BIT(      22 );  // GFXSHAREDSTATE_CHROMAKEY_MODE
237             DWORD       ChromaKeyIndex                          : BITFIELD_RANGE( 23,24 );  // U2
238             DWORD       ChromaKeyEnable                         : BITFIELD_BIT(      25 );  // bool
239             DWORD       _Unused2                                : BITFIELD_RANGE( 26,31 );  // Reserved
240         } All;
241 
242         struct _Gen7
243         {
244             DWORD       TCZAddressControlMode                   : BITFIELD_RANGE(  0,2  );  // GFXSHAREDSTATE_TEXCOORDMODE
245             DWORD       TCYAddressControlMode                   : BITFIELD_RANGE(  3,5  );  // GFXSHAREDSTATE_TEXCOORDMODE
246             DWORD       TCXAddressControlMode                   : BITFIELD_RANGE(  6,8  );  // GFXSHAREDSTATE_TEXCOORDMODE
247             DWORD       _Unused1                                : BITFIELD_BIT(      9  );  // Reserved
248             DWORD       NonNormalizedCoordinateEnable           : BITFIELD_BIT(      10 );  // bool
249             DWORD       TrilinearFilterQuality                  : BITFIELD_RANGE( 11,12 );  // GFXSHAREDSTATE_TRILINEAR_QUALITY
250             DWORD       RAddressMinFilterAddressRoundingEnable  : BITFIELD_BIT(      13 );  // bool
251             DWORD       RAddressMagFilterAddressRoundingEnable  : BITFIELD_BIT(      14 );  // bool
252             DWORD       VAddressMinFilterAddressRoundingEnable  : BITFIELD_BIT(      15 );  // bool
253             DWORD       VAddressMagFilterAddressRoundingEnable  : BITFIELD_BIT(      16 );  // bool
254             DWORD       UAddressMinFilterAddressRoundingEnable  : BITFIELD_BIT(      17 );  // bool
255             DWORD       UAddressMagFilterAddressRoundingEnable  : BITFIELD_BIT(      18 );  // bool
256             DWORD       MaximumAnisotropy                       : BITFIELD_RANGE( 19,21 );  // GFXSHAREDSTATE_ANISORATIO
257             DWORD       ChromaKeyMode                           : BITFIELD_BIT(      22 );  // GFXSHAREDSTATE_CHROMAKEY_MODE
258             DWORD       ChromaKeyIndex                          : BITFIELD_RANGE( 23,24 );  // U2
259             DWORD       ChromaKeyEnable                         : BITFIELD_BIT(      25 );  // bool
260             DWORD       _Unused2                                : BITFIELD_RANGE( 26,31 );  // Reserved
261         } Gen7;
262 
263         struct _Gen8
264         {
265             DWORD       _Unused                                 : BITFIELD_RANGE( 22,23 );  // Reserved
266             DWORD       NonSeparableFilterFootprintMask         : BITFIELD_RANGE( 24,31 );  // Mask
267 
268         } Gen8;
269 
270         struct _Gen9
271         {
272             DWORD       TCZAddressControlMode                   : BITFIELD_RANGE(  0,2  );  // GFXSHAREDSTATE_TEXCOORDMODE
273             DWORD       TCYAddressControlMode                   : BITFIELD_RANGE(  3,5  );  // GFXSHAREDSTATE_TEXCOORDMODE
274             DWORD       TCXAddressControlMode                   : BITFIELD_RANGE(  6,8  );  // GFXSHAREDSTATE_TEXCOORDMODE
275             DWORD       ReductionTypeEnable                     : BITFIELD_BIT(      9  );  // bool
276             DWORD       NonNormalizedCoordinateEnable           : BITFIELD_BIT(      10 );  // bool
277             DWORD       TrilinearFilterQuality                  : BITFIELD_RANGE( 11,12 );  // GFXSHAREDSTATE_TRILINEAR_QUALITY
278             DWORD       RAddressMinFilterAddressRoundingEnable  : BITFIELD_BIT(      13 );  // bool
279             DWORD       RAddressMagFilterAddressRoundingEnable  : BITFIELD_BIT(      14 );  // bool
280             DWORD       VAddressMinFilterAddressRoundingEnable  : BITFIELD_BIT(      15 );  // bool
281             DWORD       VAddressMagFilterAddressRoundingEnable  : BITFIELD_BIT(      16 );  // bool
282             DWORD       UAddressMinFilterAddressRoundingEnable  : BITFIELD_BIT(      17 );  // bool
283             DWORD       UAddressMagFilterAddressRoundingEnable  : BITFIELD_BIT(      18 );  // bool
284             DWORD       MaximumAnisotropy                       : BITFIELD_RANGE( 19,21 );  // GFXSHAREDSTATE_ANISORATIO
285             DWORD       ReductionType                           : BITFIELD_RANGE( 22,23 );  // GFXSHAREDSTATE_REDUCTION_TYPE
286             DWORD       NonSeparableFilterFootprintMask         : BITFIELD_RANGE( 24,31 );  // Mask
287         } Gen9;
288 
289         union _Gen10
290         {
291             struct _All
292             {
293                 DWORD       TCZAddressControlMode                   : BITFIELD_RANGE(  0,2  );  // GFXSHAREDSTATE_TEXCOORDMODE
294                 DWORD       TCYAddressControlMode                   : BITFIELD_RANGE(  3,5  );  // GFXSHAREDSTATE_TEXCOORDMODE
295                 DWORD       TCXAddressControlMode                   : BITFIELD_RANGE(  6,8  );  // GFXSHAREDSTATE_TEXCOORDMODE
296                 DWORD       ReductionTypeEnable                     : BITFIELD_BIT(      9  );  // bool
297                 DWORD       NonNormalizedCoordinateEnable           : BITFIELD_BIT(      10 );  // bool
298                 DWORD       TrilinearFilterQuality                  : BITFIELD_RANGE( 11,12 );  // GFXSHAREDSTATE_TRILINEAR_QUALITY
299                 DWORD       RAddressMinFilterAddressRoundingEnable  : BITFIELD_BIT(      13 );  // bool
300                 DWORD       RAddressMagFilterAddressRoundingEnable  : BITFIELD_BIT(      14 );  // bool
301                 DWORD       VAddressMinFilterAddressRoundingEnable  : BITFIELD_BIT(      15 );  // bool
302                 DWORD       VAddressMagFilterAddressRoundingEnable  : BITFIELD_BIT(      16 );  // bool
303                 DWORD       UAddressMinFilterAddressRoundingEnable  : BITFIELD_BIT(      17 );  // bool
304                 DWORD       UAddressMagFilterAddressRoundingEnable  : BITFIELD_BIT(      18 );  // bool
305                 DWORD       MaximumAnisotropy                       : BITFIELD_RANGE( 19,21 );  // GFXSHAREDSTATE_ANISORATIO
306                 DWORD       ReductionType                           : BITFIELD_RANGE( 22,23 );  // GFXSHAREDSTATE_REDUCTION_TYPE
307                 DWORD       NonSeparableFilterFootprintMask         : BITFIELD_RANGE( 24,31 );  // Mask
308             } ALL;
309 
310             struct _FlexibleFilterMinMagMode
311             {
312                 DWORD       FlexibleFilterDisableClamping           : BITFIELD_BIT(      10 );  //
313             }FlexibleFilterMinMagMode;
314         } Gen10;
315 
316         DWORD   Value;
317     } DW3;
318 };
319 
320 static_assert(SIZE32(SSharedStateSamplerState) == 4);
321 
322 /*****************************************************************************\
323 STRUCT: SSharedStateSearchPathLUTState
324 \*****************************************************************************/
325 struct SSharedStateSearchPathLUTState
326 {
327     // DWORD 0
328     union _DW0
329     {
330         struct _Bitfield
331         {
332             DWORD   SearchPathLocation_X_0  : 4;
333             DWORD   SearchPathLocation_Y_0  : 4;
334             DWORD   SearchPathLocation_X_1  : 4;
335             DWORD   SearchPathLocation_Y_1  : 4;
336             DWORD   SearchPathLocation_X_2  : 4;
337             DWORD   SearchPathLocation_Y_2  : 4;
338             DWORD   SearchPathLocation_X_3  : 4;
339             DWORD   SearchPathLocation_Y_3  : 4;
340         } BitField;
341 
342         struct _Byte
343         {
344             BYTE    Byte0;
345             BYTE    Byte1;
346             BYTE    Byte2;
347             BYTE    Byte3;
348         } Byte;
349 
350         DWORD   Value;
351     } DW0;
352 };
353 
354 static_assert(SIZE32(SSharedStateSearchPathLUTState) == 1);
355 
356 /*****************************************************************************\
357 STRUCT: SSharedStateRDLUTSet
358 \*****************************************************************************/
359 struct SSharedStateRDLUTSet
360 {
361     // DWORD 0
362     union _DW0
363     {
364         struct _Bitfield
365         {
366             DWORD   LUT_MbMode_0    : 8;
367             DWORD   LUT_MbMode_1    : 8;
368             DWORD   LUT_MbMode_2    : 8;
369             DWORD   LUT_MbMode_3    : 8;
370         } BitField;
371 
372         DWORD   Value;
373     } DW0;
374 
375     // DWORD 1
376     union _DW1
377     {
378         struct _Bitfield
379         {
380             DWORD   LUT_MbMode_4    : 8;
381             DWORD   LUT_MbMode_5    : 8;
382             DWORD   LUT_MbMode_6    : 8;
383             DWORD   LUT_MbMode_7    : 8;
384         } BitField;
385 
386         DWORD   Value;
387     } DW1;
388 
389     // DWORD 2
390     union _DW2
391     {
392         struct _Bitfield
393         {
394             DWORD   LUT_MV_0        : 8;
395             DWORD   LUT_MV_1        : 8;
396             DWORD   LUT_MV_2        : 8;
397             DWORD   LUT_MV_3        : 8;
398         } BitField;
399 
400         DWORD   Value;
401     } DW2;
402 
403     // DWORD 3
404     union _DW3
405     {
406         struct _Bitfield
407         {
408             DWORD   LUT_MV_4        : 8;
409             DWORD   LUT_MV_5        : 8;
410             DWORD   LUT_MV_6        : 8;
411             DWORD   LUT_MV_7        : 8;
412         } BitField;
413 
414         DWORD   Value;
415     } DW3;
416 };
417 
418 static_assert(SIZE32(SSharedStateRDLUTSet) == 4);
419 
420 /*****************************************************************************\
421 STRUCT: SSharedStateVmeState ( VME_STATE )
422 \*****************************************************************************/
423 struct SSharedStateVmeState
424 {
425     // DWORD 0 - DWORD 13
426     SSharedStateSearchPathLUTState  SearchPath[ g_cNumSearchPathStatesGen6 ];
427 
428     // DWORD 14
429     union _DW14
430     {
431         struct _Bitfield
432         {
433             DWORD   LUT_MbMode_8_0  : 8;
434             DWORD   LUT_MbMode_9_0  : 8;
435             DWORD   LUT_MbMode_8_1  : 8;
436             DWORD   LUT_MbMode_9_1  : 8;
437         } BitField;
438 
439         DWORD   Value;
440     } DW14;
441 
442     // DWORD 15
443     union _DW15
444     {
445         struct _Bitfield
446         {
447             DWORD   LUT_MbMode_8_2  : 8;
448             DWORD   LUT_MbMode_9_2  : 8;
449             DWORD   LUT_MbMode_8_3  : 8;
450             DWORD   LUT_MbMode_9_3  : 8;
451         } BitField;
452 
453         DWORD   Value;
454     } DW15;
455 
456     // DWORD 16 - DWORD 31
457     struct SSharedStateRDLUTSet   RdLutSet[ g_cNumMBModeSetsGen6 ];
458 };
459 
460 static_assert(SIZE32(SSharedStateVmeState) == 32);
461 
462 /*****************************************************************************\
463 STRUCT: SSamplerStateErodeDilateMinMaxFilter ( SAMPLER_STATE Erode/Dilate/MinMaxFilter )
464 \*****************************************************************************/
465 struct SSamplerStateErodeDilateMinMaxFilter
466 {
467     DWORD DW0;
468     DWORD DW1;
469     DWORD DW2;
470     DWORD DW3;
471     DWORD DW4;
472     DWORD DW5;
473     DWORD DW6;
474     DWORD DW7;
475 };
476 
477 static_assert(SIZE32(SSamplerStateErodeDilateMinMaxFilter) == 8);
478 
479 /*****************************************************************************\
480 STRUCT: SSharedStateSurfaceState ( SURFACE_STATE )
481 \*****************************************************************************/
482 struct SSharedStateSurfaceState
483 {
484     // DWORD 0
485     union _DW0
486     {
487         struct _All
488         {
489             DWORD       CubeFaceEnablesPositiveZ            : BITFIELD_BIT(      0  );  // bool
490             DWORD       CubeFaceEnablesNegativeZ            : BITFIELD_BIT(      1  );  // bool
491             DWORD       CubeFaceEnablesPositiveY            : BITFIELD_BIT(      2  );  // bool
492             DWORD       CubeFaceEnablesNegativeY            : BITFIELD_BIT(      3  );  // bool
493             DWORD       CubeFaceEnablesPositiveX            : BITFIELD_BIT(      4  );  // bool
494             DWORD       CubeFaceEnablesNegativeX            : BITFIELD_BIT(      5  );  // bool
495             DWORD       MediaBoundaryPixelMode              : BITFIELD_RANGE(  6,7  );  // GFXSHAREDSTATE_MEDIA_BOUNDARY_PIXEL_MODE
496             DWORD       RenderCacheReadWriteMode            : BITFIELD_BIT(      8  );  // GFXSHAREDSTATE_RENDER_CACHE_READ_WRITE_MODE
497             DWORD       CubeMapCornerMode                   : BITFIELD_BIT(      9  );  // GFXSHAREDSTATE_CUBECORNERMODE
498             DWORD       MipMapLayoutMode                    : BITFIELD_BIT(      10 );  // GFXSHAREDSTATE_SURFACE_MIPMAPLAYOUT
499             DWORD       VerticalLineStrideOffset            : BITFIELD_BIT(      11 );  // U1
500             DWORD       VerticalLineStride                  : BITFIELD_BIT(      12 );  // U1
501             DWORD       _Unused1                            : BITFIELD_RANGE( 13,17 );
502             DWORD       SurfaceFormat                       : BITFIELD_RANGE( 18,26 );  // GFXSHAREDSTATE_SURFACEFORMAT
503             DWORD       DataReturnFormat                    : BITFIELD_BIT(      27 );  // GFXSHAREDSTATE_SURFACERETURNFORMAT
504             DWORD       _Unused2                            : BITFIELD_BIT(      28 );
505             DWORD       SurfaceType                         : BITFIELD_RANGE( 29,31 );  // GFXSHAREDSTATE_SURFACETYPE
506         } All;
507 
508         struct _Gen7
509         {
510             DWORD       CubeFaceEnablesPositiveZ            : BITFIELD_BIT(      0  );  // bool
511             DWORD       CubeFaceEnablesNegativeZ            : BITFIELD_BIT(      1  );  // bool
512             DWORD       CubeFaceEnablesPositiveY            : BITFIELD_BIT(      2  );  // bool
513             DWORD       CubeFaceEnablesNegativeY            : BITFIELD_BIT(      3  );  // bool
514             DWORD       CubeFaceEnablesPositiveX            : BITFIELD_BIT(      4  );  // bool
515             DWORD       CubeFaceEnablesNegativeX            : BITFIELD_BIT(      5  );  // bool
516             DWORD       MediaBoundaryPixelMode              : BITFIELD_RANGE(  6,7  );  // GFXSHAREDSTATE_MEDIA_BOUNDARY_PIXEL_MODE
517             DWORD       RenderCacheReadWriteMode            : BITFIELD_BIT(      8  );  // GFXSHAREDSTATE_RENDER_CACHE_READ_WRITE_MODE
518             DWORD       _Unused1                            : BITFIELD_BIT(      9  );  // Reserved
519             DWORD       SurfaceArraySpacing                 : BITFIELD_BIT(      10 );  // GFXSHAREDSTATE_SURFACE_ARRAY_SPACING
520             DWORD       VerticalLineStrideOffset            : BITFIELD_BIT(      11 );  // U1
521             DWORD       VerticalLineStride                  : BITFIELD_BIT(      12 );  // U1
522             DWORD       TileWalk                            : BITFIELD_BIT(      13 );  // GFXSHAREDSTATE_TILEWALK
523             DWORD       TiledSurface                        : BITFIELD_BIT(      14 );  // bool
524             DWORD       _Unused2                            : BITFIELD_RANGE( 15,17 );
525             DWORD       SurfaceFormat                       : BITFIELD_RANGE( 18,26 );  // GFXSHAREDSTATE_SURFACEFORMAT
526             DWORD       _Unused3                            : BITFIELD_BIT(      27 );
527             DWORD       SurfaceArray                        : BITFIELD_BIT(      28 );  // bool
528             DWORD       SurfaceType                         : BITFIELD_RANGE( 29,31 );  // GFXSHAREDSTATE_SURFACETYPE
529         } Gen7;
530 
531         struct _Gen7_Media
532         {
533             DWORD       SurfaceBaseAddress;                     // GTT[31:0]
534         } Gen7Media;
535 
536         struct _Gen8
537         {
538             DWORD       CubeFaceEnablesPositiveZ            : BITFIELD_BIT(      0  );  // bool
539             DWORD       CubeFaceEnablesNegativeZ            : BITFIELD_BIT(      1  );  // bool
540             DWORD       CubeFaceEnablesPositiveY            : BITFIELD_BIT(      2  );  // bool
541             DWORD       CubeFaceEnablesNegativeY            : BITFIELD_BIT(      3  );  // bool
542             DWORD       CubeFaceEnablesPositiveX            : BITFIELD_BIT(      4  );  // bool
543             DWORD       CubeFaceEnablesNegativeX            : BITFIELD_BIT(      5  );  // bool
544             DWORD       MediaBoundaryPixelMode              : BITFIELD_RANGE(  6,7  );  // GFXSHAREDSTATE_MEDIA_BOUNDARY_PIXEL_MODE
545             DWORD       RenderCacheReadWriteMode            : BITFIELD_BIT(      8  );  // GFXSHAREDSTATE_RENDER_CACHE_READ_WRITE_MODE
546             DWORD       SurfaceArraySpacing                 : BITFIELD_BIT(      9  );  // U1
547             DWORD       VerticalLineStrideOffset            : BITFIELD_BIT(      10 );  // U1
548             DWORD       VerticalLineStride                  : BITFIELD_BIT(      11 );  // U1
549             DWORD       TileMode                            : BITFIELD_RANGE( 12,13 );  // GFXSHAREDSTATE_TILEMODE
550             DWORD       SurfaceHorizontalAlignment          : BITFIELD_RANGE( 14,15 );  // U2
551             DWORD       SurfaceVerticalAlignment            : BITFIELD_RANGE( 16,17 );  // U2
552             DWORD       SurfaceFormat                       : BITFIELD_RANGE( 18,26 );  // GFXSHAREDSTATE_SURFACEFORMAT
553             DWORD       _Unused                             : BITFIELD_BIT(      27 );  // Reserved
554             DWORD       SurfaceArray                        : BITFIELD_BIT(      28 );  // bool
555             DWORD       SurfaceType                         : BITFIELD_RANGE( 29,31 );  // GFXSHAREDSTATE_SURFACETYPE
556         } Gen8;
557 
558         struct _Gen8_Media
559         {
560             DWORD       Reserved                            : BITFIELD_RANGE( 0, 31 );
561         } Gen8Media;
562 
563         struct _Gen9
564         {
565             DWORD       CubeFaceEnablesPositiveZ            : BITFIELD_BIT(      0  );  // bool
566             DWORD       CubeFaceEnablesNegativeZ            : BITFIELD_BIT(      1  );  // bool
567             DWORD       CubeFaceEnablesPositiveY            : BITFIELD_BIT(      2  );  // bool
568             DWORD       CubeFaceEnablesNegativeY            : BITFIELD_BIT(      3  );  // bool
569             DWORD       CubeFaceEnablesPositiveX            : BITFIELD_BIT(      4  );  // bool
570             DWORD       CubeFaceEnablesNegativeX            : BITFIELD_BIT(      5  );  // bool
571             DWORD       MediaBoundaryPixelMode              : BITFIELD_RANGE(  6,7  );  // GFXSHAREDSTATE_MEDIA_BOUNDARY_PIXEL_MODE
572             DWORD       RenderCacheReadWriteMode            : BITFIELD_BIT(      8  );  // GFXSHAREDSTATE_RENDER_CACHE_READ_WRITE_MODE
573             DWORD       SurfaceArraySpacing                 : BITFIELD_BIT(      9  );  // U1
574             DWORD       VerticalLineStrideOffset            : BITFIELD_BIT(      10 );  // U1
575             DWORD       VerticalLineStride                  : BITFIELD_BIT(      11 );  // U1
576             DWORD       TileMode                            : BITFIELD_RANGE( 12,13 );  // GFXSHAREDSTATE_TILEMODE
577             DWORD       SurfaceHorizontalAlignment          : BITFIELD_RANGE( 14,15 );  // U2
578             DWORD       SurfaceVerticalAlignment            : BITFIELD_RANGE( 16,17 );  // U2
579             DWORD       SurfaceFormat                       : BITFIELD_RANGE( 18,26 );  // GFXSHAREDSTATE_SURFACEFORMAT
580             DWORD       ASTCEnable                          : BITFIELD_BIT(      27 );  // bool
581             DWORD       SurfaceArray                        : BITFIELD_BIT(      28 );  // bool
582             DWORD       SurfaceType                         : BITFIELD_RANGE( 29,31 );  // GFXSHAREDSTATE_SURFACETYPE
583         } Gen9;
584 
585         DWORD   Value;
586     } DW0;
587 
588     // DWORD 1
589     union _DW1
590     {
591         struct _All
592         {
593             DWORD       SurfaceBaseAddress;
594         } All;
595 
596         struct _Gen7_Media
597         {
598             DWORD       UVPixelOffsetVDirection             : BITFIELD_RANGE(  0, 1 );  // U0.2
599             DWORD       PictureStructure                    : BITFIELD_RANGE(  2, 3 );  // ?
600             DWORD       Width                               : BITFIELD_RANGE(  4,17 );  // U14
601             DWORD       Height                              : BITFIELD_RANGE( 18,31 );  // U14
602         } Gen7Media;
603 
604         struct _Gen8
605         {
606             DWORD       SurfaceQPitch                       : BITFIELD_RANGE(  0,14 );  // QPitch[16:2]
607             DWORD       _Unused1                            : BITFIELD_RANGE( 15,23 );  // Reserved
608             DWORD       SurfaceObjectAgeControl             : BITFIELD_RANGE( 24,25 );  // GFXSTATE_SOURCE_AGE_CONTROL
609             DWORD       SurfaceObjectEncryptedDataEnable    : BITFIELD_BIT(      26 );  // bool
610             DWORD       SurfaceObjectTargetCache            : BITFIELD_RANGE( 27,28 );  // GFXSTATE_TARGET_CACHE
611             DWORD       SurfaceObjectCacheabilityControl    : BITFIELD_RANGE( 29,30 );  // GFXSTATE_CACHEABILITY_CONTROL
612             DWORD       _Unused2                            : BITFIELD_BIT(      31 );  // Reserved
613         } Gen8;
614 
615         struct _Gen9
616         {
617             DWORD       SurfaceQPitch                       : BITFIELD_RANGE(  0,14 );  // QPitch[16:2]
618             DWORD       _Unused1                            : BITFIELD_RANGE( 15,18 );  // Reserved
619             DWORD       BaseMipLevel                        : BITFIELD_RANGE( 19,23 );  //
620             DWORD       EncryptedDataEnable                 : BITFIELD_BIT(      24 );  // Reserved
621             DWORD       MOCSTablesIndex                     : BITFIELD_RANGE( 25,30 );  // define the L3 and system cache memory properties
622             DWORD       _Unused2                            : BITFIELD_BIT(      31 );  // Reserved
623         } Gen9;
624 
625         struct _Gen10
626         {
627             DWORD       SurfaceQPitch                       : BITFIELD_RANGE(  0,14 );  // QPitch[16:2]
628             DWORD       _Unused1                            : BITFIELD_RANGE( 15,18 );  // Reserved
629             DWORD       BaseMipLevel                        : BITFIELD_RANGE( 19,23 );  //
630             DWORD       EncryptedDataEnable                 : BITFIELD_BIT(      24 );  // Reserved
631             DWORD       MOCSTablesIndex                     : BITFIELD_RANGE( 25,30 );  // define the L3 and system cache memory properties
632             DWORD       _Unused2                            : BITFIELD_BIT(      31 );  // Reserved
633         } Gen10;
634 
635         struct _Gen10_Media
636         {
637             DWORD       UVPixelOffsetVDirection             : BITFIELD_RANGE(  0, 1 );  // U0.2
638             DWORD       PictureStructure                    : BITFIELD_RANGE(  2, 3 );  // ?
639             DWORD       Width                               : BITFIELD_RANGE(  4,17 );  // U14 //width except if format is structure buffer :reading the Data base Structure buffer (or) Test Vector Structure Buffer (or) Index Table.
640             DWORD       Height                              : BITFIELD_RANGE( 18,31 );  // U14 //height except if format is structure buffer :reading the Data base Structure buffer (or) Test Vector Structure Buffer (or) Index Table.
641         } Gen10Media;
642 
643         DWORD   Value;
644     } DW1;
645 
646     // DWORD 2
647     union _DW2
648     {
649         struct _All
650         {
651             DWORD       RenderTargetRotation                : BITFIELD_RANGE(  0,1  );  // GFXSHAREDSTATE_RENDER_TARGET_ROTATION
652             DWORD       MipCount                            : BITFIELD_RANGE(  2,5  );  // U4 in LOD units
653             DWORD       Width                               : BITFIELD_RANGE(  6,18 );  // U13
654             DWORD       Height                              : BITFIELD_RANGE( 19,31 );  // U13
655         } All;
656 
657         struct _Gen7
658         {
659             DWORD       Width                               : BITFIELD_RANGE(  0,13 );  // U14
660             DWORD       _Unused1                            : BITFIELD_RANGE( 14,15 );  // U2
661             DWORD       Height                              : BITFIELD_RANGE( 16,29 );  // U14
662             DWORD       _Unused2                            : BITFIELD_RANGE( 30,31 );
663         } Gen7;
664 
665         struct _Gen7_Media
666         {
667             DWORD       TiledSurface                        : BITFIELD_BIT(       0 );  // bool
668             DWORD       TileWalk                            : BITFIELD_BIT(       1 );  // GFX3DSTATE_TILEWALK
669             DWORD       HalfPitchForChroma                  : BITFIELD_BIT(       2 );  // bool
670             DWORD       SurfacePitch                        : BITFIELD_RANGE(  3,20 );  // U18
671             DWORD       _Unused1                            : BITFIELD_BIT(      21 );
672             DWORD       SurfaceObjectControlState           : BITFIELD_RANGE( 22,25 );  // ?
673             DWORD       _Unused2                            : BITFIELD_BIT(      26 );
674             DWORD       InterleaveChroma                    : BITFIELD_BIT(      27 );  // bool
675             DWORD       SurfaceFormat                       : BITFIELD_RANGE( 28,31 );  // MEDIASTATE_SURFACEFORMAT
676         } Gen7Media;
677 
678         struct _Gen8_Media
679         {
680             DWORD       TiledSurface                        : BITFIELD_BIT(       0 );  // bool
681             DWORD       TileWalk                            : BITFIELD_BIT(       1 );  // GFX3DSTATE_TILEWALK
682             DWORD       HalfPitchForChroma                  : BITFIELD_BIT(       2 );  // bool
683             DWORD       SurfacePitch                        : BITFIELD_RANGE(  3,20 );  // U18
684             DWORD       AddressControl                      : BITFIELD_BIT(      21 );  // ?
685             DWORD       _Unused                             : BITFIELD_RANGE( 22,25 );
686             DWORD       InterleaveChroma                    : BITFIELD_BIT(      26 );  // bool
687             DWORD       SurfaceFormat                       : BITFIELD_RANGE( 27,31 );  // MEDIASTATE_SURFACEFORMAT
688         } Gen8Media;
689 
690         struct _Gen9_Media
691         {
692             DWORD       TiledSurface                        : BITFIELD_BIT(       0 );  // bool
693             DWORD       TileWalk                            : BITFIELD_BIT(       1 );  // GFX3DSTATE_TILEWALK
694             DWORD       HalfPitchForChroma                  : BITFIELD_BIT(       2 );  // bool
695             DWORD       SurfacePitch                        : BITFIELD_RANGE(  3,20 );  // U18
696             DWORD       AddressControl                      : BITFIELD_BIT(      21 );  // ?
697             DWORD       MemoryCompressionEnable             : BITFIELD_BIT(      22 );  // ?
698             DWORD       MemoryCompressionMode               : BITFIELD_BIT(      23 );  // ?
699             DWORD       OffsetVDirection                    : BITFIELD_BIT(      24 );  // Cr(V)/Cb(U) Pixel Offset V Direction MSB
700             DWORD       OffsetUDirection                    : BITFIELD_BIT(      25 );  // Cr(V)/Cb(U) Pixel Offset U Direction
701             DWORD       InterleaveChroma                    : BITFIELD_BIT(      26 );  // bool
702             DWORD       SurfaceFormat                       : BITFIELD_RANGE( 27,31 );  // MEDIASTATE_SURFACEFORMAT
703         } Gen9Media;
704 
705         DWORD   Value;
706     } DW2;
707 
708     // DWORD 3
709     union _DW3
710     {
711         struct _All
712         {
713             DWORD       TileWalk                            : BITFIELD_BIT(      0  );  // GFXSHAREDSTATE_TILEWALK
714             DWORD       TiledSurface                        : BITFIELD_BIT(      1  );  // bool
715             DWORD       _Unused1                            : BITFIELD_BIT(      2  );
716             DWORD       SurfacePitch                        : BITFIELD_RANGE(  3,19 );  // U17
717             DWORD       _Unused2                            : BITFIELD_BIT(      20 );
718             DWORD       Depth                               : BITFIELD_RANGE( 21,31 );  // U11
719         } All;
720 
721         struct _Gen7
722         {
723             DWORD       SurfacePitch                        : BITFIELD_RANGE(  0,17 );  // U17
724             DWORD       _Unused1                            : BITFIELD_RANGE( 18,20 );  // Reserved
725             DWORD       Depth                               : BITFIELD_RANGE( 21,31 );  // U11
726         } Gen7;
727 
728         struct _Gen7_Media
729         {
730             DWORD       YOffsetForU                         : BITFIELD_RANGE(  0,13 );  // U14
731             DWORD       _Unused1                            : BITFIELD_RANGE( 14,15 );
732             DWORD       XOffsetForU                         : BITFIELD_RANGE( 16,29 );  // U14
733             DWORD       _Unused2                            : BITFIELD_RANGE( 30,31 );
734         } Gen7Media;
735 
736         struct _Gen10
737         {
738             DWORD       SurfacePitch                        : BITFIELD_RANGE(  0,17 );  // U17
739             DWORD       _Unused1                            : BITFIELD_RANGE( 18,19 );  // Reserved
740             DWORD       TileAddressMappingMode              : BITFIELD_BIT( 20 );       // 0: Gen9, 1: Gen10
741             DWORD       Depth                               : BITFIELD_RANGE( 21,31 );  // U11
742         } Gen10;
743 
744         DWORD   Value;
745     } DW3;
746 
747     // DWORD 4
748     union _DW4
749     {
750         struct _All
751         {
752             DWORD       MultisamplePositionPaletteIndex     : BITFIELD_RANGE(  0,2  );  // U3
753             DWORD       _Unused1                            : BITFIELD_BIT(      3  );
754             DWORD       NumMultisamples                     : BITFIELD_RANGE(  4,6  );  // GFXSHAREDSTATE_NUM_MULTISAMPLES
755             DWORD       _Unused2                            : BITFIELD_BIT(      7  );
756             DWORD       RenderTargetViewExtent              : BITFIELD_RANGE(  8,16 );  // U9
757             DWORD       MinimumArrayElement                 : BITFIELD_RANGE( 17,27 );  // U9
758             DWORD       SurfaceMinLOD                       : BITFIELD_RANGE( 28,31 );  // U4 in LOD units
759         } All;
760 
761         union _Gen7
762         {
763             struct _SurfaceAll
764             {
765                 DWORD   MultisamplePositionPaletteIndex     : BITFIELD_RANGE(  0,2  );  // U3
766                 DWORD   NumMultisamples                     : BITFIELD_RANGE(  3,5  );  // GFXSHAREDSTATE_NUM_MULTISAMPLES
767                 DWORD   MultisampledSurfaceStorageFormat    : BITFIELD_BIT(      6  );  // GFXSHAREDSTATE_MSFMT
768                 DWORD   RenderTargetViewExtent              : BITFIELD_RANGE(  7,17 );  // U11
769                 DWORD   MinimumArrayElement                 : BITFIELD_RANGE( 18,28 );  // U11
770                 DWORD   RenderTargetRotation                : BITFIELD_RANGE( 29,30 );  // U4 in LOD units
771                 DWORD   _Unused                             : BITFIELD_BIT(      31 );  // Reserved
772             } SurfaceAll;
773 
774             struct _SurfaceStrBuf
775             {
776                 DWORD   MinimumArrayElement                 : BITFIELD_RANGE(  0,26 );  // U27
777                 DWORD   _Unused                             : BITFIELD_RANGE( 27,31 );  // Reserved
778             } SurfaceStrBuf;
779         } Gen7;
780 
781         struct _Gen7_Media
782         {
783             DWORD       YOffsetforV                         : BITFIELD_RANGE(  0,14 );  // U15
784             DWORD       _Unused1                            : BITFIELD_BIT(      15 );
785             DWORD       XOffsetforV                         : BITFIELD_RANGE( 16,29 );  // U14
786             DWORD       _Unused2                            : BITFIELD_RANGE( 30,31 );
787         } Gen7Media;
788 
789         union _Gen10
790         {
791             struct _SurfaceAll
792             {
793                 DWORD   MultisamplePositionPaletteIndex     : BITFIELD_RANGE(  0,2  );  // U3
794                 DWORD   NumMultisamples                     : BITFIELD_RANGE(  3,5  );  // GFXSHAREDSTATE_NUM_MULTISAMPLES
795                 DWORD   MultisampledSurfaceStorageFormat    : BITFIELD_BIT(      6  );  // GFXSHAREDSTATE_MSFMT
796                 DWORD   RenderTargetViewExtent              : BITFIELD_RANGE(  7,17 );  // U11
797                 DWORD   MinimumArrayElement                 : BITFIELD_RANGE( 18,28 );  // U11
798                 DWORD   RenderTargetRotation                : BITFIELD_RANGE( 29,30 );  // U4 in LOD units
799                 DWORD   ForceNonComparisonReductionType     : BITFIELD_BIT(      31 );
800             } SurfaceAll;
801 
802             struct _SurfaceStrBuf
803             {
804                 DWORD   _Unused                             : BITFIELD_RANGE( 0,31 );  // Reserved
805             } SurfaceStrBuf;
806         } Gen10;
807 
808         DWORD   Value;
809     } DW4;
810 
811     // DWORD 5
812     union _DW5
813     {
814         struct _All
815         {
816             DWORD       _Unused                             : BITFIELD_RANGE(  0,15 );
817             DWORD       SurfaceCacheabilityControl          : BITFIELD_RANGE( 16,17 );  // GFXSHAREDSTATE_CACHEABILITY_CONTROL
818             DWORD       SurfaceGraphicsDataType             : BITFIELD_BIT(      18 );  // GFXSHAREDSTATE_GRAPHICS_DATATYPE_SOURCE
819             DWORD       SurfaceEncryptedDataEnable          : BITFIELD_BIT(      19 );  // bool
820             DWORD       YOffset                             : BITFIELD_RANGE( 20,23 );  // U9
821             DWORD       SurfaceVerticalAlignment            : BITFIELD_BIT(      24 );  // GFXSHAREDSTATE_SURFACE_VERTICAL_ALIGNMENT
822             DWORD       XOffset                             : BITFIELD_RANGE( 25,31 );  // U4 in LOD units
823         } All;
824 
825         struct _Gen7
826         {
827             DWORD       MipCountLOD                         : BITFIELD_RANGE(  0,3  );  // U4
828             DWORD       SurfaceMinLOD                       : BITFIELD_RANGE(  4,7  );  // U4
829             // bit 14 - Coherency Type (Gen7.5+)
830             // bit 15 - Stateless Data PortAccess Force Write Thru (Gen7.5+)
831             DWORD       _Unused1                            : BITFIELD_RANGE(  8,15 );  // Reserved
832             DWORD       CacheabilityControlL3               : BITFIELD_BIT(      16 );  // GFXSHAREDSTATE_L3_CACHEABILITY_CONTROL
833             DWORD       CacheabilityControlLLC              : BITFIELD_BIT(      17 );  // GFXSHAREDSTATE_L3_CACHEABILITY_CONTROL
834             DWORD       SurfaceGraphicsDataType             : BITFIELD_BIT(      18 );  // GFXSHAREDSTATE_GRAPHICS_DATATYPE_SOURCE
835             DWORD       SurfaceEncryptedDataEnable          : BITFIELD_BIT(      19 );  // bool
836             DWORD       YOffset                             : BITFIELD_RANGE( 20,23 );  // U9
837             DWORD       _Unused2                            : BITFIELD_BIT(      24 );  // Reserved
838             DWORD       XOffset                             : BITFIELD_RANGE( 25,31 );  // U4 in LOD units
839         } Gen7;
840 
841         struct _Gen7_Media
842         {
843             DWORD      _Unused                              : BITFIELD_RANGE(  0,29 );
844             DWORD      VerticalLineStrideOffest             : BITFIELD_BIT(      30 );  // U1, Gen7.5+
845             DWORD      VerticalLineStride                   : BITFIELD_BIT(      31 );  // U1, Gen7.5+
846         } Gen7Media;
847 
848         struct _Gen8
849         {
850             DWORD       MipCountLOD                         : BITFIELD_RANGE(  0,3  );  // U4
851             DWORD       SurfaceMinLOD                       : BITFIELD_RANGE(  4,7  );  // U4
852             // bit 14 - Coherency Type (Gen8+)
853             DWORD       _Unused1                            : BITFIELD_RANGE(  8,20 );  // Reserved
854             DWORD       YOffset                             : BITFIELD_RANGE( 21,23 );  // U8
855             DWORD       _Unused2                            : BITFIELD_BIT(      24 );  // Reserved
856             DWORD       XOffset                             : BITFIELD_RANGE( 25,31 );  // U4 in LOD units
857         } Gen8;
858 
859         struct _Gen8_Media
860         {
861             DWORD       SurfaceObjectControlState           : BITFIELD_RANGE(  0, 6 );  // MEMORY_OBJECT_CONTROL_STATE
862             DWORD       _Unused                             : BITFIELD_RANGE(  7,29 );
863             DWORD       VerticalLineStrideOffset            : BITFIELD_BIT(      30 );
864             DWORD       VerticalLineStride                  : BITFIELD_BIT(      31 );
865         } Gen8Media;
866 
867         struct _Gen9
868         {
869             DWORD       MipCountLOD                         : BITFIELD_RANGE(  0,3  );  // U4
870             DWORD       SurfaceMinLOD                       : BITFIELD_RANGE(  4,7  );  // U4
871             DWORD       MipTailStartLOD                     : BITFIELD_RANGE( 8, 11 );  // MipTailStartLOD
872             DWORD       _Unused1                            : BITFIELD_RANGE( 12, 13 ); // reserved
873             DWORD       CoherencyType                       : BITFIELD_BIT( 14 );   // Coherency Type (Gen8+)
874             DWORD       TiledResourceVerticalAlignment      : BITFIELD_RANGE( 15, 16 ); //
875             DWORD       TiledResourceHorizontalAlignment    : BITFIELD_RANGE( 17, 18 ); //
876             DWORD       TiledResourceEnable                 : BITFIELD_BIT( 19 );       // bool
877             DWORD       _Unused2                            : BITFIELD_BIT( 20 );       // Reserved
878             DWORD       YOffset                             : BITFIELD_RANGE( 21,23 );  // U8
879             DWORD       _Unused3                            : BITFIELD_BIT(      24 );  // Reserved
880             DWORD       XOffset                             : BITFIELD_RANGE( 25,31 );  // U4 in LOD units
881         } Gen9;
882 
883         struct _Gen9_Media
884         {
885             DWORD       SurfaceObjectControlState           : BITFIELD_RANGE(  0, 6 );  // MEMORY_OBJECT_CONTROL_STATE
886             DWORD       _Unused                             : BITFIELD_RANGE(  7,17 );
887             DWORD       TiledResourceMode                   : BITFIELD_RANGE(  18,19 );
888             DWORD       _Unused2                            : BITFIELD_RANGE(  20,29 ); // Reserved
889             DWORD       VerticalLineStrideOffset            : BITFIELD_BIT(      30 );
890             DWORD       VerticalLineStride                  : BITFIELD_BIT(      31 );
891         } Gen9Media;
892 
893         struct _Gen10_Media
894         {
895             DWORD       SurfaceObjectControlState           : BITFIELD_RANGE(  0, 6 );  // MEMORY_OBJECT_CONTROL_STATE
896             DWORD       _Unused                             : BITFIELD_RANGE(  7,17 );
897             DWORD       TiledResourceMode                   : BITFIELD_RANGE(  18,19 );
898             DWORD       Depth                               : BITFIELD_RANGE(  20,23 );
899             DWORD       _Unused2                            : BITFIELD_RANGE(  24,29 ); // Reserved
900             DWORD       VerticalLineStrideOffset            : BITFIELD_BIT(      30 );
901             DWORD       VerticalLineStride                  : BITFIELD_BIT(      31 );
902         } Gen10Media;
903 
904 
905         DWORD   Value;
906     } DW5;
907 
908     // DWORD 6
909     union _DW6
910     {
911         struct _All
912         {
913             DWORD       Reserved                            : BITFIELD_RANGE(  0,31 );  // Reserved
914         } All;
915 
916         union _Gen7
917         {
918             struct _SurfaceMCS
919             {
920                 DWORD       MCSEnable                       : BITFIELD_BIT(      0  );  // bool
921                 DWORD       _Unused                         : BITFIELD_RANGE(  1,2  );  // Reserved
922                 DWORD       MCSSurfacePitch                 : BITFIELD_RANGE(  3,11 );  // U9
923                 DWORD       MCSBaseAddress                  : BITFIELD_RANGE( 12,31 );  // GraphicsAddress[31:12]
924             } SurfaceMCS;
925 
926             struct _SurfaceAppendCounter
927             {
928                 DWORD   AppendCounterEnable                 : BITFIELD_BIT(      0  );  // bool
929                 DWORD   _Unused                             : BITFIELD_RANGE(  2,5  );
930                 DWORD   AppendCounterAddress                : BITFIELD_RANGE(  6,31 );  // GraphicsAddress[31:12]
931             } SurfaceAppendCounter;
932         } Gen7;
933 
934         struct _Gen8_Media
935         {
936             DWORD       SurfaceBaseAddress                  : BITFIELD_RANGE( 0, 31 );
937         } Gen8Media;
938 
939         union _Gen9
940         {
941             struct _SurfacePlanar
942             {
943                 DWORD   YOffset                             : BITFIELD_RANGE( 0,  13 );  // U14
944                 DWORD   _Unused1                            : BITFIELD_RANGE( 14, 15 );  // reserved
945                 DWORD   XOffset                             : BITFIELD_RANGE( 16, 29 );  // U14
946                 DWORD   _Unused2                            : BITFIELD_RANGE( 30, 31 );  // reserved
947             } SurfacePlanar;
948 
949             struct _SurfaceOther
950             {
951                 DWORD   AuxiliarySurfaceMode                : BITFIELD_RANGE( 0, 1   );   //
952                 DWORD   RenderTargetCompressionEnable       : BITFIELD_BIT(   2      );   //
953                 DWORD   AuxiliarySurfacePitch               : BITFIELD_RANGE( 3,  11 );   // U9
954                 DWORD   _Unused1                            : BITFIELD_RANGE( 12, 15 );   // reserved
955                 DWORD   AuxilarySurfaceQPitch               : BITFIELD_RANGE( 16, 30 );   //
956                 DWORD   _Unused2                            : BITFIELD_BIT(   31     );   // reserved
957             } SurfaceOther;
958         } Gen9;
959 
960         DWORD   Value;
961     } DW6;
962 
963     // DWORD 7
964     union _DW7
965     {
966         struct _All
967         {
968             DWORD       Reserved                            : BITFIELD_RANGE(  0,31 );  // Reserved
969         } All;
970 
971         struct _Gen7
972         {
973             DWORD       ResourceMinLOD                      : BITFIELD_RANGE(  0,11 );  // 4.8
974             DWORD       _Unused                             : BITFIELD_RANGE( 12,27 );  // Reserved
975             DWORD       ClearColorAlpha                     : BITFIELD_BIT(      28 );  // GFXSHAREDSTATE_CLEARCOLOR
976             DWORD       ClearColorBlue                      : BITFIELD_BIT(      29 );  // GFXSHAREDSTATE_CLEARCOLOR
977             DWORD       ClearColorGreen                     : BITFIELD_BIT(      30 );  // GFXSHAREDSTATE_CLEARCOLOR
978             DWORD       ClearColorRed                       : BITFIELD_BIT(      31 );  // GFXSHAREDSTATE_CLEARCOLOR
979         } Gen7;
980 
981         struct _Gen7_5
982         {
983             DWORD       ResourceMinLOD                      : BITFIELD_RANGE(  0,11 );  // 4.8
984             DWORD       _Unused                             : BITFIELD_RANGE( 12,15 );
985             DWORD       ShaderChannelSelectAlpha            : BITFIELD_RANGE( 16,18 );  // GFXSHAREDSTATE_SHADERCHANNELSELECT
986             DWORD       ShaderChannelSelectBlue             : BITFIELD_RANGE( 19,21 );  // GFXSHAREDSTATE_SHADERCHANNELSELECT
987             DWORD       ShaderChannelSelectGreen            : BITFIELD_RANGE( 22,24 );  // GFXSHAREDSTATE_SHADERCHANNELSELECT
988             DWORD       ShaderChannelSelectRed              : BITFIELD_RANGE( 25,27 );  // GFXSHAREDSTATE_SHADERCHANNELSELECT
989             DWORD       ClearColorAlpha                     : BITFIELD_BIT(      28 );  // GFXSHAREDSTATE_CLEARCOLOR
990             DWORD       ClearColorBlue                      : BITFIELD_BIT(      29 );  // GFXSHAREDSTATE_CLEARCOLOR
991             DWORD       ClearColorGreen                     : BITFIELD_BIT(      30 );  // GFXSHAREDSTATE_CLEARCOLOR
992             DWORD       ClearColorRed                       : BITFIELD_BIT(      31 );  // GFXSHAREDSTATE_CLEARCOLOR
993         } Gen7_5;
994 
995         struct _Gen8_Media
996         {
997             DWORD       _Unused                             : BITFIELD_RANGE( 16, 31 );
998             DWORD       SurfaceBaseAddressHigh              : BITFIELD_RANGE( 0,  15 );
999         } Gen8Media;
1000 
1001         struct _Gen9
1002         {
1003             DWORD       ResourceMinLOD                      : BITFIELD_RANGE(  0,11 );  // 4.8
1004             DWORD       _Unused1                            : BITFIELD_RANGE( 12,15 );
1005             DWORD       ShaderChannelSelectAlpha            : BITFIELD_RANGE( 16,18 );  // GFXSHAREDSTATE_SHADERCHANNELSELECT
1006             DWORD       ShaderChannelSelectBlue             : BITFIELD_RANGE( 19,21 );  // GFXSHAREDSTATE_SHADERCHANNELSELECT
1007             DWORD       ShaderChannelSelectGreen            : BITFIELD_RANGE( 22,24 );  // GFXSHAREDSTATE_SHADERCHANNELSELECT
1008             DWORD       ShaderChannelSelectRed              : BITFIELD_RANGE( 25,27 );  // GFXSHAREDSTATE_SHADERCHANNELSELECT
1009             DWORD       _Unused2                            : BITFIELD_RANGE( 28,31 );  // reserved
1010         } Gen9;
1011 
1012         DWORD   Value;
1013     } DW7;
1014 
1015     union _DW8
1016     {
1017         struct _All
1018         {
1019             DWORD       Reserved                            : BITFIELD_RANGE(  0,31 );  // Reserved
1020         } All;
1021 
1022         struct _Gen8
1023         {
1024             DWORD       SurfaceBaseAddress                  : BITFIELD_RANGE(  0,31 );  // GTT[31:0]
1025         } Gen8;
1026 
1027         DWORD   Value;
1028     } DW8;
1029 
1030     union _DW9
1031     {
1032         struct _All
1033         {
1034             DWORD       Reserved                            : BITFIELD_RANGE(  0,31 );  // Reserved
1035         } All;
1036 
1037         struct _Gen8
1038         {
1039             DWORD       Surface64bitBaseAddress             : BITFIELD_RANGE(  0,15 );  // GTT[47:32]
1040             DWORD       _Unused                             : BITFIELD_RANGE( 16,31 );  // Reserved
1041         } Gen8;
1042 
1043         DWORD   Value;
1044     } DW9;
1045 
1046     union _DW10
1047     {
1048         struct _All
1049         {
1050             DWORD       Reserved                            : BITFIELD_RANGE(  0,31 );  // Reserved
1051         } All;
1052 
1053         struct _Gen8
1054         {
1055             DWORD       AuxiliarySurfaceBaseAddress         : BITFIELD_RANGE(  0,31 );  // GTT[31:0]
1056         } Gen8;
1057 
1058         union _Gen9
1059         {
1060             struct _SurfacePlanar
1061             {
1062                 DWORD       QuiltWidth                          : BITFIELD_RANGE( 0,  4  );  // SKL U5
1063                 DWORD       QuiltHeight                         : BITFIELD_RANGE( 5,  9  );  // SKL U5
1064                 DWORD       _Unused                             : BITFIELD_RANGE( 10, 31 );
1065             } SurfacePlanar;
1066 
1067             struct _SurfaceOther
1068             {
1069                 DWORD       QuiltWidth                          : BITFIELD_RANGE( 0,  4  );  // SKL U5
1070                 DWORD       QuiltHeight                         : BITFIELD_RANGE( 5,  9  );  // SKL U5
1071                 DWORD       _Unused                             : BITFIELD_RANGE( 10, 11 );
1072                 DWORD       AuxiliarySurfaceBaseAddress         : BITFIELD_RANGE( 12, 31 );  // GTT[31:0]
1073             } SurfaceOther;
1074         } Gen9;
1075         DWORD   Value;
1076     } DW10;
1077 
1078     union _DW11
1079     {
1080         struct _All
1081         {
1082             DWORD       Reserved                            : BITFIELD_RANGE(  0,31 );  // Reserved
1083         } All;
1084 
1085         struct _Gen8
1086         {
1087             DWORD       Auxiliary64bitBaseAddress           : BITFIELD_RANGE(  0,15 );  // GTT[47:32]
1088             DWORD       _Unused                             : BITFIELD_RANGE( 16,31 );  // Reserved
1089         } Gen8;
1090 
1091         union _Gen9
1092         {
1093             struct _SurfacePlanar
1094             {
1095                 DWORD YOffsetVplane                            : BITFIELD_RANGE( 0, 13);
1096                 DWORD _Unused                                : BITFIELD_RANGE( 14,15); // reserved
1097                 DWORD XOffsetVplane                            : BITFIELD_RANGE( 16,29);
1098                 DWORD _Unused2                                : BITFIELD_RANGE( 30,31); // reserved
1099             } SurfacePlanar;
1100 
1101             struct _SurfaceOther
1102             {
1103                 DWORD       AuxiliarySurfaceBaseAddress     : BITFIELD_RANGE( 0, 31 );  // GTT[32:63]
1104             } SurfaceOther;
1105         } Gen9;
1106         DWORD   Value;
1107     } DW11;
1108 
1109     union _DW12
1110     {
1111         struct _All
1112         {
1113             DWORD       Reserved                            : BITFIELD_RANGE(  0,31 );  // Reserved
1114         } All;
1115 
1116         struct _Gen8
1117         {
1118             DWORD       HierarchicalDepthClearValue         : BITFIELD_RANGE(  0,31 );  // float
1119         } Gen8;
1120 
1121         struct _Gen9
1122         {
1123             DWORD       RedClearColor                       : BITFIELD_RANGE(  0,31 );  // float
1124         } Gen9;
1125 
1126         union _Gen10
1127         {
1128             struct _ClearValueAddressEnable
1129             {
1130                 DWORD       _Unused                            : BITFIELD_RANGE(  0, 5 );  // Reserved
1131                 DWORD       ClearColorAddress                : BITFIELD_RANGE(  6,31 );  // GraphicsAddress[31:6]
1132             } ClearValueAddressEnable;
1133 
1134             struct _ClearValueAddressDisble
1135             {
1136                 DWORD       RedClearColor                       : BITFIELD_RANGE(  0,31 );  // float
1137             } ClearValueAddressDisble;
1138         } Gen10;
1139 
1140         DWORD   Value;
1141     } DW12;
1142 
1143     union _DW13
1144     {
1145         struct _All
1146         {
1147             DWORD       Reserved                            : BITFIELD_RANGE(  0,31 );  // Reserved
1148         } All;
1149 
1150         struct _Gen9
1151         {
1152             DWORD       GreenClearColor                     : BITFIELD_RANGE(  0,31 );  // float
1153         } Gen9;
1154 
1155         union _Gen10
1156         {
1157             struct _ClearValueAddressEnable
1158             {
1159                 DWORD       _Unused                            : BITFIELD_RANGE(  0, 15 );  // Reserved
1160                 DWORD       ClearColorAddressHigh            : BITFIELD_RANGE(  16,31 );  // GraphicsAddress
1161             } ClearValueAddressEnable;
1162 
1163             struct _ClearValueAddressDisble
1164             {
1165                 DWORD       GreenClearColor                     : BITFIELD_RANGE(  0,31 );  // float
1166             } ClearValueAddressDisble;
1167         } Gen10;
1168 
1169         DWORD   Value;
1170     } DW13;
1171 
1172     union _DW14
1173     {
1174         struct _All
1175         {
1176             DWORD       Reserved                            : BITFIELD_RANGE(  0,31 );  // Reserved
1177         } All;
1178 
1179         struct _Gen9
1180         {
1181             DWORD       BlueClearColor                      : BITFIELD_RANGE(  0,31 );  // float
1182         } Gen9;
1183 
1184         union _Gen10
1185         {
1186             struct _ClearValueAddressEnable
1187             {
1188                 DWORD       _Unused                            : BITFIELD_RANGE(  0, 31 );  // Reserved
1189             } ClearValueAddressEnable;
1190 
1191             struct _ClearValueAddressDisble
1192             {
1193                 DWORD       BlueClearColor                      : BITFIELD_RANGE(  0,31 );  // float
1194             } ClearValueAddressDisble;
1195         } Gen10;
1196 
1197         DWORD   Value;
1198     } DW14;
1199 
1200     union _DW15
1201     {
1202         struct _All
1203         {
1204             DWORD       Reserved                            : BITFIELD_RANGE(  0,31 );  // Reserved
1205         } All;
1206 
1207         struct _Gen9
1208         {
1209             DWORD       AlphaClearColor                     : BITFIELD_RANGE(  0,31 );  // float
1210         } Gen9;
1211 
1212         union _Gen10
1213         {
1214             struct _ClearValueAddressEnable
1215             {
1216                 DWORD       _Unused                            : BITFIELD_RANGE(  0, 31 );  // Reserved
1217             } ClearValueAddressEnable;
1218 
1219             struct _ClearValueAddressDisble
1220             {
1221                 DWORD       AlphaClearColor                     : BITFIELD_RANGE(  0,31 );  // float
1222             } ClearValueAddressDisble;
1223         } Gen10;
1224 
1225         DWORD   Value;
1226     } DW15;
1227 };
1228 
1229 static_assert(SIZE32(SSharedStateSurfaceState) == 16);
1230 
1231 /*****************************************************************************\
1232 UNION: SSurfaceStateBufferLength
1233 \*****************************************************************************/
1234 union SSurfaceStateBufferLength
1235 {
1236     struct _All
1237     {
1238         DWORD Width                                         : BITFIELD_RANGE(  0,6  );  // U7
1239         DWORD Height                                        : BITFIELD_RANGE(  7,19 );  // U13
1240         DWORD Depth                                         : BITFIELD_RANGE( 20,26 );  // U7
1241         DWORD _Unused                                       : BITFIELD_RANGE( 27,31 );
1242     } All;
1243 
1244     DWORD Length;
1245 };
1246 
1247 static_assert(SIZE32(SSurfaceStateBufferLength) == 1);
1248 
1249 }  // namespace G6HWC
1250 
1251 // Reset packing alignment to project default
1252 #pragma pack()
1253