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_media_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: SMediaStateInterfaceDescriptorData (INTERFACE_DESCRIPTOR_DATA)
21 \*****************************************************************************/
22 struct SMediaStateInterfaceDescriptorData
23 {
24     // DWORD 0
25     union _DW0
26     {
27         struct _All
28         {
29             DWORD       _Unused                             : BITFIELD_RANGE(  0,  5 );
30             DWORD       KernelStartPointer                  : BITFIELD_RANGE(  6, 31 ); // GTT[31:6]
31         } All;
32 
33         DWORD   Value;
34     } DW0;
35 
36     // DWORD 1
37     union _DW1
38     {
39         struct _All
40         {
41             DWORD       _Unused1                            : BITFIELD_RANGE(  0,  6 );
42             DWORD       SoftwareExceptionEnable             : BITFIELD_BIT(        7 ); // bool
43             DWORD       _Unused2                            : BITFIELD_RANGE(  8, 10 );
44             DWORD       MaskStackExceptionEnable            : BITFIELD_BIT(       11 ); // bool
45             DWORD       _Unused3                            : BITFIELD_BIT(       12 );
46             DWORD       IllegalOpcodeExceptionEnable        : BITFIELD_BIT(       13 ); // bool
47             DWORD       _Unused4                            : BITFIELD_RANGE( 14, 15 );
48             DWORD       FloatingPointMode                   : BITFIELD_BIT(       16 ); // GFXMEDIASTATE_FLOATING_POINT_MODE
49             DWORD       ThreadPriority                      : BITFIELD_BIT(       17 ); // GFXMEDIASTATE_THREAD_PRIORITY
50             DWORD       SingleProgramFlow                   : BITFIELD_BIT(       18 ); // GFXMEDIASTATE_SINGLE_PROGRAM_FLOW
51             DWORD       _Unused5                            : BITFIELD_BIT(       19 );
52             DWORD       _Unused6                            : BITFIELD_RANGE( 20, 25 ); // U6 [0,63]
53             DWORD       _Unused7                            : BITFIELD_RANGE( 26, 31 ); // U6 [0,63]
54         } All;
55 
56         struct _Gen8
57         {
58             DWORD       Kernel64bitStartPointer             : BITFIELD_RANGE(  0, 15 ); // GTT[47:32]
59             DWORD       _Unused                             : BITFIELD_RANGE( 16, 31 ); // Reserved
60         } Gen8;
61 
62         DWORD   Value;
63     } DW1;
64 
65     // DWORD 2
66     union _DW2
67     {
68         struct _All
69         {
70             DWORD       _Unused                             : BITFIELD_RANGE(  0,  1 );
71             DWORD       SamplerCount                        : BITFIELD_RANGE(  2,  4 ); // U3 [0,4]
72             DWORD       SamplerStatePointer                 : BITFIELD_RANGE(  5, 31 ); // GTT[31:5]
73         } All;
74 
75         struct _Gen8
76         {
77             DWORD       _Unused1                            : BITFIELD_RANGE(  0,  6 );
78             DWORD       SoftwareExceptionEnable             : BITFIELD_BIT(        7 ); // bool
79             DWORD       _Unused2                            : BITFIELD_RANGE(  8, 10 );
80             DWORD       MaskStackExceptionEnable            : BITFIELD_BIT(       11 ); // bool
81             DWORD       _Unused3                            : BITFIELD_BIT(       12 );
82             DWORD       IllegalOpcodeExceptionEnable        : BITFIELD_BIT(       13 ); // bool
83             DWORD       _Unused4                            : BITFIELD_RANGE( 14, 15 );
84             DWORD       FloatingPointMode                   : BITFIELD_BIT(       16 ); // GFXMEDIASTATE_FLOATING_POINT_MODE
85             DWORD       ThreadPriority                      : BITFIELD_BIT(       17 ); // GFXMEDIASTATE_THREAD_PRIORITY
86             DWORD       SingleProgramFlow                   : BITFIELD_BIT(       18 ); // GFXMEDIASTATE_SINGLE_PROGRAM_FLOW
87             DWORD       DenormMode                          : BITFIELD_BIT(       19 ); // U1 [0,1]
88             DWORD       _Unused5                            : BITFIELD_RANGE( 20, 31 ); // Reserved
89         } Gen8;
90 
91         DWORD   Value;
92     } DW2;
93 
94     // DWORD 3
95     union _DW3
96     {
97         struct _All
98         {
99             DWORD       BindingTableEntryCount              : BITFIELD_RANGE(  0,  4 ); // U5 [0,5]
100             DWORD       BindingTablePointer                 : BITFIELD_RANGE(  5, 31 ); // GTT[31:5]
101         } All;
102 
103         struct _Gen8
104         {
105             DWORD       _Unused                             : BITFIELD_RANGE(  0,  1 ); // Reserved
106             DWORD       SamplerCount                        : BITFIELD_RANGE(  2,  4 ); // U3 [0,4]
107             DWORD       SamplerStatePointer                 : BITFIELD_RANGE(  5, 31 ); // GTT[31:5]
108         } Gen8;
109 
110         DWORD   Value;
111     } DW3;
112 
113     // DWORD 4
114     union _DW4
115     {
116         struct _All
117         {
118             DWORD       ConstantURBEntryReadOffset          : BITFIELD_RANGE(  0, 15 );
119             DWORD       ConstantURBEntryReadLength          : BITFIELD_RANGE(  16, 31 );
120         } All;
121 
122         struct _Gen8
123         {
124             DWORD       BindingTableEntryCount              : BITFIELD_RANGE(  0,  4 ); // U5 [0,31]
125             DWORD       BindingTablePointer                 : BITFIELD_RANGE(  5, 15 ); // GTT[15:5]
126             DWORD       _Unused                             : BITFIELD_RANGE( 16, 31 ); // Reserved
127         } Gen8;
128 
129         DWORD   Value;
130     } DW4;
131 
132     // DWORD 5
133     union _DW5
134     {
135         struct _All
136         {
137             DWORD       BarrierId                           : BITFIELD_RANGE( 0, 3 );
138             DWORD       _Unused                             : BITFIELD_RANGE( 4, 31);
139         } All;
140 
141         struct _Gen7
142         {
143             DWORD       NumberOfThreadsInThreadGroup        : BITFIELD_RANGE(  0, 7  );  // U8
144             DWORD       _Unused1                            : BITFIELD_RANGE(  8, 15 );
145             DWORD       SharedLocalMemorySize               : BITFIELD_RANGE( 16, 20 );  // U5
146             DWORD       BarrierEnable                       : BITFIELD_BIT( 21 );        // bool
147             DWORD       RoundingMode                        : BITFIELD_RANGE( 22, 23 );  // U2
148             DWORD       _Unused2                            : BITFIELD_RANGE( 24, 31 );
149         } Gen7;
150 
151         struct _Gen8
152         {
153             DWORD       ConstantURBEntryReadOffset          : BITFIELD_RANGE(  0, 15 );
154             DWORD       ConstantURBEntryReadLength          : BITFIELD_RANGE(  16, 31 );
155         } Gen8;
156 
157         DWORD   Value;
158     } DW5;
159 
160     // DWORD 6
161     union _DW6
162     {
163         struct _Gen7_5
164         {
165             DWORD       CrossThreadConstantDataReadLength   : BITFIELD_RANGE(  0, 7  ); // U8
166             DWORD       _Unused                             : BITFIELD_RANGE(  8, 31 );
167         } Gen7_5;
168 
169         struct _Gen8
170         {
171             DWORD       NumberOfThreadsInThreadGroup        : BITFIELD_RANGE(  0,  9 );  // U9
172             DWORD       _Unused1                            : BITFIELD_RANGE( 10, 14 );  // Reserved
173             DWORD       GlobalBarrierEnable                 : BITFIELD_BIT(       15 );  // bool
174             DWORD       SharedLocalMemorySize               : BITFIELD_RANGE( 16, 20 );  // U5
175             DWORD       BarrierEnable                       : BITFIELD_BIT(       21 );  // bool
176             DWORD       RoundingMode                        : BITFIELD_RANGE( 22, 23 );  // U2
177             DWORD       _Unused2                            : BITFIELD_RANGE( 24, 31 );  // Reserved
178         } Gen8;
179 
180         DWORD   Value;
181     } DW6;
182 
183     // DWORD 7
184     union _DW7
185     {
186         struct _Gen8
187         {
188             DWORD       CrossThreadConstantDataReadLength   : BITFIELD_RANGE(  0, 7  ); // U8
189             DWORD       _Unused                             : BITFIELD_RANGE(  8, 31 ); // Reserved
190         } Gen8;
191 
192         DWORD   Value;
193     } DW7;
194 };
195 
196 static_assert(SIZE32(SMediaStateInterfaceDescriptorData) == 8);
197 
198 /*****************************************************************************\
199 STRUCT: SMediaStateMediaInterfaceDescriptorLoad (MEDIA_INTERFACE_DESCRIPTOR_LOAD)
200 \*****************************************************************************/
201 struct SMediaStateMediaInterfaceDescriptorLoad
202 {
203     union _DW0
204     {
205         struct _All
206         {
207             DWORD       Length                              : BITFIELD_RANGE(  0, 15 ); // OP_LENGTH (exclude dw0,dw1)
208             DWORD       InstructionSubOpcode                : BITFIELD_RANGE( 16, 23 ); // GFX_MEDIA_PIPELINED_SUBOPCODE
209             DWORD       InstructionOpcode                   : BITFIELD_RANGE( 24, 26 ); // GFX_OPCODE
210             DWORD       InstructionSubType                  : BITFIELD_RANGE( 27, 28 ); // INSTRUCTION_SUBTYPE
211             DWORD       InstructionType                     : BITFIELD_RANGE( 29, 31 ); // INSTRUCTION_TYPE
212         } All;
213 
214         DWORD   Value;
215     } DW0;
216 
217     // DWORD 1
218     union _DW1
219     {
220         DWORD   Value;
221     } DW1;
222 
223     // DWORD 2
224     union _DW2
225     {
226         struct _All
227         {
228             DWORD       InterfaceDescriptorTotalLength      : BITFIELD_RANGE( 0, 16 );
229             DWORD       _Unused                             : BITFIELD_RANGE( 17, 31 );
230         } All;
231 
232         DWORD   Value;
233     } DW2;
234 
235     // DWORD 3
236     union _DW3
237     {
238         struct _All
239         {
240             DWORD       InterfaceDescriptorDataStartAddress : BITFIELD_RANGE( 0, 31 );
241         } All;
242 
243         DWORD   Value;
244     } DW3;
245 };
246 
247 static_assert(SIZE32(SMediaStateMediaInterfaceDescriptorLoad) == 4);
248 
249 /*****************************************************************************\
250 STRUCT: SMediaStateMediaVFEState (MEDIA_VFE_STATE)
251 \*****************************************************************************/
252 struct SMediaStateMediaVFEState
253 {
254     // DWORD 0
255     union _DW0
256     {
257         struct _All
258         {
259             DWORD       Length                              : BITFIELD_RANGE(  0, 15 ); // OP_LENGTH (exclude dw0,dw1)
260             DWORD       InstructionSubOpcode                : BITFIELD_RANGE( 16, 23 ); // GFX_MEDIA_PIPELINED_SUBOPCODE
261             DWORD       InstructionOpcode                   : BITFIELD_RANGE( 24, 26 ); // GFX_OPCODE
262             DWORD       InstructionSubType                  : BITFIELD_RANGE( 27, 28 ); // INSTRUCTION_SUBTYPE
263             DWORD       InstructionType                     : BITFIELD_RANGE( 29, 31 ); // INSTRUCTION_TYPE
264         } All;
265 
266         DWORD   Value;
267     } DW0;
268 
269     // DWORD 1
270     union _DW1
271     {
272         struct _All
273         {
274             DWORD       PerThreadScratchSpace               : BITFIELD_RANGE(  0,  3 ); // U4 [0, 11] -> [1k, 12k]
275             DWORD       StackSize                           : BITFIELD_RANGE(  4,  7 ); // U4 [0, 11] -> [1k, 2MB]
276             DWORD       _Unused                             : BITFIELD_RANGE(  8,  9 ); // reserved
277             DWORD       ScratchSpaceBasePointer             : BITFIELD_RANGE( 10, 31 ); // GTT[31:10]
278         } All;
279 
280         DWORD   Value;
281     } DW1;
282 
283     // DWORD 2
284     union _DW2
285     {
286         struct _All
287         {
288             DWORD       DebugCounterControl                 : BITFIELD_RANGE(  0,  1 ); // GFXMEDIASTATE_DEBUG_COUNTER_CONTROL
289             DWORD       _Unused                             : BITFIELD_RANGE(  2,  4 );
290             DWORD       FastPreempt                         : BITFIELD_BIT(        5 ); // bool
291             DWORD       BypassGatewayControl                : BITFIELD_BIT(        6 ); // bool
292             DWORD       ResetGatewayTimer                   : BITFIELD_BIT(        7 ); // bool
293             DWORD       NumberOfURBEntries                  : BITFIELD_RANGE(  8, 15 ); // U8 [0,64]
294             DWORD       MaximumNumberOfThreads              : BITFIELD_RANGE( 16, 31 ); // U16 = thread count -1
295         } All;
296 
297         struct _Gen7
298         {
299             DWORD       DebugCounterControl                 : BITFIELD_RANGE(  0,  1 );  // GFXMEDIA_DEBUG_COUNTER_CONTROL
300             DWORD       GPGPUMode                           : BITFIELD_BIT(        2 );  // GFXMEDIA_GPGPU_MODE
301             DWORD       GatewayMMIOAccessControl            : BITFIELD_RANGE(  3,  4 );  // GFXMEDIA_MMIO_ACCESS_CONTROL
302             DWORD       FastPreemptEnable                   : BITFIELD_BIT(        5 );  // bool
303             DWORD       BypassGatewayControl                : BITFIELD_BIT(        6 );
304             DWORD       ResetGatewayTimer                   : BITFIELD_BIT(        7 );
305             DWORD       NumberofURBEntries                  : BITFIELD_RANGE(  8, 15 );  // U8
306             DWORD       MaximumNumberOfThreads              : BITFIELD_RANGE( 16, 31 );  // U4
307         }   Gen7;
308 
309         struct _Gen8
310         {
311             DWORD       ScratchSpace64bitBasePointer        : BITFIELD_RANGE(  0, 15 ); // GTT[47:32]
312             DWORD       _Unused                             : BITFIELD_RANGE( 16, 31 ); // reserved
313         } Gen8;
314 
315         DWORD   Value;
316     } DW2;
317 
318     // DWORD 3
319     union _DW3
320     {
321         struct _All
322         {
323             DWORD       _Unused                             : BITFIELD_RANGE(  0,  7 );
324             DWORD       ObjectId                            : BITFIELD_RANGE(  8, 31 );
325         } All;
326 
327         struct _Gen8
328         {
329             DWORD       DebugCounterControl                 : BITFIELD_RANGE(  0,  1 );  // GFXMEDIA_DEBUG_COUNTER_CONTROL
330             DWORD       GPGPUMode                           : BITFIELD_BIT(        2 );  // GPGPUMode
331             DWORD       GatewayMMIOAccessControl            : BITFIELD_RANGE(  3,  4 );  // GFXMEDIA_MMIO_ACCESS_CONTROL
332             DWORD       FastPreemptEnable                   : BITFIELD_BIT(        5 );  // bool
333             DWORD       BypassGatewayControl                : BITFIELD_BIT(        6 );
334             DWORD       ResetGatewayTimer                   : BITFIELD_BIT(        7 );
335             DWORD       NumberofURBEntries                  : BITFIELD_RANGE(  8, 15 );  // U8
336             DWORD       MaximumNumberOfThreads              : BITFIELD_RANGE( 16, 31 );  // U4
337         }   Gen8;
338 
339         struct _Gen9
340         {
341             DWORD       DebugCounterControl                 : BITFIELD_RANGE(  0,  1 );  // GFXMEDIA_DEBUG_COUNTER_CONTROL
342             DWORD       SLMGranularity                      : BITFIELD_BIT(        2 );  // GFXMEDIASTATE_SLMGranularity
343             DWORD       GatewayMMIOAccessControl            : BITFIELD_RANGE(  3,  4 );  // GFXMEDIA_MMIO_ACCESS_CONTROL
344             DWORD       _Unused                             : BITFIELD_BIT(        5 );  // reserved
345             DWORD       BypassGatewayControl                : BITFIELD_BIT(        6 );
346             DWORD       ResetGatewayTimer                   : BITFIELD_BIT(        7 );
347             DWORD       NumberofURBEntries                  : BITFIELD_RANGE(  8, 15 );  // U8
348             DWORD       MaximumNumberOfThreads              : BITFIELD_RANGE( 16, 31 );  // U4
349         }   Gen9;
350 
351         DWORD   Value;
352     } DW3;
353 
354     // DWORD 4
355     union _DW4
356     {
357         struct _All
358         {
359             DWORD       CURBEAllocationSize                 : BITFIELD_RANGE(  0, 15 ); // U9 [0, 2048]
360             DWORD       URBEntryAllocationSize              : BITFIELD_RANGE( 16, 31 ); // U9 [0, 2048]
361         } All;
362 
363         struct _Gen8
364         {
365             DWORD       _Unused                             : BITFIELD_RANGE(  0,  7 ); // reserved
366             DWORD       ObjectID                            : BITFIELD_RANGE(  8, 31 );
367         } Gen8;
368 
369         struct _Gen10
370         {
371             DWORD       SliceDisable                        : BITFIELD_RANGE(  0,  1 );
372             DWORD       FlushOnBarriers                     : BITFIELD_RANGE(  2,  3 );
373             DWORD       _Unused                             : BITFIELD_RANGE(  4,  7 ); // reserved
374             DWORD       ObjectID                            : BITFIELD_RANGE(  8, 31 );
375         } Gen10;
376 
377         DWORD   Value;
378     } DW4;
379 
380     // DWORD 5
381     union _DW5
382     {
383         struct _All
384         {
385             DWORD       ScoreboardMask                      : BITFIELD_RANGE(  0,  7 ); // 8 bits for score 0 to 7
386             DWORD       _Unused                             : BITFIELD_RANGE(  8, 29 );
387             DWORD       ScoreBoardType                      : BITFIELD_BIT(       30 ); // GFXMEDIASTATE_SCOREBOARD_TYPE
388             DWORD       ScoreBoardEnable                    : BITFIELD_BIT(       31 ); // bool
389         } All;
390 
391         struct _Gen8
392         {
393             DWORD       CURBEAllocationSize                 : BITFIELD_RANGE(  0, 15 ); // U9 [0, 2048]
394             DWORD       URBEntryAllocationSize              : BITFIELD_RANGE( 16, 31 ); // U9 [0, 2048]
395         } Gen8;
396 
397         DWORD   Value;
398     } DW5;
399 
400     // DWORD 6
401     union _DW6
402     {
403         struct _All
404         {
405             DWORD       ScoreboardDeltaX0                   : BITFIELD_RANGE(  0,  3 ); // s3
406             DWORD       ScoreboardDeltaY0                   : BITFIELD_RANGE(  4,  7 ); // s3
407             DWORD       ScoreboardDeltaX1                   : BITFIELD_RANGE(  8, 11 ); // s3
408             DWORD       ScoreboardDeltaY1                   : BITFIELD_RANGE( 12, 15 ); // s3
409             DWORD       ScoreboardDeltaX2                   : BITFIELD_RANGE( 16, 19 ); // s3
410             DWORD       ScoreboardDeltaY2                   : BITFIELD_RANGE( 20, 23 ); // s3
411             DWORD       ScoreboardDeltaX3                   : BITFIELD_RANGE( 24, 27 ); // s3
412             DWORD       ScoreboardDeltaY3                   : BITFIELD_RANGE( 28, 31 ); // s3
413         } All;
414 
415         struct _Gen8
416         {
417             DWORD       ScoreboardMask                      : BITFIELD_RANGE(  0,  7 ); // 8 bits for score 0 to 7
418             DWORD       _Unused                             : BITFIELD_RANGE(  8, 29 );
419             DWORD       ScoreBoardType                      : BITFIELD_BIT(       30 ); // GFXMEDIASTATE_SCOREBOARD_TYPE
420             DWORD       ScoreBoardEnable                    : BITFIELD_BIT(       31 ); // bool
421         } Gen8;
422 
423         struct _Gen10
424         {
425             DWORD       ScoreboardMask                      : BITFIELD_RANGE(  0,  7 ); // 8 bits for score 0 to 7
426             DWORD       NumMediaObjPerPreEmptionCheckpoint  : BITFIELD_RANGE(  8, 15 ); // how many MEDIA_OBJECT commands are executed between checkpoints for pre-emption.
427             DWORD       _Unused                             : BITFIELD_RANGE(  16, 29 );
428             DWORD       ScoreBoardType                      : BITFIELD_BIT(       30 ); // GFXMEDIASTATE_SCOREBOARD_TYPE
429             DWORD       ScoreBoardEnable                    : BITFIELD_BIT(       31 ); // bool
430         } Gen10;
431 
432         DWORD   Value;
433     } DW6;
434 
435     // DWORD 7
436     union _DW7
437     {
438         struct _All
439         {
440             DWORD       ScoreboardDeltaX4                   : BITFIELD_RANGE(  0,  3 ); // s3
441             DWORD       ScoreboardDeltaY4                   : BITFIELD_RANGE(  4,  7 ); // s3
442             DWORD       ScoreboardDeltaX5                   : BITFIELD_RANGE(  8, 11 ); // s3
443             DWORD       ScoreboardDeltaY5                   : BITFIELD_RANGE( 12, 15 ); // s3
444             DWORD       ScoreboardDeltaX6                   : BITFIELD_RANGE( 16, 19 ); // s3
445             DWORD       ScoreboardDeltaY6                   : BITFIELD_RANGE( 20, 23 ); // s3
446             DWORD       ScoreboardDeltaX7                   : BITFIELD_RANGE( 24, 27 ); // s3
447             DWORD       ScoreboardDeltaY7                   : BITFIELD_RANGE( 28, 31 ); // s3
448         } All;
449 
450         struct _Gen8
451         {
452             DWORD       ScoreboardDeltaX0                   : BITFIELD_RANGE(  0,  3 ); // s3
453             DWORD       ScoreboardDeltaY0                   : BITFIELD_RANGE(  4,  7 ); // s3
454             DWORD       ScoreboardDeltaX1                   : BITFIELD_RANGE(  8, 11 ); // s3
455             DWORD       ScoreboardDeltaY1                   : BITFIELD_RANGE( 12, 15 ); // s3
456             DWORD       ScoreboardDeltaX2                   : BITFIELD_RANGE( 16, 19 ); // s3
457             DWORD       ScoreboardDeltaY2                   : BITFIELD_RANGE( 20, 23 ); // s3
458             DWORD       ScoreboardDeltaX3                   : BITFIELD_RANGE( 24, 27 ); // s3
459             DWORD       ScoreboardDeltaY3                   : BITFIELD_RANGE( 28, 31 ); // s3
460         } Gen8;
461 
462         DWORD   Value;
463     } DW7;
464 
465     // DWORD 8
466     union _DW8
467     {
468         struct _Gen8
469         {
470             DWORD       ScoreboardDeltaX4                   : BITFIELD_RANGE(  0,  3 ); // s3
471             DWORD       ScoreboardDeltaY4                   : BITFIELD_RANGE(  4,  7 ); // s3
472             DWORD       ScoreboardDeltaX5                   : BITFIELD_RANGE(  8, 11 ); // s3
473             DWORD       ScoreboardDeltaY5                   : BITFIELD_RANGE( 12, 15 ); // s3
474             DWORD       ScoreboardDeltaX6                   : BITFIELD_RANGE( 16, 19 ); // s3
475             DWORD       ScoreboardDeltaY6                   : BITFIELD_RANGE( 20, 23 ); // s3
476             DWORD       ScoreboardDeltaX7                   : BITFIELD_RANGE( 24, 27 ); // s3
477             DWORD       ScoreboardDeltaY7                   : BITFIELD_RANGE( 28, 31 ); // s3
478         } Gen8;
479 
480         DWORD   Value;
481     } DW8;
482 };
483 
484 static_assert(SIZE32(SMediaStateMediaVFEState) == 9);
485 
486 /*****************************************************************************\
487 STRUCT: SMediaStateMediaCURBELoad (MEDIA_CURBE_LOAD)
488 \*****************************************************************************/
489 struct SMediaStateMediaCURBELoad
490 {
491     // DWORD 0
492     union _DW0
493     {
494         struct _All
495         {
496             DWORD       Length                              : BITFIELD_RANGE(  0, 15 ); // OP_LENGTH (exclude dw0,dw1)
497             DWORD       InstructionSubOpcode                : BITFIELD_RANGE( 16, 23 ); // GFX_MEDIA_PIPELINED_SUBOPCODE
498             DWORD       InstructionOpcode                   : BITFIELD_RANGE( 24, 26 ); // GFX_OPCODE
499             DWORD       InstructionSubType                  : BITFIELD_RANGE( 27, 28 ); // INSTRUCTION_SUBTYPE
500             DWORD       InstructionType                     : BITFIELD_RANGE( 29, 31 ); // INSTRUCTION_TYPE
501         } All;
502 
503         DWORD   Value;
504     } DW0;
505 
506     // DWORD 1
507     union _DW1
508     {
509         DWORD   Value;
510     } DW1;
511 
512     // DWORD 2
513     union _DW2
514     {
515         struct _All
516         {
517             DWORD       CURBETotalDataLength                : BITFIELD_RANGE(  0, 16 ); // U17
518             DWORD       _Unused                             : BITFIELD_RANGE( 17, 31 );
519         } All;
520 
521         DWORD   Value;
522     } DW2;
523 
524     // DWORD 3
525     union _DW3
526     {
527         struct _All
528         {
529             DWORD       CURBEDataStartAddress               : BITFIELD_RANGE(  0, 31 ); // U17
530         } All;
531 
532         DWORD   Value;
533     } DW3;
534 };
535 
536 static_assert(SIZE32(SMediaStateMediaCURBELoad) == 4);
537 
538 /*****************************************************************************\
539 STRUCT: SMediaStateMediaStateFlush (MEDIA_STATE_FLUSH)
540 \*****************************************************************************/
541 struct SMediaStateMediaStateFlush
542 {
543     // DWORD 0
544     union _DW0
545     {
546         struct _All
547         {
548             DWORD       Length                              : BITFIELD_RANGE(  0, 15); // OP_LENGTH (exclude dw0,dw1)
549             DWORD       InstructionSubOpcode                : BITFIELD_RANGE( 16, 23); // GFX_MEDIA_PIPELINED_SUBOPCODE
550             DWORD       InstructionOpcode                   : BITFIELD_RANGE( 24, 26); // GFX_OPCODE
551             DWORD       InstructionSubType                  : BITFIELD_RANGE( 27, 28); // INSTRUCTION_SUBTYPE
552             DWORD       InstructionType                     : BITFIELD_RANGE( 29, 31); // INSTRUCTION_TYPE
553         } All;
554 
555         DWORD   Value;
556     } DW0;
557 
558     // DWORD 1
559     union _DW1
560     {
561         struct _All
562         {
563             DWORD       BarrierMask                         : BITFIELD_RANGE(  0, 15 ); // One bit for each barrier
564             DWORD       ThreadCountWaterMark                : BITFIELD_RANGE( 16, 23 ); // U8
565             DWORD       _Unused                             : BITFIELD_RANGE( 24, 31 );
566         } All;
567 
568         struct _Gen7
569         {
570             DWORD       InterfaceDescriptorOffset           : BITFIELD_RANGE(  0, 5 ); // U6
571             DWORD       ThreadCountWaterMark                : BITFIELD_BIT( 6 ); // one bit specify if stall waiting resources
572             DWORD       _Unused                             : BITFIELD_RANGE( 7, 31 );
573         } Gen7;
574 
575         DWORD   Value;
576     } DW1;
577 };
578 
579 static_assert(SIZE32(SMediaStateMediaStateFlush) == 2);
580 
581 /*****************************************************************************\
582 STRUCT: SMediaStateGPGPUWalker (GPGPU_WALKER)
583 \*****************************************************************************/
584 struct SMediaStateGPGPUWalker
585 {
586     // DWORD 0
587     union _DW0
588     {
589         struct _All
590         {
591             DWORD       Length                              : BITFIELD_RANGE(  0,  7 ); // OP_LENGTH (exclude dw0,dw1)
592             DWORD       PredicateEnable                     : BITFIELD_BIT(        8 ); // bool
593             DWORD       _Unused1                            : BITFIELD_BIT(        9 );
594             DWORD       IndirectParameterEnable             : BITFIELD_BIT(       10 ); // bool
595             DWORD       _Unused2                            : BITFIELD_RANGE( 11, 15 );
596             DWORD       InstructionSubOpcodeA               : BITFIELD_RANGE( 16, 23 ); // GFX_MEDIA_NONPIPELINED_SUBOPCODE_A
597             DWORD       InstructionOpcode                   : BITFIELD_RANGE( 24, 26 ); // GFX_OPCODE
598             DWORD       InstructionSubType                  : BITFIELD_RANGE( 27, 28 ); // INSTRUCTION_SUBTYPE
599             DWORD       InstructionType                     : BITFIELD_RANGE( 29, 31 ); // INSTRUCTION_TYPE
600         } All;
601 
602         DWORD   Value;
603     } DW0;
604 
605     // DWORD 1
606     union _DW1
607     {
608         struct _All
609         {
610             DWORD       InterfaceDescriptorOffset           : BITFIELD_RANGE(  0,  5 ); // U5
611             DWORD       _Unused                             : BITFIELD_RANGE(  6,  7 );
612             DWORD       ObjectId                            : BITFIELD_RANGE(  8, 31 ); // U8
613         } All;
614 
615         DWORD   Value;
616     } DW1;
617 
618     // DWORD 2
619     union _DW2
620     {
621         struct _All
622         {
623             DWORD       ThreadWidthCounterMaximum           : BITFIELD_RANGE(  0,  5 );
624             DWORD       _Unused1                            : BITFIELD_RANGE(  6,  7 );
625             DWORD       ThreadHeightCounterMaximum          : BITFIELD_RANGE(  8, 13 );
626             DWORD       _Unused2                            : BITFIELD_RANGE( 14, 15 );
627             DWORD       ThreadDepthCounterMaximum           : BITFIELD_RANGE( 16, 21 );
628             DWORD       _Unused3                            : BITFIELD_RANGE( 22, 29 );
629             DWORD       SIMDSize                            : BITFIELD_RANGE( 30, 31 ); // GFXMEDIASTATE_GPGPU_WALKER_SIMD_SIZE
630         } All;
631 
632         struct _Gen8
633         {
634             DWORD       IndirectDataLength                  : BITFIELD_RANGE(  0, 16 ); // U17 in bytes
635             DWORD       _Unused                             : BITFIELD_RANGE( 17, 31 ); // Reserved
636         } Gen8;
637 
638         DWORD   Value;
639     } DW2;
640 
641     // DWORD 3
642     union _DW3
643     {
644         struct _All
645         {
646             DWORD       ThreadGroupIdStartingX              : BITFIELD_RANGE(  0, 31 ); // U31
647         } All;
648 
649         struct _Gen8
650         {
651             DWORD       IndirectDataStartAddress            : BITFIELD_RANGE(  0, 31 ); // 64-byte aligned address
652         } Gen8;
653 
654         DWORD   Value;
655     } DW3;
656 
657     // DWORD 4
658     union _DW4
659     {
660         struct _All
661         {
662             DWORD       ThreadGroupIdDimensionX             : BITFIELD_RANGE(  0, 31 );
663         } All;
664 
665         struct _Gen8
666         {
667             DWORD       ThreadWidthCounterMaximum           : BITFIELD_RANGE(  0,  5 );
668             DWORD       _Unused1                            : BITFIELD_RANGE(  6,  7 ); // Reserved
669             DWORD       ThreadHeightCounterMaximum          : BITFIELD_RANGE(  8, 13 );
670             DWORD       _Unused2                            : BITFIELD_RANGE( 14, 15 ); // Reserved
671             DWORD       ThreadDepthCounterMaximum           : BITFIELD_RANGE( 16, 21 );
672             DWORD       _Unused3                            : BITFIELD_RANGE( 22, 29 ); // Reserved
673             DWORD       SIMDSize                            : BITFIELD_RANGE( 30, 31 ); // GFXMEDIASTATE_GPGPU_WALKER_SIMD_SIZE
674         } Gen8;
675 
676         DWORD   Value;
677     } DW4;
678 
679     // DWORD 5
680     union _DW5
681     {
682         struct _All
683         {
684             DWORD       ThreadGroupIdStartingY              : BITFIELD_RANGE(  0, 31 );
685         } All;
686 
687         struct _Gen8
688         {
689             DWORD       ThreadGroupIdStartingX              : BITFIELD_RANGE(  0, 31 );
690         } Gen8;
691 
692         DWORD   Value;
693     } DW5;
694 
695     // DWORD 6
696     union _DW6
697     {
698         struct _All
699         {
700             DWORD       ThreadGroupIdDimensionY             : BITFIELD_RANGE(  0, 31 );
701         } All;
702 
703         struct _Gen8
704         {
705             DWORD       ThreadGroupIdResumeX                : BITFIELD_RANGE(  0, 31 );
706         } Gen8;
707 
708         DWORD   Value;
709     } DW6;
710 
711     // DWORD 7
712     union _DW7
713     {
714         struct _All
715         {
716             DWORD       ThreadGroupIdStartingZ              : BITFIELD_RANGE(  0, 31 );
717         } All;
718 
719         struct _Gen8
720         {
721             DWORD       ThreadGroupIdDimensionX             : BITFIELD_RANGE(  0, 31 );
722         } Gen8;
723 
724         DWORD   Value;
725     } DW7;
726 
727     // DWORD 8
728     union _DW8
729     {
730         struct _All
731         {
732             DWORD       ThreadGroupIdDimensionZ             : BITFIELD_RANGE(  0, 31 );
733         } All;
734 
735         struct _Gen8
736         {
737             DWORD       ThreadGroupIdStartingY              : BITFIELD_RANGE(  0, 31 );
738         } Gen8;
739 
740         DWORD   Value;
741     } DW8;
742 
743     // DWORD 9
744     union _DW9
745     {
746         struct _All
747         {
748             DWORD       RightExecutionMask                  : BITFIELD_RANGE(  0, 31 );
749         } All;
750 
751         struct _Gen8
752         {
753             DWORD       ThreadGroupIdResumeY                : BITFIELD_RANGE(  0, 31 );
754         } Gen8;
755 
756         DWORD   Value;
757     } DW9;
758 
759     // DWORD 10
760     union _DW10
761     {
762         struct _All
763         {
764             DWORD       BottomExecutionMask                 : BITFIELD_RANGE(  0, 31 );
765         } All;
766 
767         struct _Gen8
768         {
769             DWORD       ThreadGroupIdDimensionY             : BITFIELD_RANGE(  0, 31 );
770         } Gen8;
771 
772         DWORD   Value;
773     } DW10;
774 
775     // DWORD 11
776     union _DW11
777     {
778         struct _Gen8
779         {
780             DWORD       ThreadGroupIdStartingResumeZ        : BITFIELD_RANGE(  0, 31 );
781         } Gen8;
782 
783         DWORD   Value;
784     } DW11;
785 
786     // DWORD 12
787     union _DW12
788     {
789         struct _Gen8
790         {
791             DWORD       ThreadGroupIdDimensionZ             : BITFIELD_RANGE(  0, 31 );
792         } Gen8;
793 
794         DWORD   Value;
795     } DW12;
796 
797     // DWORD 13
798     union _DW13
799     {
800         struct _Gen8
801         {
802             DWORD       RightExecutionMask                  : BITFIELD_RANGE(  0, 31 );
803         } Gen8;
804 
805         DWORD   Value;
806     } DW13;
807 
808     // DWORD 14
809     union _DW14
810     {
811         struct _Gen8
812         {
813             DWORD       BottomExecutionMask                 : BITFIELD_RANGE(  0, 31 );
814         } Gen8;
815 
816         DWORD   Value;
817     } DW14;
818 };
819 
820 static_assert(SIZE32(SMediaStateGPGPUWalker) == 15);
821 
822 }  // namespace G6HWC
823 
824 // Reset packing alignment to project default
825 #pragma pack()
826