1/*
2 * Copyright (C) 2016 Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21 * IN THE SOFTWARE.
22 */
23
24
25/* Instructions, enums and structures for IVB.
26 *
27 * This file has been generated, do not hand edit.
28 */
29
30#ifndef GEN7_PACK_H
31#define GEN7_PACK_H
32
33#include <stdio.h>
34#include <stdint.h>
35#include <stdbool.h>
36#include <assert.h>
37#include <math.h>
38
39#ifndef __gen_validate_value
40#define __gen_validate_value(x)
41#endif
42
43#ifndef __gen_field_functions
44#define __gen_field_functions
45
46#ifdef NDEBUG
47#define NDEBUG_UNUSED __attribute__((unused))
48#else
49#define NDEBUG_UNUSED
50#endif
51
52union __gen_value {
53   float f;
54   uint32_t dw;
55};
56
57static inline uint64_t
58__gen_mbo(uint32_t start, uint32_t end)
59{
60   return (~0ull >> (64 - (end - start + 1))) << start;
61}
62
63static inline uint64_t
64__gen_uint(uint64_t v, uint32_t start, NDEBUG_UNUSED uint32_t end)
65{
66   __gen_validate_value(v);
67
68#ifndef NDEBUG
69   const int width = end - start + 1;
70   if (width < 64) {
71      const uint64_t max = (1ull << width) - 1;
72      assert(v <= max);
73   }
74#endif
75
76   return v << start;
77}
78
79static inline uint64_t
80__gen_sint(int64_t v, uint32_t start, uint32_t end)
81{
82   const int width = end - start + 1;
83
84   __gen_validate_value(v);
85
86#ifndef NDEBUG
87   if (width < 64) {
88      const int64_t max = (1ll << (width - 1)) - 1;
89      const int64_t min = -(1ll << (width - 1));
90      assert(min <= v && v <= max);
91   }
92#endif
93
94   const uint64_t mask = ~0ull >> (64 - width);
95
96   return (v & mask) << start;
97}
98
99static inline uint64_t
100__gen_offset(uint64_t v, NDEBUG_UNUSED uint32_t start, NDEBUG_UNUSED uint32_t end)
101{
102   __gen_validate_value(v);
103#ifndef NDEBUG
104   uint64_t mask = (~0ull >> (64 - (end - start + 1))) << start;
105
106   assert((v & ~mask) == 0);
107#endif
108
109   return v;
110}
111
112static inline uint32_t
113__gen_float(float v)
114{
115   __gen_validate_value(v);
116   return ((union __gen_value) { .f = (v) }).dw;
117}
118
119static inline uint64_t
120__gen_sfixed(float v, uint32_t start, uint32_t end, uint32_t fract_bits)
121{
122   __gen_validate_value(v);
123
124   const float factor = (1 << fract_bits);
125
126#ifndef NDEBUG
127   const float max = ((1 << (end - start)) - 1) / factor;
128   const float min = -(1 << (end - start)) / factor;
129   assert(min <= v && v <= max);
130#endif
131
132   const int64_t int_val = llroundf(v * factor);
133   const uint64_t mask = ~0ull >> (64 - (end - start + 1));
134
135   return (int_val & mask) << start;
136}
137
138static inline uint64_t
139__gen_ufixed(float v, uint32_t start, NDEBUG_UNUSED uint32_t end, uint32_t fract_bits)
140{
141   __gen_validate_value(v);
142
143   const float factor = (1 << fract_bits);
144
145#ifndef NDEBUG
146   const float max = ((1 << (end - start + 1)) - 1) / factor;
147   const float min = 0.0f;
148   assert(min <= v && v <= max);
149#endif
150
151   const uint64_t uint_val = llroundf(v * factor);
152
153   return uint_val << start;
154}
155
156#ifndef __gen_address_type
157#error #define __gen_address_type before including this file
158#endif
159
160#ifndef __gen_user_data
161#error #define __gen_combine_address before including this file
162#endif
163
164#undef NDEBUG_UNUSED
165
166#endif
167
168
169enum GEN7_3D_Color_Buffer_Blend_Factor {
170   BLENDFACTOR_ONE                      =      1,
171   BLENDFACTOR_SRC_COLOR                =      2,
172   BLENDFACTOR_SRC_ALPHA                =      3,
173   BLENDFACTOR_DST_ALPHA                =      4,
174   BLENDFACTOR_DST_COLOR                =      5,
175   BLENDFACTOR_SRC_ALPHA_SATURATE       =      6,
176   BLENDFACTOR_CONST_COLOR              =      7,
177   BLENDFACTOR_CONST_ALPHA              =      8,
178   BLENDFACTOR_SRC1_COLOR               =      9,
179   BLENDFACTOR_SRC1_ALPHA               =     10,
180   BLENDFACTOR_ZERO                     =     17,
181   BLENDFACTOR_INV_SRC_COLOR            =     18,
182   BLENDFACTOR_INV_SRC_ALPHA            =     19,
183   BLENDFACTOR_INV_DST_ALPHA            =     20,
184   BLENDFACTOR_INV_DST_COLOR            =     21,
185   BLENDFACTOR_INV_CONST_COLOR          =     23,
186   BLENDFACTOR_INV_CONST_ALPHA          =     24,
187   BLENDFACTOR_INV_SRC1_COLOR           =     25,
188   BLENDFACTOR_INV_SRC1_ALPHA           =     26,
189};
190
191enum GEN7_3D_Color_Buffer_Blend_Function {
192   BLENDFUNCTION_ADD                    =      0,
193   BLENDFUNCTION_SUBTRACT               =      1,
194   BLENDFUNCTION_REVERSE_SUBTRACT       =      2,
195   BLENDFUNCTION_MIN                    =      3,
196   BLENDFUNCTION_MAX                    =      4,
197};
198
199enum GEN7_3D_Compare_Function {
200   COMPAREFUNCTION_ALWAYS               =      0,
201   COMPAREFUNCTION_NEVER                =      1,
202   COMPAREFUNCTION_LESS                 =      2,
203   COMPAREFUNCTION_EQUAL                =      3,
204   COMPAREFUNCTION_LEQUAL               =      4,
205   COMPAREFUNCTION_GREATER              =      5,
206   COMPAREFUNCTION_NOTEQUAL             =      6,
207   COMPAREFUNCTION_GEQUAL               =      7,
208};
209
210enum GEN7_3D_Logic_Op_Function {
211   LOGICOP_CLEAR                        =      0,
212   LOGICOP_NOR                          =      1,
213   LOGICOP_AND_INVERTED                 =      2,
214   LOGICOP_COPY_INVERTED                =      3,
215   LOGICOP_AND_REVERSE                  =      4,
216   LOGICOP_INVERT                       =      5,
217   LOGICOP_XOR                          =      6,
218   LOGICOP_NAND                         =      7,
219   LOGICOP_AND                          =      8,
220   LOGICOP_EQUIV                        =      9,
221   LOGICOP_NOOP                         =     10,
222   LOGICOP_OR_INVERTED                  =     11,
223   LOGICOP_COPY                         =     12,
224   LOGICOP_OR_REVERSE                   =     13,
225   LOGICOP_OR                           =     14,
226   LOGICOP_SET                          =     15,
227};
228
229enum GEN7_3D_Prim_Topo_Type {
230   _3DPRIM_POINTLIST                    =      1,
231   _3DPRIM_LINELIST                     =      2,
232   _3DPRIM_LINESTRIP                    =      3,
233   _3DPRIM_TRILIST                      =      4,
234   _3DPRIM_TRISTRIP                     =      5,
235   _3DPRIM_TRIFAN                       =      6,
236   _3DPRIM_QUADLIST                     =      7,
237   _3DPRIM_QUADSTRIP                    =      8,
238   _3DPRIM_LINELIST_ADJ                 =      9,
239   _3DPRIM_LINESTRIP_ADJ                =     10,
240   _3DPRIM_TRILIST_ADJ                  =     11,
241   _3DPRIM_TRISTRIP_ADJ                 =     12,
242   _3DPRIM_TRISTRIP_REVERSE             =     13,
243   _3DPRIM_POLYGON                      =     14,
244   _3DPRIM_RECTLIST                     =     15,
245   _3DPRIM_LINELOOP                     =     16,
246   _3DPRIM_POINTLIST_BF                 =     17,
247   _3DPRIM_LINESTRIP_CONT               =     18,
248   _3DPRIM_LINESTRIP_BF                 =     19,
249   _3DPRIM_LINESTRIP_CONT_BF            =     20,
250   _3DPRIM_TRIFAN_NOSTIPPLE             =     22,
251   _3DPRIM_PATCHLIST_1                  =     32,
252   _3DPRIM_PATCHLIST_2                  =     33,
253   _3DPRIM_PATCHLIST_3                  =     34,
254   _3DPRIM_PATCHLIST_4                  =     35,
255   _3DPRIM_PATCHLIST_5                  =     36,
256   _3DPRIM_PATCHLIST_6                  =     37,
257   _3DPRIM_PATCHLIST_7                  =     38,
258   _3DPRIM_PATCHLIST_8                  =     39,
259   _3DPRIM_PATCHLIST_9                  =     40,
260   _3DPRIM_PATCHLIST_10                 =     41,
261   _3DPRIM_PATCHLIST_11                 =     42,
262   _3DPRIM_PATCHLIST_12                 =     43,
263   _3DPRIM_PATCHLIST_13                 =     44,
264   _3DPRIM_PATCHLIST_14                 =     45,
265   _3DPRIM_PATCHLIST_15                 =     46,
266   _3DPRIM_PATCHLIST_16                 =     47,
267   _3DPRIM_PATCHLIST_17                 =     48,
268   _3DPRIM_PATCHLIST_18                 =     49,
269   _3DPRIM_PATCHLIST_19                 =     50,
270   _3DPRIM_PATCHLIST_20                 =     51,
271   _3DPRIM_PATCHLIST_21                 =     52,
272   _3DPRIM_PATCHLIST_22                 =     53,
273   _3DPRIM_PATCHLIST_23                 =     54,
274   _3DPRIM_PATCHLIST_24                 =     55,
275   _3DPRIM_PATCHLIST_25                 =     56,
276   _3DPRIM_PATCHLIST_26                 =     57,
277   _3DPRIM_PATCHLIST_27                 =     58,
278   _3DPRIM_PATCHLIST_28                 =     59,
279   _3DPRIM_PATCHLIST_29                 =     60,
280   _3DPRIM_PATCHLIST_30                 =     61,
281   _3DPRIM_PATCHLIST_31                 =     62,
282   _3DPRIM_PATCHLIST_32                 =     63,
283};
284
285enum GEN7_3D_Stencil_Operation {
286   STENCILOP_KEEP                       =      0,
287   STENCILOP_ZERO                       =      1,
288   STENCILOP_REPLACE                    =      2,
289   STENCILOP_INCRSAT                    =      3,
290   STENCILOP_DECRSAT                    =      4,
291   STENCILOP_INCR                       =      5,
292   STENCILOP_DECR                       =      6,
293   STENCILOP_INVERT                     =      7,
294};
295
296enum GEN7_3D_Vertex_Component_Control {
297   VFCOMP_NOSTORE                       =      0,
298   VFCOMP_STORE_SRC                     =      1,
299   VFCOMP_STORE_0                       =      2,
300   VFCOMP_STORE_1_FP                    =      3,
301   VFCOMP_STORE_1_INT                   =      4,
302   VFCOMP_STORE_VID                     =      5,
303   VFCOMP_STORE_IID                     =      6,
304   VFCOMP_STORE_PID                     =      7,
305};
306
307enum GEN7_TextureCoordinateMode {
308   TCM_WRAP                             =      0,
309   TCM_MIRROR                           =      1,
310   TCM_CLAMP                            =      2,
311   TCM_CUBE                             =      3,
312   TCM_CLAMP_BORDER                     =      4,
313   TCM_MIRROR_ONCE                      =      5,
314};
315
316#define GEN7_3DSTATE_CONSTANT_BODY_length      6
317struct GEN7_3DSTATE_CONSTANT_BODY {
318   uint32_t                             ReadLength[4];
319   uint32_t                             MOCS;
320   __gen_address_type                   Buffer[4];
321};
322
323static inline void
324GEN7_3DSTATE_CONSTANT_BODY_pack(__attribute__((unused)) __gen_user_data *data,
325                                __attribute__((unused)) void * restrict dst,
326                                __attribute__((unused)) const struct GEN7_3DSTATE_CONSTANT_BODY * restrict values)
327{
328   uint32_t * restrict dw = (uint32_t * restrict) dst;
329
330   dw[0] =
331      __gen_uint(values->ReadLength[0], 0, 15) |
332      __gen_uint(values->ReadLength[1], 16, 31);
333
334   dw[1] =
335      __gen_uint(values->ReadLength[2], 0, 15) |
336      __gen_uint(values->ReadLength[3], 16, 31);
337
338   const uint32_t v2 =
339      __gen_uint(values->MOCS, 0, 4);
340   dw[2] = __gen_combine_address(data, &dw[2], values->Buffer[0], v2);
341
342   dw[3] = __gen_combine_address(data, &dw[3], values->Buffer[1], 0);
343
344   dw[4] = __gen_combine_address(data, &dw[4], values->Buffer[2], 0);
345
346   dw[5] = __gen_combine_address(data, &dw[5], values->Buffer[3], 0);
347}
348
349#define GEN7_BINDING_TABLE_STATE_length        1
350struct GEN7_BINDING_TABLE_STATE {
351   uint64_t                             SurfaceStatePointer;
352};
353
354static inline void
355GEN7_BINDING_TABLE_STATE_pack(__attribute__((unused)) __gen_user_data *data,
356                              __attribute__((unused)) void * restrict dst,
357                              __attribute__((unused)) const struct GEN7_BINDING_TABLE_STATE * restrict values)
358{
359   uint32_t * restrict dw = (uint32_t * restrict) dst;
360
361   dw[0] =
362      __gen_offset(values->SurfaceStatePointer, 5, 31);
363}
364
365#define GEN7_BLEND_STATE_ENTRY_length          2
366struct GEN7_BLEND_STATE_ENTRY {
367   enum GEN7_3D_Color_Buffer_Blend_Factor DestinationBlendFactor;
368   enum GEN7_3D_Color_Buffer_Blend_Factor SourceBlendFactor;
369   enum GEN7_3D_Color_Buffer_Blend_Function ColorBlendFunction;
370   enum GEN7_3D_Color_Buffer_Blend_Factor DestinationAlphaBlendFactor;
371   enum GEN7_3D_Color_Buffer_Blend_Factor SourceAlphaBlendFactor;
372   enum GEN7_3D_Color_Buffer_Blend_Function AlphaBlendFunction;
373   bool                                 IndependentAlphaBlendEnable;
374   bool                                 ColorBufferBlendEnable;
375   bool                                 PostBlendColorClampEnable;
376   bool                                 PreBlendColorClampEnable;
377   uint32_t                             ColorClampRange;
378#define COLORCLAMP_UNORM                         0
379#define COLORCLAMP_SNORM                         1
380#define COLORCLAMP_RTFORMAT                      2
381   uint32_t                             YDitherOffset;
382   uint32_t                             XDitherOffset;
383   bool                                 ColorDitherEnable;
384   enum GEN7_3D_Compare_Function        AlphaTestFunction;
385   bool                                 AlphaTestEnable;
386   enum GEN7_3D_Logic_Op_Function       LogicOpFunction;
387   bool                                 LogicOpEnable;
388   bool                                 WriteDisableBlue;
389   bool                                 WriteDisableGreen;
390   bool                                 WriteDisableRed;
391   bool                                 WriteDisableAlpha;
392   bool                                 AlphaToCoverageDitherEnable;
393   bool                                 AlphaToOneEnable;
394   bool                                 AlphaToCoverageEnable;
395};
396
397static inline void
398GEN7_BLEND_STATE_ENTRY_pack(__attribute__((unused)) __gen_user_data *data,
399                            __attribute__((unused)) void * restrict dst,
400                            __attribute__((unused)) const struct GEN7_BLEND_STATE_ENTRY * restrict values)
401{
402   uint32_t * restrict dw = (uint32_t * restrict) dst;
403
404   dw[0] =
405      __gen_uint(values->DestinationBlendFactor, 0, 4) |
406      __gen_uint(values->SourceBlendFactor, 5, 9) |
407      __gen_uint(values->ColorBlendFunction, 11, 13) |
408      __gen_uint(values->DestinationAlphaBlendFactor, 15, 19) |
409      __gen_uint(values->SourceAlphaBlendFactor, 20, 24) |
410      __gen_uint(values->AlphaBlendFunction, 26, 28) |
411      __gen_uint(values->IndependentAlphaBlendEnable, 30, 30) |
412      __gen_uint(values->ColorBufferBlendEnable, 31, 31);
413
414   dw[1] =
415      __gen_uint(values->PostBlendColorClampEnable, 0, 0) |
416      __gen_uint(values->PreBlendColorClampEnable, 1, 1) |
417      __gen_uint(values->ColorClampRange, 2, 3) |
418      __gen_uint(values->YDitherOffset, 8, 9) |
419      __gen_uint(values->XDitherOffset, 10, 11) |
420      __gen_uint(values->ColorDitherEnable, 12, 12) |
421      __gen_uint(values->AlphaTestFunction, 13, 15) |
422      __gen_uint(values->AlphaTestEnable, 16, 16) |
423      __gen_uint(values->LogicOpFunction, 18, 21) |
424      __gen_uint(values->LogicOpEnable, 22, 22) |
425      __gen_uint(values->WriteDisableBlue, 24, 24) |
426      __gen_uint(values->WriteDisableGreen, 25, 25) |
427      __gen_uint(values->WriteDisableRed, 26, 26) |
428      __gen_uint(values->WriteDisableAlpha, 27, 27) |
429      __gen_uint(values->AlphaToCoverageDitherEnable, 29, 29) |
430      __gen_uint(values->AlphaToOneEnable, 30, 30) |
431      __gen_uint(values->AlphaToCoverageEnable, 31, 31);
432}
433
434#define GEN7_BLEND_STATE_length                0
435struct GEN7_BLEND_STATE {
436   /* variable length fields follow */
437};
438
439static inline void
440GEN7_BLEND_STATE_pack(__attribute__((unused)) __gen_user_data *data,
441                      __attribute__((unused)) void * restrict dst,
442                      __attribute__((unused)) const struct GEN7_BLEND_STATE * restrict values)
443{
444}
445
446#define GEN7_CC_VIEWPORT_length                2
447struct GEN7_CC_VIEWPORT {
448   float                                MinimumDepth;
449   float                                MaximumDepth;
450};
451
452static inline void
453GEN7_CC_VIEWPORT_pack(__attribute__((unused)) __gen_user_data *data,
454                      __attribute__((unused)) void * restrict dst,
455                      __attribute__((unused)) const struct GEN7_CC_VIEWPORT * restrict values)
456{
457   uint32_t * restrict dw = (uint32_t * restrict) dst;
458
459   dw[0] =
460      __gen_float(values->MinimumDepth);
461
462   dw[1] =
463      __gen_float(values->MaximumDepth);
464}
465
466#define GEN7_COLOR_CALC_STATE_length           6
467struct GEN7_COLOR_CALC_STATE {
468   uint32_t                             AlphaTestFormat;
469#define ALPHATEST_UNORM8                         0
470#define ALPHATEST_FLOAT32                        1
471   bool                                 RoundDisableFunctionDisable;
472   uint32_t                             BackfaceStencilReferenceValue;
473   uint32_t                             StencilReferenceValue;
474   uint32_t                             AlphaReferenceValueAsUNORM8;
475   float                                AlphaReferenceValueAsFLOAT32;
476   float                                BlendConstantColorRed;
477   float                                BlendConstantColorGreen;
478   float                                BlendConstantColorBlue;
479   float                                BlendConstantColorAlpha;
480};
481
482static inline void
483GEN7_COLOR_CALC_STATE_pack(__attribute__((unused)) __gen_user_data *data,
484                           __attribute__((unused)) void * restrict dst,
485                           __attribute__((unused)) const struct GEN7_COLOR_CALC_STATE * restrict values)
486{
487   uint32_t * restrict dw = (uint32_t * restrict) dst;
488
489   dw[0] =
490      __gen_uint(values->AlphaTestFormat, 0, 0) |
491      __gen_uint(values->RoundDisableFunctionDisable, 15, 15) |
492      __gen_uint(values->BackfaceStencilReferenceValue, 16, 23) |
493      __gen_uint(values->StencilReferenceValue, 24, 31);
494
495   dw[1] =
496      __gen_uint(values->AlphaReferenceValueAsUNORM8, 0, 31) |
497      __gen_float(values->AlphaReferenceValueAsFLOAT32);
498
499   dw[2] =
500      __gen_float(values->BlendConstantColorRed);
501
502   dw[3] =
503      __gen_float(values->BlendConstantColorGreen);
504
505   dw[4] =
506      __gen_float(values->BlendConstantColorBlue);
507
508   dw[5] =
509      __gen_float(values->BlendConstantColorAlpha);
510}
511
512#define GEN7_DEPTH_STENCIL_STATE_length        3
513struct GEN7_DEPTH_STENCIL_STATE {
514   enum GEN7_3D_Stencil_Operation       BackfaceStencilPassDepthPassOp;
515   enum GEN7_3D_Stencil_Operation       BackfaceStencilPassDepthFailOp;
516   enum GEN7_3D_Stencil_Operation       BackfaceStencilFailOp;
517   enum GEN7_3D_Compare_Function        BackfaceStencilTestFunction;
518   bool                                 DoubleSidedStencilEnable;
519   bool                                 StencilBufferWriteEnable;
520   enum GEN7_3D_Stencil_Operation       StencilPassDepthPassOp;
521   enum GEN7_3D_Stencil_Operation       StencilPassDepthFailOp;
522   enum GEN7_3D_Stencil_Operation       StencilFailOp;
523   enum GEN7_3D_Compare_Function        StencilTestFunction;
524   bool                                 StencilTestEnable;
525   uint32_t                             BackfaceStencilWriteMask;
526   uint32_t                             BackfaceStencilTestMask;
527   uint32_t                             StencilWriteMask;
528   uint32_t                             StencilTestMask;
529   bool                                 DepthBufferWriteEnable;
530   enum GEN7_3D_Compare_Function        DepthTestFunction;
531   bool                                 DepthTestEnable;
532};
533
534static inline void
535GEN7_DEPTH_STENCIL_STATE_pack(__attribute__((unused)) __gen_user_data *data,
536                              __attribute__((unused)) void * restrict dst,
537                              __attribute__((unused)) const struct GEN7_DEPTH_STENCIL_STATE * restrict values)
538{
539   uint32_t * restrict dw = (uint32_t * restrict) dst;
540
541   dw[0] =
542      __gen_uint(values->BackfaceStencilPassDepthPassOp, 3, 5) |
543      __gen_uint(values->BackfaceStencilPassDepthFailOp, 6, 8) |
544      __gen_uint(values->BackfaceStencilFailOp, 9, 11) |
545      __gen_uint(values->BackfaceStencilTestFunction, 12, 14) |
546      __gen_uint(values->DoubleSidedStencilEnable, 15, 15) |
547      __gen_uint(values->StencilBufferWriteEnable, 18, 18) |
548      __gen_uint(values->StencilPassDepthPassOp, 19, 21) |
549      __gen_uint(values->StencilPassDepthFailOp, 22, 24) |
550      __gen_uint(values->StencilFailOp, 25, 27) |
551      __gen_uint(values->StencilTestFunction, 28, 30) |
552      __gen_uint(values->StencilTestEnable, 31, 31);
553
554   dw[1] =
555      __gen_uint(values->BackfaceStencilWriteMask, 0, 7) |
556      __gen_uint(values->BackfaceStencilTestMask, 8, 15) |
557      __gen_uint(values->StencilWriteMask, 16, 23) |
558      __gen_uint(values->StencilTestMask, 24, 31);
559
560   dw[2] =
561      __gen_uint(values->DepthBufferWriteEnable, 26, 26) |
562      __gen_uint(values->DepthTestFunction, 27, 29) |
563      __gen_uint(values->DepthTestEnable, 31, 31);
564}
565
566#define GEN7_INLINE_DATA_DESCRIPTION_FOR_MFD_AVC_BSD_OBJECT_length      2
567struct GEN7_INLINE_DATA_DESCRIPTION_FOR_MFD_AVC_BSD_OBJECT {
568   bool                                 MBErrorConcealmentPSliceWeightPredictionDisable;
569   bool                                 MBErrorConcealmentPSliceMotionVectorsOverrideDisable;
570   bool                                 MBErrorConcealmentPSliceReferenceIndexOverrideDisable;
571   bool                                 MBErrorConcealmentBSpatialWeightPredictionDisable;
572   bool                                 MBErrorConcealmentBSpatialMotionVectorsOverrideDisable;
573   bool                                 MBErrorConcealmentBSpatialReferenceIndexOverrideDisable;
574   uint32_t                             MBErrorConcealmentBSpatialPredictionMode;
575   bool                                 MBHeaderErrorHandling;
576   bool                                 EntropyErrorHandling;
577   bool                                 MPRErrorHandling;
578   bool                                 BSDPrematureCompleteErrorHandling;
579   uint32_t                             ConcealmentPictureID;
580   bool                                 MBErrorConcealmentBTemporalWeightPredictionDisable;
581   bool                                 MBErrorConcealmentBTemporalMotionVectorsOverrideEnable;
582   bool                                 MBErrorConcealmentBTemporalReferenceIndexOverrideEnable;
583   uint32_t                             MBErrorConcealmentBTemporalPredictionMode;
584   bool                                 InitCurrentMBNumber;
585   uint32_t                             ConcealmentMethod;
586   uint32_t                             FirstMBBitOffset;
587   bool                                 LastSlice;
588   bool                                 EmulationPreventionBytePresent;
589   bool                                 FixPrevMBSkipped;
590   uint32_t                             FirstMBByteOffsetofSliceDataorSliceHeader;
591};
592
593static inline void
594GEN7_INLINE_DATA_DESCRIPTION_FOR_MFD_AVC_BSD_OBJECT_pack(__attribute__((unused)) __gen_user_data *data,
595                                                         __attribute__((unused)) void * restrict dst,
596                                                         __attribute__((unused)) const struct GEN7_INLINE_DATA_DESCRIPTION_FOR_MFD_AVC_BSD_OBJECT * restrict values)
597{
598   uint32_t * restrict dw = (uint32_t * restrict) dst;
599
600   dw[0] =
601      __gen_uint(values->MBErrorConcealmentPSliceWeightPredictionDisable, 0, 0) |
602      __gen_uint(values->MBErrorConcealmentPSliceMotionVectorsOverrideDisable, 1, 1) |
603      __gen_uint(values->MBErrorConcealmentPSliceReferenceIndexOverrideDisable, 2, 2) |
604      __gen_uint(values->MBErrorConcealmentBSpatialWeightPredictionDisable, 3, 3) |
605      __gen_uint(values->MBErrorConcealmentBSpatialMotionVectorsOverrideDisable, 4, 4) |
606      __gen_uint(values->MBErrorConcealmentBSpatialReferenceIndexOverrideDisable, 5, 5) |
607      __gen_uint(values->MBErrorConcealmentBSpatialPredictionMode, 6, 7) |
608      __gen_uint(values->MBHeaderErrorHandling, 8, 8) |
609      __gen_uint(values->EntropyErrorHandling, 10, 10) |
610      __gen_uint(values->MPRErrorHandling, 12, 12) |
611      __gen_uint(values->BSDPrematureCompleteErrorHandling, 14, 14) |
612      __gen_uint(values->ConcealmentPictureID, 16, 21) |
613      __gen_uint(values->MBErrorConcealmentBTemporalWeightPredictionDisable, 24, 24) |
614      __gen_uint(values->MBErrorConcealmentBTemporalMotionVectorsOverrideEnable, 25, 25) |
615      __gen_uint(values->MBErrorConcealmentBTemporalReferenceIndexOverrideEnable, 26, 26) |
616      __gen_uint(values->MBErrorConcealmentBTemporalPredictionMode, 27, 28) |
617      __gen_uint(values->InitCurrentMBNumber, 30, 30) |
618      __gen_uint(values->ConcealmentMethod, 31, 31);
619
620   dw[1] =
621      __gen_uint(values->FirstMBBitOffset, 0, 2) |
622      __gen_uint(values->LastSlice, 3, 3) |
623      __gen_uint(values->EmulationPreventionBytePresent, 4, 4) |
624      __gen_uint(values->FixPrevMBSkipped, 7, 7) |
625      __gen_uint(values->FirstMBByteOffsetofSliceDataorSliceHeader, 16, 31);
626}
627
628#define GEN7_INTERFACE_DESCRIPTOR_DATA_length      8
629struct GEN7_INTERFACE_DESCRIPTOR_DATA {
630   uint64_t                             KernelStartPointer;
631   bool                                 SoftwareExceptionEnable;
632   bool                                 MaskStackExceptionEnable;
633   bool                                 IllegalOpcodeExceptionEnable;
634   uint32_t                             FloatingPointMode;
635#define IEEE754                                  0
636#define Alternate                                1
637   uint32_t                             ThreadPriority;
638#define NormalPriority                           0
639#define HighPriority                             1
640   bool                                 SingleProgramFlow;
641   uint32_t                             SamplerCount;
642#define Nosamplersused                           0
643#define Between1and4samplersused                 1
644#define Between5and8samplersused                 2
645#define Between9and12samplersused                3
646#define Between13and16samplersused               4
647   uint64_t                             SamplerStatePointer;
648   uint32_t                             BindingTableEntryCount;
649   uint64_t                             BindingTablePointer;
650   uint32_t                             ConstantURBEntryReadOffset;
651   uint32_t                             ConstantURBEntryReadLength;
652   uint32_t                             NumberofThreadsinGPGPUThreadGroup;
653   uint32_t                             SharedLocalMemorySize;
654   bool                                 BarrierEnable;
655   uint32_t                             RoundingMode;
656#define RTNE                                     0
657#define RU                                       1
658#define RD                                       2
659#define RTZ                                      3
660};
661
662static inline void
663GEN7_INTERFACE_DESCRIPTOR_DATA_pack(__attribute__((unused)) __gen_user_data *data,
664                                    __attribute__((unused)) void * restrict dst,
665                                    __attribute__((unused)) const struct GEN7_INTERFACE_DESCRIPTOR_DATA * restrict values)
666{
667   uint32_t * restrict dw = (uint32_t * restrict) dst;
668
669   dw[0] =
670      __gen_offset(values->KernelStartPointer, 6, 31);
671
672   dw[1] =
673      __gen_uint(values->SoftwareExceptionEnable, 7, 7) |
674      __gen_uint(values->MaskStackExceptionEnable, 11, 11) |
675      __gen_uint(values->IllegalOpcodeExceptionEnable, 13, 13) |
676      __gen_uint(values->FloatingPointMode, 16, 16) |
677      __gen_uint(values->ThreadPriority, 17, 17) |
678      __gen_uint(values->SingleProgramFlow, 18, 18);
679
680   dw[2] =
681      __gen_uint(values->SamplerCount, 2, 4) |
682      __gen_offset(values->SamplerStatePointer, 5, 31);
683
684   dw[3] =
685      __gen_uint(values->BindingTableEntryCount, 0, 4) |
686      __gen_offset(values->BindingTablePointer, 5, 15);
687
688   dw[4] =
689      __gen_uint(values->ConstantURBEntryReadOffset, 0, 15) |
690      __gen_uint(values->ConstantURBEntryReadLength, 16, 31);
691
692   dw[5] =
693      __gen_uint(values->NumberofThreadsinGPGPUThreadGroup, 0, 7) |
694      __gen_uint(values->SharedLocalMemorySize, 16, 20) |
695      __gen_uint(values->BarrierEnable, 21, 21) |
696      __gen_uint(values->RoundingMode, 22, 23);
697
698   dw[6] = 0;
699
700   dw[7] = 0;
701}
702
703#define GEN7_MEMORY_OBJECT_CONTROL_STATE_length      1
704struct GEN7_MEMORY_OBJECT_CONTROL_STATE {
705   uint32_t                             L3CacheabilityControlL3CC;
706   uint32_t                             LLCCacheabilityControlLLCCC;
707   uint32_t                             GraphicsDataTypeGFDT;
708};
709
710static inline void
711GEN7_MEMORY_OBJECT_CONTROL_STATE_pack(__attribute__((unused)) __gen_user_data *data,
712                                      __attribute__((unused)) void * restrict dst,
713                                      __attribute__((unused)) const struct GEN7_MEMORY_OBJECT_CONTROL_STATE * restrict values)
714{
715   uint32_t * restrict dw = (uint32_t * restrict) dst;
716
717   dw[0] =
718      __gen_uint(values->L3CacheabilityControlL3CC, 0, 0) |
719      __gen_uint(values->LLCCacheabilityControlLLCCC, 1, 1) |
720      __gen_uint(values->GraphicsDataTypeGFDT, 2, 2);
721}
722
723#define GEN7_MFD_MPEG2_BSD_OBJECT_INLINE_DATA_DESCRIPTION_length      2
724struct GEN7_MFD_MPEG2_BSD_OBJECT_INLINE_DATA_DESCRIPTION {
725   uint32_t                             FirstMBBitOffset;
726   bool                                 LastMB;
727   bool                                 LastPicSlice;
728   uint32_t                             MBCount;
729   uint32_t                             SliceVerticalPosition;
730   uint32_t                             SliceHorizontalPosition;
731   uint32_t                             QuantizerScaleCode;
732};
733
734static inline void
735GEN7_MFD_MPEG2_BSD_OBJECT_INLINE_DATA_DESCRIPTION_pack(__attribute__((unused)) __gen_user_data *data,
736                                                       __attribute__((unused)) void * restrict dst,
737                                                       __attribute__((unused)) const struct GEN7_MFD_MPEG2_BSD_OBJECT_INLINE_DATA_DESCRIPTION * restrict values)
738{
739   uint32_t * restrict dw = (uint32_t * restrict) dst;
740
741   dw[0] =
742      __gen_uint(values->FirstMBBitOffset, 0, 2) |
743      __gen_uint(values->LastMB, 3, 3) |
744      __gen_uint(values->LastPicSlice, 5, 5) |
745      __gen_uint(values->MBCount, 8, 14) |
746      __gen_uint(values->SliceVerticalPosition, 16, 22) |
747      __gen_uint(values->SliceHorizontalPosition, 24, 30);
748
749   dw[1] =
750      __gen_uint(values->QuantizerScaleCode, 24, 28);
751}
752
753#define GEN7_PALETTE_ENTRY_length              1
754struct GEN7_PALETTE_ENTRY {
755   uint32_t                             Blue;
756   uint32_t                             Green;
757   uint32_t                             Red;
758   uint32_t                             Alpha;
759};
760
761static inline void
762GEN7_PALETTE_ENTRY_pack(__attribute__((unused)) __gen_user_data *data,
763                        __attribute__((unused)) void * restrict dst,
764                        __attribute__((unused)) const struct GEN7_PALETTE_ENTRY * restrict values)
765{
766   uint32_t * restrict dw = (uint32_t * restrict) dst;
767
768   dw[0] =
769      __gen_uint(values->Blue, 0, 7) |
770      __gen_uint(values->Green, 8, 15) |
771      __gen_uint(values->Red, 16, 23) |
772      __gen_uint(values->Alpha, 24, 31);
773}
774
775#define GEN7_RENDER_SURFACE_STATE_length       8
776struct GEN7_RENDER_SURFACE_STATE {
777   bool                                 CubeFaceEnablePositiveZ;
778   bool                                 CubeFaceEnableNegativeZ;
779   bool                                 CubeFaceEnablePositiveY;
780   bool                                 CubeFaceEnableNegativeY;
781   bool                                 CubeFaceEnablePositiveX;
782   bool                                 CubeFaceEnableNegativeX;
783   uint32_t                             MediaBoundaryPixelMode;
784#define NORMAL_MODE                              0
785#define PROGRESSIVE_FRAME                        2
786#define INTERLACED_FRAME                         3
787   uint32_t                             RenderCacheReadWriteMode;
788   uint32_t                             SurfaceArraySpacing;
789#define ARYSPC_FULL                              0
790#define ARYSPC_LOD0                              1
791   uint32_t                             VerticalLineStrideOffset;
792   uint32_t                             VerticalLineStride;
793   uint32_t                             TileWalk;
794#define TILEWALK_XMAJOR                          0
795#define TILEWALK_YMAJOR                          1
796   bool                                 TiledSurface;
797   uint32_t                             SurfaceHorizontalAlignment;
798#define HALIGN_4                                 0
799#define HALIGN_8                                 1
800   uint32_t                             SurfaceVerticalAlignment;
801#define VALIGN_2                                 0
802#define VALIGN_4                                 1
803   uint32_t                             SurfaceFormat;
804   bool                                 SurfaceArray;
805   uint32_t                             SurfaceType;
806#define SURFTYPE_1D                              0
807#define SURFTYPE_2D                              1
808#define SURFTYPE_3D                              2
809#define SURFTYPE_CUBE                            3
810#define SURFTYPE_BUFFER                          4
811#define SURFTYPE_STRBUF                          5
812#define SURFTYPE_NULL                            7
813   __gen_address_type                   SurfaceBaseAddress;
814   uint32_t                             Width;
815   uint32_t                             Height;
816   uint32_t                             SurfacePitch;
817   uint32_t                             Depth;
818   uint32_t                             MultisamplePositionPaletteIndex;
819   uint32_t                             StrbufMinimumArrayElement;
820   uint32_t                             NumberofMultisamples;
821#define MULTISAMPLECOUNT_1                       0
822#define MULTISAMPLECOUNT_4                       2
823#define MULTISAMPLECOUNT_8                       3
824   uint32_t                             MultisampledSurfaceStorageFormat;
825#define MSFMT_MSS                                0
826#define MSFMT_DEPTH_STENCIL                      1
827   uint32_t                             RenderTargetViewExtent;
828   uint32_t                             MinimumArrayElement;
829   uint32_t                             RenderTargetRotation;
830#define RTROTATE_0DEG                            0
831#define RTROTATE_90DEG                           1
832#define RTROTATE_270DEG                          3
833   uint32_t                             MIPCountLOD;
834   uint32_t                             SurfaceMinLOD;
835   uint32_t                             MOCS;
836   uint32_t                             YOffset;
837   uint32_t                             XOffset;
838   bool                                 MCSEnable;
839   uint32_t                             YOffsetforUVPlane;
840   bool                                 AppendCounterEnable;
841   uint32_t                             AuxiliarySurfacePitch;
842   __gen_address_type                   AppendCounterAddress;
843   __gen_address_type                   AuxiliarySurfaceBaseAddress;
844   uint32_t                             XOffsetforUVPlane;
845   uint32_t                             ReservedMBZ;
846   float                                ResourceMinLOD;
847   uint32_t                             AlphaClearColor;
848#define CC_ZERO                                  0
849#define CC_ONE                                   1
850   uint32_t                             BlueClearColor;
851#define CC_ZERO                                  0
852#define CC_ONE                                   1
853   uint32_t                             GreenClearColor;
854#define CC_ZERO                                  0
855#define CC_ONE                                   1
856   uint32_t                             RedClearColor;
857#define CC_ZERO                                  0
858#define CC_ONE                                   1
859};
860
861static inline void
862GEN7_RENDER_SURFACE_STATE_pack(__attribute__((unused)) __gen_user_data *data,
863                               __attribute__((unused)) void * restrict dst,
864                               __attribute__((unused)) const struct GEN7_RENDER_SURFACE_STATE * restrict values)
865{
866   uint32_t * restrict dw = (uint32_t * restrict) dst;
867
868   dw[0] =
869      __gen_uint(values->CubeFaceEnablePositiveZ, 0, 0) |
870      __gen_uint(values->CubeFaceEnableNegativeZ, 1, 1) |
871      __gen_uint(values->CubeFaceEnablePositiveY, 2, 2) |
872      __gen_uint(values->CubeFaceEnableNegativeY, 3, 3) |
873      __gen_uint(values->CubeFaceEnablePositiveX, 4, 4) |
874      __gen_uint(values->CubeFaceEnableNegativeX, 5, 5) |
875      __gen_uint(values->MediaBoundaryPixelMode, 6, 7) |
876      __gen_uint(values->RenderCacheReadWriteMode, 8, 8) |
877      __gen_uint(values->SurfaceArraySpacing, 10, 10) |
878      __gen_uint(values->VerticalLineStrideOffset, 11, 11) |
879      __gen_uint(values->VerticalLineStride, 12, 12) |
880      __gen_uint(values->TileWalk, 13, 13) |
881      __gen_uint(values->TiledSurface, 14, 14) |
882      __gen_uint(values->SurfaceHorizontalAlignment, 15, 15) |
883      __gen_uint(values->SurfaceVerticalAlignment, 16, 17) |
884      __gen_uint(values->SurfaceFormat, 18, 26) |
885      __gen_uint(values->SurfaceArray, 28, 28) |
886      __gen_uint(values->SurfaceType, 29, 31);
887
888   dw[1] = __gen_combine_address(data, &dw[1], values->SurfaceBaseAddress, 0);
889
890   dw[2] =
891      __gen_uint(values->Width, 0, 13) |
892      __gen_uint(values->Height, 16, 29);
893
894   dw[3] =
895      __gen_uint(values->SurfacePitch, 0, 17) |
896      __gen_uint(values->Depth, 21, 31);
897
898   dw[4] =
899      __gen_uint(values->MultisamplePositionPaletteIndex, 0, 2) |
900      __gen_uint(values->StrbufMinimumArrayElement, 0, 26) |
901      __gen_uint(values->NumberofMultisamples, 3, 5) |
902      __gen_uint(values->MultisampledSurfaceStorageFormat, 6, 6) |
903      __gen_uint(values->RenderTargetViewExtent, 7, 17) |
904      __gen_uint(values->MinimumArrayElement, 18, 28) |
905      __gen_uint(values->RenderTargetRotation, 29, 30);
906
907   dw[5] =
908      __gen_uint(values->MIPCountLOD, 0, 3) |
909      __gen_uint(values->SurfaceMinLOD, 4, 7) |
910      __gen_uint(values->MOCS, 16, 19) |
911      __gen_uint(values->YOffset, 20, 23) |
912      __gen_uint(values->XOffset, 25, 31);
913
914   const uint32_t v6 =
915      __gen_uint(values->MCSEnable, 0, 0) |
916      __gen_uint(values->YOffsetforUVPlane, 0, 13) |
917      __gen_uint(values->AppendCounterEnable, 1, 1) |
918      __gen_uint(values->AuxiliarySurfacePitch, 3, 11) |
919      __gen_uint(values->XOffsetforUVPlane, 16, 29) |
920      __gen_uint(values->ReservedMBZ, 30, 31);
921   dw[6] = __gen_combine_address(data, &dw[6], values->AuxiliarySurfaceBaseAddress, v6);
922
923   dw[7] =
924      __gen_ufixed(values->ResourceMinLOD, 0, 11, 8) |
925      __gen_uint(values->AlphaClearColor, 28, 28) |
926      __gen_uint(values->BlueClearColor, 29, 29) |
927      __gen_uint(values->GreenClearColor, 30, 30) |
928      __gen_uint(values->RedClearColor, 31, 31);
929}
930
931#define GEN7_SAMPLER_BORDER_COLOR_STATE_length      4
932struct GEN7_SAMPLER_BORDER_COLOR_STATE {
933   uint32_t                             BorderColorUnormRed;
934   float                                BorderColorFloatRed;
935   uint32_t                             BorderColorUnormGreen;
936   uint32_t                             BorderColorUnormBlue;
937   uint32_t                             BorderColorUnormAlpha;
938   float                                BorderColorFloatGreen;
939   float                                BorderColorFloatBlue;
940   float                                BorderColorFloatAlpha;
941};
942
943static inline void
944GEN7_SAMPLER_BORDER_COLOR_STATE_pack(__attribute__((unused)) __gen_user_data *data,
945                                     __attribute__((unused)) void * restrict dst,
946                                     __attribute__((unused)) const struct GEN7_SAMPLER_BORDER_COLOR_STATE * restrict values)
947{
948   uint32_t * restrict dw = (uint32_t * restrict) dst;
949
950   dw[0] =
951      __gen_uint(values->BorderColorUnormRed, 0, 7) |
952      __gen_float(values->BorderColorFloatRed) |
953      __gen_uint(values->BorderColorUnormGreen, 8, 15) |
954      __gen_uint(values->BorderColorUnormBlue, 16, 23) |
955      __gen_uint(values->BorderColorUnormAlpha, 24, 31);
956
957   dw[1] =
958      __gen_float(values->BorderColorFloatGreen);
959
960   dw[2] =
961      __gen_float(values->BorderColorFloatBlue);
962
963   dw[3] =
964      __gen_float(values->BorderColorFloatAlpha);
965}
966
967#define GEN7_SAMPLER_STATE_length              4
968struct GEN7_SAMPLER_STATE {
969   uint32_t                             AnisotropicAlgorithm;
970#define LEGACY                                   0
971#define EWAApproximation                         1
972   float                                TextureLODBias;
973   uint32_t                             MinModeFilter;
974#define MAPFILTER_NEAREST                        0
975#define MAPFILTER_LINEAR                         1
976#define MAPFILTER_ANISOTROPIC                    2
977#define MAPFILTER_MONO                           6
978   uint32_t                             MagModeFilter;
979#define MAPFILTER_NEAREST                        0
980#define MAPFILTER_LINEAR                         1
981#define MAPFILTER_ANISOTROPIC                    2
982#define MAPFILTER_MONO                           6
983   uint32_t                             MipModeFilter;
984#define MIPFILTER_NONE                           0
985#define MIPFILTER_NEAREST                        1
986#define MIPFILTER_LINEAR                         3
987   float                                BaseMipLevel;
988   uint32_t                             LODPreClampEnable;
989#define CLAMP_ENABLE_OGL                         1
990   uint32_t                             TextureBorderColorMode;
991#define DX10OGL                                  0
992#define DX9                                      1
993   bool                                 SamplerDisable;
994   uint32_t                             CubeSurfaceControlMode;
995#define PROGRAMMED                               0
996#define OVERRIDE                                 1
997   uint32_t                             ShadowFunction;
998#define PREFILTEROPALWAYS                        0
999#define PREFILTEROPNEVER                         1
1000#define PREFILTEROPLESS                          2
1001#define PREFILTEROPEQUAL                         3
1002#define PREFILTEROPLEQUAL                        4
1003#define PREFILTEROPGREATER                       5
1004#define PREFILTEROPNOTEQUAL                      6
1005#define PREFILTEROPGEQUAL                        7
1006   float                                MaxLOD;
1007   float                                MinLOD;
1008   uint64_t                             BorderColorPointer;
1009   enum GEN7_TextureCoordinateMode      TCZAddressControlMode;
1010   enum GEN7_TextureCoordinateMode      TCYAddressControlMode;
1011   enum GEN7_TextureCoordinateMode      TCXAddressControlMode;
1012   bool                                 NonnormalizedCoordinateEnable;
1013   uint32_t                             TrilinearFilterQuality;
1014#define FULL                                     0
1015#define MED                                      2
1016#define LOW                                      3
1017   bool                                 RAddressMinFilterRoundingEnable;
1018   bool                                 RAddressMagFilterRoundingEnable;
1019   bool                                 VAddressMinFilterRoundingEnable;
1020   bool                                 VAddressMagFilterRoundingEnable;
1021   bool                                 UAddressMinFilterRoundingEnable;
1022   bool                                 UAddressMagFilterRoundingEnable;
1023   uint32_t                             MaximumAnisotropy;
1024#define RATIO21                                  0
1025#define RATIO41                                  1
1026#define RATIO61                                  2
1027#define RATIO81                                  3
1028#define RATIO101                                 4
1029#define RATIO121                                 5
1030#define RATIO141                                 6
1031#define RATIO161                                 7
1032   uint32_t                             ChromaKeyMode;
1033#define KEYFILTER_KILL_ON_ANY_MATCH              0
1034#define KEYFILTER_REPLACE_BLACK                  1
1035   uint32_t                             ChromaKeyIndex;
1036   bool                                 ChromaKeyEnable;
1037};
1038
1039static inline void
1040GEN7_SAMPLER_STATE_pack(__attribute__((unused)) __gen_user_data *data,
1041                        __attribute__((unused)) void * restrict dst,
1042                        __attribute__((unused)) const struct GEN7_SAMPLER_STATE * restrict values)
1043{
1044   uint32_t * restrict dw = (uint32_t * restrict) dst;
1045
1046   dw[0] =
1047      __gen_uint(values->AnisotropicAlgorithm, 0, 0) |
1048      __gen_sfixed(values->TextureLODBias, 1, 13, 8) |
1049      __gen_uint(values->MinModeFilter, 14, 16) |
1050      __gen_uint(values->MagModeFilter, 17, 19) |
1051      __gen_uint(values->MipModeFilter, 20, 21) |
1052      __gen_ufixed(values->BaseMipLevel, 22, 26, 1) |
1053      __gen_uint(values->LODPreClampEnable, 28, 28) |
1054      __gen_uint(values->TextureBorderColorMode, 29, 29) |
1055      __gen_uint(values->SamplerDisable, 31, 31);
1056
1057   dw[1] =
1058      __gen_uint(values->CubeSurfaceControlMode, 0, 0) |
1059      __gen_uint(values->ShadowFunction, 1, 3) |
1060      __gen_ufixed(values->MaxLOD, 8, 19, 8) |
1061      __gen_ufixed(values->MinLOD, 20, 31, 8);
1062
1063   dw[2] =
1064      __gen_offset(values->BorderColorPointer, 5, 31);
1065
1066   dw[3] =
1067      __gen_uint(values->TCZAddressControlMode, 0, 2) |
1068      __gen_uint(values->TCYAddressControlMode, 3, 5) |
1069      __gen_uint(values->TCXAddressControlMode, 6, 8) |
1070      __gen_uint(values->NonnormalizedCoordinateEnable, 10, 10) |
1071      __gen_uint(values->TrilinearFilterQuality, 11, 12) |
1072      __gen_uint(values->RAddressMinFilterRoundingEnable, 13, 13) |
1073      __gen_uint(values->RAddressMagFilterRoundingEnable, 14, 14) |
1074      __gen_uint(values->VAddressMinFilterRoundingEnable, 15, 15) |
1075      __gen_uint(values->VAddressMagFilterRoundingEnable, 16, 16) |
1076      __gen_uint(values->UAddressMinFilterRoundingEnable, 17, 17) |
1077      __gen_uint(values->UAddressMagFilterRoundingEnable, 18, 18) |
1078      __gen_uint(values->MaximumAnisotropy, 19, 21) |
1079      __gen_uint(values->ChromaKeyMode, 22, 22) |
1080      __gen_uint(values->ChromaKeyIndex, 23, 24) |
1081      __gen_uint(values->ChromaKeyEnable, 25, 25);
1082}
1083
1084#define GEN7_SCISSOR_RECT_length               2
1085struct GEN7_SCISSOR_RECT {
1086   uint32_t                             ScissorRectangleXMin;
1087   uint32_t                             ScissorRectangleYMin;
1088   uint32_t                             ScissorRectangleXMax;
1089   uint32_t                             ScissorRectangleYMax;
1090};
1091
1092static inline void
1093GEN7_SCISSOR_RECT_pack(__attribute__((unused)) __gen_user_data *data,
1094                       __attribute__((unused)) void * restrict dst,
1095                       __attribute__((unused)) const struct GEN7_SCISSOR_RECT * restrict values)
1096{
1097   uint32_t * restrict dw = (uint32_t * restrict) dst;
1098
1099   dw[0] =
1100      __gen_uint(values->ScissorRectangleXMin, 0, 15) |
1101      __gen_uint(values->ScissorRectangleYMin, 16, 31);
1102
1103   dw[1] =
1104      __gen_uint(values->ScissorRectangleXMax, 0, 15) |
1105      __gen_uint(values->ScissorRectangleYMax, 16, 31);
1106}
1107
1108#define GEN7_SF_CLIP_VIEWPORT_length          16
1109struct GEN7_SF_CLIP_VIEWPORT {
1110   float                                ViewportMatrixElementm00;
1111   float                                ViewportMatrixElementm11;
1112   float                                ViewportMatrixElementm22;
1113   float                                ViewportMatrixElementm30;
1114   float                                ViewportMatrixElementm31;
1115   float                                ViewportMatrixElementm32;
1116   float                                XMinClipGuardband;
1117   float                                XMaxClipGuardband;
1118   float                                YMinClipGuardband;
1119   float                                YMaxClipGuardband;
1120};
1121
1122static inline void
1123GEN7_SF_CLIP_VIEWPORT_pack(__attribute__((unused)) __gen_user_data *data,
1124                           __attribute__((unused)) void * restrict dst,
1125                           __attribute__((unused)) const struct GEN7_SF_CLIP_VIEWPORT * restrict values)
1126{
1127   uint32_t * restrict dw = (uint32_t * restrict) dst;
1128
1129   dw[0] =
1130      __gen_float(values->ViewportMatrixElementm00);
1131
1132   dw[1] =
1133      __gen_float(values->ViewportMatrixElementm11);
1134
1135   dw[2] =
1136      __gen_float(values->ViewportMatrixElementm22);
1137
1138   dw[3] =
1139      __gen_float(values->ViewportMatrixElementm30);
1140
1141   dw[4] =
1142      __gen_float(values->ViewportMatrixElementm31);
1143
1144   dw[5] =
1145      __gen_float(values->ViewportMatrixElementm32);
1146
1147   dw[6] = 0;
1148
1149   dw[7] = 0;
1150
1151   dw[8] =
1152      __gen_float(values->XMinClipGuardband);
1153
1154   dw[9] =
1155      __gen_float(values->XMaxClipGuardband);
1156
1157   dw[10] =
1158      __gen_float(values->YMinClipGuardband);
1159
1160   dw[11] =
1161      __gen_float(values->YMaxClipGuardband);
1162
1163   dw[12] = 0;
1164
1165   dw[13] = 0;
1166
1167   dw[14] = 0;
1168
1169   dw[15] = 0;
1170}
1171
1172#define GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL_length      1
1173struct GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL {
1174   uint32_t                             SourceAttribute;
1175   uint32_t                             SwizzleSelect;
1176#define INPUTATTR                                0
1177#define INPUTATTR_FACING                         1
1178#define INPUTATTR_W                              2
1179#define INPUTATTR_FACING_W                       3
1180   uint32_t                             ConstantSource;
1181#define CONST_0000                               0
1182#define CONST_0001_FLOAT                         1
1183#define CONST_1111_FLOAT                         2
1184#define PRIM_ID                                  3
1185   uint32_t                             SwizzleControlMode;
1186   bool                                 ComponentOverrideX;
1187   bool                                 ComponentOverrideY;
1188   bool                                 ComponentOverrideZ;
1189   bool                                 ComponentOverrideW;
1190};
1191
1192static inline void
1193GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(__attribute__((unused)) __gen_user_data *data,
1194                                     __attribute__((unused)) void * restrict dst,
1195                                     __attribute__((unused)) const struct GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL * restrict values)
1196{
1197   uint32_t * restrict dw = (uint32_t * restrict) dst;
1198
1199   dw[0] =
1200      __gen_uint(values->SourceAttribute, 0, 4) |
1201      __gen_uint(values->SwizzleSelect, 6, 7) |
1202      __gen_uint(values->ConstantSource, 9, 10) |
1203      __gen_uint(values->SwizzleControlMode, 11, 11) |
1204      __gen_uint(values->ComponentOverrideX, 12, 12) |
1205      __gen_uint(values->ComponentOverrideY, 13, 13) |
1206      __gen_uint(values->ComponentOverrideZ, 14, 14) |
1207      __gen_uint(values->ComponentOverrideW, 15, 15);
1208}
1209
1210#define GEN7_SO_DECL_length                    1
1211struct GEN7_SO_DECL {
1212   uint32_t                             ComponentMask;
1213   uint32_t                             RegisterIndex;
1214   uint32_t                             HoleFlag;
1215   uint32_t                             OutputBufferSlot;
1216};
1217
1218static inline void
1219GEN7_SO_DECL_pack(__attribute__((unused)) __gen_user_data *data,
1220                  __attribute__((unused)) void * restrict dst,
1221                  __attribute__((unused)) const struct GEN7_SO_DECL * restrict values)
1222{
1223   uint32_t * restrict dw = (uint32_t * restrict) dst;
1224
1225   dw[0] =
1226      __gen_uint(values->ComponentMask, 0, 3) |
1227      __gen_uint(values->RegisterIndex, 4, 9) |
1228      __gen_uint(values->HoleFlag, 11, 11) |
1229      __gen_uint(values->OutputBufferSlot, 12, 13);
1230}
1231
1232#define GEN7_SO_DECL_ENTRY_length              2
1233struct GEN7_SO_DECL_ENTRY {
1234   struct GEN7_SO_DECL                  Stream0Decl;
1235   struct GEN7_SO_DECL                  Stream1Decl;
1236   struct GEN7_SO_DECL                  Stream2Decl;
1237   struct GEN7_SO_DECL                  Stream3Decl;
1238};
1239
1240static inline void
1241GEN7_SO_DECL_ENTRY_pack(__attribute__((unused)) __gen_user_data *data,
1242                        __attribute__((unused)) void * restrict dst,
1243                        __attribute__((unused)) const struct GEN7_SO_DECL_ENTRY * restrict values)
1244{
1245   uint32_t * restrict dw = (uint32_t * restrict) dst;
1246
1247   uint32_t v0_0;
1248   GEN7_SO_DECL_pack(data, &v0_0, &values->Stream0Decl);
1249
1250   uint32_t v0_1;
1251   GEN7_SO_DECL_pack(data, &v0_1, &values->Stream1Decl);
1252
1253   dw[0] =
1254      __gen_uint(v0_0, 0, 15) |
1255      __gen_uint(v0_1, 16, 31);
1256
1257   uint32_t v1_0;
1258   GEN7_SO_DECL_pack(data, &v1_0, &values->Stream2Decl);
1259
1260   uint32_t v1_1;
1261   GEN7_SO_DECL_pack(data, &v1_1, &values->Stream3Decl);
1262
1263   dw[1] =
1264      __gen_uint(v1_0, 0, 15) |
1265      __gen_uint(v1_1, 16, 31);
1266}
1267
1268#define GEN7_VERTEX_BUFFER_STATE_length        4
1269struct GEN7_VERTEX_BUFFER_STATE {
1270   uint32_t                             BufferPitch;
1271   bool                                 VertexFetchInvalidate;
1272   bool                                 NullVertexBuffer;
1273   bool                                 AddressModifyEnable;
1274   uint32_t                             MOCS;
1275   uint32_t                             BufferAccessType;
1276#define VERTEXDATA                               0
1277#define INSTANCEDATA                             1
1278   uint32_t                             VertexBufferIndex;
1279   __gen_address_type                   BufferStartingAddress;
1280   __gen_address_type                   EndAddress;
1281   uint32_t                             InstanceDataStepRate;
1282};
1283
1284static inline void
1285GEN7_VERTEX_BUFFER_STATE_pack(__attribute__((unused)) __gen_user_data *data,
1286                              __attribute__((unused)) void * restrict dst,
1287                              __attribute__((unused)) const struct GEN7_VERTEX_BUFFER_STATE * restrict values)
1288{
1289   uint32_t * restrict dw = (uint32_t * restrict) dst;
1290
1291   dw[0] =
1292      __gen_uint(values->BufferPitch, 0, 11) |
1293      __gen_uint(values->VertexFetchInvalidate, 12, 12) |
1294      __gen_uint(values->NullVertexBuffer, 13, 13) |
1295      __gen_uint(values->AddressModifyEnable, 14, 14) |
1296      __gen_uint(values->MOCS, 16, 19) |
1297      __gen_uint(values->BufferAccessType, 20, 20) |
1298      __gen_uint(values->VertexBufferIndex, 26, 31);
1299
1300   dw[1] = __gen_combine_address(data, &dw[1], values->BufferStartingAddress, 0);
1301
1302   dw[2] = __gen_combine_address(data, &dw[2], values->EndAddress, 0);
1303
1304   dw[3] =
1305      __gen_uint(values->InstanceDataStepRate, 0, 31);
1306}
1307
1308#define GEN7_VERTEX_ELEMENT_STATE_length       2
1309struct GEN7_VERTEX_ELEMENT_STATE {
1310   uint32_t                             SourceElementOffset;
1311   bool                                 EdgeFlagEnable;
1312   uint32_t                             SourceElementFormat;
1313   bool                                 Valid;
1314   uint32_t                             VertexBufferIndex;
1315   enum GEN7_3D_Vertex_Component_Control Component3Control;
1316   enum GEN7_3D_Vertex_Component_Control Component2Control;
1317   enum GEN7_3D_Vertex_Component_Control Component1Control;
1318   enum GEN7_3D_Vertex_Component_Control Component0Control;
1319};
1320
1321static inline void
1322GEN7_VERTEX_ELEMENT_STATE_pack(__attribute__((unused)) __gen_user_data *data,
1323                               __attribute__((unused)) void * restrict dst,
1324                               __attribute__((unused)) const struct GEN7_VERTEX_ELEMENT_STATE * restrict values)
1325{
1326   uint32_t * restrict dw = (uint32_t * restrict) dst;
1327
1328   dw[0] =
1329      __gen_uint(values->SourceElementOffset, 0, 11) |
1330      __gen_uint(values->EdgeFlagEnable, 15, 15) |
1331      __gen_uint(values->SourceElementFormat, 16, 24) |
1332      __gen_uint(values->Valid, 25, 25) |
1333      __gen_uint(values->VertexBufferIndex, 26, 31);
1334
1335   dw[1] =
1336      __gen_uint(values->Component3Control, 16, 18) |
1337      __gen_uint(values->Component2Control, 20, 22) |
1338      __gen_uint(values->Component1Control, 24, 26) |
1339      __gen_uint(values->Component0Control, 28, 30);
1340}
1341
1342#define GEN7_3DPRIMITIVE_length                7
1343#define GEN7_3DPRIMITIVE_length_bias           2
1344#define GEN7_3DPRIMITIVE_header                 \
1345   .DWordLength                         =      5,  \
1346   ._3DCommandSubOpcode                 =      0,  \
1347   ._3DCommandOpcode                    =      3,  \
1348   .CommandSubType                      =      3,  \
1349   .CommandType                         =      3
1350
1351struct GEN7_3DPRIMITIVE {
1352   uint32_t                             DWordLength;
1353   bool                                 PredicateEnable;
1354   bool                                 IndirectParameterEnable;
1355   uint32_t                             _3DCommandSubOpcode;
1356   uint32_t                             _3DCommandOpcode;
1357   uint32_t                             CommandSubType;
1358   uint32_t                             CommandType;
1359   enum GEN7_3D_Prim_Topo_Type          PrimitiveTopologyType;
1360   uint32_t                             VertexAccessType;
1361#define SEQUENTIAL                               0
1362#define RANDOM                                   1
1363   bool                                 EndOffsetEnable;
1364   uint32_t                             VertexCountPerInstance;
1365   uint32_t                             StartVertexLocation;
1366   uint32_t                             InstanceCount;
1367   uint32_t                             StartInstanceLocation;
1368   int32_t                              BaseVertexLocation;
1369};
1370
1371static inline void
1372GEN7_3DPRIMITIVE_pack(__attribute__((unused)) __gen_user_data *data,
1373                      __attribute__((unused)) void * restrict dst,
1374                      __attribute__((unused)) const struct GEN7_3DPRIMITIVE * restrict values)
1375{
1376   uint32_t * restrict dw = (uint32_t * restrict) dst;
1377
1378   dw[0] =
1379      __gen_uint(values->DWordLength, 0, 7) |
1380      __gen_uint(values->PredicateEnable, 8, 8) |
1381      __gen_uint(values->IndirectParameterEnable, 10, 10) |
1382      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1383      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1384      __gen_uint(values->CommandSubType, 27, 28) |
1385      __gen_uint(values->CommandType, 29, 31);
1386
1387   dw[1] =
1388      __gen_uint(values->PrimitiveTopologyType, 0, 5) |
1389      __gen_uint(values->VertexAccessType, 8, 8) |
1390      __gen_uint(values->EndOffsetEnable, 9, 9);
1391
1392   dw[2] =
1393      __gen_uint(values->VertexCountPerInstance, 0, 31);
1394
1395   dw[3] =
1396      __gen_uint(values->StartVertexLocation, 0, 31);
1397
1398   dw[4] =
1399      __gen_uint(values->InstanceCount, 0, 31);
1400
1401   dw[5] =
1402      __gen_uint(values->StartInstanceLocation, 0, 31);
1403
1404   dw[6] =
1405      __gen_sint(values->BaseVertexLocation, 0, 31);
1406}
1407
1408#define GEN7_3DSTATE_AA_LINE_PARAMETERS_length      3
1409#define GEN7_3DSTATE_AA_LINE_PARAMETERS_length_bias      2
1410#define GEN7_3DSTATE_AA_LINE_PARAMETERS_header  \
1411   .DWordLength                         =      1,  \
1412   ._3DCommandSubOpcode                 =     10,  \
1413   ._3DCommandOpcode                    =      1,  \
1414   .CommandSubType                      =      3,  \
1415   .CommandType                         =      3
1416
1417struct GEN7_3DSTATE_AA_LINE_PARAMETERS {
1418   uint32_t                             DWordLength;
1419   uint32_t                             _3DCommandSubOpcode;
1420   uint32_t                             _3DCommandOpcode;
1421   uint32_t                             CommandSubType;
1422   uint32_t                             CommandType;
1423   float                                AACoverageSlope;
1424   float                                AACoverageBias;
1425   float                                AACoverageEndCapSlope;
1426   float                                AACoverageEndCapBias;
1427};
1428
1429static inline void
1430GEN7_3DSTATE_AA_LINE_PARAMETERS_pack(__attribute__((unused)) __gen_user_data *data,
1431                                     __attribute__((unused)) void * restrict dst,
1432                                     __attribute__((unused)) const struct GEN7_3DSTATE_AA_LINE_PARAMETERS * restrict values)
1433{
1434   uint32_t * restrict dw = (uint32_t * restrict) dst;
1435
1436   dw[0] =
1437      __gen_uint(values->DWordLength, 0, 7) |
1438      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1439      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1440      __gen_uint(values->CommandSubType, 27, 28) |
1441      __gen_uint(values->CommandType, 29, 31);
1442
1443   dw[1] =
1444      __gen_ufixed(values->AACoverageSlope, 0, 7, 8) |
1445      __gen_ufixed(values->AACoverageBias, 16, 23, 8);
1446
1447   dw[2] =
1448      __gen_ufixed(values->AACoverageEndCapSlope, 0, 7, 8) |
1449      __gen_ufixed(values->AACoverageEndCapBias, 16, 23, 8);
1450}
1451
1452#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_DS_length      2
1453#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_DS_length_bias      2
1454#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_DS_header\
1455   .DWordLength                         =      0,  \
1456   ._3DCommandSubOpcode                 =     40,  \
1457   ._3DCommandOpcode                    =      0,  \
1458   .CommandSubType                      =      3,  \
1459   .CommandType                         =      3
1460
1461struct GEN7_3DSTATE_BINDING_TABLE_POINTERS_DS {
1462   uint32_t                             DWordLength;
1463   uint32_t                             _3DCommandSubOpcode;
1464   uint32_t                             _3DCommandOpcode;
1465   uint32_t                             CommandSubType;
1466   uint32_t                             CommandType;
1467   uint64_t                             PointertoDSBindingTable;
1468};
1469
1470static inline void
1471GEN7_3DSTATE_BINDING_TABLE_POINTERS_DS_pack(__attribute__((unused)) __gen_user_data *data,
1472                                            __attribute__((unused)) void * restrict dst,
1473                                            __attribute__((unused)) const struct GEN7_3DSTATE_BINDING_TABLE_POINTERS_DS * restrict values)
1474{
1475   uint32_t * restrict dw = (uint32_t * restrict) dst;
1476
1477   dw[0] =
1478      __gen_uint(values->DWordLength, 0, 7) |
1479      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1480      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1481      __gen_uint(values->CommandSubType, 27, 28) |
1482      __gen_uint(values->CommandType, 29, 31);
1483
1484   dw[1] =
1485      __gen_offset(values->PointertoDSBindingTable, 5, 15);
1486}
1487
1488#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_GS_length      2
1489#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_GS_length_bias      2
1490#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_GS_header\
1491   .DWordLength                         =      0,  \
1492   ._3DCommandSubOpcode                 =     41,  \
1493   ._3DCommandOpcode                    =      0,  \
1494   .CommandSubType                      =      3,  \
1495   .CommandType                         =      3
1496
1497struct GEN7_3DSTATE_BINDING_TABLE_POINTERS_GS {
1498   uint32_t                             DWordLength;
1499   uint32_t                             _3DCommandSubOpcode;
1500   uint32_t                             _3DCommandOpcode;
1501   uint32_t                             CommandSubType;
1502   uint32_t                             CommandType;
1503   uint64_t                             PointertoGSBindingTable;
1504};
1505
1506static inline void
1507GEN7_3DSTATE_BINDING_TABLE_POINTERS_GS_pack(__attribute__((unused)) __gen_user_data *data,
1508                                            __attribute__((unused)) void * restrict dst,
1509                                            __attribute__((unused)) const struct GEN7_3DSTATE_BINDING_TABLE_POINTERS_GS * restrict values)
1510{
1511   uint32_t * restrict dw = (uint32_t * restrict) dst;
1512
1513   dw[0] =
1514      __gen_uint(values->DWordLength, 0, 7) |
1515      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1516      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1517      __gen_uint(values->CommandSubType, 27, 28) |
1518      __gen_uint(values->CommandType, 29, 31);
1519
1520   dw[1] =
1521      __gen_offset(values->PointertoGSBindingTable, 5, 15);
1522}
1523
1524#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_HS_length      2
1525#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_HS_length_bias      2
1526#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_HS_header\
1527   .DWordLength                         =      0,  \
1528   ._3DCommandSubOpcode                 =     39,  \
1529   ._3DCommandOpcode                    =      0,  \
1530   .CommandSubType                      =      3,  \
1531   .CommandType                         =      3
1532
1533struct GEN7_3DSTATE_BINDING_TABLE_POINTERS_HS {
1534   uint32_t                             DWordLength;
1535   uint32_t                             _3DCommandSubOpcode;
1536   uint32_t                             _3DCommandOpcode;
1537   uint32_t                             CommandSubType;
1538   uint32_t                             CommandType;
1539   uint64_t                             PointertoHSBindingTable;
1540};
1541
1542static inline void
1543GEN7_3DSTATE_BINDING_TABLE_POINTERS_HS_pack(__attribute__((unused)) __gen_user_data *data,
1544                                            __attribute__((unused)) void * restrict dst,
1545                                            __attribute__((unused)) const struct GEN7_3DSTATE_BINDING_TABLE_POINTERS_HS * restrict values)
1546{
1547   uint32_t * restrict dw = (uint32_t * restrict) dst;
1548
1549   dw[0] =
1550      __gen_uint(values->DWordLength, 0, 7) |
1551      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1552      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1553      __gen_uint(values->CommandSubType, 27, 28) |
1554      __gen_uint(values->CommandType, 29, 31);
1555
1556   dw[1] =
1557      __gen_offset(values->PointertoHSBindingTable, 5, 15);
1558}
1559
1560#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_PS_length      2
1561#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_PS_length_bias      2
1562#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_PS_header\
1563   .DWordLength                         =      0,  \
1564   ._3DCommandSubOpcode                 =     42,  \
1565   ._3DCommandOpcode                    =      0,  \
1566   .CommandSubType                      =      3,  \
1567   .CommandType                         =      3
1568
1569struct GEN7_3DSTATE_BINDING_TABLE_POINTERS_PS {
1570   uint32_t                             DWordLength;
1571   uint32_t                             _3DCommandSubOpcode;
1572   uint32_t                             _3DCommandOpcode;
1573   uint32_t                             CommandSubType;
1574   uint32_t                             CommandType;
1575   uint64_t                             PointertoPSBindingTable;
1576};
1577
1578static inline void
1579GEN7_3DSTATE_BINDING_TABLE_POINTERS_PS_pack(__attribute__((unused)) __gen_user_data *data,
1580                                            __attribute__((unused)) void * restrict dst,
1581                                            __attribute__((unused)) const struct GEN7_3DSTATE_BINDING_TABLE_POINTERS_PS * restrict values)
1582{
1583   uint32_t * restrict dw = (uint32_t * restrict) dst;
1584
1585   dw[0] =
1586      __gen_uint(values->DWordLength, 0, 7) |
1587      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1588      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1589      __gen_uint(values->CommandSubType, 27, 28) |
1590      __gen_uint(values->CommandType, 29, 31);
1591
1592   dw[1] =
1593      __gen_offset(values->PointertoPSBindingTable, 5, 15);
1594}
1595
1596#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_VS_length      2
1597#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_VS_length_bias      2
1598#define GEN7_3DSTATE_BINDING_TABLE_POINTERS_VS_header\
1599   .DWordLength                         =      0,  \
1600   ._3DCommandSubOpcode                 =     38,  \
1601   ._3DCommandOpcode                    =      0,  \
1602   .CommandSubType                      =      3,  \
1603   .CommandType                         =      3
1604
1605struct GEN7_3DSTATE_BINDING_TABLE_POINTERS_VS {
1606   uint32_t                             DWordLength;
1607   uint32_t                             _3DCommandSubOpcode;
1608   uint32_t                             _3DCommandOpcode;
1609   uint32_t                             CommandSubType;
1610   uint32_t                             CommandType;
1611   uint64_t                             PointertoVSBindingTable;
1612};
1613
1614static inline void
1615GEN7_3DSTATE_BINDING_TABLE_POINTERS_VS_pack(__attribute__((unused)) __gen_user_data *data,
1616                                            __attribute__((unused)) void * restrict dst,
1617                                            __attribute__((unused)) const struct GEN7_3DSTATE_BINDING_TABLE_POINTERS_VS * restrict values)
1618{
1619   uint32_t * restrict dw = (uint32_t * restrict) dst;
1620
1621   dw[0] =
1622      __gen_uint(values->DWordLength, 0, 7) |
1623      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1624      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1625      __gen_uint(values->CommandSubType, 27, 28) |
1626      __gen_uint(values->CommandType, 29, 31);
1627
1628   dw[1] =
1629      __gen_offset(values->PointertoVSBindingTable, 5, 15);
1630}
1631
1632#define GEN7_3DSTATE_BLEND_STATE_POINTERS_length      2
1633#define GEN7_3DSTATE_BLEND_STATE_POINTERS_length_bias      2
1634#define GEN7_3DSTATE_BLEND_STATE_POINTERS_header\
1635   .DWordLength                         =      0,  \
1636   ._3DCommandSubOpcode                 =     36,  \
1637   ._3DCommandOpcode                    =      0,  \
1638   .CommandSubType                      =      3,  \
1639   .CommandType                         =      3
1640
1641struct GEN7_3DSTATE_BLEND_STATE_POINTERS {
1642   uint32_t                             DWordLength;
1643   uint32_t                             _3DCommandSubOpcode;
1644   uint32_t                             _3DCommandOpcode;
1645   uint32_t                             CommandSubType;
1646   uint32_t                             CommandType;
1647   uint64_t                             BlendStatePointer;
1648};
1649
1650static inline void
1651GEN7_3DSTATE_BLEND_STATE_POINTERS_pack(__attribute__((unused)) __gen_user_data *data,
1652                                       __attribute__((unused)) void * restrict dst,
1653                                       __attribute__((unused)) const struct GEN7_3DSTATE_BLEND_STATE_POINTERS * restrict values)
1654{
1655   uint32_t * restrict dw = (uint32_t * restrict) dst;
1656
1657   dw[0] =
1658      __gen_uint(values->DWordLength, 0, 7) |
1659      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1660      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1661      __gen_uint(values->CommandSubType, 27, 28) |
1662      __gen_uint(values->CommandType, 29, 31);
1663
1664   dw[1] =
1665      __gen_mbo(0, 0) |
1666      __gen_offset(values->BlendStatePointer, 6, 31);
1667}
1668
1669#define GEN7_3DSTATE_CC_STATE_POINTERS_length      2
1670#define GEN7_3DSTATE_CC_STATE_POINTERS_length_bias      2
1671#define GEN7_3DSTATE_CC_STATE_POINTERS_header   \
1672   .DWordLength                         =      0,  \
1673   ._3DCommandSubOpcode                 =     14,  \
1674   ._3DCommandOpcode                    =      0,  \
1675   .CommandSubType                      =      3,  \
1676   .CommandType                         =      3
1677
1678struct GEN7_3DSTATE_CC_STATE_POINTERS {
1679   uint32_t                             DWordLength;
1680   uint32_t                             _3DCommandSubOpcode;
1681   uint32_t                             _3DCommandOpcode;
1682   uint32_t                             CommandSubType;
1683   uint32_t                             CommandType;
1684   uint64_t                             ColorCalcStatePointer;
1685};
1686
1687static inline void
1688GEN7_3DSTATE_CC_STATE_POINTERS_pack(__attribute__((unused)) __gen_user_data *data,
1689                                    __attribute__((unused)) void * restrict dst,
1690                                    __attribute__((unused)) const struct GEN7_3DSTATE_CC_STATE_POINTERS * restrict values)
1691{
1692   uint32_t * restrict dw = (uint32_t * restrict) dst;
1693
1694   dw[0] =
1695      __gen_uint(values->DWordLength, 0, 7) |
1696      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1697      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1698      __gen_uint(values->CommandSubType, 27, 28) |
1699      __gen_uint(values->CommandType, 29, 31);
1700
1701   dw[1] =
1702      __gen_mbo(0, 0) |
1703      __gen_offset(values->ColorCalcStatePointer, 6, 31);
1704}
1705
1706#define GEN7_3DSTATE_CHROMA_KEY_length         4
1707#define GEN7_3DSTATE_CHROMA_KEY_length_bias      2
1708#define GEN7_3DSTATE_CHROMA_KEY_header          \
1709   .DWordLength                         =      2,  \
1710   ._3DCommandSubOpcode                 =      4,  \
1711   ._3DCommandOpcode                    =      1,  \
1712   .CommandSubType                      =      3,  \
1713   .CommandType                         =      3
1714
1715struct GEN7_3DSTATE_CHROMA_KEY {
1716   uint32_t                             DWordLength;
1717   uint32_t                             _3DCommandSubOpcode;
1718   uint32_t                             _3DCommandOpcode;
1719   uint32_t                             CommandSubType;
1720   uint32_t                             CommandType;
1721   uint32_t                             ChromaKeyTableIndex;
1722   uint32_t                             ChromaKeyLowValue;
1723   uint32_t                             ChromaKeyHighValue;
1724};
1725
1726static inline void
1727GEN7_3DSTATE_CHROMA_KEY_pack(__attribute__((unused)) __gen_user_data *data,
1728                             __attribute__((unused)) void * restrict dst,
1729                             __attribute__((unused)) const struct GEN7_3DSTATE_CHROMA_KEY * restrict values)
1730{
1731   uint32_t * restrict dw = (uint32_t * restrict) dst;
1732
1733   dw[0] =
1734      __gen_uint(values->DWordLength, 0, 7) |
1735      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1736      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1737      __gen_uint(values->CommandSubType, 27, 28) |
1738      __gen_uint(values->CommandType, 29, 31);
1739
1740   dw[1] =
1741      __gen_uint(values->ChromaKeyTableIndex, 30, 31);
1742
1743   dw[2] =
1744      __gen_uint(values->ChromaKeyLowValue, 0, 31);
1745
1746   dw[3] =
1747      __gen_uint(values->ChromaKeyHighValue, 0, 31);
1748}
1749
1750#define GEN7_3DSTATE_CLEAR_PARAMS_length       3
1751#define GEN7_3DSTATE_CLEAR_PARAMS_length_bias      2
1752#define GEN7_3DSTATE_CLEAR_PARAMS_header        \
1753   .DWordLength                         =      1,  \
1754   ._3DCommandSubOpcode                 =      4,  \
1755   ._3DCommandOpcode                    =      0,  \
1756   .CommandSubType                      =      3,  \
1757   .CommandType                         =      3
1758
1759struct GEN7_3DSTATE_CLEAR_PARAMS {
1760   uint32_t                             DWordLength;
1761   uint32_t                             _3DCommandSubOpcode;
1762   uint32_t                             _3DCommandOpcode;
1763   uint32_t                             CommandSubType;
1764   uint32_t                             CommandType;
1765   uint32_t                             DepthClearValue;
1766   bool                                 DepthClearValueValid;
1767};
1768
1769static inline void
1770GEN7_3DSTATE_CLEAR_PARAMS_pack(__attribute__((unused)) __gen_user_data *data,
1771                               __attribute__((unused)) void * restrict dst,
1772                               __attribute__((unused)) const struct GEN7_3DSTATE_CLEAR_PARAMS * restrict values)
1773{
1774   uint32_t * restrict dw = (uint32_t * restrict) dst;
1775
1776   dw[0] =
1777      __gen_uint(values->DWordLength, 0, 7) |
1778      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1779      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1780      __gen_uint(values->CommandSubType, 27, 28) |
1781      __gen_uint(values->CommandType, 29, 31);
1782
1783   dw[1] =
1784      __gen_uint(values->DepthClearValue, 0, 31);
1785
1786   dw[2] =
1787      __gen_uint(values->DepthClearValueValid, 0, 0);
1788}
1789
1790#define GEN7_3DSTATE_CLIP_length               4
1791#define GEN7_3DSTATE_CLIP_length_bias          2
1792#define GEN7_3DSTATE_CLIP_header                \
1793   .DWordLength                         =      2,  \
1794   ._3DCommandSubOpcode                 =     18,  \
1795   ._3DCommandOpcode                    =      0,  \
1796   .CommandSubType                      =      3,  \
1797   .CommandType                         =      3
1798
1799struct GEN7_3DSTATE_CLIP {
1800   uint32_t                             DWordLength;
1801   uint32_t                             _3DCommandSubOpcode;
1802   uint32_t                             _3DCommandOpcode;
1803   uint32_t                             CommandSubType;
1804   uint32_t                             CommandType;
1805   uint32_t                             UserClipDistanceCullTestEnableBitmask;
1806   bool                                 StatisticsEnable;
1807   uint32_t                             CullMode;
1808#define CULLMODE_BOTH                            0
1809#define CULLMODE_NONE                            1
1810#define CULLMODE_FRONT                           2
1811#define CULLMODE_BACK                            3
1812   bool                                 EarlyCullEnable;
1813   uint32_t                             VertexSubPixelPrecisionSelect;
1814   uint32_t                             FrontWinding;
1815   uint32_t                             TriangleFanProvokingVertexSelect;
1816#define Vertex0                                  0
1817#define Vertex1                                  1
1818#define Vertex2                                  2
1819   uint32_t                             LineStripListProvokingVertexSelect;
1820#define Vertex0                                  0
1821#define Vertex1                                  1
1822   uint32_t                             TriangleStripListProvokingVertexSelect;
1823#define Vertex0                                  0
1824#define Vertex1                                  1
1825#define Vertex2                                  2
1826   bool                                 NonPerspectiveBarycentricEnable;
1827   bool                                 PerspectiveDivideDisable;
1828   uint32_t                             ClipMode;
1829#define CLIPMODE_NORMAL                          0
1830#define CLIPMODE_REJECT_ALL                      3
1831#define CLIPMODE_ACCEPT_ALL                      4
1832   uint32_t                             UserClipDistanceClipTestEnableBitmask;
1833   bool                                 GuardbandClipTestEnable;
1834   bool                                 ViewportZClipTestEnable;
1835   bool                                 ViewportXYClipTestEnable;
1836   uint32_t                             APIMode;
1837#define APIMODE_OGL                              0
1838#define APIMODE_D3D                              1
1839   bool                                 ClipEnable;
1840   uint32_t                             MaximumVPIndex;
1841   bool                                 ForceZeroRTAIndexEnable;
1842   float                                MaximumPointWidth;
1843   float                                MinimumPointWidth;
1844};
1845
1846static inline void
1847GEN7_3DSTATE_CLIP_pack(__attribute__((unused)) __gen_user_data *data,
1848                       __attribute__((unused)) void * restrict dst,
1849                       __attribute__((unused)) const struct GEN7_3DSTATE_CLIP * restrict values)
1850{
1851   uint32_t * restrict dw = (uint32_t * restrict) dst;
1852
1853   dw[0] =
1854      __gen_uint(values->DWordLength, 0, 7) |
1855      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1856      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1857      __gen_uint(values->CommandSubType, 27, 28) |
1858      __gen_uint(values->CommandType, 29, 31);
1859
1860   dw[1] =
1861      __gen_uint(values->UserClipDistanceCullTestEnableBitmask, 0, 7) |
1862      __gen_uint(values->StatisticsEnable, 10, 10) |
1863      __gen_uint(values->CullMode, 16, 17) |
1864      __gen_uint(values->EarlyCullEnable, 18, 18) |
1865      __gen_uint(values->VertexSubPixelPrecisionSelect, 19, 19) |
1866      __gen_uint(values->FrontWinding, 20, 20);
1867
1868   dw[2] =
1869      __gen_uint(values->TriangleFanProvokingVertexSelect, 0, 1) |
1870      __gen_uint(values->LineStripListProvokingVertexSelect, 2, 3) |
1871      __gen_uint(values->TriangleStripListProvokingVertexSelect, 4, 5) |
1872      __gen_uint(values->NonPerspectiveBarycentricEnable, 8, 8) |
1873      __gen_uint(values->PerspectiveDivideDisable, 9, 9) |
1874      __gen_uint(values->ClipMode, 13, 15) |
1875      __gen_uint(values->UserClipDistanceClipTestEnableBitmask, 16, 23) |
1876      __gen_uint(values->GuardbandClipTestEnable, 26, 26) |
1877      __gen_uint(values->ViewportZClipTestEnable, 27, 27) |
1878      __gen_uint(values->ViewportXYClipTestEnable, 28, 28) |
1879      __gen_uint(values->APIMode, 30, 30) |
1880      __gen_uint(values->ClipEnable, 31, 31);
1881
1882   dw[3] =
1883      __gen_uint(values->MaximumVPIndex, 0, 3) |
1884      __gen_uint(values->ForceZeroRTAIndexEnable, 5, 5) |
1885      __gen_ufixed(values->MaximumPointWidth, 6, 16, 3) |
1886      __gen_ufixed(values->MinimumPointWidth, 17, 27, 3);
1887}
1888
1889#define GEN7_3DSTATE_CONSTANT_DS_length        7
1890#define GEN7_3DSTATE_CONSTANT_DS_length_bias      2
1891#define GEN7_3DSTATE_CONSTANT_DS_header         \
1892   .DWordLength                         =      5,  \
1893   ._3DCommandSubOpcode                 =     26,  \
1894   ._3DCommandOpcode                    =      0,  \
1895   .CommandSubType                      =      3,  \
1896   .CommandType                         =      3
1897
1898struct GEN7_3DSTATE_CONSTANT_DS {
1899   uint32_t                             DWordLength;
1900   uint32_t                             _3DCommandSubOpcode;
1901   uint32_t                             _3DCommandOpcode;
1902   uint32_t                             CommandSubType;
1903   uint32_t                             CommandType;
1904   struct GEN7_3DSTATE_CONSTANT_BODY    ConstantBody;
1905};
1906
1907static inline void
1908GEN7_3DSTATE_CONSTANT_DS_pack(__attribute__((unused)) __gen_user_data *data,
1909                              __attribute__((unused)) void * restrict dst,
1910                              __attribute__((unused)) const struct GEN7_3DSTATE_CONSTANT_DS * restrict values)
1911{
1912   uint32_t * restrict dw = (uint32_t * restrict) dst;
1913
1914   dw[0] =
1915      __gen_uint(values->DWordLength, 0, 7) |
1916      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1917      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1918      __gen_uint(values->CommandSubType, 27, 28) |
1919      __gen_uint(values->CommandType, 29, 31);
1920
1921   GEN7_3DSTATE_CONSTANT_BODY_pack(data, &dw[1], &values->ConstantBody);
1922}
1923
1924#define GEN7_3DSTATE_CONSTANT_GS_length        7
1925#define GEN7_3DSTATE_CONSTANT_GS_length_bias      2
1926#define GEN7_3DSTATE_CONSTANT_GS_header         \
1927   .DWordLength                         =      5,  \
1928   ._3DCommandSubOpcode                 =     22,  \
1929   ._3DCommandOpcode                    =      0,  \
1930   .CommandSubType                      =      3,  \
1931   .CommandType                         =      3
1932
1933struct GEN7_3DSTATE_CONSTANT_GS {
1934   uint32_t                             DWordLength;
1935   uint32_t                             _3DCommandSubOpcode;
1936   uint32_t                             _3DCommandOpcode;
1937   uint32_t                             CommandSubType;
1938   uint32_t                             CommandType;
1939   struct GEN7_3DSTATE_CONSTANT_BODY    ConstantBody;
1940};
1941
1942static inline void
1943GEN7_3DSTATE_CONSTANT_GS_pack(__attribute__((unused)) __gen_user_data *data,
1944                              __attribute__((unused)) void * restrict dst,
1945                              __attribute__((unused)) const struct GEN7_3DSTATE_CONSTANT_GS * restrict values)
1946{
1947   uint32_t * restrict dw = (uint32_t * restrict) dst;
1948
1949   dw[0] =
1950      __gen_uint(values->DWordLength, 0, 7) |
1951      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1952      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1953      __gen_uint(values->CommandSubType, 27, 28) |
1954      __gen_uint(values->CommandType, 29, 31);
1955
1956   GEN7_3DSTATE_CONSTANT_BODY_pack(data, &dw[1], &values->ConstantBody);
1957}
1958
1959#define GEN7_3DSTATE_CONSTANT_HS_length        7
1960#define GEN7_3DSTATE_CONSTANT_HS_length_bias      2
1961#define GEN7_3DSTATE_CONSTANT_HS_header         \
1962   .DWordLength                         =      5,  \
1963   ._3DCommandSubOpcode                 =     25,  \
1964   ._3DCommandOpcode                    =      0,  \
1965   .CommandSubType                      =      3,  \
1966   .CommandType                         =      3
1967
1968struct GEN7_3DSTATE_CONSTANT_HS {
1969   uint32_t                             DWordLength;
1970   uint32_t                             _3DCommandSubOpcode;
1971   uint32_t                             _3DCommandOpcode;
1972   uint32_t                             CommandSubType;
1973   uint32_t                             CommandType;
1974   struct GEN7_3DSTATE_CONSTANT_BODY    ConstantBody;
1975};
1976
1977static inline void
1978GEN7_3DSTATE_CONSTANT_HS_pack(__attribute__((unused)) __gen_user_data *data,
1979                              __attribute__((unused)) void * restrict dst,
1980                              __attribute__((unused)) const struct GEN7_3DSTATE_CONSTANT_HS * restrict values)
1981{
1982   uint32_t * restrict dw = (uint32_t * restrict) dst;
1983
1984   dw[0] =
1985      __gen_uint(values->DWordLength, 0, 7) |
1986      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1987      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1988      __gen_uint(values->CommandSubType, 27, 28) |
1989      __gen_uint(values->CommandType, 29, 31);
1990
1991   GEN7_3DSTATE_CONSTANT_BODY_pack(data, &dw[1], &values->ConstantBody);
1992}
1993
1994#define GEN7_3DSTATE_CONSTANT_PS_length        7
1995#define GEN7_3DSTATE_CONSTANT_PS_length_bias      2
1996#define GEN7_3DSTATE_CONSTANT_PS_header         \
1997   .DWordLength                         =      5,  \
1998   ._3DCommandSubOpcode                 =     23,  \
1999   ._3DCommandOpcode                    =      0,  \
2000   .CommandSubType                      =      3,  \
2001   .CommandType                         =      3
2002
2003struct GEN7_3DSTATE_CONSTANT_PS {
2004   uint32_t                             DWordLength;
2005   uint32_t                             _3DCommandSubOpcode;
2006   uint32_t                             _3DCommandOpcode;
2007   uint32_t                             CommandSubType;
2008   uint32_t                             CommandType;
2009   struct GEN7_3DSTATE_CONSTANT_BODY    ConstantBody;
2010};
2011
2012static inline void
2013GEN7_3DSTATE_CONSTANT_PS_pack(__attribute__((unused)) __gen_user_data *data,
2014                              __attribute__((unused)) void * restrict dst,
2015                              __attribute__((unused)) const struct GEN7_3DSTATE_CONSTANT_PS * restrict values)
2016{
2017   uint32_t * restrict dw = (uint32_t * restrict) dst;
2018
2019   dw[0] =
2020      __gen_uint(values->DWordLength, 0, 7) |
2021      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2022      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2023      __gen_uint(values->CommandSubType, 27, 28) |
2024      __gen_uint(values->CommandType, 29, 31);
2025
2026   GEN7_3DSTATE_CONSTANT_BODY_pack(data, &dw[1], &values->ConstantBody);
2027}
2028
2029#define GEN7_3DSTATE_CONSTANT_VS_length        7
2030#define GEN7_3DSTATE_CONSTANT_VS_length_bias      2
2031#define GEN7_3DSTATE_CONSTANT_VS_header         \
2032   .DWordLength                         =      5,  \
2033   ._3DCommandSubOpcode                 =     21,  \
2034   ._3DCommandOpcode                    =      0,  \
2035   .CommandSubType                      =      3,  \
2036   .CommandType                         =      3
2037
2038struct GEN7_3DSTATE_CONSTANT_VS {
2039   uint32_t                             DWordLength;
2040   uint32_t                             _3DCommandSubOpcode;
2041   uint32_t                             _3DCommandOpcode;
2042   uint32_t                             CommandSubType;
2043   uint32_t                             CommandType;
2044   struct GEN7_3DSTATE_CONSTANT_BODY    ConstantBody;
2045};
2046
2047static inline void
2048GEN7_3DSTATE_CONSTANT_VS_pack(__attribute__((unused)) __gen_user_data *data,
2049                              __attribute__((unused)) void * restrict dst,
2050                              __attribute__((unused)) const struct GEN7_3DSTATE_CONSTANT_VS * restrict values)
2051{
2052   uint32_t * restrict dw = (uint32_t * restrict) dst;
2053
2054   dw[0] =
2055      __gen_uint(values->DWordLength, 0, 7) |
2056      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2057      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2058      __gen_uint(values->CommandSubType, 27, 28) |
2059      __gen_uint(values->CommandType, 29, 31);
2060
2061   GEN7_3DSTATE_CONSTANT_BODY_pack(data, &dw[1], &values->ConstantBody);
2062}
2063
2064#define GEN7_3DSTATE_DEPTH_BUFFER_length       7
2065#define GEN7_3DSTATE_DEPTH_BUFFER_length_bias      2
2066#define GEN7_3DSTATE_DEPTH_BUFFER_header        \
2067   .DWordLength                         =      5,  \
2068   ._3DCommandSubOpcode                 =      5,  \
2069   ._3DCommandOpcode                    =      0,  \
2070   .CommandSubType                      =      3,  \
2071   .CommandType                         =      3
2072
2073struct GEN7_3DSTATE_DEPTH_BUFFER {
2074   uint32_t                             DWordLength;
2075   uint32_t                             _3DCommandSubOpcode;
2076   uint32_t                             _3DCommandOpcode;
2077   uint32_t                             CommandSubType;
2078   uint32_t                             CommandType;
2079   uint32_t                             SurfacePitch;
2080   uint32_t                             SurfaceFormat;
2081#define D32_FLOAT                                1
2082#define D24_UNORM_X8_UINT                        3
2083#define D16_UNORM                                5
2084   bool                                 HierarchicalDepthBufferEnable;
2085   bool                                 StencilWriteEnable;
2086   bool                                 DepthWriteEnable;
2087   uint32_t                             SurfaceType;
2088#define SURFTYPE_1D                              0
2089#define SURFTYPE_2D                              1
2090#define SURFTYPE_3D                              2
2091#define SURFTYPE_CUBE                            3
2092#define SURFTYPE_NULL                            7
2093   __gen_address_type                   SurfaceBaseAddress;
2094   uint32_t                             LOD;
2095   uint32_t                             Width;
2096   uint32_t                             Height;
2097   uint32_t                             MOCS;
2098   uint32_t                             MinimumArrayElement;
2099   uint32_t                             Depth;
2100#define SURFTYPE_CUBEmustbezero                  0
2101   int32_t                              DepthCoordinateOffsetX;
2102   int32_t                              DepthCoordinateOffsetY;
2103   uint32_t                             RenderTargetViewExtent;
2104};
2105
2106static inline void
2107GEN7_3DSTATE_DEPTH_BUFFER_pack(__attribute__((unused)) __gen_user_data *data,
2108                               __attribute__((unused)) void * restrict dst,
2109                               __attribute__((unused)) const struct GEN7_3DSTATE_DEPTH_BUFFER * restrict values)
2110{
2111   uint32_t * restrict dw = (uint32_t * restrict) dst;
2112
2113   dw[0] =
2114      __gen_uint(values->DWordLength, 0, 7) |
2115      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2116      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2117      __gen_uint(values->CommandSubType, 27, 28) |
2118      __gen_uint(values->CommandType, 29, 31);
2119
2120   dw[1] =
2121      __gen_uint(values->SurfacePitch, 0, 17) |
2122      __gen_uint(values->SurfaceFormat, 18, 20) |
2123      __gen_uint(values->HierarchicalDepthBufferEnable, 22, 22) |
2124      __gen_uint(values->StencilWriteEnable, 27, 27) |
2125      __gen_uint(values->DepthWriteEnable, 28, 28) |
2126      __gen_uint(values->SurfaceType, 29, 31);
2127
2128   dw[2] = __gen_combine_address(data, &dw[2], values->SurfaceBaseAddress, 0);
2129
2130   dw[3] =
2131      __gen_uint(values->LOD, 0, 3) |
2132      __gen_uint(values->Width, 4, 17) |
2133      __gen_uint(values->Height, 18, 31);
2134
2135   dw[4] =
2136      __gen_uint(values->MOCS, 0, 3) |
2137      __gen_uint(values->MinimumArrayElement, 10, 20) |
2138      __gen_uint(values->Depth, 21, 31);
2139
2140   dw[5] =
2141      __gen_sint(values->DepthCoordinateOffsetX, 0, 15) |
2142      __gen_sint(values->DepthCoordinateOffsetY, 16, 31);
2143
2144   dw[6] =
2145      __gen_uint(values->RenderTargetViewExtent, 21, 31);
2146}
2147
2148#define GEN7_3DSTATE_DEPTH_STENCIL_STATE_POINTERS_length      2
2149#define GEN7_3DSTATE_DEPTH_STENCIL_STATE_POINTERS_length_bias      2
2150#define GEN7_3DSTATE_DEPTH_STENCIL_STATE_POINTERS_header\
2151   .DWordLength                         =      0,  \
2152   ._3DCommandSubOpcode                 =     37,  \
2153   ._3DCommandOpcode                    =      0,  \
2154   .CommandSubType                      =      3,  \
2155   .CommandType                         =      3
2156
2157struct GEN7_3DSTATE_DEPTH_STENCIL_STATE_POINTERS {
2158   uint32_t                             DWordLength;
2159   uint32_t                             _3DCommandSubOpcode;
2160   uint32_t                             _3DCommandOpcode;
2161   uint32_t                             CommandSubType;
2162   uint32_t                             CommandType;
2163   uint64_t                             PointertoDEPTH_STENCIL_STATE;
2164};
2165
2166static inline void
2167GEN7_3DSTATE_DEPTH_STENCIL_STATE_POINTERS_pack(__attribute__((unused)) __gen_user_data *data,
2168                                               __attribute__((unused)) void * restrict dst,
2169                                               __attribute__((unused)) const struct GEN7_3DSTATE_DEPTH_STENCIL_STATE_POINTERS * restrict values)
2170{
2171   uint32_t * restrict dw = (uint32_t * restrict) dst;
2172
2173   dw[0] =
2174      __gen_uint(values->DWordLength, 0, 7) |
2175      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2176      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2177      __gen_uint(values->CommandSubType, 27, 28) |
2178      __gen_uint(values->CommandType, 29, 31);
2179
2180   dw[1] =
2181      __gen_mbo(0, 0) |
2182      __gen_offset(values->PointertoDEPTH_STENCIL_STATE, 6, 31);
2183}
2184
2185#define GEN7_3DSTATE_DRAWING_RECTANGLE_length      4
2186#define GEN7_3DSTATE_DRAWING_RECTANGLE_length_bias      2
2187#define GEN7_3DSTATE_DRAWING_RECTANGLE_header   \
2188   .DWordLength                         =      2,  \
2189   ._3DCommandSubOpcode                 =      0,  \
2190   ._3DCommandOpcode                    =      1,  \
2191   .CommandSubType                      =      3,  \
2192   .CommandType                         =      3
2193
2194struct GEN7_3DSTATE_DRAWING_RECTANGLE {
2195   uint32_t                             DWordLength;
2196   uint32_t                             _3DCommandSubOpcode;
2197   uint32_t                             _3DCommandOpcode;
2198   uint32_t                             CommandSubType;
2199   uint32_t                             CommandType;
2200   uint32_t                             ClippedDrawingRectangleXMin;
2201   uint32_t                             ClippedDrawingRectangleYMin;
2202   uint32_t                             ClippedDrawingRectangleXMax;
2203   uint32_t                             ClippedDrawingRectangleYMax;
2204   int32_t                              DrawingRectangleOriginX;
2205   int32_t                              DrawingRectangleOriginY;
2206};
2207
2208static inline void
2209GEN7_3DSTATE_DRAWING_RECTANGLE_pack(__attribute__((unused)) __gen_user_data *data,
2210                                    __attribute__((unused)) void * restrict dst,
2211                                    __attribute__((unused)) const struct GEN7_3DSTATE_DRAWING_RECTANGLE * restrict values)
2212{
2213   uint32_t * restrict dw = (uint32_t * restrict) dst;
2214
2215   dw[0] =
2216      __gen_uint(values->DWordLength, 0, 7) |
2217      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2218      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2219      __gen_uint(values->CommandSubType, 27, 28) |
2220      __gen_uint(values->CommandType, 29, 31);
2221
2222   dw[1] =
2223      __gen_uint(values->ClippedDrawingRectangleXMin, 0, 15) |
2224      __gen_uint(values->ClippedDrawingRectangleYMin, 16, 31);
2225
2226   dw[2] =
2227      __gen_uint(values->ClippedDrawingRectangleXMax, 0, 15) |
2228      __gen_uint(values->ClippedDrawingRectangleYMax, 16, 31);
2229
2230   dw[3] =
2231      __gen_sint(values->DrawingRectangleOriginX, 0, 15) |
2232      __gen_sint(values->DrawingRectangleOriginY, 16, 31);
2233}
2234
2235#define GEN7_3DSTATE_DS_length                 6
2236#define GEN7_3DSTATE_DS_length_bias            2
2237#define GEN7_3DSTATE_DS_header                  \
2238   .DWordLength                         =      4,  \
2239   ._3DCommandSubOpcode                 =     29,  \
2240   ._3DCommandOpcode                    =      0,  \
2241   .CommandSubType                      =      3,  \
2242   .CommandType                         =      3
2243
2244struct GEN7_3DSTATE_DS {
2245   uint32_t                             DWordLength;
2246   uint32_t                             _3DCommandSubOpcode;
2247   uint32_t                             _3DCommandOpcode;
2248   uint32_t                             CommandSubType;
2249   uint32_t                             CommandType;
2250   uint64_t                             KernelStartPointer;
2251   bool                                 SoftwareExceptionEnable;
2252   bool                                 IllegalOpcodeExceptionEnable;
2253   uint32_t                             FloatingPointMode;
2254#define IEEE754                                  0
2255#define Alternate                                1
2256   uint32_t                             BindingTableEntryCount;
2257   uint32_t                             SamplerCount;
2258#define NoSamplers                               0
2259#define _14Samplers                              1
2260#define _58Samplers                              2
2261#define _912Samplers                             3
2262#define _1316Samplers                            4
2263   bool                                 VectorMaskEnable;
2264   uint32_t                             SingleDomainPointDispatch;
2265   uint32_t                             PerThreadScratchSpace;
2266   __gen_address_type                   ScratchSpaceBasePointer;
2267   uint32_t                             PatchURBEntryReadOffset;
2268   uint32_t                             PatchURBEntryReadLength;
2269   uint32_t                             DispatchGRFStartRegisterForURBData;
2270   bool                                 Enable;
2271   bool                                 DSCacheDisable;
2272   bool                                 ComputeWCoordinateEnable;
2273   bool                                 StatisticsEnable;
2274   uint32_t                             MaximumNumberofThreads;
2275};
2276
2277static inline void
2278GEN7_3DSTATE_DS_pack(__attribute__((unused)) __gen_user_data *data,
2279                     __attribute__((unused)) void * restrict dst,
2280                     __attribute__((unused)) const struct GEN7_3DSTATE_DS * restrict values)
2281{
2282   uint32_t * restrict dw = (uint32_t * restrict) dst;
2283
2284   dw[0] =
2285      __gen_uint(values->DWordLength, 0, 7) |
2286      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2287      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2288      __gen_uint(values->CommandSubType, 27, 28) |
2289      __gen_uint(values->CommandType, 29, 31);
2290
2291   dw[1] =
2292      __gen_offset(values->KernelStartPointer, 6, 31);
2293
2294   dw[2] =
2295      __gen_uint(values->SoftwareExceptionEnable, 7, 7) |
2296      __gen_uint(values->IllegalOpcodeExceptionEnable, 13, 13) |
2297      __gen_uint(values->FloatingPointMode, 16, 16) |
2298      __gen_uint(values->BindingTableEntryCount, 18, 25) |
2299      __gen_uint(values->SamplerCount, 27, 29) |
2300      __gen_uint(values->VectorMaskEnable, 30, 30) |
2301      __gen_uint(values->SingleDomainPointDispatch, 31, 31);
2302
2303   const uint32_t v3 =
2304      __gen_uint(values->PerThreadScratchSpace, 0, 3);
2305   dw[3] = __gen_combine_address(data, &dw[3], values->ScratchSpaceBasePointer, v3);
2306
2307   dw[4] =
2308      __gen_uint(values->PatchURBEntryReadOffset, 4, 9) |
2309      __gen_uint(values->PatchURBEntryReadLength, 11, 17) |
2310      __gen_uint(values->DispatchGRFStartRegisterForURBData, 20, 24);
2311
2312   dw[5] =
2313      __gen_uint(values->Enable, 0, 0) |
2314      __gen_uint(values->DSCacheDisable, 1, 1) |
2315      __gen_uint(values->ComputeWCoordinateEnable, 2, 2) |
2316      __gen_uint(values->StatisticsEnable, 10, 10) |
2317      __gen_uint(values->MaximumNumberofThreads, 25, 31);
2318}
2319
2320#define GEN7_3DSTATE_GS_length                 7
2321#define GEN7_3DSTATE_GS_length_bias            2
2322#define GEN7_3DSTATE_GS_header                  \
2323   .DWordLength                         =      5,  \
2324   ._3DCommandSubOpcode                 =     17,  \
2325   ._3DCommandOpcode                    =      0,  \
2326   .CommandSubType                      =      3,  \
2327   .CommandType                         =      3
2328
2329struct GEN7_3DSTATE_GS {
2330   uint32_t                             DWordLength;
2331   uint32_t                             _3DCommandSubOpcode;
2332   uint32_t                             _3DCommandOpcode;
2333   uint32_t                             CommandSubType;
2334   uint32_t                             CommandType;
2335   uint64_t                             KernelStartPointer;
2336   bool                                 SoftwareExceptionEnable;
2337   bool                                 MaskStackExceptionEnable;
2338   bool                                 IllegalOpcodeExceptionEnable;
2339   uint32_t                             FloatingPointMode;
2340#define IEEE754                                  0
2341#define alternate                                1
2342   uint32_t                             ThreadPriority;
2343#define NormalPriority                           0
2344#define HighPriority                             1
2345   uint32_t                             BindingTableEntryCount;
2346   uint32_t                             SamplerCount;
2347#define NoSamplers                               0
2348#define _14Samplers                              1
2349#define _58Samplers                              2
2350#define _912Samplers                             3
2351#define _1316Samplers                            4
2352   bool                                 VectorMaskEnable;
2353   bool                                 SingleProgramFlow;
2354   uint32_t                             PerThreadScratchSpace;
2355   __gen_address_type                   ScratchSpaceBasePointer;
2356   uint32_t                             DispatchGRFStartRegisterForURBData;
2357   uint32_t                             VertexURBEntryReadOffset;
2358   bool                                 IncludeVertexHandles;
2359   uint32_t                             VertexURBEntryReadLength;
2360   enum GEN7_3D_Prim_Topo_Type          OutputTopology;
2361   uint32_t                             OutputVertexSize;
2362   bool                                 Enable;
2363   bool                                 DiscardAdjacency;
2364   uint32_t                             ReorderMode;
2365#define LEADING                                  0
2366#define TRAILING                                 1
2367   uint32_t                             Hint;
2368   bool                                 IncludePrimitiveID;
2369   uint32_t                             GSInvocationsIncrementValue;
2370   uint32_t                             StatisticsEnable;
2371   uint32_t                             DispatchMode;
2372#define DISPATCH_MODE_SINGLE                     0
2373#define DISPATCH_MODE_DUAL_INSTANCE              1
2374#define DISPATCH_MODE_DUAL_OBJECT                2
2375   uint32_t                             DefaultStreamID;
2376   uint32_t                             InstanceControl;
2377   uint32_t                             ControlDataHeaderSize;
2378   uint32_t                             ControlDataFormat;
2379#define GSCTL_CUT                                0
2380#define GSCTL_SID                                1
2381   uint32_t                             MaximumNumberofThreads;
2382   uint64_t                             SemaphoreHandle;
2383};
2384
2385static inline void
2386GEN7_3DSTATE_GS_pack(__attribute__((unused)) __gen_user_data *data,
2387                     __attribute__((unused)) void * restrict dst,
2388                     __attribute__((unused)) const struct GEN7_3DSTATE_GS * restrict values)
2389{
2390   uint32_t * restrict dw = (uint32_t * restrict) dst;
2391
2392   dw[0] =
2393      __gen_uint(values->DWordLength, 0, 7) |
2394      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2395      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2396      __gen_uint(values->CommandSubType, 27, 28) |
2397      __gen_uint(values->CommandType, 29, 31);
2398
2399   dw[1] =
2400      __gen_offset(values->KernelStartPointer, 6, 31);
2401
2402   dw[2] =
2403      __gen_uint(values->SoftwareExceptionEnable, 7, 7) |
2404      __gen_uint(values->MaskStackExceptionEnable, 11, 11) |
2405      __gen_uint(values->IllegalOpcodeExceptionEnable, 13, 13) |
2406      __gen_uint(values->FloatingPointMode, 16, 16) |
2407      __gen_uint(values->ThreadPriority, 17, 17) |
2408      __gen_uint(values->BindingTableEntryCount, 18, 25) |
2409      __gen_uint(values->SamplerCount, 27, 29) |
2410      __gen_uint(values->VectorMaskEnable, 30, 30) |
2411      __gen_uint(values->SingleProgramFlow, 31, 31);
2412
2413   const uint32_t v3 =
2414      __gen_uint(values->PerThreadScratchSpace, 0, 3);
2415   dw[3] = __gen_combine_address(data, &dw[3], values->ScratchSpaceBasePointer, v3);
2416
2417   dw[4] =
2418      __gen_uint(values->DispatchGRFStartRegisterForURBData, 0, 3) |
2419      __gen_uint(values->VertexURBEntryReadOffset, 4, 9) |
2420      __gen_uint(values->IncludeVertexHandles, 10, 10) |
2421      __gen_uint(values->VertexURBEntryReadLength, 11, 16) |
2422      __gen_uint(values->OutputTopology, 17, 22) |
2423      __gen_uint(values->OutputVertexSize, 23, 28);
2424
2425   dw[5] =
2426      __gen_uint(values->Enable, 0, 0) |
2427      __gen_uint(values->DiscardAdjacency, 1, 1) |
2428      __gen_uint(values->ReorderMode, 2, 2) |
2429      __gen_uint(values->Hint, 3, 3) |
2430      __gen_uint(values->IncludePrimitiveID, 4, 4) |
2431      __gen_uint(values->GSInvocationsIncrementValue, 5, 9) |
2432      __gen_uint(values->StatisticsEnable, 10, 10) |
2433      __gen_uint(values->DispatchMode, 11, 12) |
2434      __gen_uint(values->DefaultStreamID, 13, 14) |
2435      __gen_uint(values->InstanceControl, 15, 19) |
2436      __gen_uint(values->ControlDataHeaderSize, 20, 23) |
2437      __gen_uint(values->ControlDataFormat, 24, 24) |
2438      __gen_uint(values->MaximumNumberofThreads, 25, 31);
2439
2440   dw[6] =
2441      __gen_offset(values->SemaphoreHandle, 0, 11);
2442}
2443
2444#define GEN7_3DSTATE_HIER_DEPTH_BUFFER_length      3
2445#define GEN7_3DSTATE_HIER_DEPTH_BUFFER_length_bias      2
2446#define GEN7_3DSTATE_HIER_DEPTH_BUFFER_header   \
2447   .DWordLength                         =      1,  \
2448   ._3DCommandSubOpcode                 =      7,  \
2449   ._3DCommandOpcode                    =      0,  \
2450   .CommandSubType                      =      3,  \
2451   .CommandType                         =      3
2452
2453struct GEN7_3DSTATE_HIER_DEPTH_BUFFER {
2454   uint32_t                             DWordLength;
2455   uint32_t                             _3DCommandSubOpcode;
2456   uint32_t                             _3DCommandOpcode;
2457   uint32_t                             CommandSubType;
2458   uint32_t                             CommandType;
2459   uint32_t                             SurfacePitch;
2460   uint32_t                             MOCS;
2461   __gen_address_type                   SurfaceBaseAddress;
2462};
2463
2464static inline void
2465GEN7_3DSTATE_HIER_DEPTH_BUFFER_pack(__attribute__((unused)) __gen_user_data *data,
2466                                    __attribute__((unused)) void * restrict dst,
2467                                    __attribute__((unused)) const struct GEN7_3DSTATE_HIER_DEPTH_BUFFER * restrict values)
2468{
2469   uint32_t * restrict dw = (uint32_t * restrict) dst;
2470
2471   dw[0] =
2472      __gen_uint(values->DWordLength, 0, 7) |
2473      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2474      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2475      __gen_uint(values->CommandSubType, 27, 28) |
2476      __gen_uint(values->CommandType, 29, 31);
2477
2478   dw[1] =
2479      __gen_uint(values->SurfacePitch, 0, 16) |
2480      __gen_uint(values->MOCS, 25, 28);
2481
2482   dw[2] = __gen_combine_address(data, &dw[2], values->SurfaceBaseAddress, 0);
2483}
2484
2485#define GEN7_3DSTATE_HS_length                 7
2486#define GEN7_3DSTATE_HS_length_bias            2
2487#define GEN7_3DSTATE_HS_header                  \
2488   .DWordLength                         =      5,  \
2489   ._3DCommandSubOpcode                 =     27,  \
2490   ._3DCommandOpcode                    =      0,  \
2491   .CommandSubType                      =      3,  \
2492   .CommandType                         =      3
2493
2494struct GEN7_3DSTATE_HS {
2495   uint32_t                             DWordLength;
2496   uint32_t                             _3DCommandSubOpcode;
2497   uint32_t                             _3DCommandOpcode;
2498   uint32_t                             CommandSubType;
2499   uint32_t                             CommandType;
2500   uint32_t                             MaximumNumberofThreads;
2501   bool                                 SoftwareExceptionEnable;
2502   bool                                 IllegalOpcodeExceptionEnable;
2503   uint32_t                             FloatingPointMode;
2504#define IEEE754                                  0
2505#define alternate                                1
2506   uint32_t                             BindingTableEntryCount;
2507   uint32_t                             SamplerCount;
2508#define NoSamplers                               0
2509#define _14Samplers                              1
2510#define _58Samplers                              2
2511#define _912Samplers                             3
2512#define _1316Samplers                            4
2513   uint32_t                             InstanceCount;
2514   bool                                 StatisticsEnable;
2515   bool                                 Enable;
2516   uint64_t                             KernelStartPointer;
2517   uint32_t                             PerThreadScratchSpace;
2518   __gen_address_type                   ScratchSpaceBasePointer;
2519   uint32_t                             VertexURBEntryReadOffset;
2520   uint32_t                             VertexURBEntryReadLength;
2521   uint32_t                             DispatchGRFStartRegisterForURBData;
2522   bool                                 IncludeVertexHandles;
2523   bool                                 VectorMaskEnable;
2524   bool                                 SingleProgramFlow;
2525   uint64_t                             SemaphoreHandle;
2526};
2527
2528static inline void
2529GEN7_3DSTATE_HS_pack(__attribute__((unused)) __gen_user_data *data,
2530                     __attribute__((unused)) void * restrict dst,
2531                     __attribute__((unused)) const struct GEN7_3DSTATE_HS * restrict values)
2532{
2533   uint32_t * restrict dw = (uint32_t * restrict) dst;
2534
2535   dw[0] =
2536      __gen_uint(values->DWordLength, 0, 7) |
2537      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2538      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2539      __gen_uint(values->CommandSubType, 27, 28) |
2540      __gen_uint(values->CommandType, 29, 31);
2541
2542   dw[1] =
2543      __gen_uint(values->MaximumNumberofThreads, 0, 6) |
2544      __gen_uint(values->SoftwareExceptionEnable, 7, 7) |
2545      __gen_uint(values->IllegalOpcodeExceptionEnable, 13, 13) |
2546      __gen_uint(values->FloatingPointMode, 16, 16) |
2547      __gen_uint(values->BindingTableEntryCount, 18, 25) |
2548      __gen_uint(values->SamplerCount, 27, 29);
2549
2550   dw[2] =
2551      __gen_uint(values->InstanceCount, 0, 3) |
2552      __gen_uint(values->StatisticsEnable, 29, 29) |
2553      __gen_uint(values->Enable, 31, 31);
2554
2555   dw[3] =
2556      __gen_offset(values->KernelStartPointer, 6, 31);
2557
2558   const uint32_t v4 =
2559      __gen_uint(values->PerThreadScratchSpace, 0, 3);
2560   dw[4] = __gen_combine_address(data, &dw[4], values->ScratchSpaceBasePointer, v4);
2561
2562   dw[5] =
2563      __gen_uint(values->VertexURBEntryReadOffset, 4, 9) |
2564      __gen_uint(values->VertexURBEntryReadLength, 11, 16) |
2565      __gen_uint(values->DispatchGRFStartRegisterForURBData, 19, 23) |
2566      __gen_uint(values->IncludeVertexHandles, 24, 24) |
2567      __gen_uint(values->VectorMaskEnable, 26, 26) |
2568      __gen_uint(values->SingleProgramFlow, 27, 27);
2569
2570   dw[6] =
2571      __gen_offset(values->SemaphoreHandle, 0, 11);
2572}
2573
2574#define GEN7_3DSTATE_INDEX_BUFFER_length       3
2575#define GEN7_3DSTATE_INDEX_BUFFER_length_bias      2
2576#define GEN7_3DSTATE_INDEX_BUFFER_header        \
2577   .DWordLength                         =      1,  \
2578   ._3DCommandSubOpcode                 =     10,  \
2579   ._3DCommandOpcode                    =      0,  \
2580   .CommandSubType                      =      3,  \
2581   .CommandType                         =      3
2582
2583struct GEN7_3DSTATE_INDEX_BUFFER {
2584   uint32_t                             DWordLength;
2585   uint32_t                             IndexFormat;
2586#define INDEX_BYTE                               0
2587#define INDEX_WORD                               1
2588#define INDEX_DWORD                              2
2589   bool                                 CutIndexEnable;
2590   uint32_t                             MOCS;
2591   uint32_t                             _3DCommandSubOpcode;
2592   uint32_t                             _3DCommandOpcode;
2593   uint32_t                             CommandSubType;
2594   uint32_t                             CommandType;
2595   __gen_address_type                   BufferStartingAddress;
2596   __gen_address_type                   BufferEndingAddress;
2597};
2598
2599static inline void
2600GEN7_3DSTATE_INDEX_BUFFER_pack(__attribute__((unused)) __gen_user_data *data,
2601                               __attribute__((unused)) void * restrict dst,
2602                               __attribute__((unused)) const struct GEN7_3DSTATE_INDEX_BUFFER * restrict values)
2603{
2604   uint32_t * restrict dw = (uint32_t * restrict) dst;
2605
2606   dw[0] =
2607      __gen_uint(values->DWordLength, 0, 7) |
2608      __gen_uint(values->IndexFormat, 8, 9) |
2609      __gen_uint(values->CutIndexEnable, 10, 10) |
2610      __gen_uint(values->MOCS, 12, 15) |
2611      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2612      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2613      __gen_uint(values->CommandSubType, 27, 28) |
2614      __gen_uint(values->CommandType, 29, 31);
2615
2616   dw[1] = __gen_combine_address(data, &dw[1], values->BufferStartingAddress, 0);
2617
2618   dw[2] = __gen_combine_address(data, &dw[2], values->BufferEndingAddress, 0);
2619}
2620
2621#define GEN7_3DSTATE_LINE_STIPPLE_length       3
2622#define GEN7_3DSTATE_LINE_STIPPLE_length_bias      2
2623#define GEN7_3DSTATE_LINE_STIPPLE_header        \
2624   .DWordLength                         =      1,  \
2625   ._3DCommandSubOpcode                 =      8,  \
2626   ._3DCommandOpcode                    =      1,  \
2627   .CommandSubType                      =      3,  \
2628   .CommandType                         =      3
2629
2630struct GEN7_3DSTATE_LINE_STIPPLE {
2631   uint32_t                             DWordLength;
2632   uint32_t                             _3DCommandSubOpcode;
2633   uint32_t                             _3DCommandOpcode;
2634   uint32_t                             CommandSubType;
2635   uint32_t                             CommandType;
2636   uint32_t                             LineStipplePattern;
2637   uint32_t                             CurrentStippleIndex;
2638   uint32_t                             CurrentRepeatCounter;
2639   bool                                 ModifyEnableCurrentRepeatCounterCurrentStippleIndex;
2640   uint32_t                             LineStippleRepeatCount;
2641   float                                LineStippleInverseRepeatCount;
2642};
2643
2644static inline void
2645GEN7_3DSTATE_LINE_STIPPLE_pack(__attribute__((unused)) __gen_user_data *data,
2646                               __attribute__((unused)) void * restrict dst,
2647                               __attribute__((unused)) const struct GEN7_3DSTATE_LINE_STIPPLE * restrict values)
2648{
2649   uint32_t * restrict dw = (uint32_t * restrict) dst;
2650
2651   dw[0] =
2652      __gen_uint(values->DWordLength, 0, 7) |
2653      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2654      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2655      __gen_uint(values->CommandSubType, 27, 28) |
2656      __gen_uint(values->CommandType, 29, 31);
2657
2658   dw[1] =
2659      __gen_uint(values->LineStipplePattern, 0, 15) |
2660      __gen_uint(values->CurrentStippleIndex, 16, 19) |
2661      __gen_uint(values->CurrentRepeatCounter, 21, 29) |
2662      __gen_uint(values->ModifyEnableCurrentRepeatCounterCurrentStippleIndex, 31, 31);
2663
2664   dw[2] =
2665      __gen_uint(values->LineStippleRepeatCount, 0, 8) |
2666      __gen_ufixed(values->LineStippleInverseRepeatCount, 15, 31, 16);
2667}
2668
2669#define GEN7_3DSTATE_MONOFILTER_SIZE_length      2
2670#define GEN7_3DSTATE_MONOFILTER_SIZE_length_bias      2
2671#define GEN7_3DSTATE_MONOFILTER_SIZE_header     \
2672   .DWordLength                         =      0,  \
2673   ._3DCommandSubOpcode                 =     17,  \
2674   ._3DCommandOpcode                    =      1,  \
2675   .CommandSubType                      =      3,  \
2676   .CommandType                         =      3
2677
2678struct GEN7_3DSTATE_MONOFILTER_SIZE {
2679   uint32_t                             DWordLength;
2680   uint32_t                             _3DCommandSubOpcode;
2681   uint32_t                             _3DCommandOpcode;
2682   uint32_t                             CommandSubType;
2683   uint32_t                             CommandType;
2684   uint32_t                             MonochromeFilterHeight;
2685   uint32_t                             MonochromeFilterWidth;
2686};
2687
2688static inline void
2689GEN7_3DSTATE_MONOFILTER_SIZE_pack(__attribute__((unused)) __gen_user_data *data,
2690                                  __attribute__((unused)) void * restrict dst,
2691                                  __attribute__((unused)) const struct GEN7_3DSTATE_MONOFILTER_SIZE * restrict values)
2692{
2693   uint32_t * restrict dw = (uint32_t * restrict) dst;
2694
2695   dw[0] =
2696      __gen_uint(values->DWordLength, 0, 7) |
2697      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2698      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2699      __gen_uint(values->CommandSubType, 27, 28) |
2700      __gen_uint(values->CommandType, 29, 31);
2701
2702   dw[1] =
2703      __gen_uint(values->MonochromeFilterHeight, 0, 2) |
2704      __gen_uint(values->MonochromeFilterWidth, 3, 5);
2705}
2706
2707#define GEN7_3DSTATE_MULTISAMPLE_length        4
2708#define GEN7_3DSTATE_MULTISAMPLE_length_bias      2
2709#define GEN7_3DSTATE_MULTISAMPLE_header         \
2710   .DWordLength                         =      2,  \
2711   ._3DCommandSubOpcode                 =     13,  \
2712   ._3DCommandOpcode                    =      1,  \
2713   .CommandSubType                      =      3,  \
2714   .CommandType                         =      3
2715
2716struct GEN7_3DSTATE_MULTISAMPLE {
2717   uint32_t                             DWordLength;
2718   uint32_t                             _3DCommandSubOpcode;
2719   uint32_t                             _3DCommandOpcode;
2720   uint32_t                             CommandSubType;
2721   uint32_t                             CommandType;
2722   uint32_t                             NumberofMultisamples;
2723#define NUMSAMPLES_1                             0
2724#define NUMSAMPLES_4                             2
2725#define NUMSAMPLES_8                             3
2726   uint32_t                             PixelLocation;
2727#define CENTER                                   0
2728#define UL_CORNER                                1
2729   float                                Sample0YOffset;
2730   float                                Sample0XOffset;
2731   float                                Sample1YOffset;
2732   float                                Sample1XOffset;
2733   float                                Sample2YOffset;
2734   float                                Sample2XOffset;
2735   float                                Sample3YOffset;
2736   float                                Sample3XOffset;
2737   float                                Sample4YOffset;
2738   float                                Sample4XOffset;
2739   float                                Sample5YOffset;
2740   float                                Sample5XOffset;
2741   float                                Sample6YOffset;
2742   float                                Sample6XOffset;
2743   float                                Sample7YOffset;
2744   float                                Sample7XOffset;
2745};
2746
2747static inline void
2748GEN7_3DSTATE_MULTISAMPLE_pack(__attribute__((unused)) __gen_user_data *data,
2749                              __attribute__((unused)) void * restrict dst,
2750                              __attribute__((unused)) const struct GEN7_3DSTATE_MULTISAMPLE * restrict values)
2751{
2752   uint32_t * restrict dw = (uint32_t * restrict) dst;
2753
2754   dw[0] =
2755      __gen_uint(values->DWordLength, 0, 7) |
2756      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2757      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2758      __gen_uint(values->CommandSubType, 27, 28) |
2759      __gen_uint(values->CommandType, 29, 31);
2760
2761   dw[1] =
2762      __gen_uint(values->NumberofMultisamples, 1, 3) |
2763      __gen_uint(values->PixelLocation, 4, 4);
2764
2765   dw[2] =
2766      __gen_ufixed(values->Sample0YOffset, 0, 3, 4) |
2767      __gen_ufixed(values->Sample0XOffset, 4, 7, 4) |
2768      __gen_ufixed(values->Sample1YOffset, 8, 11, 4) |
2769      __gen_ufixed(values->Sample1XOffset, 12, 15, 4) |
2770      __gen_ufixed(values->Sample2YOffset, 16, 19, 4) |
2771      __gen_ufixed(values->Sample2XOffset, 20, 23, 4) |
2772      __gen_ufixed(values->Sample3YOffset, 24, 27, 4) |
2773      __gen_ufixed(values->Sample3XOffset, 28, 31, 4);
2774
2775   dw[3] =
2776      __gen_ufixed(values->Sample4YOffset, 0, 3, 4) |
2777      __gen_ufixed(values->Sample4XOffset, 4, 7, 4) |
2778      __gen_ufixed(values->Sample5YOffset, 8, 11, 4) |
2779      __gen_ufixed(values->Sample5XOffset, 12, 15, 4) |
2780      __gen_ufixed(values->Sample6YOffset, 16, 19, 4) |
2781      __gen_ufixed(values->Sample6XOffset, 20, 23, 4) |
2782      __gen_ufixed(values->Sample7YOffset, 24, 27, 4) |
2783      __gen_ufixed(values->Sample7XOffset, 28, 31, 4);
2784}
2785
2786#define GEN7_3DSTATE_POLY_STIPPLE_OFFSET_length      2
2787#define GEN7_3DSTATE_POLY_STIPPLE_OFFSET_length_bias      2
2788#define GEN7_3DSTATE_POLY_STIPPLE_OFFSET_header \
2789   .DWordLength                         =      0,  \
2790   ._3DCommandSubOpcode                 =      6,  \
2791   ._3DCommandOpcode                    =      1,  \
2792   .CommandSubType                      =      3,  \
2793   .CommandType                         =      3
2794
2795struct GEN7_3DSTATE_POLY_STIPPLE_OFFSET {
2796   uint32_t                             DWordLength;
2797   uint32_t                             _3DCommandSubOpcode;
2798   uint32_t                             _3DCommandOpcode;
2799   uint32_t                             CommandSubType;
2800   uint32_t                             CommandType;
2801   uint32_t                             PolygonStippleYOffset;
2802   uint32_t                             PolygonStippleXOffset;
2803};
2804
2805static inline void
2806GEN7_3DSTATE_POLY_STIPPLE_OFFSET_pack(__attribute__((unused)) __gen_user_data *data,
2807                                      __attribute__((unused)) void * restrict dst,
2808                                      __attribute__((unused)) const struct GEN7_3DSTATE_POLY_STIPPLE_OFFSET * restrict values)
2809{
2810   uint32_t * restrict dw = (uint32_t * restrict) dst;
2811
2812   dw[0] =
2813      __gen_uint(values->DWordLength, 0, 7) |
2814      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2815      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2816      __gen_uint(values->CommandSubType, 27, 28) |
2817      __gen_uint(values->CommandType, 29, 31);
2818
2819   dw[1] =
2820      __gen_uint(values->PolygonStippleYOffset, 0, 4) |
2821      __gen_uint(values->PolygonStippleXOffset, 8, 12);
2822}
2823
2824#define GEN7_3DSTATE_POLY_STIPPLE_PATTERN_length     33
2825#define GEN7_3DSTATE_POLY_STIPPLE_PATTERN_length_bias      2
2826#define GEN7_3DSTATE_POLY_STIPPLE_PATTERN_header\
2827   .DWordLength                         =     31,  \
2828   ._3DCommandSubOpcode                 =      7,  \
2829   ._3DCommandOpcode                    =      1,  \
2830   .CommandSubType                      =      3,  \
2831   .CommandType                         =      3
2832
2833struct GEN7_3DSTATE_POLY_STIPPLE_PATTERN {
2834   uint32_t                             DWordLength;
2835   uint32_t                             _3DCommandSubOpcode;
2836   uint32_t                             _3DCommandOpcode;
2837   uint32_t                             CommandSubType;
2838   uint32_t                             CommandType;
2839   uint32_t                             PatternRow[32];
2840};
2841
2842static inline void
2843GEN7_3DSTATE_POLY_STIPPLE_PATTERN_pack(__attribute__((unused)) __gen_user_data *data,
2844                                       __attribute__((unused)) void * restrict dst,
2845                                       __attribute__((unused)) const struct GEN7_3DSTATE_POLY_STIPPLE_PATTERN * restrict values)
2846{
2847   uint32_t * restrict dw = (uint32_t * restrict) dst;
2848
2849   dw[0] =
2850      __gen_uint(values->DWordLength, 0, 7) |
2851      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2852      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2853      __gen_uint(values->CommandSubType, 27, 28) |
2854      __gen_uint(values->CommandType, 29, 31);
2855
2856   dw[1] =
2857      __gen_uint(values->PatternRow[0], 0, 31);
2858
2859   dw[2] =
2860      __gen_uint(values->PatternRow[1], 0, 31);
2861
2862   dw[3] =
2863      __gen_uint(values->PatternRow[2], 0, 31);
2864
2865   dw[4] =
2866      __gen_uint(values->PatternRow[3], 0, 31);
2867
2868   dw[5] =
2869      __gen_uint(values->PatternRow[4], 0, 31);
2870
2871   dw[6] =
2872      __gen_uint(values->PatternRow[5], 0, 31);
2873
2874   dw[7] =
2875      __gen_uint(values->PatternRow[6], 0, 31);
2876
2877   dw[8] =
2878      __gen_uint(values->PatternRow[7], 0, 31);
2879
2880   dw[9] =
2881      __gen_uint(values->PatternRow[8], 0, 31);
2882
2883   dw[10] =
2884      __gen_uint(values->PatternRow[9], 0, 31);
2885
2886   dw[11] =
2887      __gen_uint(values->PatternRow[10], 0, 31);
2888
2889   dw[12] =
2890      __gen_uint(values->PatternRow[11], 0, 31);
2891
2892   dw[13] =
2893      __gen_uint(values->PatternRow[12], 0, 31);
2894
2895   dw[14] =
2896      __gen_uint(values->PatternRow[13], 0, 31);
2897
2898   dw[15] =
2899      __gen_uint(values->PatternRow[14], 0, 31);
2900
2901   dw[16] =
2902      __gen_uint(values->PatternRow[15], 0, 31);
2903
2904   dw[17] =
2905      __gen_uint(values->PatternRow[16], 0, 31);
2906
2907   dw[18] =
2908      __gen_uint(values->PatternRow[17], 0, 31);
2909
2910   dw[19] =
2911      __gen_uint(values->PatternRow[18], 0, 31);
2912
2913   dw[20] =
2914      __gen_uint(values->PatternRow[19], 0, 31);
2915
2916   dw[21] =
2917      __gen_uint(values->PatternRow[20], 0, 31);
2918
2919   dw[22] =
2920      __gen_uint(values->PatternRow[21], 0, 31);
2921
2922   dw[23] =
2923      __gen_uint(values->PatternRow[22], 0, 31);
2924
2925   dw[24] =
2926      __gen_uint(values->PatternRow[23], 0, 31);
2927
2928   dw[25] =
2929      __gen_uint(values->PatternRow[24], 0, 31);
2930
2931   dw[26] =
2932      __gen_uint(values->PatternRow[25], 0, 31);
2933
2934   dw[27] =
2935      __gen_uint(values->PatternRow[26], 0, 31);
2936
2937   dw[28] =
2938      __gen_uint(values->PatternRow[27], 0, 31);
2939
2940   dw[29] =
2941      __gen_uint(values->PatternRow[28], 0, 31);
2942
2943   dw[30] =
2944      __gen_uint(values->PatternRow[29], 0, 31);
2945
2946   dw[31] =
2947      __gen_uint(values->PatternRow[30], 0, 31);
2948
2949   dw[32] =
2950      __gen_uint(values->PatternRow[31], 0, 31);
2951}
2952
2953#define GEN7_3DSTATE_PS_length                 8
2954#define GEN7_3DSTATE_PS_length_bias            2
2955#define GEN7_3DSTATE_PS_header                  \
2956   .DWordLength                         =      6,  \
2957   ._3DCommandSubOpcode                 =     32,  \
2958   ._3DCommandOpcode                    =      0,  \
2959   .CommandSubType                      =      3,  \
2960   .CommandType                         =      3
2961
2962struct GEN7_3DSTATE_PS {
2963   uint32_t                             DWordLength;
2964   uint32_t                             _3DCommandSubOpcode;
2965   uint32_t                             _3DCommandOpcode;
2966   uint32_t                             CommandSubType;
2967   uint32_t                             CommandType;
2968   uint64_t                             KernelStartPointer0;
2969   bool                                 SoftwareExceptionEnable;
2970   bool                                 MaskStackExceptionEnable;
2971   bool                                 IllegalOpcodeExceptionEnable;
2972   uint32_t                             RoundingMode;
2973#define RTNE                                     0
2974#define RU                                       1
2975#define RD                                       2
2976#define RTZ                                      3
2977   uint32_t                             FloatingPointMode;
2978#define IEEE745                                  0
2979#define Alt                                      1
2980   uint32_t                             BindingTableEntryCount;
2981   uint32_t                             DenormalMode;
2982#define FTZ                                      0
2983#define RET                                      1
2984   uint32_t                             SamplerCount;
2985   bool                                 VectorMaskEnable;
2986   bool                                 SingleProgramFlow;
2987   uint32_t                             PerThreadScratchSpace;
2988   __gen_address_type                   ScratchSpaceBasePointer;
2989   bool                                 _8PixelDispatchEnable;
2990   bool                                 _16PixelDispatchEnable;
2991   bool                                 _32PixelDispatchEnable;
2992   uint32_t                             PositionXYOffsetSelect;
2993#define POSOFFSET_NONE                           0
2994#define POSOFFSET_CENTROID                       2
2995#define POSOFFSET_SAMPLE                         3
2996   bool                                 RenderTargetResolveEnable;
2997   bool                                 DualSourceBlendEnable;
2998   bool                                 RenderTargetFastClearEnable;
2999   bool                                 oMaskPresenttoRenderTarget;
3000   bool                                 AttributeEnable;
3001   bool                                 PushConstantEnable;
3002   uint32_t                             MaximumNumberofThreads;
3003   uint32_t                             DispatchGRFStartRegisterForConstantSetupData2;
3004   uint32_t                             DispatchGRFStartRegisterForConstantSetupData1;
3005   uint32_t                             DispatchGRFStartRegisterForConstantSetupData0;
3006   uint64_t                             KernelStartPointer1;
3007   uint64_t                             KernelStartPointer2;
3008};
3009
3010static inline void
3011GEN7_3DSTATE_PS_pack(__attribute__((unused)) __gen_user_data *data,
3012                     __attribute__((unused)) void * restrict dst,
3013                     __attribute__((unused)) const struct GEN7_3DSTATE_PS * restrict values)
3014{
3015   uint32_t * restrict dw = (uint32_t * restrict) dst;
3016
3017   dw[0] =
3018      __gen_uint(values->DWordLength, 0, 7) |
3019      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3020      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3021      __gen_uint(values->CommandSubType, 27, 28) |
3022      __gen_uint(values->CommandType, 29, 31);
3023
3024   dw[1] =
3025      __gen_offset(values->KernelStartPointer0, 6, 31);
3026
3027   dw[2] =
3028      __gen_uint(values->SoftwareExceptionEnable, 7, 7) |
3029      __gen_uint(values->MaskStackExceptionEnable, 11, 11) |
3030      __gen_uint(values->IllegalOpcodeExceptionEnable, 13, 13) |
3031      __gen_uint(values->RoundingMode, 14, 15) |
3032      __gen_uint(values->FloatingPointMode, 16, 16) |
3033      __gen_uint(values->BindingTableEntryCount, 18, 25) |
3034      __gen_uint(values->DenormalMode, 26, 26) |
3035      __gen_uint(values->SamplerCount, 27, 29) |
3036      __gen_uint(values->VectorMaskEnable, 30, 30) |
3037      __gen_uint(values->SingleProgramFlow, 31, 31);
3038
3039   const uint32_t v3 =
3040      __gen_uint(values->PerThreadScratchSpace, 0, 3);
3041   dw[3] = __gen_combine_address(data, &dw[3], values->ScratchSpaceBasePointer, v3);
3042
3043   dw[4] =
3044      __gen_uint(values->_8PixelDispatchEnable, 0, 0) |
3045      __gen_uint(values->_16PixelDispatchEnable, 1, 1) |
3046      __gen_uint(values->_32PixelDispatchEnable, 2, 2) |
3047      __gen_uint(values->PositionXYOffsetSelect, 3, 4) |
3048      __gen_uint(values->RenderTargetResolveEnable, 6, 6) |
3049      __gen_uint(values->DualSourceBlendEnable, 7, 7) |
3050      __gen_uint(values->RenderTargetFastClearEnable, 8, 8) |
3051      __gen_uint(values->oMaskPresenttoRenderTarget, 9, 9) |
3052      __gen_uint(values->AttributeEnable, 10, 10) |
3053      __gen_uint(values->PushConstantEnable, 11, 11) |
3054      __gen_uint(values->MaximumNumberofThreads, 24, 31);
3055
3056   dw[5] =
3057      __gen_uint(values->DispatchGRFStartRegisterForConstantSetupData2, 0, 6) |
3058      __gen_uint(values->DispatchGRFStartRegisterForConstantSetupData1, 8, 14) |
3059      __gen_uint(values->DispatchGRFStartRegisterForConstantSetupData0, 16, 22);
3060
3061   dw[6] =
3062      __gen_offset(values->KernelStartPointer1, 6, 31);
3063
3064   dw[7] =
3065      __gen_offset(values->KernelStartPointer2, 6, 31);
3066}
3067
3068#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_DS_length      2
3069#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_DS_length_bias      2
3070#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_DS_header\
3071   .DWordLength                         =      0,  \
3072   ._3DCommandSubOpcode                 =     20,  \
3073   ._3DCommandOpcode                    =      1,  \
3074   .CommandSubType                      =      3,  \
3075   .CommandType                         =      3
3076
3077struct GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_DS {
3078   uint32_t                             DWordLength;
3079   uint32_t                             _3DCommandSubOpcode;
3080   uint32_t                             _3DCommandOpcode;
3081   uint32_t                             CommandSubType;
3082   uint32_t                             CommandType;
3083   uint32_t                             ConstantBufferSize;
3084#define _0KB                                     0
3085   uint32_t                             ConstantBufferOffset;
3086#define _0KB                                     0
3087};
3088
3089static inline void
3090GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_DS_pack(__attribute__((unused)) __gen_user_data *data,
3091                                         __attribute__((unused)) void * restrict dst,
3092                                         __attribute__((unused)) const struct GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_DS * restrict values)
3093{
3094   uint32_t * restrict dw = (uint32_t * restrict) dst;
3095
3096   dw[0] =
3097      __gen_uint(values->DWordLength, 0, 7) |
3098      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3099      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3100      __gen_uint(values->CommandSubType, 27, 28) |
3101      __gen_uint(values->CommandType, 29, 31);
3102
3103   dw[1] =
3104      __gen_uint(values->ConstantBufferSize, 0, 4) |
3105      __gen_uint(values->ConstantBufferOffset, 16, 19);
3106}
3107
3108#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_GS_length      2
3109#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_GS_length_bias      2
3110#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_GS_header\
3111   .DWordLength                         =      0,  \
3112   ._3DCommandSubOpcode                 =     21,  \
3113   ._3DCommandOpcode                    =      1,  \
3114   .CommandSubType                      =      3,  \
3115   .CommandType                         =      3
3116
3117struct GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_GS {
3118   uint32_t                             DWordLength;
3119   uint32_t                             _3DCommandSubOpcode;
3120   uint32_t                             _3DCommandOpcode;
3121   uint32_t                             CommandSubType;
3122   uint32_t                             CommandType;
3123   uint32_t                             ConstantBufferSize;
3124#define _0KB                                     0
3125   uint32_t                             ConstantBufferOffset;
3126#define _0KB                                     0
3127};
3128
3129static inline void
3130GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_GS_pack(__attribute__((unused)) __gen_user_data *data,
3131                                         __attribute__((unused)) void * restrict dst,
3132                                         __attribute__((unused)) const struct GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_GS * restrict values)
3133{
3134   uint32_t * restrict dw = (uint32_t * restrict) dst;
3135
3136   dw[0] =
3137      __gen_uint(values->DWordLength, 0, 7) |
3138      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3139      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3140      __gen_uint(values->CommandSubType, 27, 28) |
3141      __gen_uint(values->CommandType, 29, 31);
3142
3143   dw[1] =
3144      __gen_uint(values->ConstantBufferSize, 0, 4) |
3145      __gen_uint(values->ConstantBufferOffset, 16, 19);
3146}
3147
3148#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_HS_length      2
3149#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_HS_length_bias      2
3150#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_HS_header\
3151   .DWordLength                         =      0,  \
3152   ._3DCommandSubOpcode                 =     19,  \
3153   ._3DCommandOpcode                    =      1,  \
3154   .CommandSubType                      =      3,  \
3155   .CommandType                         =      3
3156
3157struct GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_HS {
3158   uint32_t                             DWordLength;
3159   uint32_t                             _3DCommandSubOpcode;
3160   uint32_t                             _3DCommandOpcode;
3161   uint32_t                             CommandSubType;
3162   uint32_t                             CommandType;
3163   uint32_t                             ConstantBufferSize;
3164#define _0KB                                     0
3165   uint32_t                             ConstantBufferOffset;
3166#define _0KB                                     0
3167};
3168
3169static inline void
3170GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_HS_pack(__attribute__((unused)) __gen_user_data *data,
3171                                         __attribute__((unused)) void * restrict dst,
3172                                         __attribute__((unused)) const struct GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_HS * restrict values)
3173{
3174   uint32_t * restrict dw = (uint32_t * restrict) dst;
3175
3176   dw[0] =
3177      __gen_uint(values->DWordLength, 0, 7) |
3178      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3179      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3180      __gen_uint(values->CommandSubType, 27, 28) |
3181      __gen_uint(values->CommandType, 29, 31);
3182
3183   dw[1] =
3184      __gen_uint(values->ConstantBufferSize, 0, 4) |
3185      __gen_uint(values->ConstantBufferOffset, 16, 19);
3186}
3187
3188#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_PS_length      2
3189#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_PS_length_bias      2
3190#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_PS_header\
3191   .DWordLength                         =      0,  \
3192   ._3DCommandSubOpcode                 =     22,  \
3193   ._3DCommandOpcode                    =      1,  \
3194   .CommandSubType                      =      3,  \
3195   .CommandType                         =      3
3196
3197struct GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_PS {
3198   uint32_t                             DWordLength;
3199   uint32_t                             _3DCommandSubOpcode;
3200   uint32_t                             _3DCommandOpcode;
3201   uint32_t                             CommandSubType;
3202   uint32_t                             CommandType;
3203   uint32_t                             ConstantBufferSize;
3204#define _0KB                                     0
3205   uint32_t                             ConstantBufferOffset;
3206#define _0KB                                     0
3207};
3208
3209static inline void
3210GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_PS_pack(__attribute__((unused)) __gen_user_data *data,
3211                                         __attribute__((unused)) void * restrict dst,
3212                                         __attribute__((unused)) const struct GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_PS * restrict values)
3213{
3214   uint32_t * restrict dw = (uint32_t * restrict) dst;
3215
3216   dw[0] =
3217      __gen_uint(values->DWordLength, 0, 7) |
3218      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3219      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3220      __gen_uint(values->CommandSubType, 27, 28) |
3221      __gen_uint(values->CommandType, 29, 31);
3222
3223   dw[1] =
3224      __gen_uint(values->ConstantBufferSize, 0, 4) |
3225      __gen_uint(values->ConstantBufferOffset, 16, 19);
3226}
3227
3228#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_VS_length      2
3229#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_VS_length_bias      2
3230#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_VS_header\
3231   .DWordLength                         =      0,  \
3232   ._3DCommandSubOpcode                 =     18,  \
3233   ._3DCommandOpcode                    =      1,  \
3234   .CommandSubType                      =      3,  \
3235   .CommandType                         =      3
3236
3237struct GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_VS {
3238   uint32_t                             DWordLength;
3239   uint32_t                             _3DCommandSubOpcode;
3240   uint32_t                             _3DCommandOpcode;
3241   uint32_t                             CommandSubType;
3242   uint32_t                             CommandType;
3243   uint32_t                             ConstantBufferSize;
3244#define _0KB                                     0
3245   uint32_t                             ConstantBufferOffset;
3246#define _0KB                                     0
3247};
3248
3249static inline void
3250GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_VS_pack(__attribute__((unused)) __gen_user_data *data,
3251                                         __attribute__((unused)) void * restrict dst,
3252                                         __attribute__((unused)) const struct GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_VS * restrict values)
3253{
3254   uint32_t * restrict dw = (uint32_t * restrict) dst;
3255
3256   dw[0] =
3257      __gen_uint(values->DWordLength, 0, 7) |
3258      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3259      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3260      __gen_uint(values->CommandSubType, 27, 28) |
3261      __gen_uint(values->CommandType, 29, 31);
3262
3263   dw[1] =
3264      __gen_uint(values->ConstantBufferSize, 0, 4) |
3265      __gen_uint(values->ConstantBufferOffset, 16, 19);
3266}
3267
3268#define GEN7_3DSTATE_SAMPLER_PALETTE_LOAD0_length_bias      2
3269#define GEN7_3DSTATE_SAMPLER_PALETTE_LOAD0_header\
3270   ._3DCommandSubOpcode                 =      2,  \
3271   ._3DCommandOpcode                    =      1,  \
3272   .CommandSubType                      =      3,  \
3273   .CommandType                         =      3
3274
3275struct GEN7_3DSTATE_SAMPLER_PALETTE_LOAD0 {
3276   uint32_t                             DWordLength;
3277   uint32_t                             _3DCommandSubOpcode;
3278   uint32_t                             _3DCommandOpcode;
3279   uint32_t                             CommandSubType;
3280   uint32_t                             CommandType;
3281   /* variable length fields follow */
3282};
3283
3284static inline void
3285GEN7_3DSTATE_SAMPLER_PALETTE_LOAD0_pack(__attribute__((unused)) __gen_user_data *data,
3286                                        __attribute__((unused)) void * restrict dst,
3287                                        __attribute__((unused)) const struct GEN7_3DSTATE_SAMPLER_PALETTE_LOAD0 * restrict values)
3288{
3289   uint32_t * restrict dw = (uint32_t * restrict) dst;
3290
3291   dw[0] =
3292      __gen_uint(values->DWordLength, 0, 7) |
3293      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3294      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3295      __gen_uint(values->CommandSubType, 27, 28) |
3296      __gen_uint(values->CommandType, 29, 31);
3297}
3298
3299#define GEN7_3DSTATE_SAMPLER_PALETTE_LOAD1_length_bias      2
3300#define GEN7_3DSTATE_SAMPLER_PALETTE_LOAD1_header\
3301   .DWordLength                         =      0,  \
3302   ._3DCommandSubOpcode                 =     12,  \
3303   ._3DCommandOpcode                    =      1,  \
3304   .CommandSubType                      =      3,  \
3305   .CommandType                         =      3
3306
3307struct GEN7_3DSTATE_SAMPLER_PALETTE_LOAD1 {
3308   uint32_t                             DWordLength;
3309   uint32_t                             _3DCommandSubOpcode;
3310   uint32_t                             _3DCommandOpcode;
3311   uint32_t                             CommandSubType;
3312   uint32_t                             CommandType;
3313   /* variable length fields follow */
3314};
3315
3316static inline void
3317GEN7_3DSTATE_SAMPLER_PALETTE_LOAD1_pack(__attribute__((unused)) __gen_user_data *data,
3318                                        __attribute__((unused)) void * restrict dst,
3319                                        __attribute__((unused)) const struct GEN7_3DSTATE_SAMPLER_PALETTE_LOAD1 * restrict values)
3320{
3321   uint32_t * restrict dw = (uint32_t * restrict) dst;
3322
3323   dw[0] =
3324      __gen_uint(values->DWordLength, 0, 7) |
3325      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3326      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3327      __gen_uint(values->CommandSubType, 27, 28) |
3328      __gen_uint(values->CommandType, 29, 31);
3329}
3330
3331#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_DS_length      2
3332#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_DS_length_bias      2
3333#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_DS_header\
3334   .DWordLength                         =      0,  \
3335   ._3DCommandSubOpcode                 =     45,  \
3336   ._3DCommandOpcode                    =      0,  \
3337   .CommandSubType                      =      3,  \
3338   .CommandType                         =      3
3339
3340struct GEN7_3DSTATE_SAMPLER_STATE_POINTERS_DS {
3341   uint32_t                             DWordLength;
3342   uint32_t                             _3DCommandSubOpcode;
3343   uint32_t                             _3DCommandOpcode;
3344   uint32_t                             CommandSubType;
3345   uint32_t                             CommandType;
3346   uint64_t                             PointertoDSSamplerState;
3347};
3348
3349static inline void
3350GEN7_3DSTATE_SAMPLER_STATE_POINTERS_DS_pack(__attribute__((unused)) __gen_user_data *data,
3351                                            __attribute__((unused)) void * restrict dst,
3352                                            __attribute__((unused)) const struct GEN7_3DSTATE_SAMPLER_STATE_POINTERS_DS * restrict values)
3353{
3354   uint32_t * restrict dw = (uint32_t * restrict) dst;
3355
3356   dw[0] =
3357      __gen_uint(values->DWordLength, 0, 7) |
3358      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3359      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3360      __gen_uint(values->CommandSubType, 27, 28) |
3361      __gen_uint(values->CommandType, 29, 31);
3362
3363   dw[1] =
3364      __gen_offset(values->PointertoDSSamplerState, 5, 31);
3365}
3366
3367#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_GS_length      2
3368#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_GS_length_bias      2
3369#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_GS_header\
3370   .DWordLength                         =      0,  \
3371   ._3DCommandSubOpcode                 =     46,  \
3372   ._3DCommandOpcode                    =      0,  \
3373   .CommandSubType                      =      3,  \
3374   .CommandType                         =      3
3375
3376struct GEN7_3DSTATE_SAMPLER_STATE_POINTERS_GS {
3377   uint32_t                             DWordLength;
3378   uint32_t                             _3DCommandSubOpcode;
3379   uint32_t                             _3DCommandOpcode;
3380   uint32_t                             CommandSubType;
3381   uint32_t                             CommandType;
3382   uint64_t                             PointertoGSSamplerState;
3383};
3384
3385static inline void
3386GEN7_3DSTATE_SAMPLER_STATE_POINTERS_GS_pack(__attribute__((unused)) __gen_user_data *data,
3387                                            __attribute__((unused)) void * restrict dst,
3388                                            __attribute__((unused)) const struct GEN7_3DSTATE_SAMPLER_STATE_POINTERS_GS * restrict values)
3389{
3390   uint32_t * restrict dw = (uint32_t * restrict) dst;
3391
3392   dw[0] =
3393      __gen_uint(values->DWordLength, 0, 7) |
3394      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3395      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3396      __gen_uint(values->CommandSubType, 27, 28) |
3397      __gen_uint(values->CommandType, 29, 31);
3398
3399   dw[1] =
3400      __gen_offset(values->PointertoGSSamplerState, 5, 31);
3401}
3402
3403#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_HS_length      2
3404#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_HS_length_bias      2
3405#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_HS_header\
3406   .DWordLength                         =      0,  \
3407   ._3DCommandSubOpcode                 =     44,  \
3408   ._3DCommandOpcode                    =      0,  \
3409   .CommandSubType                      =      3,  \
3410   .CommandType                         =      3
3411
3412struct GEN7_3DSTATE_SAMPLER_STATE_POINTERS_HS {
3413   uint32_t                             DWordLength;
3414   uint32_t                             _3DCommandSubOpcode;
3415   uint32_t                             _3DCommandOpcode;
3416   uint32_t                             CommandSubType;
3417   uint32_t                             CommandType;
3418   uint64_t                             PointertoHSSamplerState;
3419};
3420
3421static inline void
3422GEN7_3DSTATE_SAMPLER_STATE_POINTERS_HS_pack(__attribute__((unused)) __gen_user_data *data,
3423                                            __attribute__((unused)) void * restrict dst,
3424                                            __attribute__((unused)) const struct GEN7_3DSTATE_SAMPLER_STATE_POINTERS_HS * restrict values)
3425{
3426   uint32_t * restrict dw = (uint32_t * restrict) dst;
3427
3428   dw[0] =
3429      __gen_uint(values->DWordLength, 0, 7) |
3430      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3431      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3432      __gen_uint(values->CommandSubType, 27, 28) |
3433      __gen_uint(values->CommandType, 29, 31);
3434
3435   dw[1] =
3436      __gen_offset(values->PointertoHSSamplerState, 5, 31);
3437}
3438
3439#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_PS_length      2
3440#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_PS_length_bias      2
3441#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_PS_header\
3442   .DWordLength                         =      0,  \
3443   ._3DCommandSubOpcode                 =     47,  \
3444   ._3DCommandOpcode                    =      0,  \
3445   .CommandSubType                      =      3,  \
3446   .CommandType                         =      3
3447
3448struct GEN7_3DSTATE_SAMPLER_STATE_POINTERS_PS {
3449   uint32_t                             DWordLength;
3450   uint32_t                             _3DCommandSubOpcode;
3451   uint32_t                             _3DCommandOpcode;
3452   uint32_t                             CommandSubType;
3453   uint32_t                             CommandType;
3454   uint64_t                             PointertoPSSamplerState;
3455};
3456
3457static inline void
3458GEN7_3DSTATE_SAMPLER_STATE_POINTERS_PS_pack(__attribute__((unused)) __gen_user_data *data,
3459                                            __attribute__((unused)) void * restrict dst,
3460                                            __attribute__((unused)) const struct GEN7_3DSTATE_SAMPLER_STATE_POINTERS_PS * restrict values)
3461{
3462   uint32_t * restrict dw = (uint32_t * restrict) dst;
3463
3464   dw[0] =
3465      __gen_uint(values->DWordLength, 0, 7) |
3466      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3467      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3468      __gen_uint(values->CommandSubType, 27, 28) |
3469      __gen_uint(values->CommandType, 29, 31);
3470
3471   dw[1] =
3472      __gen_offset(values->PointertoPSSamplerState, 5, 31);
3473}
3474
3475#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_VS_length      2
3476#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_VS_length_bias      2
3477#define GEN7_3DSTATE_SAMPLER_STATE_POINTERS_VS_header\
3478   .DWordLength                         =      0,  \
3479   ._3DCommandSubOpcode                 =     43,  \
3480   ._3DCommandOpcode                    =      0,  \
3481   .CommandSubType                      =      3,  \
3482   .CommandType                         =      3
3483
3484struct GEN7_3DSTATE_SAMPLER_STATE_POINTERS_VS {
3485   uint32_t                             DWordLength;
3486   uint32_t                             _3DCommandSubOpcode;
3487   uint32_t                             _3DCommandOpcode;
3488   uint32_t                             CommandSubType;
3489   uint32_t                             CommandType;
3490   uint64_t                             PointertoVSSamplerState;
3491};
3492
3493static inline void
3494GEN7_3DSTATE_SAMPLER_STATE_POINTERS_VS_pack(__attribute__((unused)) __gen_user_data *data,
3495                                            __attribute__((unused)) void * restrict dst,
3496                                            __attribute__((unused)) const struct GEN7_3DSTATE_SAMPLER_STATE_POINTERS_VS * restrict values)
3497{
3498   uint32_t * restrict dw = (uint32_t * restrict) dst;
3499
3500   dw[0] =
3501      __gen_uint(values->DWordLength, 0, 7) |
3502      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3503      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3504      __gen_uint(values->CommandSubType, 27, 28) |
3505      __gen_uint(values->CommandType, 29, 31);
3506
3507   dw[1] =
3508      __gen_offset(values->PointertoVSSamplerState, 5, 31);
3509}
3510
3511#define GEN7_3DSTATE_SAMPLE_MASK_length        2
3512#define GEN7_3DSTATE_SAMPLE_MASK_length_bias      2
3513#define GEN7_3DSTATE_SAMPLE_MASK_header         \
3514   .DWordLength                         =      0,  \
3515   ._3DCommandSubOpcode                 =     24,  \
3516   ._3DCommandOpcode                    =      0,  \
3517   .CommandSubType                      =      3,  \
3518   .CommandType                         =      3
3519
3520struct GEN7_3DSTATE_SAMPLE_MASK {
3521   uint32_t                             DWordLength;
3522   uint32_t                             _3DCommandSubOpcode;
3523   uint32_t                             _3DCommandOpcode;
3524   uint32_t                             CommandSubType;
3525   uint32_t                             CommandType;
3526   uint32_t                             SampleMask;
3527};
3528
3529static inline void
3530GEN7_3DSTATE_SAMPLE_MASK_pack(__attribute__((unused)) __gen_user_data *data,
3531                              __attribute__((unused)) void * restrict dst,
3532                              __attribute__((unused)) const struct GEN7_3DSTATE_SAMPLE_MASK * restrict values)
3533{
3534   uint32_t * restrict dw = (uint32_t * restrict) dst;
3535
3536   dw[0] =
3537      __gen_uint(values->DWordLength, 0, 7) |
3538      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3539      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3540      __gen_uint(values->CommandSubType, 27, 28) |
3541      __gen_uint(values->CommandType, 29, 31);
3542
3543   dw[1] =
3544      __gen_uint(values->SampleMask, 0, 7);
3545}
3546
3547#define GEN7_3DSTATE_SBE_length               14
3548#define GEN7_3DSTATE_SBE_length_bias           2
3549#define GEN7_3DSTATE_SBE_header                 \
3550   .DWordLength                         =     12,  \
3551   ._3DCommandSubOpcode                 =     31,  \
3552   ._3DCommandOpcode                    =      0,  \
3553   .CommandSubType                      =      3,  \
3554   .CommandType                         =      3
3555
3556struct GEN7_3DSTATE_SBE {
3557   uint32_t                             DWordLength;
3558   uint32_t                             _3DCommandSubOpcode;
3559   uint32_t                             _3DCommandOpcode;
3560   uint32_t                             CommandSubType;
3561   uint32_t                             CommandType;
3562   uint32_t                             VertexURBEntryReadOffset;
3563   uint32_t                             VertexURBEntryReadLength;
3564   uint32_t                             PointSpriteTextureCoordinateOrigin;
3565#define UPPERLEFT                                0
3566#define LOWERLEFT                                1
3567   bool                                 AttributeSwizzleEnable;
3568   uint32_t                             NumberofSFOutputAttributes;
3569   uint32_t                             AttributeSwizzleControlMode;
3570#define SWIZ_0_15                                0
3571#define SWIZ_16_31                               1
3572   struct GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL Attribute[16];
3573   uint32_t                             PointSpriteTextureCoordinateEnable;
3574   uint32_t                             ConstantInterpolationEnable;
3575   uint32_t                             Attribute0WrapShortestEnables;
3576   uint32_t                             Attribute1WrapShortestEnables;
3577   uint32_t                             Attribute2WrapShortestEnables;
3578   uint32_t                             Attribute3WrapShortestEnables;
3579   uint32_t                             Attribute4WrapShortestEnables;
3580   uint32_t                             Attribute5WrapShortestEnables;
3581   uint32_t                             Attribute6WrapShortestEnables;
3582   uint32_t                             Attribute7WrapShortestEnables;
3583   uint32_t                             Attribute8WrapShortestEnables;
3584   uint32_t                             Attribute9WrapShortestEnables;
3585   uint32_t                             Attribute10WrapShortestEnables;
3586   uint32_t                             Attribute11WrapShortestEnables;
3587   uint32_t                             Attribute12WrapShortestEnables;
3588   uint32_t                             Attribute13WrapShortestEnables;
3589   uint32_t                             Attribute14WrapShortestEnables;
3590   uint32_t                             Attribute15WrapShortestEnables;
3591};
3592
3593static inline void
3594GEN7_3DSTATE_SBE_pack(__attribute__((unused)) __gen_user_data *data,
3595                      __attribute__((unused)) void * restrict dst,
3596                      __attribute__((unused)) const struct GEN7_3DSTATE_SBE * restrict values)
3597{
3598   uint32_t * restrict dw = (uint32_t * restrict) dst;
3599
3600   dw[0] =
3601      __gen_uint(values->DWordLength, 0, 7) |
3602      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3603      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3604      __gen_uint(values->CommandSubType, 27, 28) |
3605      __gen_uint(values->CommandType, 29, 31);
3606
3607   dw[1] =
3608      __gen_uint(values->VertexURBEntryReadOffset, 4, 9) |
3609      __gen_uint(values->VertexURBEntryReadLength, 11, 15) |
3610      __gen_uint(values->PointSpriteTextureCoordinateOrigin, 20, 20) |
3611      __gen_uint(values->AttributeSwizzleEnable, 21, 21) |
3612      __gen_uint(values->NumberofSFOutputAttributes, 22, 27) |
3613      __gen_uint(values->AttributeSwizzleControlMode, 28, 28);
3614
3615   uint32_t v2_0;
3616   GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v2_0, &values->Attribute[0]);
3617
3618   uint32_t v2_1;
3619   GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v2_1, &values->Attribute[1]);
3620
3621   dw[2] =
3622      __gen_uint(v2_0, 0, 15) |
3623      __gen_uint(v2_1, 16, 31);
3624
3625   uint32_t v3_0;
3626   GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v3_0, &values->Attribute[2]);
3627
3628   uint32_t v3_1;
3629   GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v3_1, &values->Attribute[3]);
3630
3631   dw[3] =
3632      __gen_uint(v3_0, 0, 15) |
3633      __gen_uint(v3_1, 16, 31);
3634
3635   uint32_t v4_0;
3636   GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v4_0, &values->Attribute[4]);
3637
3638   uint32_t v4_1;
3639   GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v4_1, &values->Attribute[5]);
3640
3641   dw[4] =
3642      __gen_uint(v4_0, 0, 15) |
3643      __gen_uint(v4_1, 16, 31);
3644
3645   uint32_t v5_0;
3646   GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v5_0, &values->Attribute[6]);
3647
3648   uint32_t v5_1;
3649   GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v5_1, &values->Attribute[7]);
3650
3651   dw[5] =
3652      __gen_uint(v5_0, 0, 15) |
3653      __gen_uint(v5_1, 16, 31);
3654
3655   uint32_t v6_0;
3656   GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v6_0, &values->Attribute[8]);
3657
3658   uint32_t v6_1;
3659   GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v6_1, &values->Attribute[9]);
3660
3661   dw[6] =
3662      __gen_uint(v6_0, 0, 15) |
3663      __gen_uint(v6_1, 16, 31);
3664
3665   uint32_t v7_0;
3666   GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v7_0, &values->Attribute[10]);
3667
3668   uint32_t v7_1;
3669   GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v7_1, &values->Attribute[11]);
3670
3671   dw[7] =
3672      __gen_uint(v7_0, 0, 15) |
3673      __gen_uint(v7_1, 16, 31);
3674
3675   uint32_t v8_0;
3676   GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v8_0, &values->Attribute[12]);
3677
3678   uint32_t v8_1;
3679   GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v8_1, &values->Attribute[13]);
3680
3681   dw[8] =
3682      __gen_uint(v8_0, 0, 15) |
3683      __gen_uint(v8_1, 16, 31);
3684
3685   uint32_t v9_0;
3686   GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v9_0, &values->Attribute[14]);
3687
3688   uint32_t v9_1;
3689   GEN7_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v9_1, &values->Attribute[15]);
3690
3691   dw[9] =
3692      __gen_uint(v9_0, 0, 15) |
3693      __gen_uint(v9_1, 16, 31);
3694
3695   dw[10] =
3696      __gen_uint(values->PointSpriteTextureCoordinateEnable, 0, 31);
3697
3698   dw[11] =
3699      __gen_uint(values->ConstantInterpolationEnable, 0, 31);
3700
3701   dw[12] =
3702      __gen_uint(values->Attribute0WrapShortestEnables, 0, 3) |
3703      __gen_uint(values->Attribute1WrapShortestEnables, 4, 7) |
3704      __gen_uint(values->Attribute2WrapShortestEnables, 8, 11) |
3705      __gen_uint(values->Attribute3WrapShortestEnables, 12, 15) |
3706      __gen_uint(values->Attribute4WrapShortestEnables, 16, 19) |
3707      __gen_uint(values->Attribute5WrapShortestEnables, 20, 23) |
3708      __gen_uint(values->Attribute6WrapShortestEnables, 24, 27) |
3709      __gen_uint(values->Attribute7WrapShortestEnables, 28, 31);
3710
3711   dw[13] =
3712      __gen_uint(values->Attribute8WrapShortestEnables, 0, 3) |
3713      __gen_uint(values->Attribute9WrapShortestEnables, 4, 7) |
3714      __gen_uint(values->Attribute10WrapShortestEnables, 8, 11) |
3715      __gen_uint(values->Attribute11WrapShortestEnables, 12, 15) |
3716      __gen_uint(values->Attribute12WrapShortestEnables, 16, 19) |
3717      __gen_uint(values->Attribute13WrapShortestEnables, 20, 23) |
3718      __gen_uint(values->Attribute14WrapShortestEnables, 24, 27) |
3719      __gen_uint(values->Attribute15WrapShortestEnables, 28, 31);
3720}
3721
3722#define GEN7_3DSTATE_SCISSOR_STATE_POINTERS_length      2
3723#define GEN7_3DSTATE_SCISSOR_STATE_POINTERS_length_bias      2
3724#define GEN7_3DSTATE_SCISSOR_STATE_POINTERS_header\
3725   .DWordLength                         =      0,  \
3726   ._3DCommandSubOpcode                 =     15,  \
3727   ._3DCommandOpcode                    =      0,  \
3728   .CommandSubType                      =      3,  \
3729   .CommandType                         =      3
3730
3731struct GEN7_3DSTATE_SCISSOR_STATE_POINTERS {
3732   uint32_t                             DWordLength;
3733   uint32_t                             _3DCommandSubOpcode;
3734   uint32_t                             _3DCommandOpcode;
3735   uint32_t                             CommandSubType;
3736   uint32_t                             CommandType;
3737   uint64_t                             ScissorRectPointer;
3738};
3739
3740static inline void
3741GEN7_3DSTATE_SCISSOR_STATE_POINTERS_pack(__attribute__((unused)) __gen_user_data *data,
3742                                         __attribute__((unused)) void * restrict dst,
3743                                         __attribute__((unused)) const struct GEN7_3DSTATE_SCISSOR_STATE_POINTERS * restrict values)
3744{
3745   uint32_t * restrict dw = (uint32_t * restrict) dst;
3746
3747   dw[0] =
3748      __gen_uint(values->DWordLength, 0, 7) |
3749      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3750      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3751      __gen_uint(values->CommandSubType, 27, 28) |
3752      __gen_uint(values->CommandType, 29, 31);
3753
3754   dw[1] =
3755      __gen_offset(values->ScissorRectPointer, 5, 31);
3756}
3757
3758#define GEN7_3DSTATE_SF_length                 7
3759#define GEN7_3DSTATE_SF_length_bias            2
3760#define GEN7_3DSTATE_SF_header                  \
3761   .DWordLength                         =      5,  \
3762   ._3DCommandSubOpcode                 =     19,  \
3763   ._3DCommandOpcode                    =      0,  \
3764   .CommandSubType                      =      3,  \
3765   .CommandType                         =      3
3766
3767struct GEN7_3DSTATE_SF {
3768   uint32_t                             DWordLength;
3769   uint32_t                             _3DCommandSubOpcode;
3770   uint32_t                             _3DCommandOpcode;
3771   uint32_t                             CommandSubType;
3772   uint32_t                             CommandType;
3773   uint32_t                             FrontWinding;
3774   bool                                 ViewportTransformEnable;
3775   uint32_t                             BackFaceFillMode;
3776#define FILL_MODE_SOLID                          0
3777#define FILL_MODE_WIREFRAME                      1
3778#define FILL_MODE_POINT                          2
3779   uint32_t                             FrontFaceFillMode;
3780#define FILL_MODE_SOLID                          0
3781#define FILL_MODE_WIREFRAME                      1
3782#define FILL_MODE_POINT                          2
3783   bool                                 GlobalDepthOffsetEnablePoint;
3784   bool                                 GlobalDepthOffsetEnableWireframe;
3785   bool                                 GlobalDepthOffsetEnableSolid;
3786   bool                                 StatisticsEnable;
3787   bool                                 LegacyGlobalDepthBiasEnable;
3788   uint32_t                             DepthBufferSurfaceFormat;
3789#define D32_FLOAT_S8X24_UINT                     0
3790#define D32_FLOAT                                1
3791#define D24_UNORM_S8_UINT                        2
3792#define D24_UNORM_X8_UINT                        3
3793#define D16_UNORM                                5
3794   uint32_t                             MultisampleRasterizationMode;
3795#define MSRASTMODE_OFF_PIXEL                     0
3796#define MSRASTMODE_OFF_PATTERN                   1
3797#define MSRASTMODE_ON_PIXEL                      2
3798#define MSRASTMODE_ON_PATTERN                    3
3799   bool                                 ScissorRectangleEnable;
3800   uint32_t                             LineEndCapAntialiasingRegionWidth;
3801#define _05pixels                                0
3802#define _10pixels                                1
3803#define _20pixels                                2
3804#define _40pixels                                3
3805   float                                LineWidth;
3806   uint32_t                             CullMode;
3807#define CULLMODE_BOTH                            0
3808#define CULLMODE_NONE                            1
3809#define CULLMODE_FRONT                           2
3810#define CULLMODE_BACK                            3
3811   bool                                 AntiAliasingEnable;
3812   float                                PointWidth;
3813   uint32_t                             PointWidthSource;
3814#define Vertex                                   0
3815#define State                                    1
3816   uint32_t                             VertexSubPixelPrecisionSelect;
3817#define _8Bit                                    0
3818#define _4Bit                                    1
3819   uint32_t                             AALineDistanceMode;
3820#define AALINEDISTANCE_TRUE                      1
3821   uint32_t                             TriangleFanProvokingVertexSelect;
3822#define Vertex0                                  0
3823#define Vertex1                                  1
3824#define Vertex2                                  2
3825   uint32_t                             LineStripListProvokingVertexSelect;
3826   uint32_t                             TriangleStripListProvokingVertexSelect;
3827#define Vertex0                                  0
3828#define Vertex1                                  1
3829#define Vertex2                                  2
3830   bool                                 LastPixelEnable;
3831   float                                GlobalDepthOffsetConstant;
3832   float                                GlobalDepthOffsetScale;
3833   float                                GlobalDepthOffsetClamp;
3834};
3835
3836static inline void
3837GEN7_3DSTATE_SF_pack(__attribute__((unused)) __gen_user_data *data,
3838                     __attribute__((unused)) void * restrict dst,
3839                     __attribute__((unused)) const struct GEN7_3DSTATE_SF * restrict values)
3840{
3841   uint32_t * restrict dw = (uint32_t * restrict) dst;
3842
3843   dw[0] =
3844      __gen_uint(values->DWordLength, 0, 7) |
3845      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3846      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3847      __gen_uint(values->CommandSubType, 27, 28) |
3848      __gen_uint(values->CommandType, 29, 31);
3849
3850   dw[1] =
3851      __gen_uint(values->FrontWinding, 0, 0) |
3852      __gen_uint(values->ViewportTransformEnable, 1, 1) |
3853      __gen_uint(values->BackFaceFillMode, 3, 4) |
3854      __gen_uint(values->FrontFaceFillMode, 5, 6) |
3855      __gen_uint(values->GlobalDepthOffsetEnablePoint, 7, 7) |
3856      __gen_uint(values->GlobalDepthOffsetEnableWireframe, 8, 8) |
3857      __gen_uint(values->GlobalDepthOffsetEnableSolid, 9, 9) |
3858      __gen_uint(values->StatisticsEnable, 10, 10) |
3859      __gen_uint(values->LegacyGlobalDepthBiasEnable, 11, 11) |
3860      __gen_uint(values->DepthBufferSurfaceFormat, 12, 14);
3861
3862   dw[2] =
3863      __gen_uint(values->MultisampleRasterizationMode, 8, 9) |
3864      __gen_uint(values->ScissorRectangleEnable, 11, 11) |
3865      __gen_uint(values->LineEndCapAntialiasingRegionWidth, 16, 17) |
3866      __gen_ufixed(values->LineWidth, 18, 27, 7) |
3867      __gen_uint(values->CullMode, 29, 30) |
3868      __gen_uint(values->AntiAliasingEnable, 31, 31);
3869
3870   dw[3] =
3871      __gen_ufixed(values->PointWidth, 0, 10, 3) |
3872      __gen_uint(values->PointWidthSource, 11, 11) |
3873      __gen_uint(values->VertexSubPixelPrecisionSelect, 12, 12) |
3874      __gen_uint(values->AALineDistanceMode, 14, 14) |
3875      __gen_uint(values->TriangleFanProvokingVertexSelect, 25, 26) |
3876      __gen_uint(values->LineStripListProvokingVertexSelect, 27, 28) |
3877      __gen_uint(values->TriangleStripListProvokingVertexSelect, 29, 30) |
3878      __gen_uint(values->LastPixelEnable, 31, 31);
3879
3880   dw[4] =
3881      __gen_float(values->GlobalDepthOffsetConstant);
3882
3883   dw[5] =
3884      __gen_float(values->GlobalDepthOffsetScale);
3885
3886   dw[6] =
3887      __gen_float(values->GlobalDepthOffsetClamp);
3888}
3889
3890#define GEN7_3DSTATE_SO_BUFFER_length          4
3891#define GEN7_3DSTATE_SO_BUFFER_length_bias      2
3892#define GEN7_3DSTATE_SO_BUFFER_header           \
3893   .DWordLength                         =      2,  \
3894   ._3DCommandSubOpcode                 =     24,  \
3895   ._3DCommandOpcode                    =      1,  \
3896   .CommandSubType                      =      3,  \
3897   .CommandType                         =      3
3898
3899struct GEN7_3DSTATE_SO_BUFFER {
3900   uint32_t                             DWordLength;
3901   uint32_t                             _3DCommandSubOpcode;
3902   uint32_t                             _3DCommandOpcode;
3903   uint32_t                             CommandSubType;
3904   uint32_t                             CommandType;
3905   uint32_t                             SurfacePitch;
3906   uint32_t                             MOCS;
3907   uint32_t                             SOBufferIndex;
3908   __gen_address_type                   SurfaceBaseAddress;
3909   __gen_address_type                   SurfaceEndAddress;
3910};
3911
3912static inline void
3913GEN7_3DSTATE_SO_BUFFER_pack(__attribute__((unused)) __gen_user_data *data,
3914                            __attribute__((unused)) void * restrict dst,
3915                            __attribute__((unused)) const struct GEN7_3DSTATE_SO_BUFFER * restrict values)
3916{
3917   uint32_t * restrict dw = (uint32_t * restrict) dst;
3918
3919   dw[0] =
3920      __gen_uint(values->DWordLength, 0, 7) |
3921      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3922      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3923      __gen_uint(values->CommandSubType, 27, 28) |
3924      __gen_uint(values->CommandType, 29, 31);
3925
3926   dw[1] =
3927      __gen_uint(values->SurfacePitch, 0, 11) |
3928      __gen_uint(values->MOCS, 25, 28) |
3929      __gen_uint(values->SOBufferIndex, 29, 30);
3930
3931   dw[2] = __gen_combine_address(data, &dw[2], values->SurfaceBaseAddress, 0);
3932
3933   dw[3] = __gen_combine_address(data, &dw[3], values->SurfaceEndAddress, 0);
3934}
3935
3936#define GEN7_3DSTATE_SO_DECL_LIST_length_bias      2
3937#define GEN7_3DSTATE_SO_DECL_LIST_header        \
3938   ._3DCommandSubOpcode                 =     23,  \
3939   ._3DCommandOpcode                    =      1,  \
3940   .CommandSubType                      =      3,  \
3941   .CommandType                         =      3
3942
3943struct GEN7_3DSTATE_SO_DECL_LIST {
3944   uint32_t                             DWordLength;
3945   uint32_t                             _3DCommandSubOpcode;
3946   uint32_t                             _3DCommandOpcode;
3947   uint32_t                             CommandSubType;
3948   uint32_t                             CommandType;
3949   uint32_t                             StreamtoBufferSelects0;
3950   uint32_t                             StreamtoBufferSelects1;
3951   uint32_t                             StreamtoBufferSelects2;
3952   uint32_t                             StreamtoBufferSelects3;
3953   uint32_t                             NumEntries0;
3954   uint32_t                             NumEntries1;
3955   uint32_t                             NumEntries2;
3956   uint32_t                             NumEntries3;
3957   /* variable length fields follow */
3958};
3959
3960static inline void
3961GEN7_3DSTATE_SO_DECL_LIST_pack(__attribute__((unused)) __gen_user_data *data,
3962                               __attribute__((unused)) void * restrict dst,
3963                               __attribute__((unused)) const struct GEN7_3DSTATE_SO_DECL_LIST * restrict values)
3964{
3965   uint32_t * restrict dw = (uint32_t * restrict) dst;
3966
3967   dw[0] =
3968      __gen_uint(values->DWordLength, 0, 8) |
3969      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
3970      __gen_uint(values->_3DCommandOpcode, 24, 26) |
3971      __gen_uint(values->CommandSubType, 27, 28) |
3972      __gen_uint(values->CommandType, 29, 31);
3973
3974   dw[1] =
3975      __gen_uint(values->StreamtoBufferSelects0, 0, 3) |
3976      __gen_uint(values->StreamtoBufferSelects1, 4, 7) |
3977      __gen_uint(values->StreamtoBufferSelects2, 8, 11) |
3978      __gen_uint(values->StreamtoBufferSelects3, 12, 15);
3979
3980   dw[2] =
3981      __gen_uint(values->NumEntries0, 0, 7) |
3982      __gen_uint(values->NumEntries1, 8, 15) |
3983      __gen_uint(values->NumEntries2, 16, 23) |
3984      __gen_uint(values->NumEntries3, 24, 31);
3985}
3986
3987#define GEN7_3DSTATE_STENCIL_BUFFER_length      3
3988#define GEN7_3DSTATE_STENCIL_BUFFER_length_bias      2
3989#define GEN7_3DSTATE_STENCIL_BUFFER_header      \
3990   .DWordLength                         =      1,  \
3991   ._3DCommandSubOpcode                 =      6,  \
3992   ._3DCommandOpcode                    =      0,  \
3993   .CommandSubType                      =      3,  \
3994   .CommandType                         =      3
3995
3996struct GEN7_3DSTATE_STENCIL_BUFFER {
3997   uint32_t                             DWordLength;
3998   uint32_t                             _3DCommandSubOpcode;
3999   uint32_t                             _3DCommandOpcode;
4000   uint32_t                             CommandSubType;
4001   uint32_t                             CommandType;
4002   uint32_t                             SurfacePitch;
4003   uint32_t                             MOCS;
4004   __gen_address_type                   SurfaceBaseAddress;
4005};
4006
4007static inline void
4008GEN7_3DSTATE_STENCIL_BUFFER_pack(__attribute__((unused)) __gen_user_data *data,
4009                                 __attribute__((unused)) void * restrict dst,
4010                                 __attribute__((unused)) const struct GEN7_3DSTATE_STENCIL_BUFFER * restrict values)
4011{
4012   uint32_t * restrict dw = (uint32_t * restrict) dst;
4013
4014   dw[0] =
4015      __gen_uint(values->DWordLength, 0, 7) |
4016      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
4017      __gen_uint(values->_3DCommandOpcode, 24, 26) |
4018      __gen_uint(values->CommandSubType, 27, 28) |
4019      __gen_uint(values->CommandType, 29, 31);
4020
4021   dw[1] =
4022      __gen_uint(values->SurfacePitch, 0, 16) |
4023      __gen_uint(values->MOCS, 25, 28);
4024
4025   dw[2] = __gen_combine_address(data, &dw[2], values->SurfaceBaseAddress, 0);
4026}
4027
4028#define GEN7_3DSTATE_STREAMOUT_length          3
4029#define GEN7_3DSTATE_STREAMOUT_length_bias      2
4030#define GEN7_3DSTATE_STREAMOUT_header           \
4031   .DWordLength                         =      1,  \
4032   ._3DCommandSubOpcode                 =     30,  \
4033   ._3DCommandOpcode                    =      0,  \
4034   .CommandSubType                      =      3,  \
4035   .CommandType                         =      3
4036
4037struct GEN7_3DSTATE_STREAMOUT {
4038   uint32_t                             DWordLength;
4039   uint32_t                             _3DCommandSubOpcode;
4040   uint32_t                             _3DCommandOpcode;
4041   uint32_t                             CommandSubType;
4042   uint32_t                             CommandType;
4043   bool                                 SOBufferEnable0;
4044   bool                                 SOBufferEnable1;
4045   bool                                 SOBufferEnable2;
4046   bool                                 SOBufferEnable3;
4047   bool                                 SOStatisticsEnable;
4048   uint32_t                             ReorderMode;
4049#define LEADING                                  0
4050#define TRAILING                                 1
4051   uint32_t                             RenderStreamSelect;
4052   bool                                 RenderingDisable;
4053   bool                                 SOFunctionEnable;
4054   uint32_t                             Stream0VertexReadLength;
4055   uint32_t                             Stream0VertexReadOffset;
4056   uint32_t                             Stream1VertexReadLength;
4057   uint32_t                             Stream1VertexReadOffset;
4058   uint32_t                             Stream2VertexReadLength;
4059   uint32_t                             Stream2VertexReadOffset;
4060   uint32_t                             Stream3VertexReadLength;
4061   uint32_t                             Stream3VertexReadOffset;
4062};
4063
4064static inline void
4065GEN7_3DSTATE_STREAMOUT_pack(__attribute__((unused)) __gen_user_data *data,
4066                            __attribute__((unused)) void * restrict dst,
4067                            __attribute__((unused)) const struct GEN7_3DSTATE_STREAMOUT * restrict values)
4068{
4069   uint32_t * restrict dw = (uint32_t * restrict) dst;
4070
4071   dw[0] =
4072      __gen_uint(values->DWordLength, 0, 7) |
4073      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
4074      __gen_uint(values->_3DCommandOpcode, 24, 26) |
4075      __gen_uint(values->CommandSubType, 27, 28) |
4076      __gen_uint(values->CommandType, 29, 31);
4077
4078   dw[1] =
4079      __gen_uint(values->SOBufferEnable0, 8, 8) |
4080      __gen_uint(values->SOBufferEnable1, 9, 9) |
4081      __gen_uint(values->SOBufferEnable2, 10, 10) |
4082      __gen_uint(values->SOBufferEnable3, 11, 11) |
4083      __gen_uint(values->SOStatisticsEnable, 25, 25) |
4084      __gen_uint(values->ReorderMode, 26, 26) |
4085      __gen_uint(values->RenderStreamSelect, 27, 28) |
4086      __gen_uint(values->RenderingDisable, 30, 30) |
4087      __gen_uint(values->SOFunctionEnable, 31, 31);
4088
4089   dw[2] =
4090      __gen_uint(values->Stream0VertexReadLength, 0, 4) |
4091      __gen_uint(values->Stream0VertexReadOffset, 5, 5) |
4092      __gen_uint(values->Stream1VertexReadLength, 8, 12) |
4093      __gen_uint(values->Stream1VertexReadOffset, 13, 13) |
4094      __gen_uint(values->Stream2VertexReadLength, 16, 20) |
4095      __gen_uint(values->Stream2VertexReadOffset, 21, 21) |
4096      __gen_uint(values->Stream3VertexReadLength, 24, 28) |
4097      __gen_uint(values->Stream3VertexReadOffset, 29, 29);
4098}
4099
4100#define GEN7_3DSTATE_TE_length                 4
4101#define GEN7_3DSTATE_TE_length_bias            2
4102#define GEN7_3DSTATE_TE_header                  \
4103   .DWordLength                         =      2,  \
4104   ._3DCommandSubOpcode                 =     28,  \
4105   ._3DCommandOpcode                    =      0,  \
4106   .CommandSubType                      =      3,  \
4107   .CommandType                         =      3
4108
4109struct GEN7_3DSTATE_TE {
4110   uint32_t                             DWordLength;
4111   uint32_t                             _3DCommandSubOpcode;
4112   uint32_t                             _3DCommandOpcode;
4113   uint32_t                             CommandSubType;
4114   uint32_t                             CommandType;
4115   bool                                 TEEnable;
4116   uint32_t                             TEMode;
4117#define HW_TESS                                  0
4118#define SW_TESS                                  1
4119   uint32_t                             TEDomain;
4120#define QUAD                                     0
4121#define TRI                                      1
4122#define ISOLINE                                  2
4123   uint32_t                             OutputTopology;
4124#define OUTPUT_POINT                             0
4125#define OUTPUT_LINE                              1
4126#define OUTPUT_TRI_CW                            2
4127#define OUTPUT_TRI_CCW                           3
4128   uint32_t                             Partitioning;
4129#define INTEGER                                  0
4130#define ODD_FRACTIONAL                           1
4131#define EVEN_FRACTIONAL                          2
4132   float                                MaximumTessellationFactorOdd;
4133   float                                MaximumTessellationFactorNotOdd;
4134};
4135
4136static inline void
4137GEN7_3DSTATE_TE_pack(__attribute__((unused)) __gen_user_data *data,
4138                     __attribute__((unused)) void * restrict dst,
4139                     __attribute__((unused)) const struct GEN7_3DSTATE_TE * restrict values)
4140{
4141   uint32_t * restrict dw = (uint32_t * restrict) dst;
4142
4143   dw[0] =
4144      __gen_uint(values->DWordLength, 0, 7) |
4145      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
4146      __gen_uint(values->_3DCommandOpcode, 24, 26) |
4147      __gen_uint(values->CommandSubType, 27, 28) |
4148      __gen_uint(values->CommandType, 29, 31);
4149
4150   dw[1] =
4151      __gen_uint(values->TEEnable, 0, 0) |
4152      __gen_uint(values->TEMode, 1, 2) |
4153      __gen_uint(values->TEDomain, 4, 5) |
4154      __gen_uint(values->OutputTopology, 8, 9) |
4155      __gen_uint(values->Partitioning, 12, 13);
4156
4157   dw[2] =
4158      __gen_float(values->MaximumTessellationFactorOdd);
4159
4160   dw[3] =
4161      __gen_float(values->MaximumTessellationFactorNotOdd);
4162}
4163
4164#define GEN7_3DSTATE_URB_DS_length             2
4165#define GEN7_3DSTATE_URB_DS_length_bias        2
4166#define GEN7_3DSTATE_URB_DS_header              \
4167   .DWordLength                         =      0,  \
4168   ._3DCommandSubOpcode                 =     50,  \
4169   ._3DCommandOpcode                    =      0,  \
4170   .CommandSubType                      =      3,  \
4171   .CommandType                         =      3
4172
4173struct GEN7_3DSTATE_URB_DS {
4174   uint32_t                             DWordLength;
4175   uint32_t                             _3DCommandSubOpcode;
4176   uint32_t                             _3DCommandOpcode;
4177   uint32_t                             CommandSubType;
4178   uint32_t                             CommandType;
4179   uint32_t                             DSNumberofURBEntries;
4180   uint32_t                             DSURBEntryAllocationSize;
4181   uint32_t                             DSURBStartingAddress;
4182};
4183
4184static inline void
4185GEN7_3DSTATE_URB_DS_pack(__attribute__((unused)) __gen_user_data *data,
4186                         __attribute__((unused)) void * restrict dst,
4187                         __attribute__((unused)) const struct GEN7_3DSTATE_URB_DS * restrict values)
4188{
4189   uint32_t * restrict dw = (uint32_t * restrict) dst;
4190
4191   dw[0] =
4192      __gen_uint(values->DWordLength, 0, 7) |
4193      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
4194      __gen_uint(values->_3DCommandOpcode, 24, 26) |
4195      __gen_uint(values->CommandSubType, 27, 28) |
4196      __gen_uint(values->CommandType, 29, 31);
4197
4198   dw[1] =
4199      __gen_uint(values->DSNumberofURBEntries, 0, 15) |
4200      __gen_uint(values->DSURBEntryAllocationSize, 16, 24) |
4201      __gen_uint(values->DSURBStartingAddress, 25, 29);
4202}
4203
4204#define GEN7_3DSTATE_URB_GS_length             2
4205#define GEN7_3DSTATE_URB_GS_length_bias        2
4206#define GEN7_3DSTATE_URB_GS_header              \
4207   .DWordLength                         =      0,  \
4208   ._3DCommandSubOpcode                 =     51,  \
4209   ._3DCommandOpcode                    =      0,  \
4210   .CommandSubType                      =      3,  \
4211   .CommandType                         =      3
4212
4213struct GEN7_3DSTATE_URB_GS {
4214   uint32_t                             DWordLength;
4215   uint32_t                             _3DCommandSubOpcode;
4216   uint32_t                             _3DCommandOpcode;
4217   uint32_t                             CommandSubType;
4218   uint32_t                             CommandType;
4219   uint32_t                             GSNumberofURBEntries;
4220   uint32_t                             GSURBEntryAllocationSize;
4221   uint32_t                             GSURBStartingAddress;
4222};
4223
4224static inline void
4225GEN7_3DSTATE_URB_GS_pack(__attribute__((unused)) __gen_user_data *data,
4226                         __attribute__((unused)) void * restrict dst,
4227                         __attribute__((unused)) const struct GEN7_3DSTATE_URB_GS * restrict values)
4228{
4229   uint32_t * restrict dw = (uint32_t * restrict) dst;
4230
4231   dw[0] =
4232      __gen_uint(values->DWordLength, 0, 7) |
4233      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
4234      __gen_uint(values->_3DCommandOpcode, 24, 26) |
4235      __gen_uint(values->CommandSubType, 27, 28) |
4236      __gen_uint(values->CommandType, 29, 31);
4237
4238   dw[1] =
4239      __gen_uint(values->GSNumberofURBEntries, 0, 15) |
4240      __gen_uint(values->GSURBEntryAllocationSize, 16, 24) |
4241      __gen_uint(values->GSURBStartingAddress, 25, 29);
4242}
4243
4244#define GEN7_3DSTATE_URB_HS_length             2
4245#define GEN7_3DSTATE_URB_HS_length_bias        2
4246#define GEN7_3DSTATE_URB_HS_header              \
4247   .DWordLength                         =      0,  \
4248   ._3DCommandSubOpcode                 =     49,  \
4249   ._3DCommandOpcode                    =      0,  \
4250   .CommandSubType                      =      3,  \
4251   .CommandType                         =      3
4252
4253struct GEN7_3DSTATE_URB_HS {
4254   uint32_t                             DWordLength;
4255   uint32_t                             _3DCommandSubOpcode;
4256   uint32_t                             _3DCommandOpcode;
4257   uint32_t                             CommandSubType;
4258   uint32_t                             CommandType;
4259   uint32_t                             HSNumberofURBEntries;
4260   uint32_t                             HSURBEntryAllocationSize;
4261   uint32_t                             HSURBStartingAddress;
4262};
4263
4264static inline void
4265GEN7_3DSTATE_URB_HS_pack(__attribute__((unused)) __gen_user_data *data,
4266                         __attribute__((unused)) void * restrict dst,
4267                         __attribute__((unused)) const struct GEN7_3DSTATE_URB_HS * restrict values)
4268{
4269   uint32_t * restrict dw = (uint32_t * restrict) dst;
4270
4271   dw[0] =
4272      __gen_uint(values->DWordLength, 0, 7) |
4273      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
4274      __gen_uint(values->_3DCommandOpcode, 24, 26) |
4275      __gen_uint(values->CommandSubType, 27, 28) |
4276      __gen_uint(values->CommandType, 29, 31);
4277
4278   dw[1] =
4279      __gen_uint(values->HSNumberofURBEntries, 0, 15) |
4280      __gen_uint(values->HSURBEntryAllocationSize, 16, 24) |
4281      __gen_uint(values->HSURBStartingAddress, 25, 29);
4282}
4283
4284#define GEN7_3DSTATE_URB_VS_length             2
4285#define GEN7_3DSTATE_URB_VS_length_bias        2
4286#define GEN7_3DSTATE_URB_VS_header              \
4287   .DWordLength                         =      0,  \
4288   ._3DCommandSubOpcode                 =     48,  \
4289   ._3DCommandOpcode                    =      0,  \
4290   .CommandSubType                      =      3,  \
4291   .CommandType                         =      3
4292
4293struct GEN7_3DSTATE_URB_VS {
4294   uint32_t                             DWordLength;
4295   uint32_t                             _3DCommandSubOpcode;
4296   uint32_t                             _3DCommandOpcode;
4297   uint32_t                             CommandSubType;
4298   uint32_t                             CommandType;
4299   uint32_t                             VSNumberofURBEntries;
4300   uint32_t                             VSURBEntryAllocationSize;
4301   uint32_t                             VSURBStartingAddress;
4302};
4303
4304static inline void
4305GEN7_3DSTATE_URB_VS_pack(__attribute__((unused)) __gen_user_data *data,
4306                         __attribute__((unused)) void * restrict dst,
4307                         __attribute__((unused)) const struct GEN7_3DSTATE_URB_VS * restrict values)
4308{
4309   uint32_t * restrict dw = (uint32_t * restrict) dst;
4310
4311   dw[0] =
4312      __gen_uint(values->DWordLength, 0, 7) |
4313      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
4314      __gen_uint(values->_3DCommandOpcode, 24, 26) |
4315      __gen_uint(values->CommandSubType, 27, 28) |
4316      __gen_uint(values->CommandType, 29, 31);
4317
4318   dw[1] =
4319      __gen_uint(values->VSNumberofURBEntries, 0, 15) |
4320      __gen_uint(values->VSURBEntryAllocationSize, 16, 24) |
4321      __gen_uint(values->VSURBStartingAddress, 25, 29);
4322}
4323
4324#define GEN7_3DSTATE_VERTEX_BUFFERS_length_bias      2
4325#define GEN7_3DSTATE_VERTEX_BUFFERS_header      \
4326   .DWordLength                         =      3,  \
4327   ._3DCommandSubOpcode                 =      8,  \
4328   ._3DCommandOpcode                    =      0,  \
4329   .CommandSubType                      =      3,  \
4330   .CommandType                         =      3
4331
4332struct GEN7_3DSTATE_VERTEX_BUFFERS {
4333   uint32_t                             DWordLength;
4334   uint32_t                             _3DCommandSubOpcode;
4335   uint32_t                             _3DCommandOpcode;
4336   uint32_t                             CommandSubType;
4337   uint32_t                             CommandType;
4338   /* variable length fields follow */
4339};
4340
4341static inline void
4342GEN7_3DSTATE_VERTEX_BUFFERS_pack(__attribute__((unused)) __gen_user_data *data,
4343                                 __attribute__((unused)) void * restrict dst,
4344                                 __attribute__((unused)) const struct GEN7_3DSTATE_VERTEX_BUFFERS * restrict values)
4345{
4346   uint32_t * restrict dw = (uint32_t * restrict) dst;
4347
4348   dw[0] =
4349      __gen_uint(values->DWordLength, 0, 7) |
4350      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
4351      __gen_uint(values->_3DCommandOpcode, 24, 26) |
4352      __gen_uint(values->CommandSubType, 27, 28) |
4353      __gen_uint(values->CommandType, 29, 31);
4354}
4355
4356#define GEN7_3DSTATE_VERTEX_ELEMENTS_length_bias      2
4357#define GEN7_3DSTATE_VERTEX_ELEMENTS_header     \
4358   .DWordLength                         =      1,  \
4359   ._3DCommandSubOpcode                 =      9,  \
4360   ._3DCommandOpcode                    =      0,  \
4361   .CommandSubType                      =      3,  \
4362   .CommandType                         =      3
4363
4364struct GEN7_3DSTATE_VERTEX_ELEMENTS {
4365   uint32_t                             DWordLength;
4366   uint32_t                             _3DCommandSubOpcode;
4367   uint32_t                             _3DCommandOpcode;
4368   uint32_t                             CommandSubType;
4369   uint32_t                             CommandType;
4370   /* variable length fields follow */
4371};
4372
4373static inline void
4374GEN7_3DSTATE_VERTEX_ELEMENTS_pack(__attribute__((unused)) __gen_user_data *data,
4375                                  __attribute__((unused)) void * restrict dst,
4376                                  __attribute__((unused)) const struct GEN7_3DSTATE_VERTEX_ELEMENTS * restrict values)
4377{
4378   uint32_t * restrict dw = (uint32_t * restrict) dst;
4379
4380   dw[0] =
4381      __gen_uint(values->DWordLength, 0, 7) |
4382      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
4383      __gen_uint(values->_3DCommandOpcode, 24, 26) |
4384      __gen_uint(values->CommandSubType, 27, 28) |
4385      __gen_uint(values->CommandType, 29, 31);
4386}
4387
4388#define GEN7_3DSTATE_VF_STATISTICS_length      1
4389#define GEN7_3DSTATE_VF_STATISTICS_length_bias      1
4390#define GEN7_3DSTATE_VF_STATISTICS_header       \
4391   ._3DCommandSubOpcode                 =     11,  \
4392   ._3DCommandOpcode                    =      0,  \
4393   .CommandSubType                      =      1,  \
4394   .CommandType                         =      3
4395
4396struct GEN7_3DSTATE_VF_STATISTICS {
4397   bool                                 StatisticsEnable;
4398   uint32_t                             _3DCommandSubOpcode;
4399   uint32_t                             _3DCommandOpcode;
4400   uint32_t                             CommandSubType;
4401   uint32_t                             CommandType;
4402};
4403
4404static inline void
4405GEN7_3DSTATE_VF_STATISTICS_pack(__attribute__((unused)) __gen_user_data *data,
4406                                __attribute__((unused)) void * restrict dst,
4407                                __attribute__((unused)) const struct GEN7_3DSTATE_VF_STATISTICS * restrict values)
4408{
4409   uint32_t * restrict dw = (uint32_t * restrict) dst;
4410
4411   dw[0] =
4412      __gen_uint(values->StatisticsEnable, 0, 0) |
4413      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
4414      __gen_uint(values->_3DCommandOpcode, 24, 26) |
4415      __gen_uint(values->CommandSubType, 27, 28) |
4416      __gen_uint(values->CommandType, 29, 31);
4417}
4418
4419#define GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_CC_length      2
4420#define GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_CC_length_bias      2
4421#define GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_CC_header\
4422   .DWordLength                         =      0,  \
4423   ._3DCommandSubOpcode                 =     35,  \
4424   ._3DCommandOpcode                    =      0,  \
4425   .CommandSubType                      =      3,  \
4426   .CommandType                         =      3
4427
4428struct GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_CC {
4429   uint32_t                             DWordLength;
4430   uint32_t                             _3DCommandSubOpcode;
4431   uint32_t                             _3DCommandOpcode;
4432   uint32_t                             CommandSubType;
4433   uint32_t                             CommandType;
4434   uint64_t                             CCViewportPointer;
4435};
4436
4437static inline void
4438GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_CC_pack(__attribute__((unused)) __gen_user_data *data,
4439                                             __attribute__((unused)) void * restrict dst,
4440                                             __attribute__((unused)) const struct GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_CC * restrict values)
4441{
4442   uint32_t * restrict dw = (uint32_t * restrict) dst;
4443
4444   dw[0] =
4445      __gen_uint(values->DWordLength, 0, 7) |
4446      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
4447      __gen_uint(values->_3DCommandOpcode, 24, 26) |
4448      __gen_uint(values->CommandSubType, 27, 28) |
4449      __gen_uint(values->CommandType, 29, 31);
4450
4451   dw[1] =
4452      __gen_offset(values->CCViewportPointer, 5, 31);
4453}
4454
4455#define GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP_length      2
4456#define GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP_length_bias      2
4457#define GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP_header\
4458   .DWordLength                         =      0,  \
4459   ._3DCommandSubOpcode                 =     33,  \
4460   ._3DCommandOpcode                    =      0,  \
4461   .CommandSubType                      =      3,  \
4462   .CommandType                         =      3
4463
4464struct GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP {
4465   uint32_t                             DWordLength;
4466   uint32_t                             _3DCommandSubOpcode;
4467   uint32_t                             _3DCommandOpcode;
4468   uint32_t                             CommandSubType;
4469   uint32_t                             CommandType;
4470   uint64_t                             SFClipViewportPointer;
4471};
4472
4473static inline void
4474GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP_pack(__attribute__((unused)) __gen_user_data *data,
4475                                                  __attribute__((unused)) void * restrict dst,
4476                                                  __attribute__((unused)) const struct GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP * restrict values)
4477{
4478   uint32_t * restrict dw = (uint32_t * restrict) dst;
4479
4480   dw[0] =
4481      __gen_uint(values->DWordLength, 0, 7) |
4482      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
4483      __gen_uint(values->_3DCommandOpcode, 24, 26) |
4484      __gen_uint(values->CommandSubType, 27, 28) |
4485      __gen_uint(values->CommandType, 29, 31);
4486
4487   dw[1] =
4488      __gen_offset(values->SFClipViewportPointer, 6, 31);
4489}
4490
4491#define GEN7_3DSTATE_VS_length                 6
4492#define GEN7_3DSTATE_VS_length_bias            2
4493#define GEN7_3DSTATE_VS_header                  \
4494   .DWordLength                         =      4,  \
4495   ._3DCommandSubOpcode                 =     16,  \
4496   ._3DCommandOpcode                    =      0,  \
4497   .CommandSubType                      =      3,  \
4498   .CommandType                         =      3
4499
4500struct GEN7_3DSTATE_VS {
4501   uint32_t                             DWordLength;
4502   uint32_t                             _3DCommandSubOpcode;
4503   uint32_t                             _3DCommandOpcode;
4504   uint32_t                             CommandSubType;
4505   uint32_t                             CommandType;
4506   uint64_t                             KernelStartPointer;
4507   bool                                 SoftwareExceptionEnable;
4508   bool                                 IllegalOpcodeExceptionEnable;
4509   uint32_t                             FloatingPointMode;
4510#define IEEE754                                  0
4511#define Alternate                                1
4512   uint32_t                             BindingTableEntryCount;
4513   uint32_t                             SamplerCount;
4514#define NoSamplers                               0
4515#define _14Samplers                              1
4516#define _58Samplers                              2
4517#define _912Samplers                             3
4518#define _1316Samplers                            4
4519   bool                                 VectorMaskEnable;
4520   bool                                 SingleVertexDispatch;
4521   uint32_t                             PerThreadScratchSpace;
4522   __gen_address_type                   ScratchSpaceBasePointer;
4523   uint32_t                             VertexURBEntryReadOffset;
4524   uint32_t                             VertexURBEntryReadLength;
4525   uint32_t                             DispatchGRFStartRegisterForURBData;
4526   bool                                 Enable;
4527   bool                                 VertexCacheDisable;
4528   bool                                 StatisticsEnable;
4529   uint32_t                             MaximumNumberofThreads;
4530};
4531
4532static inline void
4533GEN7_3DSTATE_VS_pack(__attribute__((unused)) __gen_user_data *data,
4534                     __attribute__((unused)) void * restrict dst,
4535                     __attribute__((unused)) const struct GEN7_3DSTATE_VS * restrict values)
4536{
4537   uint32_t * restrict dw = (uint32_t * restrict) dst;
4538
4539   dw[0] =
4540      __gen_uint(values->DWordLength, 0, 7) |
4541      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
4542      __gen_uint(values->_3DCommandOpcode, 24, 26) |
4543      __gen_uint(values->CommandSubType, 27, 28) |
4544      __gen_uint(values->CommandType, 29, 31);
4545
4546   dw[1] =
4547      __gen_offset(values->KernelStartPointer, 6, 31);
4548
4549   dw[2] =
4550      __gen_uint(values->SoftwareExceptionEnable, 7, 7) |
4551      __gen_uint(values->IllegalOpcodeExceptionEnable, 13, 13) |
4552      __gen_uint(values->FloatingPointMode, 16, 16) |
4553      __gen_uint(values->BindingTableEntryCount, 18, 25) |
4554      __gen_uint(values->SamplerCount, 27, 29) |
4555      __gen_uint(values->VectorMaskEnable, 30, 30) |
4556      __gen_uint(values->SingleVertexDispatch, 31, 31);
4557
4558   const uint32_t v3 =
4559      __gen_uint(values->PerThreadScratchSpace, 0, 3);
4560   dw[3] = __gen_combine_address(data, &dw[3], values->ScratchSpaceBasePointer, v3);
4561
4562   dw[4] =
4563      __gen_uint(values->VertexURBEntryReadOffset, 4, 9) |
4564      __gen_uint(values->VertexURBEntryReadLength, 11, 16) |
4565      __gen_uint(values->DispatchGRFStartRegisterForURBData, 20, 24);
4566
4567   dw[5] =
4568      __gen_uint(values->Enable, 0, 0) |
4569      __gen_uint(values->VertexCacheDisable, 1, 1) |
4570      __gen_uint(values->StatisticsEnable, 10, 10) |
4571      __gen_uint(values->MaximumNumberofThreads, 25, 31);
4572}
4573
4574#define GEN7_3DSTATE_WM_length                 3
4575#define GEN7_3DSTATE_WM_length_bias            2
4576#define GEN7_3DSTATE_WM_header                  \
4577   .DWordLength                         =      1,  \
4578   ._3DCommandSubOpcode                 =     20,  \
4579   ._3DCommandOpcode                    =      0,  \
4580   .CommandSubType                      =      3,  \
4581   .CommandType                         =      3
4582
4583struct GEN7_3DSTATE_WM {
4584   uint32_t                             DWordLength;
4585   uint32_t                             _3DCommandSubOpcode;
4586   uint32_t                             _3DCommandOpcode;
4587   uint32_t                             CommandSubType;
4588   uint32_t                             CommandType;
4589   uint32_t                             MultisampleRasterizationMode;
4590#define MSRASTMODE_OFF_PIXEL                     0
4591#define MSRASTMODE_OFF_PATTERN                   1
4592#define MSRASTMODE_ON_PIXEL                      2
4593#define MSRASTMODE_ON_PATTERN                    3
4594   uint32_t                             PointRasterizationRule;
4595#define RASTRULE_UPPER_LEFT                      0
4596#define RASTRULE_UPPER_RIGHT                     1
4597   bool                                 LineStippleEnable;
4598   bool                                 PolygonStippleEnable;
4599   uint32_t                             LineAntialiasingRegionWidth;
4600#define _05pixels                                0
4601#define _10pixels                                1
4602#define _20pixels                                2
4603#define _40pixels                                3
4604   uint32_t                             LineEndCapAntialiasingRegionWidth;
4605   bool                                 PixelShaderUsesInputCoverageMask;
4606   uint32_t                             BarycentricInterpolationMode;
4607#define BIM_PERSPECTIVE_PIXEL                    1
4608#define BIM_PERSPECTIVE_CENTROID                 2
4609#define BIM_PERSPECTIVE_SAMPLE                   4
4610#define BIM_LINEAR_PIXEL                         8
4611#define BIM_LINEAR_CENTROID                      16
4612#define BIM_LINEAR_SAMPLE                        32
4613   uint32_t                             PositionZWInterpolationMode;
4614#define INTERP_PIXEL                             0
4615#define INTERP_CENTROID                          2
4616#define INTERP_SAMPLE                            3
4617   bool                                 PixelShaderUsesSourceW;
4618   bool                                 PixelShaderUsesSourceDepth;
4619   uint32_t                             EarlyDepthStencilControl;
4620#define EDSC_NORMAL                              0
4621#define EDSC_PSEXEC                              1
4622#define EDSC_PREPS                               2
4623   uint32_t                             PixelShaderComputedDepthMode;
4624#define PSCDEPTH_OFF                             0
4625#define PSCDEPTH_ON                              1
4626#define PSCDEPTH_ON_GE                           2
4627#define PSCDEPTH_ON_LE                           3
4628   bool                                 PixelShaderKillsPixel;
4629   bool                                 LegacyDiamondLineRasterization;
4630   bool                                 HierarchicalDepthBufferResolveEnable;
4631   bool                                 DepthBufferResolveEnable;
4632   bool                                 ThreadDispatchEnable;
4633   bool                                 DepthBufferClear;
4634   bool                                 StatisticsEnable;
4635   uint32_t                             MultisampleDispatchMode;
4636#define MSDISPMODE_PERSAMPLE                     0
4637#define MSDISPMODE_PERPIXEL                      1
4638};
4639
4640static inline void
4641GEN7_3DSTATE_WM_pack(__attribute__((unused)) __gen_user_data *data,
4642                     __attribute__((unused)) void * restrict dst,
4643                     __attribute__((unused)) const struct GEN7_3DSTATE_WM * restrict values)
4644{
4645   uint32_t * restrict dw = (uint32_t * restrict) dst;
4646
4647   dw[0] =
4648      __gen_uint(values->DWordLength, 0, 7) |
4649      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
4650      __gen_uint(values->_3DCommandOpcode, 24, 26) |
4651      __gen_uint(values->CommandSubType, 27, 28) |
4652      __gen_uint(values->CommandType, 29, 31);
4653
4654   dw[1] =
4655      __gen_uint(values->MultisampleRasterizationMode, 0, 1) |
4656      __gen_uint(values->PointRasterizationRule, 2, 2) |
4657      __gen_uint(values->LineStippleEnable, 3, 3) |
4658      __gen_uint(values->PolygonStippleEnable, 4, 4) |
4659      __gen_uint(values->LineAntialiasingRegionWidth, 6, 7) |
4660      __gen_uint(values->LineEndCapAntialiasingRegionWidth, 8, 9) |
4661      __gen_uint(values->PixelShaderUsesInputCoverageMask, 10, 10) |
4662      __gen_uint(values->BarycentricInterpolationMode, 11, 16) |
4663      __gen_uint(values->PositionZWInterpolationMode, 17, 18) |
4664      __gen_uint(values->PixelShaderUsesSourceW, 19, 19) |
4665      __gen_uint(values->PixelShaderUsesSourceDepth, 20, 20) |
4666      __gen_uint(values->EarlyDepthStencilControl, 21, 22) |
4667      __gen_uint(values->PixelShaderComputedDepthMode, 23, 24) |
4668      __gen_uint(values->PixelShaderKillsPixel, 25, 25) |
4669      __gen_uint(values->LegacyDiamondLineRasterization, 26, 26) |
4670      __gen_uint(values->HierarchicalDepthBufferResolveEnable, 27, 27) |
4671      __gen_uint(values->DepthBufferResolveEnable, 28, 28) |
4672      __gen_uint(values->ThreadDispatchEnable, 29, 29) |
4673      __gen_uint(values->DepthBufferClear, 30, 30) |
4674      __gen_uint(values->StatisticsEnable, 31, 31);
4675
4676   dw[2] =
4677      __gen_uint(values->MultisampleDispatchMode, 31, 31);
4678}
4679
4680#define GEN7_GPGPU_OBJECT_length               8
4681#define GEN7_GPGPU_OBJECT_length_bias          2
4682#define GEN7_GPGPU_OBJECT_header                \
4683   .DWordLength                         =      6,  \
4684   .SubOpcode                           =      4,  \
4685   .MediaCommandOpcode                  =      1,  \
4686   .Pipeline                            =      2,  \
4687   .CommandType                         =      3
4688
4689struct GEN7_GPGPU_OBJECT {
4690   uint32_t                             DWordLength;
4691   bool                                 PredicateEnable;
4692   uint32_t                             SubOpcode;
4693   uint32_t                             MediaCommandOpcode;
4694   uint32_t                             Pipeline;
4695   uint32_t                             CommandType;
4696   uint32_t                             InterfaceDescriptorOffset;
4697   uint32_t                             SharedLocalMemoryFixedOffset;
4698   uint32_t                             IndirectDataLength;
4699   uint32_t                             HalfSliceDestinationSelect;
4700#define HalfSlice1                               2
4701#define HalfSlice0                               1
4702#define EitherHalfSlice                          0
4703   uint32_t                             EndofThreadGroup;
4704   uint32_t                             SharedLocalMemoryOffset;
4705   uint64_t                             IndirectDataStartAddress;
4706   uint32_t                             ThreadGroupIDX;
4707   uint32_t                             ThreadGroupIDY;
4708   uint32_t                             ThreadGroupIDZ;
4709   uint32_t                             ExecutionMask;
4710};
4711
4712static inline void
4713GEN7_GPGPU_OBJECT_pack(__attribute__((unused)) __gen_user_data *data,
4714                       __attribute__((unused)) void * restrict dst,
4715                       __attribute__((unused)) const struct GEN7_GPGPU_OBJECT * restrict values)
4716{
4717   uint32_t * restrict dw = (uint32_t * restrict) dst;
4718
4719   dw[0] =
4720      __gen_uint(values->DWordLength, 0, 7) |
4721      __gen_uint(values->PredicateEnable, 8, 8) |
4722      __gen_uint(values->SubOpcode, 16, 23) |
4723      __gen_uint(values->MediaCommandOpcode, 24, 26) |
4724      __gen_uint(values->Pipeline, 27, 28) |
4725      __gen_uint(values->CommandType, 29, 31);
4726
4727   dw[1] =
4728      __gen_uint(values->InterfaceDescriptorOffset, 0, 4) |
4729      __gen_uint(values->SharedLocalMemoryFixedOffset, 7, 7);
4730
4731   dw[2] =
4732      __gen_uint(values->IndirectDataLength, 0, 16) |
4733      __gen_uint(values->HalfSliceDestinationSelect, 17, 18) |
4734      __gen_uint(values->EndofThreadGroup, 24, 24) |
4735      __gen_uint(values->SharedLocalMemoryOffset, 28, 31);
4736
4737   dw[3] =
4738      __gen_offset(values->IndirectDataStartAddress, 0, 31);
4739
4740   dw[4] =
4741      __gen_uint(values->ThreadGroupIDX, 0, 31);
4742
4743   dw[5] =
4744      __gen_uint(values->ThreadGroupIDY, 0, 31);
4745
4746   dw[6] =
4747      __gen_uint(values->ThreadGroupIDZ, 0, 31);
4748
4749   dw[7] =
4750      __gen_uint(values->ExecutionMask, 0, 31);
4751}
4752
4753#define GEN7_GPGPU_WALKER_length              11
4754#define GEN7_GPGPU_WALKER_length_bias          2
4755#define GEN7_GPGPU_WALKER_header                \
4756   .DWordLength                         =      9,  \
4757   .SubOpcodeA                          =      5,  \
4758   .MediaCommandOpcode                  =      1,  \
4759   .Pipeline                            =      2,  \
4760   .CommandType                         =      3
4761
4762struct GEN7_GPGPU_WALKER {
4763   uint32_t                             DWordLength;
4764   bool                                 PredicateEnable;
4765   bool                                 IndirectParameterEnable;
4766   uint32_t                             SubOpcodeA;
4767   uint32_t                             MediaCommandOpcode;
4768   uint32_t                             Pipeline;
4769   uint32_t                             CommandType;
4770   uint32_t                             InterfaceDescriptorOffset;
4771   uint32_t                             ThreadWidthCounterMaximum;
4772   uint32_t                             ThreadHeightCounterMaximum;
4773   uint32_t                             ThreadDepthCounterMaximum;
4774   uint32_t                             SIMDSize;
4775#define SIMD8                                    0
4776#define SIMD16                                   1
4777#define SIMD32                                   2
4778   uint32_t                             ThreadGroupIDStartingX;
4779   uint32_t                             ThreadGroupIDXDimension;
4780   uint32_t                             ThreadGroupIDStartingY;
4781   uint32_t                             ThreadGroupIDYDimension;
4782   uint32_t                             ThreadGroupIDStartingZ;
4783   uint32_t                             ThreadGroupIDZDimension;
4784   uint32_t                             RightExecutionMask;
4785   uint32_t                             BottomExecutionMask;
4786};
4787
4788static inline void
4789GEN7_GPGPU_WALKER_pack(__attribute__((unused)) __gen_user_data *data,
4790                       __attribute__((unused)) void * restrict dst,
4791                       __attribute__((unused)) const struct GEN7_GPGPU_WALKER * restrict values)
4792{
4793   uint32_t * restrict dw = (uint32_t * restrict) dst;
4794
4795   dw[0] =
4796      __gen_uint(values->DWordLength, 0, 7) |
4797      __gen_uint(values->PredicateEnable, 8, 8) |
4798      __gen_uint(values->IndirectParameterEnable, 10, 10) |
4799      __gen_uint(values->SubOpcodeA, 16, 23) |
4800      __gen_uint(values->MediaCommandOpcode, 24, 26) |
4801      __gen_uint(values->Pipeline, 27, 28) |
4802      __gen_uint(values->CommandType, 29, 31);
4803
4804   dw[1] =
4805      __gen_uint(values->InterfaceDescriptorOffset, 0, 4);
4806
4807   dw[2] =
4808      __gen_uint(values->ThreadWidthCounterMaximum, 0, 5) |
4809      __gen_uint(values->ThreadHeightCounterMaximum, 8, 13) |
4810      __gen_uint(values->ThreadDepthCounterMaximum, 16, 21) |
4811      __gen_uint(values->SIMDSize, 30, 31);
4812
4813   dw[3] =
4814      __gen_uint(values->ThreadGroupIDStartingX, 0, 31);
4815
4816   dw[4] =
4817      __gen_uint(values->ThreadGroupIDXDimension, 0, 31);
4818
4819   dw[5] =
4820      __gen_uint(values->ThreadGroupIDStartingY, 0, 31);
4821
4822   dw[6] =
4823      __gen_uint(values->ThreadGroupIDYDimension, 0, 31);
4824
4825   dw[7] =
4826      __gen_uint(values->ThreadGroupIDStartingZ, 0, 31);
4827
4828   dw[8] =
4829      __gen_uint(values->ThreadGroupIDZDimension, 0, 31);
4830
4831   dw[9] =
4832      __gen_uint(values->RightExecutionMask, 0, 31);
4833
4834   dw[10] =
4835      __gen_uint(values->BottomExecutionMask, 0, 31);
4836}
4837
4838#define GEN7_MEDIA_CURBE_LOAD_length           4
4839#define GEN7_MEDIA_CURBE_LOAD_length_bias      2
4840#define GEN7_MEDIA_CURBE_LOAD_header            \
4841   .DWordLength                         =      2,  \
4842   .SubOpcode                           =      1,  \
4843   .MediaCommandOpcode                  =      0,  \
4844   .Pipeline                            =      2,  \
4845   .CommandType                         =      3
4846
4847struct GEN7_MEDIA_CURBE_LOAD {
4848   uint32_t                             DWordLength;
4849   uint32_t                             SubOpcode;
4850   uint32_t                             MediaCommandOpcode;
4851   uint32_t                             Pipeline;
4852   uint32_t                             CommandType;
4853   uint32_t                             CURBETotalDataLength;
4854   uint32_t                             CURBEDataStartAddress;
4855};
4856
4857static inline void
4858GEN7_MEDIA_CURBE_LOAD_pack(__attribute__((unused)) __gen_user_data *data,
4859                           __attribute__((unused)) void * restrict dst,
4860                           __attribute__((unused)) const struct GEN7_MEDIA_CURBE_LOAD * restrict values)
4861{
4862   uint32_t * restrict dw = (uint32_t * restrict) dst;
4863
4864   dw[0] =
4865      __gen_uint(values->DWordLength, 0, 15) |
4866      __gen_uint(values->SubOpcode, 16, 23) |
4867      __gen_uint(values->MediaCommandOpcode, 24, 26) |
4868      __gen_uint(values->Pipeline, 27, 28) |
4869      __gen_uint(values->CommandType, 29, 31);
4870
4871   dw[1] = 0;
4872
4873   dw[2] =
4874      __gen_uint(values->CURBETotalDataLength, 0, 16);
4875
4876   dw[3] =
4877      __gen_uint(values->CURBEDataStartAddress, 0, 31);
4878}
4879
4880#define GEN7_MEDIA_INTERFACE_DESCRIPTOR_LOAD_length      4
4881#define GEN7_MEDIA_INTERFACE_DESCRIPTOR_LOAD_length_bias      2
4882#define GEN7_MEDIA_INTERFACE_DESCRIPTOR_LOAD_header\
4883   .DWordLength                         =      2,  \
4884   .SubOpcode                           =      2,  \
4885   .MediaCommandOpcode                  =      0,  \
4886   .Pipeline                            =      2,  \
4887   .CommandType                         =      3
4888
4889struct GEN7_MEDIA_INTERFACE_DESCRIPTOR_LOAD {
4890   uint32_t                             DWordLength;
4891   uint32_t                             SubOpcode;
4892   uint32_t                             MediaCommandOpcode;
4893   uint32_t                             Pipeline;
4894   uint32_t                             CommandType;
4895   uint32_t                             InterfaceDescriptorTotalLength;
4896   uint64_t                             InterfaceDescriptorDataStartAddress;
4897};
4898
4899static inline void
4900GEN7_MEDIA_INTERFACE_DESCRIPTOR_LOAD_pack(__attribute__((unused)) __gen_user_data *data,
4901                                          __attribute__((unused)) void * restrict dst,
4902                                          __attribute__((unused)) const struct GEN7_MEDIA_INTERFACE_DESCRIPTOR_LOAD * restrict values)
4903{
4904   uint32_t * restrict dw = (uint32_t * restrict) dst;
4905
4906   dw[0] =
4907      __gen_uint(values->DWordLength, 0, 15) |
4908      __gen_uint(values->SubOpcode, 16, 23) |
4909      __gen_uint(values->MediaCommandOpcode, 24, 26) |
4910      __gen_uint(values->Pipeline, 27, 28) |
4911      __gen_uint(values->CommandType, 29, 31);
4912
4913   dw[1] = 0;
4914
4915   dw[2] =
4916      __gen_uint(values->InterfaceDescriptorTotalLength, 0, 16);
4917
4918   dw[3] =
4919      __gen_offset(values->InterfaceDescriptorDataStartAddress, 0, 31);
4920}
4921
4922#define GEN7_MEDIA_OBJECT_length_bias          2
4923#define GEN7_MEDIA_OBJECT_header                \
4924   .DWordLength                         =      4,  \
4925   .MediaCommandSubOpcode               =      0,  \
4926   .MediaCommandOpcode                  =      1,  \
4927   .MediaCommandPipeline                =      2,  \
4928   .CommandType                         =      3
4929
4930struct GEN7_MEDIA_OBJECT {
4931   uint32_t                             DWordLength;
4932   uint32_t                             MediaCommandSubOpcode;
4933   uint32_t                             MediaCommandOpcode;
4934   uint32_t                             MediaCommandPipeline;
4935   uint32_t                             CommandType;
4936   uint32_t                             InterfaceDescriptorOffset;
4937   uint32_t                             IndirectDataLength;
4938   uint32_t                             HalfSliceDestinationSelect;
4939#define HalfSlice1                               2
4940#define HalfSlice0                               1
4941#define Eitherhalfslice                          0
4942   uint32_t                             UseScoreboard;
4943#define Notusingscoreboard                       0
4944#define Usingscoreboard                          1
4945   uint32_t                             ThreadSynchronization;
4946#define Nothreadsynchronization                  0
4947#define Threaddispatchissynchronizedbythespawnrootthreadmessage 1
4948   bool                                 ChildrenPresent;
4949   __gen_address_type                   IndirectDataStartAddress;
4950   uint32_t                             ScoreboardX;
4951   uint32_t                             ScoredboardY;
4952   uint32_t                             ScoreboardMask;
4953   uint32_t                             ScoreboardColor;
4954   /* variable length fields follow */
4955};
4956
4957static inline void
4958GEN7_MEDIA_OBJECT_pack(__attribute__((unused)) __gen_user_data *data,
4959                       __attribute__((unused)) void * restrict dst,
4960                       __attribute__((unused)) const struct GEN7_MEDIA_OBJECT * restrict values)
4961{
4962   uint32_t * restrict dw = (uint32_t * restrict) dst;
4963
4964   dw[0] =
4965      __gen_uint(values->DWordLength, 0, 15) |
4966      __gen_uint(values->MediaCommandSubOpcode, 16, 23) |
4967      __gen_uint(values->MediaCommandOpcode, 24, 26) |
4968      __gen_uint(values->MediaCommandPipeline, 27, 28) |
4969      __gen_uint(values->CommandType, 29, 31);
4970
4971   dw[1] =
4972      __gen_uint(values->InterfaceDescriptorOffset, 0, 4);
4973
4974   dw[2] =
4975      __gen_uint(values->IndirectDataLength, 0, 16) |
4976      __gen_uint(values->HalfSliceDestinationSelect, 17, 18) |
4977      __gen_uint(values->UseScoreboard, 21, 21) |
4978      __gen_uint(values->ThreadSynchronization, 24, 24) |
4979      __gen_uint(values->ChildrenPresent, 31, 31);
4980
4981   dw[3] = __gen_combine_address(data, &dw[3], values->IndirectDataStartAddress, 0);
4982
4983   dw[4] =
4984      __gen_uint(values->ScoreboardX, 0, 8) |
4985      __gen_uint(values->ScoredboardY, 16, 24);
4986
4987   dw[5] =
4988      __gen_uint(values->ScoreboardMask, 0, 7) |
4989      __gen_uint(values->ScoreboardColor, 16, 19);
4990}
4991
4992#define GEN7_MEDIA_OBJECT_PRT_length          16
4993#define GEN7_MEDIA_OBJECT_PRT_length_bias      2
4994#define GEN7_MEDIA_OBJECT_PRT_header            \
4995   .DWordLength                         =     14,  \
4996   .SubOpcode                           =      2,  \
4997   .MediaCommandOpcode                  =      1,  \
4998   .Pipeline                            =      2,  \
4999   .CommandType                         =      3
5000
5001struct GEN7_MEDIA_OBJECT_PRT {
5002   uint32_t                             DWordLength;
5003   uint32_t                             SubOpcode;
5004   uint32_t                             MediaCommandOpcode;
5005   uint32_t                             Pipeline;
5006   uint32_t                             CommandType;
5007   uint32_t                             InterfaceDescriptorOffset;
5008   uint32_t                             PRT_FenceType;
5009#define Rootthreadqueue                          0
5010#define VFEstateflush                            1
5011   bool                                 PRT_FenceNeeded;
5012   bool                                 ChildrenPresent;
5013   uint32_t                             InlineData[12];
5014};
5015
5016static inline void
5017GEN7_MEDIA_OBJECT_PRT_pack(__attribute__((unused)) __gen_user_data *data,
5018                           __attribute__((unused)) void * restrict dst,
5019                           __attribute__((unused)) const struct GEN7_MEDIA_OBJECT_PRT * restrict values)
5020{
5021   uint32_t * restrict dw = (uint32_t * restrict) dst;
5022
5023   dw[0] =
5024      __gen_uint(values->DWordLength, 0, 15) |
5025      __gen_uint(values->SubOpcode, 16, 23) |
5026      __gen_uint(values->MediaCommandOpcode, 24, 26) |
5027      __gen_uint(values->Pipeline, 27, 28) |
5028      __gen_uint(values->CommandType, 29, 31);
5029
5030   dw[1] =
5031      __gen_uint(values->InterfaceDescriptorOffset, 0, 4);
5032
5033   dw[2] =
5034      __gen_uint(values->PRT_FenceType, 22, 22) |
5035      __gen_uint(values->PRT_FenceNeeded, 23, 23) |
5036      __gen_uint(values->ChildrenPresent, 31, 31);
5037
5038   dw[3] = 0;
5039
5040   dw[4] =
5041      __gen_uint(values->InlineData[0], 0, 31);
5042
5043   dw[5] =
5044      __gen_uint(values->InlineData[1], 0, 31);
5045
5046   dw[6] =
5047      __gen_uint(values->InlineData[2], 0, 31);
5048
5049   dw[7] =
5050      __gen_uint(values->InlineData[3], 0, 31);
5051
5052   dw[8] =
5053      __gen_uint(values->InlineData[4], 0, 31);
5054
5055   dw[9] =
5056      __gen_uint(values->InlineData[5], 0, 31);
5057
5058   dw[10] =
5059      __gen_uint(values->InlineData[6], 0, 31);
5060
5061   dw[11] =
5062      __gen_uint(values->InlineData[7], 0, 31);
5063
5064   dw[12] =
5065      __gen_uint(values->InlineData[8], 0, 31);
5066
5067   dw[13] =
5068      __gen_uint(values->InlineData[9], 0, 31);
5069
5070   dw[14] =
5071      __gen_uint(values->InlineData[10], 0, 31);
5072
5073   dw[15] =
5074      __gen_uint(values->InlineData[11], 0, 31);
5075}
5076
5077#define GEN7_MEDIA_OBJECT_WALKER_length_bias      2
5078#define GEN7_MEDIA_OBJECT_WALKER_header         \
5079   .DWordLength                         =     15,  \
5080   .SubOpcode                           =      3,  \
5081   .MediaCommandOpcode                  =      1,  \
5082   .Pipeline                            =      2,  \
5083   .CommandType                         =      3
5084
5085struct GEN7_MEDIA_OBJECT_WALKER {
5086   uint32_t                             DWordLength;
5087   uint32_t                             SubOpcode;
5088   uint32_t                             MediaCommandOpcode;
5089   uint32_t                             Pipeline;
5090   uint32_t                             CommandType;
5091   uint32_t                             InterfaceDescriptorOffset;
5092   uint32_t                             IndirectDataLength;
5093   uint32_t                             UseScoreboard;
5094#define Notusingscoreboard                       0
5095#define Usingscoreboard                          1
5096   uint32_t                             ThreadSynchronization;
5097#define Nothreadsynchronization                  0
5098#define Threaddispatchissynchronizedbythespawnrootthreadmessage 1
5099   uint32_t                             ChildrenPresent;
5100   uint64_t                             IndirectDataStartAddress;
5101   uint32_t                             ScoreboardMask;
5102   int32_t                              MidLoopUnitX;
5103   int32_t                              LocalMidLoopUnitY;
5104   uint32_t                             MiddleLoopExtraSteps;
5105   uint32_t                             ColorCountMinusOne;
5106   uint32_t                             Repel;
5107   uint32_t                             DualMode;
5108   uint32_t                             LocalLoopExecCount;
5109   uint32_t                             GlobalLoopExecCount;
5110   uint32_t                             BlockResolutionX;
5111   uint32_t                             BlockResolutionY;
5112   uint32_t                             LocalStartX;
5113   uint32_t                             LocalStartY;
5114   uint32_t                             LocalEndX;
5115   uint32_t                             LocalEndY;
5116   int32_t                              LocalOuterLoopStrideX;
5117   int32_t                              LocalOuterLoopStrideY;
5118   int32_t                              LocalInnerLoopUnitX;
5119   int32_t                              LocalInnerLoopUnitY;
5120   uint32_t                             GlobalResolutionX;
5121   uint32_t                             GlobalResolutionY;
5122   int32_t                              GlobalStartX;
5123   int32_t                              GlobalStartY;
5124   int32_t                              GlobalOuterLoopStrideX;
5125   int32_t                              GlobalOuterLoopStrideY;
5126   int32_t                              GlobalInnerLoopUnitX;
5127   int32_t                              GlobalInnerLoopUnitY;
5128   /* variable length fields follow */
5129};
5130
5131static inline void
5132GEN7_MEDIA_OBJECT_WALKER_pack(__attribute__((unused)) __gen_user_data *data,
5133                              __attribute__((unused)) void * restrict dst,
5134                              __attribute__((unused)) const struct GEN7_MEDIA_OBJECT_WALKER * restrict values)
5135{
5136   uint32_t * restrict dw = (uint32_t * restrict) dst;
5137
5138   dw[0] =
5139      __gen_uint(values->DWordLength, 0, 15) |
5140      __gen_uint(values->SubOpcode, 16, 23) |
5141      __gen_uint(values->MediaCommandOpcode, 24, 26) |
5142      __gen_uint(values->Pipeline, 27, 28) |
5143      __gen_uint(values->CommandType, 29, 31);
5144
5145   dw[1] =
5146      __gen_uint(values->InterfaceDescriptorOffset, 0, 4);
5147
5148   dw[2] =
5149      __gen_uint(values->IndirectDataLength, 0, 16) |
5150      __gen_uint(values->UseScoreboard, 21, 21) |
5151      __gen_uint(values->ThreadSynchronization, 24, 24) |
5152      __gen_uint(values->ChildrenPresent, 31, 31);
5153
5154   dw[3] =
5155      __gen_offset(values->IndirectDataStartAddress, 0, 31);
5156
5157   dw[4] = 0;
5158
5159   dw[5] =
5160      __gen_uint(values->ScoreboardMask, 0, 7);
5161
5162   dw[6] =
5163      __gen_sint(values->MidLoopUnitX, 8, 9) |
5164      __gen_sint(values->LocalMidLoopUnitY, 12, 13) |
5165      __gen_uint(values->MiddleLoopExtraSteps, 16, 20) |
5166      __gen_uint(values->ColorCountMinusOne, 24, 27) |
5167      __gen_uint(values->Repel, 30, 30) |
5168      __gen_uint(values->DualMode, 31, 31);
5169
5170   dw[7] =
5171      __gen_uint(values->LocalLoopExecCount, 0, 9) |
5172      __gen_uint(values->GlobalLoopExecCount, 16, 25);
5173
5174   dw[8] =
5175      __gen_uint(values->BlockResolutionX, 0, 8) |
5176      __gen_uint(values->BlockResolutionY, 16, 24);
5177
5178   dw[9] =
5179      __gen_uint(values->LocalStartX, 0, 8) |
5180      __gen_uint(values->LocalStartY, 16, 24);
5181
5182   dw[10] =
5183      __gen_uint(values->LocalEndX, 0, 8) |
5184      __gen_uint(values->LocalEndY, 16, 24);
5185
5186   dw[11] =
5187      __gen_sint(values->LocalOuterLoopStrideX, 0, 9) |
5188      __gen_sint(values->LocalOuterLoopStrideY, 16, 25);
5189
5190   dw[12] =
5191      __gen_sint(values->LocalInnerLoopUnitX, 0, 9) |
5192      __gen_sint(values->LocalInnerLoopUnitY, 16, 25);
5193
5194   dw[13] =
5195      __gen_uint(values->GlobalResolutionX, 0, 8) |
5196      __gen_uint(values->GlobalResolutionY, 16, 24);
5197
5198   dw[14] =
5199      __gen_sint(values->GlobalStartX, 0, 9) |
5200      __gen_sint(values->GlobalStartY, 16, 25);
5201
5202   dw[15] =
5203      __gen_sint(values->GlobalOuterLoopStrideX, 0, 9) |
5204      __gen_sint(values->GlobalOuterLoopStrideY, 16, 25);
5205
5206   dw[16] =
5207      __gen_sint(values->GlobalInnerLoopUnitX, 0, 9) |
5208      __gen_sint(values->GlobalInnerLoopUnitY, 16, 25);
5209}
5210
5211#define GEN7_MEDIA_STATE_FLUSH_length          2
5212#define GEN7_MEDIA_STATE_FLUSH_length_bias      2
5213#define GEN7_MEDIA_STATE_FLUSH_header           \
5214   .DWordLength                         =      0,  \
5215   .SubOpcode                           =      4,  \
5216   .MediaCommandOpcode                  =      0,  \
5217   .Pipeline                            =      2,  \
5218   .CommandType                         =      3
5219
5220struct GEN7_MEDIA_STATE_FLUSH {
5221   uint32_t                             DWordLength;
5222   uint32_t                             SubOpcode;
5223   uint32_t                             MediaCommandOpcode;
5224   uint32_t                             Pipeline;
5225   uint32_t                             CommandType;
5226   uint32_t                             InterfaceDescriptorOffset;
5227   uint32_t                             WatermarkRequired;
5228};
5229
5230static inline void
5231GEN7_MEDIA_STATE_FLUSH_pack(__attribute__((unused)) __gen_user_data *data,
5232                            __attribute__((unused)) void * restrict dst,
5233                            __attribute__((unused)) const struct GEN7_MEDIA_STATE_FLUSH * restrict values)
5234{
5235   uint32_t * restrict dw = (uint32_t * restrict) dst;
5236
5237   dw[0] =
5238      __gen_uint(values->DWordLength, 0, 15) |
5239      __gen_uint(values->SubOpcode, 16, 23) |
5240      __gen_uint(values->MediaCommandOpcode, 24, 26) |
5241      __gen_uint(values->Pipeline, 27, 28) |
5242      __gen_uint(values->CommandType, 29, 31);
5243
5244   dw[1] =
5245      __gen_uint(values->InterfaceDescriptorOffset, 0, 5) |
5246      __gen_uint(values->WatermarkRequired, 6, 6);
5247}
5248
5249#define GEN7_MEDIA_VFE_STATE_length            8
5250#define GEN7_MEDIA_VFE_STATE_length_bias       2
5251#define GEN7_MEDIA_VFE_STATE_header             \
5252   .DWordLength                         =      6,  \
5253   .SubOpcode                           =      0,  \
5254   .MediaCommandOpcode                  =      0,  \
5255   .Pipeline                            =      2,  \
5256   .CommandType                         =      3
5257
5258struct GEN7_MEDIA_VFE_STATE {
5259   uint32_t                             DWordLength;
5260   uint32_t                             SubOpcode;
5261   uint32_t                             MediaCommandOpcode;
5262   uint32_t                             Pipeline;
5263   uint32_t                             CommandType;
5264   uint32_t                             PerThreadScratchSpace;
5265   __gen_address_type                   ScratchSpaceBasePointer;
5266   uint32_t                             GPGPUMode;
5267   uint32_t                             GatewayMMIOAccessControl;
5268#define NoMMIOreadwriteallowed                   0
5269#define MMIOreadwritetoanyaddress                2
5270   uint32_t                             BypassGatewayControl;
5271#define MaintainingOpenGatewayForwardMsgCloseGatewayprotocollegacymode 0
5272#define BypassingOpenGatewayCloseGatewayprotocol 1
5273   uint32_t                             ResetGatewayTimer;
5274#define Maintainingtheexistingtimestampstate     0
5275#define Resettingrelativetimerandlatchingtheglobaltimestamp 1
5276   uint32_t                             NumberofURBEntries;
5277   uint32_t                             MaximumNumberofThreads;
5278   uint32_t                             CURBEAllocationSize;
5279   uint32_t                             URBEntryAllocationSize;
5280   uint32_t                             ScoreboardMask;
5281   uint32_t                             ScoreboardType;
5282#define StallingScoreboard                       0
5283#define NonStallingScoreboard                    1
5284   uint32_t                             ScoreboardEnable;
5285#define Scoreboarddisabled                       0
5286#define Scoreboardenabled                        1
5287   int32_t                              Scoreboard0DeltaX;
5288   int32_t                              Scoreboard0DeltaY;
5289   int32_t                              Scoreboard1DeltaX;
5290   int32_t                              Scoreboard1DeltaY;
5291   int32_t                              Scoreboard2DeltaX;
5292   int32_t                              Scoreboard2DeltaY;
5293   int32_t                              Scoreboard3DeltaX;
5294   int32_t                              Scoreboard3DeltaY;
5295   int32_t                              Scoreboard4DeltaX;
5296   int32_t                              Scoreboard4DeltaY;
5297   int32_t                              Scoreboard5DeltaX;
5298   int32_t                              Scoreboard5DeltaY;
5299   int32_t                              Scoreboard6DeltaX;
5300   int32_t                              Scoreboard6DeltaY;
5301   int32_t                              Scoreboard7DeltaX;
5302   int32_t                              Scoreboard7DeltaY;
5303};
5304
5305static inline void
5306GEN7_MEDIA_VFE_STATE_pack(__attribute__((unused)) __gen_user_data *data,
5307                          __attribute__((unused)) void * restrict dst,
5308                          __attribute__((unused)) const struct GEN7_MEDIA_VFE_STATE * restrict values)
5309{
5310   uint32_t * restrict dw = (uint32_t * restrict) dst;
5311
5312   dw[0] =
5313      __gen_uint(values->DWordLength, 0, 15) |
5314      __gen_uint(values->SubOpcode, 16, 23) |
5315      __gen_uint(values->MediaCommandOpcode, 24, 26) |
5316      __gen_uint(values->Pipeline, 27, 28) |
5317      __gen_uint(values->CommandType, 29, 31);
5318
5319   const uint32_t v1 =
5320      __gen_uint(values->PerThreadScratchSpace, 0, 3);
5321   dw[1] = __gen_combine_address(data, &dw[1], values->ScratchSpaceBasePointer, v1);
5322
5323   dw[2] =
5324      __gen_uint(values->GPGPUMode, 2, 2) |
5325      __gen_uint(values->GatewayMMIOAccessControl, 3, 4) |
5326      __gen_uint(values->BypassGatewayControl, 6, 6) |
5327      __gen_uint(values->ResetGatewayTimer, 7, 7) |
5328      __gen_uint(values->NumberofURBEntries, 8, 15) |
5329      __gen_uint(values->MaximumNumberofThreads, 16, 31);
5330
5331   dw[3] = 0;
5332
5333   dw[4] =
5334      __gen_uint(values->CURBEAllocationSize, 0, 15) |
5335      __gen_uint(values->URBEntryAllocationSize, 16, 31);
5336
5337   dw[5] =
5338      __gen_uint(values->ScoreboardMask, 0, 7) |
5339      __gen_uint(values->ScoreboardType, 30, 30) |
5340      __gen_uint(values->ScoreboardEnable, 31, 31);
5341
5342   dw[6] =
5343      __gen_sint(values->Scoreboard0DeltaX, 0, 3) |
5344      __gen_sint(values->Scoreboard0DeltaY, 4, 7) |
5345      __gen_sint(values->Scoreboard1DeltaX, 8, 11) |
5346      __gen_sint(values->Scoreboard1DeltaY, 12, 15) |
5347      __gen_sint(values->Scoreboard2DeltaX, 16, 19) |
5348      __gen_sint(values->Scoreboard2DeltaY, 20, 23) |
5349      __gen_sint(values->Scoreboard3DeltaX, 24, 27) |
5350      __gen_sint(values->Scoreboard3DeltaY, 28, 31);
5351
5352   dw[7] =
5353      __gen_sint(values->Scoreboard4DeltaX, 0, 3) |
5354      __gen_sint(values->Scoreboard4DeltaY, 4, 7) |
5355      __gen_sint(values->Scoreboard5DeltaX, 8, 11) |
5356      __gen_sint(values->Scoreboard5DeltaY, 12, 15) |
5357      __gen_sint(values->Scoreboard6DeltaX, 16, 19) |
5358      __gen_sint(values->Scoreboard6DeltaY, 20, 23) |
5359      __gen_sint(values->Scoreboard7DeltaX, 24, 27) |
5360      __gen_sint(values->Scoreboard7DeltaY, 28, 31);
5361}
5362
5363#define GEN7_MI_ARB_CHECK_length               1
5364#define GEN7_MI_ARB_CHECK_length_bias          1
5365#define GEN7_MI_ARB_CHECK_header                \
5366   .MICommandOpcode                     =      5,  \
5367   .CommandType                         =      0
5368
5369struct GEN7_MI_ARB_CHECK {
5370   uint32_t                             MICommandOpcode;
5371   uint32_t                             CommandType;
5372};
5373
5374static inline void
5375GEN7_MI_ARB_CHECK_pack(__attribute__((unused)) __gen_user_data *data,
5376                       __attribute__((unused)) void * restrict dst,
5377                       __attribute__((unused)) const struct GEN7_MI_ARB_CHECK * restrict values)
5378{
5379   uint32_t * restrict dw = (uint32_t * restrict) dst;
5380
5381   dw[0] =
5382      __gen_uint(values->MICommandOpcode, 23, 28) |
5383      __gen_uint(values->CommandType, 29, 31);
5384}
5385
5386#define GEN7_MI_ARB_ON_OFF_length              1
5387#define GEN7_MI_ARB_ON_OFF_length_bias         1
5388#define GEN7_MI_ARB_ON_OFF_header               \
5389   .MICommandOpcode                     =      8,  \
5390   .CommandType                         =      0
5391
5392struct GEN7_MI_ARB_ON_OFF {
5393   bool                                 ArbitrationEnable;
5394   uint32_t                             MICommandOpcode;
5395   uint32_t                             CommandType;
5396};
5397
5398static inline void
5399GEN7_MI_ARB_ON_OFF_pack(__attribute__((unused)) __gen_user_data *data,
5400                        __attribute__((unused)) void * restrict dst,
5401                        __attribute__((unused)) const struct GEN7_MI_ARB_ON_OFF * restrict values)
5402{
5403   uint32_t * restrict dw = (uint32_t * restrict) dst;
5404
5405   dw[0] =
5406      __gen_uint(values->ArbitrationEnable, 0, 0) |
5407      __gen_uint(values->MICommandOpcode, 23, 28) |
5408      __gen_uint(values->CommandType, 29, 31);
5409}
5410
5411#define GEN7_MI_BATCH_BUFFER_END_length        1
5412#define GEN7_MI_BATCH_BUFFER_END_length_bias      1
5413#define GEN7_MI_BATCH_BUFFER_END_header         \
5414   .MICommandOpcode                     =     10,  \
5415   .CommandType                         =      0
5416
5417struct GEN7_MI_BATCH_BUFFER_END {
5418   uint32_t                             MICommandOpcode;
5419   uint32_t                             CommandType;
5420};
5421
5422static inline void
5423GEN7_MI_BATCH_BUFFER_END_pack(__attribute__((unused)) __gen_user_data *data,
5424                              __attribute__((unused)) void * restrict dst,
5425                              __attribute__((unused)) const struct GEN7_MI_BATCH_BUFFER_END * restrict values)
5426{
5427   uint32_t * restrict dw = (uint32_t * restrict) dst;
5428
5429   dw[0] =
5430      __gen_uint(values->MICommandOpcode, 23, 28) |
5431      __gen_uint(values->CommandType, 29, 31);
5432}
5433
5434#define GEN7_MI_BATCH_BUFFER_START_length      2
5435#define GEN7_MI_BATCH_BUFFER_START_length_bias      2
5436#define GEN7_MI_BATCH_BUFFER_START_header       \
5437   .DWordLength                         =      0,  \
5438   .MICommandOpcode                     =     49,  \
5439   .CommandType                         =      0
5440
5441struct GEN7_MI_BATCH_BUFFER_START {
5442   uint32_t                             DWordLength;
5443   uint32_t                             AddressSpaceIndicator;
5444#define ASI_GGTT                                 0
5445#define ASI_PPGTT                                1
5446   bool                                 ClearCommandBufferEnable;
5447   uint32_t                             MICommandOpcode;
5448   uint32_t                             CommandType;
5449   __gen_address_type                   BatchBufferStartAddress;
5450};
5451
5452static inline void
5453GEN7_MI_BATCH_BUFFER_START_pack(__attribute__((unused)) __gen_user_data *data,
5454                                __attribute__((unused)) void * restrict dst,
5455                                __attribute__((unused)) const struct GEN7_MI_BATCH_BUFFER_START * restrict values)
5456{
5457   uint32_t * restrict dw = (uint32_t * restrict) dst;
5458
5459   dw[0] =
5460      __gen_uint(values->DWordLength, 0, 7) |
5461      __gen_uint(values->AddressSpaceIndicator, 8, 8) |
5462      __gen_uint(values->ClearCommandBufferEnable, 11, 11) |
5463      __gen_uint(values->MICommandOpcode, 23, 28) |
5464      __gen_uint(values->CommandType, 29, 31);
5465
5466   dw[1] = __gen_combine_address(data, &dw[1], values->BatchBufferStartAddress, 0);
5467}
5468
5469#define GEN7_MI_CLFLUSH_length_bias            2
5470#define GEN7_MI_CLFLUSH_header                  \
5471   .DWordLength                         =      1,  \
5472   .MICommandOpcode                     =     39,  \
5473   .CommandType                         =      0
5474
5475struct GEN7_MI_CLFLUSH {
5476   uint32_t                             DWordLength;
5477   bool                                 UseGlobalGTT;
5478   uint32_t                             MICommandOpcode;
5479   uint32_t                             CommandType;
5480   uint32_t                             StartingCachelineOffset;
5481   __gen_address_type                   PageBaseAddress;
5482   __gen_address_type                   PageBaseAddressHigh;
5483   /* variable length fields follow */
5484};
5485
5486static inline void
5487GEN7_MI_CLFLUSH_pack(__attribute__((unused)) __gen_user_data *data,
5488                     __attribute__((unused)) void * restrict dst,
5489                     __attribute__((unused)) const struct GEN7_MI_CLFLUSH * restrict values)
5490{
5491   uint32_t * restrict dw = (uint32_t * restrict) dst;
5492
5493   dw[0] =
5494      __gen_uint(values->DWordLength, 0, 9) |
5495      __gen_uint(values->UseGlobalGTT, 22, 22) |
5496      __gen_uint(values->MICommandOpcode, 23, 28) |
5497      __gen_uint(values->CommandType, 29, 31);
5498
5499   const uint32_t v1 =
5500      __gen_uint(values->StartingCachelineOffset, 6, 11);
5501   dw[1] = __gen_combine_address(data, &dw[1], values->PageBaseAddress, v1);
5502
5503   dw[2] = __gen_combine_address(data, &dw[2], values->PageBaseAddressHigh, 0);
5504}
5505
5506#define GEN7_MI_CONDITIONAL_BATCH_BUFFER_END_length      2
5507#define GEN7_MI_CONDITIONAL_BATCH_BUFFER_END_length_bias      2
5508#define GEN7_MI_CONDITIONAL_BATCH_BUFFER_END_header\
5509   .DWordLength                         =      0,  \
5510   .CompareSemaphore                    =      0,  \
5511   .MICommandOpcode                     =     54,  \
5512   .CommandType                         =      0
5513
5514struct GEN7_MI_CONDITIONAL_BATCH_BUFFER_END {
5515   uint32_t                             DWordLength;
5516   uint32_t                             CompareSemaphore;
5517   bool                                 UseGlobalGTT;
5518   uint32_t                             MICommandOpcode;
5519   uint32_t                             CommandType;
5520   uint32_t                             CompareDataDword;
5521   __gen_address_type                   CompareAddress;
5522};
5523
5524static inline void
5525GEN7_MI_CONDITIONAL_BATCH_BUFFER_END_pack(__attribute__((unused)) __gen_user_data *data,
5526                                          __attribute__((unused)) void * restrict dst,
5527                                          __attribute__((unused)) const struct GEN7_MI_CONDITIONAL_BATCH_BUFFER_END * restrict values)
5528{
5529   uint32_t * restrict dw = (uint32_t * restrict) dst;
5530
5531   dw[0] =
5532      __gen_uint(values->DWordLength, 0, 7) |
5533      __gen_uint(values->CompareSemaphore, 21, 21) |
5534      __gen_uint(values->UseGlobalGTT, 22, 22) |
5535      __gen_uint(values->MICommandOpcode, 23, 28) |
5536      __gen_uint(values->CommandType, 29, 31);
5537
5538   dw[1] =
5539      __gen_uint(values->CompareDataDword, 0, 31);
5540}
5541
5542#define GEN7_MI_FLUSH_length                   1
5543#define GEN7_MI_FLUSH_length_bias              1
5544#define GEN7_MI_FLUSH_header                    \
5545   .MICommandOpcode                     =      4,  \
5546   .CommandType                         =      0
5547
5548struct GEN7_MI_FLUSH {
5549   uint32_t                             StateInstructionCacheInvalidate;
5550#define DontInvalidate                           0
5551#define Invalidate                               1
5552   uint32_t                             RenderCacheFlushInhibit;
5553#define Flush                                    0
5554#define DontFlush                                1
5555   uint32_t                             GlobalSnapshotCountReset;
5556#define DontReset                                0
5557#define Reset                                    1
5558   bool                                 GenericMediaStateClear;
5559   bool                                 IndirectStatePointersDisable;
5560   uint32_t                             MICommandOpcode;
5561   uint32_t                             CommandType;
5562};
5563
5564static inline void
5565GEN7_MI_FLUSH_pack(__attribute__((unused)) __gen_user_data *data,
5566                   __attribute__((unused)) void * restrict dst,
5567                   __attribute__((unused)) const struct GEN7_MI_FLUSH * restrict values)
5568{
5569   uint32_t * restrict dw = (uint32_t * restrict) dst;
5570
5571   dw[0] =
5572      __gen_uint(values->StateInstructionCacheInvalidate, 1, 1) |
5573      __gen_uint(values->RenderCacheFlushInhibit, 2, 2) |
5574      __gen_uint(values->GlobalSnapshotCountReset, 3, 3) |
5575      __gen_uint(values->GenericMediaStateClear, 4, 4) |
5576      __gen_uint(values->IndirectStatePointersDisable, 5, 5) |
5577      __gen_uint(values->MICommandOpcode, 23, 28) |
5578      __gen_uint(values->CommandType, 29, 31);
5579}
5580
5581#define GEN7_MI_LOAD_REGISTER_IMM_length       3
5582#define GEN7_MI_LOAD_REGISTER_IMM_length_bias      2
5583#define GEN7_MI_LOAD_REGISTER_IMM_header        \
5584   .DWordLength                         =      1,  \
5585   .MICommandOpcode                     =     34,  \
5586   .CommandType                         =      0
5587
5588struct GEN7_MI_LOAD_REGISTER_IMM {
5589   uint32_t                             DWordLength;
5590   uint32_t                             ByteWriteDisables;
5591   uint32_t                             MICommandOpcode;
5592   uint32_t                             CommandType;
5593   uint64_t                             RegisterOffset;
5594   uint32_t                             DataDWord;
5595   /* variable length fields follow */
5596};
5597
5598static inline void
5599GEN7_MI_LOAD_REGISTER_IMM_pack(__attribute__((unused)) __gen_user_data *data,
5600                               __attribute__((unused)) void * restrict dst,
5601                               __attribute__((unused)) const struct GEN7_MI_LOAD_REGISTER_IMM * restrict values)
5602{
5603   uint32_t * restrict dw = (uint32_t * restrict) dst;
5604
5605   dw[0] =
5606      __gen_uint(values->DWordLength, 0, 7) |
5607      __gen_uint(values->ByteWriteDisables, 8, 11) |
5608      __gen_uint(values->MICommandOpcode, 23, 28) |
5609      __gen_uint(values->CommandType, 29, 31);
5610
5611   dw[1] =
5612      __gen_offset(values->RegisterOffset, 2, 22);
5613
5614   dw[2] =
5615      __gen_uint(values->DataDWord, 0, 31);
5616}
5617
5618#define GEN7_MI_LOAD_REGISTER_MEM_length       3
5619#define GEN7_MI_LOAD_REGISTER_MEM_length_bias      2
5620#define GEN7_MI_LOAD_REGISTER_MEM_header        \
5621   .DWordLength                         =      1,  \
5622   .MICommandOpcode                     =     41,  \
5623   .CommandType                         =      0
5624
5625struct GEN7_MI_LOAD_REGISTER_MEM {
5626   uint32_t                             DWordLength;
5627   bool                                 AsyncModeEnable;
5628   bool                                 UseGlobalGTT;
5629   uint32_t                             MICommandOpcode;
5630   uint32_t                             CommandType;
5631   uint64_t                             RegisterAddress;
5632   __gen_address_type                   MemoryAddress;
5633};
5634
5635static inline void
5636GEN7_MI_LOAD_REGISTER_MEM_pack(__attribute__((unused)) __gen_user_data *data,
5637                               __attribute__((unused)) void * restrict dst,
5638                               __attribute__((unused)) const struct GEN7_MI_LOAD_REGISTER_MEM * restrict values)
5639{
5640   uint32_t * restrict dw = (uint32_t * restrict) dst;
5641
5642   dw[0] =
5643      __gen_uint(values->DWordLength, 0, 7) |
5644      __gen_uint(values->AsyncModeEnable, 21, 21) |
5645      __gen_uint(values->UseGlobalGTT, 22, 22) |
5646      __gen_uint(values->MICommandOpcode, 23, 28) |
5647      __gen_uint(values->CommandType, 29, 31);
5648
5649   dw[1] =
5650      __gen_offset(values->RegisterAddress, 2, 22);
5651
5652   dw[2] = __gen_combine_address(data, &dw[2], values->MemoryAddress, 0);
5653}
5654
5655#define GEN7_MI_NOOP_length                    1
5656#define GEN7_MI_NOOP_length_bias               1
5657#define GEN7_MI_NOOP_header                     \
5658   .MICommandOpcode                     =      0,  \
5659   .CommandType                         =      0
5660
5661struct GEN7_MI_NOOP {
5662   uint32_t                             IdentificationNumber;
5663   bool                                 IdentificationNumberRegisterWriteEnable;
5664   uint32_t                             MICommandOpcode;
5665   uint32_t                             CommandType;
5666};
5667
5668static inline void
5669GEN7_MI_NOOP_pack(__attribute__((unused)) __gen_user_data *data,
5670                  __attribute__((unused)) void * restrict dst,
5671                  __attribute__((unused)) const struct GEN7_MI_NOOP * restrict values)
5672{
5673   uint32_t * restrict dw = (uint32_t * restrict) dst;
5674
5675   dw[0] =
5676      __gen_uint(values->IdentificationNumber, 0, 21) |
5677      __gen_uint(values->IdentificationNumberRegisterWriteEnable, 22, 22) |
5678      __gen_uint(values->MICommandOpcode, 23, 28) |
5679      __gen_uint(values->CommandType, 29, 31);
5680}
5681
5682#define GEN7_MI_PREDICATE_length               1
5683#define GEN7_MI_PREDICATE_length_bias          1
5684#define GEN7_MI_PREDICATE_header                \
5685   .MICommandOpcode                     =     12,  \
5686   .CommandType                         =      0
5687
5688struct GEN7_MI_PREDICATE {
5689   uint32_t                             CompareOperation;
5690#define COMPARE_TRUE                             0
5691#define COMPARE_FALSE                            1
5692#define COMPARE_SRCS_EQUAL                       2
5693#define COMPARE_DELTAS_EQUAL                     3
5694   uint32_t                             CombineOperation;
5695#define COMBINE_SET                              0
5696#define COMBINE_AND                              1
5697#define COMBINE_OR                               2
5698#define COMBINE_XOR                              3
5699   uint32_t                             LoadOperation;
5700#define LOAD_KEEP                                0
5701#define LOAD_LOAD                                2
5702#define LOAD_LOADINV                             3
5703   uint32_t                             MICommandOpcode;
5704   uint32_t                             CommandType;
5705};
5706
5707static inline void
5708GEN7_MI_PREDICATE_pack(__attribute__((unused)) __gen_user_data *data,
5709                       __attribute__((unused)) void * restrict dst,
5710                       __attribute__((unused)) const struct GEN7_MI_PREDICATE * restrict values)
5711{
5712   uint32_t * restrict dw = (uint32_t * restrict) dst;
5713
5714   dw[0] =
5715      __gen_uint(values->CompareOperation, 0, 1) |
5716      __gen_uint(values->CombineOperation, 3, 4) |
5717      __gen_uint(values->LoadOperation, 6, 7) |
5718      __gen_uint(values->MICommandOpcode, 23, 28) |
5719      __gen_uint(values->CommandType, 29, 31);
5720}
5721
5722#define GEN7_MI_REPORT_HEAD_length             1
5723#define GEN7_MI_REPORT_HEAD_length_bias        1
5724#define GEN7_MI_REPORT_HEAD_header              \
5725   .MICommandOpcode                     =      7,  \
5726   .CommandType                         =      0
5727
5728struct GEN7_MI_REPORT_HEAD {
5729   uint32_t                             MICommandOpcode;
5730   uint32_t                             CommandType;
5731};
5732
5733static inline void
5734GEN7_MI_REPORT_HEAD_pack(__attribute__((unused)) __gen_user_data *data,
5735                         __attribute__((unused)) void * restrict dst,
5736                         __attribute__((unused)) const struct GEN7_MI_REPORT_HEAD * restrict values)
5737{
5738   uint32_t * restrict dw = (uint32_t * restrict) dst;
5739
5740   dw[0] =
5741      __gen_uint(values->MICommandOpcode, 23, 28) |
5742      __gen_uint(values->CommandType, 29, 31);
5743}
5744
5745#define GEN7_MI_REPORT_PERF_COUNT_length       3
5746#define GEN7_MI_REPORT_PERF_COUNT_length_bias      2
5747#define GEN7_MI_REPORT_PERF_COUNT_header        \
5748   .DWordLength                         =      1,  \
5749   .MICommandOpcode                     =     40,  \
5750   .CommandType                         =      0
5751
5752struct GEN7_MI_REPORT_PERF_COUNT {
5753   uint32_t                             DWordLength;
5754   uint32_t                             MICommandOpcode;
5755   uint32_t                             CommandType;
5756   bool                                 UseGlobalGTT;
5757   __gen_address_type                   MemoryAddress;
5758   uint32_t                             ReportID;
5759};
5760
5761static inline void
5762GEN7_MI_REPORT_PERF_COUNT_pack(__attribute__((unused)) __gen_user_data *data,
5763                               __attribute__((unused)) void * restrict dst,
5764                               __attribute__((unused)) const struct GEN7_MI_REPORT_PERF_COUNT * restrict values)
5765{
5766   uint32_t * restrict dw = (uint32_t * restrict) dst;
5767
5768   dw[0] =
5769      __gen_uint(values->DWordLength, 0, 5) |
5770      __gen_uint(values->MICommandOpcode, 23, 28) |
5771      __gen_uint(values->CommandType, 29, 31);
5772
5773   const uint32_t v1 =
5774      __gen_uint(values->UseGlobalGTT, 0, 0);
5775   dw[1] = __gen_combine_address(data, &dw[1], values->MemoryAddress, v1);
5776
5777   dw[2] =
5778      __gen_uint(values->ReportID, 0, 31);
5779}
5780
5781#define GEN7_MI_SEMAPHORE_MBOX_length          3
5782#define GEN7_MI_SEMAPHORE_MBOX_length_bias      2
5783#define GEN7_MI_SEMAPHORE_MBOX_header           \
5784   .DWordLength                         =      1,  \
5785   .MICommandOpcode                     =     22,  \
5786   .CommandType                         =      0
5787
5788struct GEN7_MI_SEMAPHORE_MBOX {
5789   uint32_t                             DWordLength;
5790   uint32_t                             RegisterSelect;
5791#define RVSYNC                                   0
5792#define RBSYNC                                   2
5793#define UseGeneralRegisterSelect                 3
5794   uint32_t                             MICommandOpcode;
5795   uint32_t                             CommandType;
5796   uint32_t                             SemaphoreDataDword;
5797};
5798
5799static inline void
5800GEN7_MI_SEMAPHORE_MBOX_pack(__attribute__((unused)) __gen_user_data *data,
5801                            __attribute__((unused)) void * restrict dst,
5802                            __attribute__((unused)) const struct GEN7_MI_SEMAPHORE_MBOX * restrict values)
5803{
5804   uint32_t * restrict dw = (uint32_t * restrict) dst;
5805
5806   dw[0] =
5807      __gen_uint(values->DWordLength, 0, 7) |
5808      __gen_uint(values->RegisterSelect, 16, 17) |
5809      __gen_uint(values->MICommandOpcode, 23, 28) |
5810      __gen_uint(values->CommandType, 29, 31);
5811
5812   dw[1] =
5813      __gen_uint(values->SemaphoreDataDword, 0, 31);
5814
5815   dw[2] = 0;
5816}
5817
5818#define GEN7_MI_SET_CONTEXT_length             2
5819#define GEN7_MI_SET_CONTEXT_length_bias        2
5820#define GEN7_MI_SET_CONTEXT_header              \
5821   .DWordLength                         =      0,  \
5822   .MICommandOpcode                     =     24,  \
5823   .CommandType                         =      0
5824
5825struct GEN7_MI_SET_CONTEXT {
5826   uint32_t                             DWordLength;
5827   uint32_t                             MICommandOpcode;
5828   uint32_t                             CommandType;
5829   uint32_t                             RestoreInhibit;
5830   uint32_t                             ForceRestore;
5831   bool                                 ExtendedStateRestoreEnable;
5832   bool                                 ExtendedStateSaveEnable;
5833   uint32_t                             ReservedMustbe1;
5834   __gen_address_type                   LogicalContextAddress;
5835};
5836
5837static inline void
5838GEN7_MI_SET_CONTEXT_pack(__attribute__((unused)) __gen_user_data *data,
5839                         __attribute__((unused)) void * restrict dst,
5840                         __attribute__((unused)) const struct GEN7_MI_SET_CONTEXT * restrict values)
5841{
5842   uint32_t * restrict dw = (uint32_t * restrict) dst;
5843
5844   dw[0] =
5845      __gen_uint(values->DWordLength, 0, 7) |
5846      __gen_uint(values->MICommandOpcode, 23, 28) |
5847      __gen_uint(values->CommandType, 29, 31);
5848
5849   const uint32_t v1 =
5850      __gen_uint(values->RestoreInhibit, 0, 0) |
5851      __gen_uint(values->ForceRestore, 1, 1) |
5852      __gen_uint(values->ExtendedStateRestoreEnable, 2, 2) |
5853      __gen_uint(values->ExtendedStateSaveEnable, 3, 3) |
5854      __gen_uint(values->ReservedMustbe1, 8, 8);
5855   dw[1] = __gen_combine_address(data, &dw[1], values->LogicalContextAddress, v1);
5856}
5857
5858#define GEN7_MI_STORE_DATA_IMM_length          4
5859#define GEN7_MI_STORE_DATA_IMM_length_bias      2
5860#define GEN7_MI_STORE_DATA_IMM_header           \
5861   .DWordLength                         =      2,  \
5862   .MICommandOpcode                     =     32,  \
5863   .CommandType                         =      0
5864
5865struct GEN7_MI_STORE_DATA_IMM {
5866   uint32_t                             DWordLength;
5867   bool                                 UseGlobalGTT;
5868   uint32_t                             MICommandOpcode;
5869   uint32_t                             CommandType;
5870   uint32_t                             CoreModeEnable;
5871   __gen_address_type                   Address;
5872   uint64_t                             ImmediateData;
5873};
5874
5875static inline void
5876GEN7_MI_STORE_DATA_IMM_pack(__attribute__((unused)) __gen_user_data *data,
5877                            __attribute__((unused)) void * restrict dst,
5878                            __attribute__((unused)) const struct GEN7_MI_STORE_DATA_IMM * restrict values)
5879{
5880   uint32_t * restrict dw = (uint32_t * restrict) dst;
5881
5882   dw[0] =
5883      __gen_uint(values->DWordLength, 0, 5) |
5884      __gen_uint(values->UseGlobalGTT, 22, 22) |
5885      __gen_uint(values->MICommandOpcode, 23, 28) |
5886      __gen_uint(values->CommandType, 29, 31);
5887
5888   dw[1] = 0;
5889
5890   const uint32_t v2 =
5891      __gen_uint(values->CoreModeEnable, 0, 0);
5892   dw[2] = __gen_combine_address(data, &dw[2], values->Address, v2);
5893
5894   const uint64_t v3 =
5895      __gen_uint(values->ImmediateData, 0, 63);
5896   dw[3] = v3;
5897   dw[4] = v3 >> 32;
5898}
5899
5900#define GEN7_MI_STORE_DATA_INDEX_length        3
5901#define GEN7_MI_STORE_DATA_INDEX_length_bias      2
5902#define GEN7_MI_STORE_DATA_INDEX_header         \
5903   .DWordLength                         =      1,  \
5904   .MICommandOpcode                     =     33,  \
5905   .CommandType                         =      0
5906
5907struct GEN7_MI_STORE_DATA_INDEX {
5908   uint32_t                             DWordLength;
5909   uint32_t                             MICommandOpcode;
5910   uint32_t                             CommandType;
5911   uint32_t                             Offset;
5912   uint32_t                             DataDWord0;
5913   uint32_t                             DataDWord1;
5914};
5915
5916static inline void
5917GEN7_MI_STORE_DATA_INDEX_pack(__attribute__((unused)) __gen_user_data *data,
5918                              __attribute__((unused)) void * restrict dst,
5919                              __attribute__((unused)) const struct GEN7_MI_STORE_DATA_INDEX * restrict values)
5920{
5921   uint32_t * restrict dw = (uint32_t * restrict) dst;
5922
5923   dw[0] =
5924      __gen_uint(values->DWordLength, 0, 7) |
5925      __gen_uint(values->MICommandOpcode, 23, 28) |
5926      __gen_uint(values->CommandType, 29, 31);
5927
5928   dw[1] =
5929      __gen_uint(values->Offset, 2, 11);
5930
5931   dw[2] =
5932      __gen_uint(values->DataDWord0, 0, 31);
5933}
5934
5935#define GEN7_MI_STORE_REGISTER_MEM_length      3
5936#define GEN7_MI_STORE_REGISTER_MEM_length_bias      2
5937#define GEN7_MI_STORE_REGISTER_MEM_header       \
5938   .DWordLength                         =      1,  \
5939   .MICommandOpcode                     =     36,  \
5940   .CommandType                         =      0
5941
5942struct GEN7_MI_STORE_REGISTER_MEM {
5943   uint32_t                             DWordLength;
5944   bool                                 UseGlobalGTT;
5945   uint32_t                             MICommandOpcode;
5946   uint32_t                             CommandType;
5947   uint64_t                             RegisterAddress;
5948   __gen_address_type                   MemoryAddress;
5949};
5950
5951static inline void
5952GEN7_MI_STORE_REGISTER_MEM_pack(__attribute__((unused)) __gen_user_data *data,
5953                                __attribute__((unused)) void * restrict dst,
5954                                __attribute__((unused)) const struct GEN7_MI_STORE_REGISTER_MEM * restrict values)
5955{
5956   uint32_t * restrict dw = (uint32_t * restrict) dst;
5957
5958   dw[0] =
5959      __gen_uint(values->DWordLength, 0, 7) |
5960      __gen_uint(values->UseGlobalGTT, 22, 22) |
5961      __gen_uint(values->MICommandOpcode, 23, 28) |
5962      __gen_uint(values->CommandType, 29, 31);
5963
5964   dw[1] =
5965      __gen_offset(values->RegisterAddress, 2, 22);
5966
5967   dw[2] = __gen_combine_address(data, &dw[2], values->MemoryAddress, 0);
5968}
5969
5970#define GEN7_MI_SUSPEND_FLUSH_length           1
5971#define GEN7_MI_SUSPEND_FLUSH_length_bias      1
5972#define GEN7_MI_SUSPEND_FLUSH_header            \
5973   .MICommandOpcode                     =     11,  \
5974   .CommandType                         =      0
5975
5976struct GEN7_MI_SUSPEND_FLUSH {
5977   bool                                 SuspendFlush;
5978   uint32_t                             MICommandOpcode;
5979   uint32_t                             CommandType;
5980};
5981
5982static inline void
5983GEN7_MI_SUSPEND_FLUSH_pack(__attribute__((unused)) __gen_user_data *data,
5984                           __attribute__((unused)) void * restrict dst,
5985                           __attribute__((unused)) const struct GEN7_MI_SUSPEND_FLUSH * restrict values)
5986{
5987   uint32_t * restrict dw = (uint32_t * restrict) dst;
5988
5989   dw[0] =
5990      __gen_uint(values->SuspendFlush, 0, 0) |
5991      __gen_uint(values->MICommandOpcode, 23, 28) |
5992      __gen_uint(values->CommandType, 29, 31);
5993}
5994
5995#define GEN7_MI_TOPOLOGY_FILTER_length         1
5996#define GEN7_MI_TOPOLOGY_FILTER_length_bias      1
5997#define GEN7_MI_TOPOLOGY_FILTER_header          \
5998   .MICommandOpcode                     =     13,  \
5999   .CommandType                         =      0
6000
6001struct GEN7_MI_TOPOLOGY_FILTER {
6002   enum GEN7_3D_Prim_Topo_Type          TopologyFilterValue;
6003   uint32_t                             MICommandOpcode;
6004   uint32_t                             CommandType;
6005};
6006
6007static inline void
6008GEN7_MI_TOPOLOGY_FILTER_pack(__attribute__((unused)) __gen_user_data *data,
6009                             __attribute__((unused)) void * restrict dst,
6010                             __attribute__((unused)) const struct GEN7_MI_TOPOLOGY_FILTER * restrict values)
6011{
6012   uint32_t * restrict dw = (uint32_t * restrict) dst;
6013
6014   dw[0] =
6015      __gen_uint(values->TopologyFilterValue, 0, 5) |
6016      __gen_uint(values->MICommandOpcode, 23, 28) |
6017      __gen_uint(values->CommandType, 29, 31);
6018}
6019
6020#define GEN7_MI_URB_CLEAR_length               2
6021#define GEN7_MI_URB_CLEAR_length_bias          2
6022#define GEN7_MI_URB_CLEAR_header                \
6023   .DWordLength                         =      0,  \
6024   .MICommandOpcode                     =     25,  \
6025   .CommandType                         =      0
6026
6027struct GEN7_MI_URB_CLEAR {
6028   uint32_t                             DWordLength;
6029   uint32_t                             MICommandOpcode;
6030   uint32_t                             CommandType;
6031   uint64_t                             URBAddress;
6032   uint32_t                             URBClearLength;
6033};
6034
6035static inline void
6036GEN7_MI_URB_CLEAR_pack(__attribute__((unused)) __gen_user_data *data,
6037                       __attribute__((unused)) void * restrict dst,
6038                       __attribute__((unused)) const struct GEN7_MI_URB_CLEAR * restrict values)
6039{
6040   uint32_t * restrict dw = (uint32_t * restrict) dst;
6041
6042   dw[0] =
6043      __gen_uint(values->DWordLength, 0, 7) |
6044      __gen_uint(values->MICommandOpcode, 23, 28) |
6045      __gen_uint(values->CommandType, 29, 31);
6046
6047   dw[1] =
6048      __gen_offset(values->URBAddress, 0, 13) |
6049      __gen_uint(values->URBClearLength, 16, 28);
6050}
6051
6052#define GEN7_MI_USER_INTERRUPT_length          1
6053#define GEN7_MI_USER_INTERRUPT_length_bias      1
6054#define GEN7_MI_USER_INTERRUPT_header           \
6055   .MICommandOpcode                     =      2,  \
6056   .CommandType                         =      0
6057
6058struct GEN7_MI_USER_INTERRUPT {
6059   uint32_t                             MICommandOpcode;
6060   uint32_t                             CommandType;
6061};
6062
6063static inline void
6064GEN7_MI_USER_INTERRUPT_pack(__attribute__((unused)) __gen_user_data *data,
6065                            __attribute__((unused)) void * restrict dst,
6066                            __attribute__((unused)) const struct GEN7_MI_USER_INTERRUPT * restrict values)
6067{
6068   uint32_t * restrict dw = (uint32_t * restrict) dst;
6069
6070   dw[0] =
6071      __gen_uint(values->MICommandOpcode, 23, 28) |
6072      __gen_uint(values->CommandType, 29, 31);
6073}
6074
6075#define GEN7_MI_WAIT_FOR_EVENT_length          1
6076#define GEN7_MI_WAIT_FOR_EVENT_length_bias      1
6077#define GEN7_MI_WAIT_FOR_EVENT_header           \
6078   .MICommandOpcode                     =      3,  \
6079   .CommandType                         =      0
6080
6081struct GEN7_MI_WAIT_FOR_EVENT {
6082   bool                                 DisplayPipeAScanLineWaitEnable;
6083   bool                                 DisplayPlaneAFlipPendingWaitEnable;
6084   bool                                 DisplaySpriteAFlipPendingWaitEnable;
6085   bool                                 DisplayPipeAVerticalBlankWaitEnable;
6086   bool                                 DisplayPipeAHorizontalBlankWaitEnable;
6087   bool                                 DisplayPipeBScanLineWaitEnable;
6088   bool                                 DisplayPlaneBFlipPendingWaitEnable;
6089   bool                                 DisplaySpriteBFlipPendingWaitEnable;
6090   bool                                 DisplayPipeBVerticalBlankWaitEnable;
6091   bool                                 DisplayPipeBHorizontalBlankWaitEnable;
6092   bool                                 DisplayPipeCScanLineWaitEnable;
6093   bool                                 DisplayPlaneCFlipPendingWaitEnable;
6094   uint32_t                             ConditionCodeWaitSelect;
6095#define Notenabled                               0
6096   bool                                 DisplaySpriteCFlipPendingWaitEnable;
6097   bool                                 DisplayPipeCVerticalBlankWaitEnable;
6098   bool                                 DisplayPipeCHorizontalBlankWaitEnable;
6099   uint32_t                             MICommandOpcode;
6100   uint32_t                             CommandType;
6101};
6102
6103static inline void
6104GEN7_MI_WAIT_FOR_EVENT_pack(__attribute__((unused)) __gen_user_data *data,
6105                            __attribute__((unused)) void * restrict dst,
6106                            __attribute__((unused)) const struct GEN7_MI_WAIT_FOR_EVENT * restrict values)
6107{
6108   uint32_t * restrict dw = (uint32_t * restrict) dst;
6109
6110   dw[0] =
6111      __gen_uint(values->DisplayPipeAScanLineWaitEnable, 0, 0) |
6112      __gen_uint(values->DisplayPlaneAFlipPendingWaitEnable, 1, 1) |
6113      __gen_uint(values->DisplaySpriteAFlipPendingWaitEnable, 2, 2) |
6114      __gen_uint(values->DisplayPipeAVerticalBlankWaitEnable, 3, 3) |
6115      __gen_uint(values->DisplayPipeAHorizontalBlankWaitEnable, 5, 5) |
6116      __gen_uint(values->DisplayPipeBScanLineWaitEnable, 8, 8) |
6117      __gen_uint(values->DisplayPlaneBFlipPendingWaitEnable, 9, 9) |
6118      __gen_uint(values->DisplaySpriteBFlipPendingWaitEnable, 10, 10) |
6119      __gen_uint(values->DisplayPipeBVerticalBlankWaitEnable, 11, 11) |
6120      __gen_uint(values->DisplayPipeBHorizontalBlankWaitEnable, 13, 13) |
6121      __gen_uint(values->DisplayPipeCScanLineWaitEnable, 14, 14) |
6122      __gen_uint(values->DisplayPlaneCFlipPendingWaitEnable, 15, 15) |
6123      __gen_uint(values->ConditionCodeWaitSelect, 16, 19) |
6124      __gen_uint(values->DisplaySpriteCFlipPendingWaitEnable, 20, 20) |
6125      __gen_uint(values->DisplayPipeCVerticalBlankWaitEnable, 21, 21) |
6126      __gen_uint(values->DisplayPipeCHorizontalBlankWaitEnable, 22, 22) |
6127      __gen_uint(values->MICommandOpcode, 23, 28) |
6128      __gen_uint(values->CommandType, 29, 31);
6129}
6130
6131#define GEN7_PIPELINE_SELECT_length            1
6132#define GEN7_PIPELINE_SELECT_length_bias       1
6133#define GEN7_PIPELINE_SELECT_header             \
6134   ._3DCommandSubOpcode                 =      4,  \
6135   ._3DCommandOpcode                    =      1,  \
6136   .CommandSubType                      =      1,  \
6137   .CommandType                         =      3
6138
6139struct GEN7_PIPELINE_SELECT {
6140   uint32_t                             PipelineSelection;
6141#define _3D                                      0
6142#define Media                                    1
6143#define GPGPU                                    2
6144   uint32_t                             _3DCommandSubOpcode;
6145   uint32_t                             _3DCommandOpcode;
6146   uint32_t                             CommandSubType;
6147   uint32_t                             CommandType;
6148};
6149
6150static inline void
6151GEN7_PIPELINE_SELECT_pack(__attribute__((unused)) __gen_user_data *data,
6152                          __attribute__((unused)) void * restrict dst,
6153                          __attribute__((unused)) const struct GEN7_PIPELINE_SELECT * restrict values)
6154{
6155   uint32_t * restrict dw = (uint32_t * restrict) dst;
6156
6157   dw[0] =
6158      __gen_uint(values->PipelineSelection, 0, 1) |
6159      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
6160      __gen_uint(values->_3DCommandOpcode, 24, 26) |
6161      __gen_uint(values->CommandSubType, 27, 28) |
6162      __gen_uint(values->CommandType, 29, 31);
6163}
6164
6165#define GEN7_PIPE_CONTROL_length               5
6166#define GEN7_PIPE_CONTROL_length_bias          2
6167#define GEN7_PIPE_CONTROL_header                \
6168   .DWordLength                         =      3,  \
6169   ._3DCommandSubOpcode                 =      0,  \
6170   ._3DCommandOpcode                    =      2,  \
6171   .CommandSubType                      =      3,  \
6172   .CommandType                         =      3
6173
6174struct GEN7_PIPE_CONTROL {
6175   uint32_t                             DWordLength;
6176   uint32_t                             _3DCommandSubOpcode;
6177   uint32_t                             _3DCommandOpcode;
6178   uint32_t                             CommandSubType;
6179   uint32_t                             CommandType;
6180   bool                                 DepthCacheFlushEnable;
6181   bool                                 StallAtPixelScoreboard;
6182   bool                                 StateCacheInvalidationEnable;
6183   bool                                 ConstantCacheInvalidationEnable;
6184   bool                                 VFCacheInvalidationEnable;
6185   bool                                 DCFlushEnable;
6186   bool                                 PipeControlFlushEnable;
6187   bool                                 NotifyEnable;
6188   bool                                 IndirectStatePointersDisable;
6189   bool                                 TextureCacheInvalidationEnable;
6190   bool                                 InstructionCacheInvalidateEnable;
6191   bool                                 RenderTargetCacheFlushEnable;
6192   bool                                 DepthStallEnable;
6193   uint32_t                             PostSyncOperation;
6194#define NoWrite                                  0
6195#define WriteImmediateData                       1
6196#define WritePSDepthCount                        2
6197#define WriteTimestamp                           3
6198   bool                                 GenericMediaStateClear;
6199   bool                                 TLBInvalidate;
6200   bool                                 GlobalSnapshotCountReset;
6201   bool                                 CommandStreamerStallEnable;
6202   uint32_t                             StoreDataIndex;
6203   uint32_t                             LRIPostSyncOperation;
6204#define NoLRIOperation                           0
6205#define MMIOWriteImmediateData                   1
6206   uint32_t                             DestinationAddressType;
6207#define DAT_PPGTT                                0
6208#define DAT_GGTT                                 1
6209   __gen_address_type                   Address;
6210   uint64_t                             ImmediateData;
6211};
6212
6213static inline void
6214GEN7_PIPE_CONTROL_pack(__attribute__((unused)) __gen_user_data *data,
6215                       __attribute__((unused)) void * restrict dst,
6216                       __attribute__((unused)) const struct GEN7_PIPE_CONTROL * restrict values)
6217{
6218   uint32_t * restrict dw = (uint32_t * restrict) dst;
6219
6220   dw[0] =
6221      __gen_uint(values->DWordLength, 0, 7) |
6222      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
6223      __gen_uint(values->_3DCommandOpcode, 24, 26) |
6224      __gen_uint(values->CommandSubType, 27, 28) |
6225      __gen_uint(values->CommandType, 29, 31);
6226
6227   dw[1] =
6228      __gen_uint(values->DepthCacheFlushEnable, 0, 0) |
6229      __gen_uint(values->StallAtPixelScoreboard, 1, 1) |
6230      __gen_uint(values->StateCacheInvalidationEnable, 2, 2) |
6231      __gen_uint(values->ConstantCacheInvalidationEnable, 3, 3) |
6232      __gen_uint(values->VFCacheInvalidationEnable, 4, 4) |
6233      __gen_uint(values->DCFlushEnable, 5, 5) |
6234      __gen_uint(values->PipeControlFlushEnable, 7, 7) |
6235      __gen_uint(values->NotifyEnable, 8, 8) |
6236      __gen_uint(values->IndirectStatePointersDisable, 9, 9) |
6237      __gen_uint(values->TextureCacheInvalidationEnable, 10, 10) |
6238      __gen_uint(values->InstructionCacheInvalidateEnable, 11, 11) |
6239      __gen_uint(values->RenderTargetCacheFlushEnable, 12, 12) |
6240      __gen_uint(values->DepthStallEnable, 13, 13) |
6241      __gen_uint(values->PostSyncOperation, 14, 15) |
6242      __gen_uint(values->GenericMediaStateClear, 16, 16) |
6243      __gen_uint(values->TLBInvalidate, 18, 18) |
6244      __gen_uint(values->GlobalSnapshotCountReset, 19, 19) |
6245      __gen_uint(values->CommandStreamerStallEnable, 20, 20) |
6246      __gen_uint(values->StoreDataIndex, 21, 21) |
6247      __gen_uint(values->LRIPostSyncOperation, 23, 23) |
6248      __gen_uint(values->DestinationAddressType, 24, 24);
6249
6250   dw[2] = __gen_combine_address(data, &dw[2], values->Address, 0);
6251
6252   const uint64_t v3 =
6253      __gen_uint(values->ImmediateData, 0, 63);
6254   dw[3] = v3;
6255   dw[4] = v3 >> 32;
6256}
6257
6258#define GEN7_STATE_BASE_ADDRESS_length        10
6259#define GEN7_STATE_BASE_ADDRESS_length_bias      2
6260#define GEN7_STATE_BASE_ADDRESS_header          \
6261   .DWordLength                         =      8,  \
6262   ._3DCommandSubOpcode                 =      1,  \
6263   ._3DCommandOpcode                    =      1,  \
6264   .CommandSubType                      =      0,  \
6265   .CommandType                         =      3
6266
6267struct GEN7_STATE_BASE_ADDRESS {
6268   uint32_t                             DWordLength;
6269   uint32_t                             _3DCommandSubOpcode;
6270   uint32_t                             _3DCommandOpcode;
6271   uint32_t                             CommandSubType;
6272   uint32_t                             CommandType;
6273   bool                                 GeneralStateBaseAddressModifyEnable;
6274   uint32_t                             StatelessDataPortAccessForceWriteThru;
6275   uint32_t                             StatelessDataPortAccessMOCS;
6276   uint32_t                             GeneralStateMOCS;
6277   __gen_address_type                   GeneralStateBaseAddress;
6278   bool                                 SurfaceStateBaseAddressModifyEnable;
6279   uint32_t                             SurfaceStateMOCS;
6280   __gen_address_type                   SurfaceStateBaseAddress;
6281   bool                                 DynamicStateBaseAddressModifyEnable;
6282   uint32_t                             DynamicStateMOCS;
6283   __gen_address_type                   DynamicStateBaseAddress;
6284   bool                                 IndirectObjectBaseAddressModifyEnable;
6285   uint32_t                             IndirectObjectMOCS;
6286   __gen_address_type                   IndirectObjectBaseAddress;
6287   bool                                 InstructionBaseAddressModifyEnable;
6288   uint32_t                             InstructionMOCS;
6289   __gen_address_type                   InstructionBaseAddress;
6290   bool                                 GeneralStateAccessUpperBoundModifyEnable;
6291   __gen_address_type                   GeneralStateAccessUpperBound;
6292   bool                                 DynamicStateAccessUpperBoundModifyEnable;
6293   __gen_address_type                   DynamicStateAccessUpperBound;
6294   bool                                 IndirectObjectAccessUpperBoundModifyEnable;
6295   __gen_address_type                   IndirectObjectAccessUpperBound;
6296   bool                                 InstructionAccessUpperBoundModifyEnable;
6297   __gen_address_type                   InstructionAccessUpperBound;
6298};
6299
6300static inline void
6301GEN7_STATE_BASE_ADDRESS_pack(__attribute__((unused)) __gen_user_data *data,
6302                             __attribute__((unused)) void * restrict dst,
6303                             __attribute__((unused)) const struct GEN7_STATE_BASE_ADDRESS * restrict values)
6304{
6305   uint32_t * restrict dw = (uint32_t * restrict) dst;
6306
6307   dw[0] =
6308      __gen_uint(values->DWordLength, 0, 7) |
6309      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
6310      __gen_uint(values->_3DCommandOpcode, 24, 26) |
6311      __gen_uint(values->CommandSubType, 27, 28) |
6312      __gen_uint(values->CommandType, 29, 31);
6313
6314   const uint32_t v1 =
6315      __gen_uint(values->GeneralStateBaseAddressModifyEnable, 0, 0) |
6316      __gen_uint(values->StatelessDataPortAccessForceWriteThru, 3, 3) |
6317      __gen_uint(values->StatelessDataPortAccessMOCS, 4, 7) |
6318      __gen_uint(values->GeneralStateMOCS, 8, 11);
6319   dw[1] = __gen_combine_address(data, &dw[1], values->GeneralStateBaseAddress, v1);
6320
6321   const uint32_t v2 =
6322      __gen_uint(values->SurfaceStateBaseAddressModifyEnable, 0, 0) |
6323      __gen_uint(values->SurfaceStateMOCS, 8, 11);
6324   dw[2] = __gen_combine_address(data, &dw[2], values->SurfaceStateBaseAddress, v2);
6325
6326   const uint32_t v3 =
6327      __gen_uint(values->DynamicStateBaseAddressModifyEnable, 0, 0) |
6328      __gen_uint(values->DynamicStateMOCS, 8, 11);
6329   dw[3] = __gen_combine_address(data, &dw[3], values->DynamicStateBaseAddress, v3);
6330
6331   const uint32_t v4 =
6332      __gen_uint(values->IndirectObjectBaseAddressModifyEnable, 0, 0) |
6333      __gen_uint(values->IndirectObjectMOCS, 8, 11);
6334   dw[4] = __gen_combine_address(data, &dw[4], values->IndirectObjectBaseAddress, v4);
6335
6336   const uint32_t v5 =
6337      __gen_uint(values->InstructionBaseAddressModifyEnable, 0, 0) |
6338      __gen_uint(values->InstructionMOCS, 8, 11);
6339   dw[5] = __gen_combine_address(data, &dw[5], values->InstructionBaseAddress, v5);
6340
6341   const uint32_t v6 =
6342      __gen_uint(values->GeneralStateAccessUpperBoundModifyEnable, 0, 0);
6343   dw[6] = __gen_combine_address(data, &dw[6], values->GeneralStateAccessUpperBound, v6);
6344
6345   const uint32_t v7 =
6346      __gen_uint(values->DynamicStateAccessUpperBoundModifyEnable, 0, 0);
6347   dw[7] = __gen_combine_address(data, &dw[7], values->DynamicStateAccessUpperBound, v7);
6348
6349   const uint32_t v8 =
6350      __gen_uint(values->IndirectObjectAccessUpperBoundModifyEnable, 0, 0);
6351   dw[8] = __gen_combine_address(data, &dw[8], values->IndirectObjectAccessUpperBound, v8);
6352
6353   const uint32_t v9 =
6354      __gen_uint(values->InstructionAccessUpperBoundModifyEnable, 0, 0);
6355   dw[9] = __gen_combine_address(data, &dw[9], values->InstructionAccessUpperBound, v9);
6356}
6357
6358#define GEN7_STATE_PREFETCH_length             2
6359#define GEN7_STATE_PREFETCH_length_bias        2
6360#define GEN7_STATE_PREFETCH_header              \
6361   .DWordLength                         =      0,  \
6362   ._3DCommandSubOpcode                 =      3,  \
6363   ._3DCommandOpcode                    =      0,  \
6364   .CommandSubType                      =      0,  \
6365   .CommandType                         =      3
6366
6367struct GEN7_STATE_PREFETCH {
6368   uint32_t                             DWordLength;
6369   uint32_t                             _3DCommandSubOpcode;
6370   uint32_t                             _3DCommandOpcode;
6371   uint32_t                             CommandSubType;
6372   uint32_t                             CommandType;
6373   uint32_t                             PrefetchCount;
6374   __gen_address_type                   PrefetchPointer;
6375};
6376
6377static inline void
6378GEN7_STATE_PREFETCH_pack(__attribute__((unused)) __gen_user_data *data,
6379                         __attribute__((unused)) void * restrict dst,
6380                         __attribute__((unused)) const struct GEN7_STATE_PREFETCH * restrict values)
6381{
6382   uint32_t * restrict dw = (uint32_t * restrict) dst;
6383
6384   dw[0] =
6385      __gen_uint(values->DWordLength, 0, 7) |
6386      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
6387      __gen_uint(values->_3DCommandOpcode, 24, 26) |
6388      __gen_uint(values->CommandSubType, 27, 28) |
6389      __gen_uint(values->CommandType, 29, 31);
6390
6391   const uint32_t v1 =
6392      __gen_uint(values->PrefetchCount, 0, 2);
6393   dw[1] = __gen_combine_address(data, &dw[1], values->PrefetchPointer, v1);
6394}
6395
6396#define GEN7_STATE_SIP_length                  2
6397#define GEN7_STATE_SIP_length_bias             2
6398#define GEN7_STATE_SIP_header                   \
6399   .DWordLength                         =      0,  \
6400   ._3DCommandSubOpcode                 =      2,  \
6401   ._3DCommandOpcode                    =      1,  \
6402   .CommandSubType                      =      0,  \
6403   .CommandType                         =      3
6404
6405struct GEN7_STATE_SIP {
6406   uint32_t                             DWordLength;
6407   uint32_t                             _3DCommandSubOpcode;
6408   uint32_t                             _3DCommandOpcode;
6409   uint32_t                             CommandSubType;
6410   uint32_t                             CommandType;
6411   uint64_t                             SystemInstructionPointer;
6412};
6413
6414static inline void
6415GEN7_STATE_SIP_pack(__attribute__((unused)) __gen_user_data *data,
6416                    __attribute__((unused)) void * restrict dst,
6417                    __attribute__((unused)) const struct GEN7_STATE_SIP * restrict values)
6418{
6419   uint32_t * restrict dw = (uint32_t * restrict) dst;
6420
6421   dw[0] =
6422      __gen_uint(values->DWordLength, 0, 7) |
6423      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
6424      __gen_uint(values->_3DCommandOpcode, 24, 26) |
6425      __gen_uint(values->CommandSubType, 27, 28) |
6426      __gen_uint(values->CommandType, 29, 31);
6427
6428   dw[1] =
6429      __gen_offset(values->SystemInstructionPointer, 4, 31);
6430}
6431
6432#define GEN7_SWTESS_BASE_ADDRESS_length        2
6433#define GEN7_SWTESS_BASE_ADDRESS_length_bias      2
6434#define GEN7_SWTESS_BASE_ADDRESS_header         \
6435   .DWordLength                         =      0,  \
6436   ._3DCommandSubOpcode                 =      3,  \
6437   ._3DCommandOpcode                    =      1,  \
6438   .CommandSubType                      =      0,  \
6439   .CommandType                         =      3
6440
6441struct GEN7_SWTESS_BASE_ADDRESS {
6442   uint32_t                             DWordLength;
6443   uint32_t                             _3DCommandSubOpcode;
6444   uint32_t                             _3DCommandOpcode;
6445   uint32_t                             CommandSubType;
6446   uint32_t                             CommandType;
6447   uint32_t                             SWTessellationMOCS;
6448   __gen_address_type                   SWTessellationBaseAddress;
6449};
6450
6451static inline void
6452GEN7_SWTESS_BASE_ADDRESS_pack(__attribute__((unused)) __gen_user_data *data,
6453                              __attribute__((unused)) void * restrict dst,
6454                              __attribute__((unused)) const struct GEN7_SWTESS_BASE_ADDRESS * restrict values)
6455{
6456   uint32_t * restrict dw = (uint32_t * restrict) dst;
6457
6458   dw[0] =
6459      __gen_uint(values->DWordLength, 0, 7) |
6460      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
6461      __gen_uint(values->_3DCommandOpcode, 24, 26) |
6462      __gen_uint(values->CommandSubType, 27, 28) |
6463      __gen_uint(values->CommandType, 29, 31);
6464
6465   const uint32_t v1 =
6466      __gen_uint(values->SWTessellationMOCS, 8, 11);
6467   dw[1] = __gen_combine_address(data, &dw[1], values->SWTessellationBaseAddress, v1);
6468}
6469
6470#define GEN7_BCS_FAULT_REG_num            0x4294
6471#define GEN7_BCS_FAULT_REG_length              1
6472struct GEN7_BCS_FAULT_REG {
6473   bool                                 ValidBit;
6474   uint32_t                             FaultType;
6475#define PageFault                                0
6476#define InvalidPDFault                           1
6477#define UnloadedPDFault                          2
6478#define InvalidandUnloadedPDfault                3
6479   uint32_t                             SRCIDofFault;
6480   uint32_t                             GTTSEL;
6481#define PPGTT                                    0
6482#define GGTT                                     1
6483   __gen_address_type                   VirtualAddressofFault;
6484};
6485
6486static inline void
6487GEN7_BCS_FAULT_REG_pack(__attribute__((unused)) __gen_user_data *data,
6488                        __attribute__((unused)) void * restrict dst,
6489                        __attribute__((unused)) const struct GEN7_BCS_FAULT_REG * restrict values)
6490{
6491   uint32_t * restrict dw = (uint32_t * restrict) dst;
6492
6493   const uint32_t v0 =
6494      __gen_uint(values->ValidBit, 0, 0) |
6495      __gen_uint(values->FaultType, 1, 2) |
6496      __gen_uint(values->SRCIDofFault, 3, 10) |
6497      __gen_uint(values->GTTSEL, 11, 11);
6498   dw[0] = __gen_combine_address(data, &dw[0], values->VirtualAddressofFault, v0);
6499}
6500
6501#define GEN7_BCS_INSTDONE_num             0x2206c
6502#define GEN7_BCS_INSTDONE_length               1
6503struct GEN7_BCS_INSTDONE {
6504   bool                                 RingEnable;
6505   bool                                 BlitterIDLE;
6506   bool                                 GABIDLE;
6507   bool                                 BCSDone;
6508};
6509
6510static inline void
6511GEN7_BCS_INSTDONE_pack(__attribute__((unused)) __gen_user_data *data,
6512                       __attribute__((unused)) void * restrict dst,
6513                       __attribute__((unused)) const struct GEN7_BCS_INSTDONE * restrict values)
6514{
6515   uint32_t * restrict dw = (uint32_t * restrict) dst;
6516
6517   dw[0] =
6518      __gen_uint(values->RingEnable, 0, 0) |
6519      __gen_uint(values->BlitterIDLE, 1, 1) |
6520      __gen_uint(values->GABIDLE, 2, 2) |
6521      __gen_uint(values->BCSDone, 3, 3);
6522}
6523
6524#define GEN7_BCS_RING_BUFFER_CTL_num      0x2203c
6525#define GEN7_BCS_RING_BUFFER_CTL_length        1
6526struct GEN7_BCS_RING_BUFFER_CTL {
6527   bool                                 RingBufferEnable;
6528   uint32_t                             AutomaticReportHeadPointer;
6529#define MI_AUTOREPORT_OFF                        0
6530#define MI_AUTOREPORT_64KB                       1
6531#define MI_AUTOREPORT_4KB                        2
6532#define MI_AUTOREPORT_128KB                      3
6533   bool                                 DisableRegisterAccesses;
6534   bool                                 SemaphoreWait;
6535   bool                                 RBWait;
6536   uint32_t                             BufferLengthinpages1;
6537};
6538
6539static inline void
6540GEN7_BCS_RING_BUFFER_CTL_pack(__attribute__((unused)) __gen_user_data *data,
6541                              __attribute__((unused)) void * restrict dst,
6542                              __attribute__((unused)) const struct GEN7_BCS_RING_BUFFER_CTL * restrict values)
6543{
6544   uint32_t * restrict dw = (uint32_t * restrict) dst;
6545
6546   dw[0] =
6547      __gen_uint(values->RingBufferEnable, 0, 0) |
6548      __gen_uint(values->AutomaticReportHeadPointer, 1, 2) |
6549      __gen_uint(values->DisableRegisterAccesses, 8, 8) |
6550      __gen_uint(values->SemaphoreWait, 10, 10) |
6551      __gen_uint(values->RBWait, 11, 11) |
6552      __gen_uint(values->BufferLengthinpages1, 12, 20);
6553}
6554
6555#define GEN7_CL_INVOCATION_COUNT_num      0x2338
6556#define GEN7_CL_INVOCATION_COUNT_length        2
6557struct GEN7_CL_INVOCATION_COUNT {
6558   uint64_t                             CLInvocationCountReport;
6559};
6560
6561static inline void
6562GEN7_CL_INVOCATION_COUNT_pack(__attribute__((unused)) __gen_user_data *data,
6563                              __attribute__((unused)) void * restrict dst,
6564                              __attribute__((unused)) const struct GEN7_CL_INVOCATION_COUNT * restrict values)
6565{
6566   uint32_t * restrict dw = (uint32_t * restrict) dst;
6567
6568   const uint64_t v0 =
6569      __gen_uint(values->CLInvocationCountReport, 0, 63);
6570   dw[0] = v0;
6571   dw[1] = v0 >> 32;
6572}
6573
6574#define GEN7_CL_PRIMITIVES_COUNT_num      0x2340
6575#define GEN7_CL_PRIMITIVES_COUNT_length        2
6576struct GEN7_CL_PRIMITIVES_COUNT {
6577   uint64_t                             CLPrimitivesCountReport;
6578};
6579
6580static inline void
6581GEN7_CL_PRIMITIVES_COUNT_pack(__attribute__((unused)) __gen_user_data *data,
6582                              __attribute__((unused)) void * restrict dst,
6583                              __attribute__((unused)) const struct GEN7_CL_PRIMITIVES_COUNT * restrict values)
6584{
6585   uint32_t * restrict dw = (uint32_t * restrict) dst;
6586
6587   const uint64_t v0 =
6588      __gen_uint(values->CLPrimitivesCountReport, 0, 63);
6589   dw[0] = v0;
6590   dw[1] = v0 >> 32;
6591}
6592
6593#define GEN7_CS_INVOCATION_COUNT_num      0x2290
6594#define GEN7_CS_INVOCATION_COUNT_length        2
6595struct GEN7_CS_INVOCATION_COUNT {
6596   uint64_t                             CSInvocationCountReport;
6597};
6598
6599static inline void
6600GEN7_CS_INVOCATION_COUNT_pack(__attribute__((unused)) __gen_user_data *data,
6601                              __attribute__((unused)) void * restrict dst,
6602                              __attribute__((unused)) const struct GEN7_CS_INVOCATION_COUNT * restrict values)
6603{
6604   uint32_t * restrict dw = (uint32_t * restrict) dst;
6605
6606   const uint64_t v0 =
6607      __gen_uint(values->CSInvocationCountReport, 0, 63);
6608   dw[0] = v0;
6609   dw[1] = v0 >> 32;
6610}
6611
6612#define GEN7_DS_INVOCATION_COUNT_num      0x2308
6613#define GEN7_DS_INVOCATION_COUNT_length        2
6614struct GEN7_DS_INVOCATION_COUNT {
6615   uint64_t                             DSInvocationCountReport;
6616};
6617
6618static inline void
6619GEN7_DS_INVOCATION_COUNT_pack(__attribute__((unused)) __gen_user_data *data,
6620                              __attribute__((unused)) void * restrict dst,
6621                              __attribute__((unused)) const struct GEN7_DS_INVOCATION_COUNT * restrict values)
6622{
6623   uint32_t * restrict dw = (uint32_t * restrict) dst;
6624
6625   const uint64_t v0 =
6626      __gen_uint(values->DSInvocationCountReport, 0, 63);
6627   dw[0] = v0;
6628   dw[1] = v0 >> 32;
6629}
6630
6631#define GEN7_ERR_INT_num                  0x44040
6632#define GEN7_ERR_INT_length                    1
6633struct GEN7_ERR_INT {
6634   bool                                 PrimaryAGTTFaultStatus;
6635   bool                                 PrimaryBGTTFaultStatus;
6636   bool                                 SpriteAGTTFaultStatus;
6637   bool                                 SpriteBGTTFaultStatus;
6638   bool                                 CursorAGTTFaultStatus;
6639   bool                                 CursorBGTTFaultStatus;
6640   bool                                 Invalidpagetableentrydata;
6641   bool                                 InvalidGTTpagetableentry;
6642};
6643
6644static inline void
6645GEN7_ERR_INT_pack(__attribute__((unused)) __gen_user_data *data,
6646                  __attribute__((unused)) void * restrict dst,
6647                  __attribute__((unused)) const struct GEN7_ERR_INT * restrict values)
6648{
6649   uint32_t * restrict dw = (uint32_t * restrict) dst;
6650
6651   dw[0] =
6652      __gen_uint(values->PrimaryAGTTFaultStatus, 0, 0) |
6653      __gen_uint(values->PrimaryBGTTFaultStatus, 1, 1) |
6654      __gen_uint(values->SpriteAGTTFaultStatus, 2, 2) |
6655      __gen_uint(values->SpriteBGTTFaultStatus, 3, 3) |
6656      __gen_uint(values->CursorAGTTFaultStatus, 4, 4) |
6657      __gen_uint(values->CursorBGTTFaultStatus, 5, 5) |
6658      __gen_uint(values->Invalidpagetableentrydata, 6, 6) |
6659      __gen_uint(values->InvalidGTTpagetableentry, 7, 7);
6660}
6661
6662#define GEN7_GFX_ARB_ERROR_RPT_num        0x40a0
6663#define GEN7_GFX_ARB_ERROR_RPT_length          1
6664struct GEN7_GFX_ARB_ERROR_RPT {
6665   bool                                 TLBPageFaultError;
6666   bool                                 ContextPageFaultError;
6667   bool                                 InvalidPageDirectoryentryerror;
6668   bool                                 HardwareStatusPageFaultError;
6669   bool                                 TLBPageVTDTranslationError;
6670   bool                                 ContextPageVTDTranslationError;
6671   bool                                 PageDirectoryEntryVTDTranslationError;
6672   bool                                 HardwareStatusPageVTDTranslationError;
6673   bool                                 UnloadedPDError;
6674};
6675
6676static inline void
6677GEN7_GFX_ARB_ERROR_RPT_pack(__attribute__((unused)) __gen_user_data *data,
6678                            __attribute__((unused)) void * restrict dst,
6679                            __attribute__((unused)) const struct GEN7_GFX_ARB_ERROR_RPT * restrict values)
6680{
6681   uint32_t * restrict dw = (uint32_t * restrict) dst;
6682
6683   dw[0] =
6684      __gen_uint(values->TLBPageFaultError, 0, 0) |
6685      __gen_uint(values->ContextPageFaultError, 1, 1) |
6686      __gen_uint(values->InvalidPageDirectoryentryerror, 2, 2) |
6687      __gen_uint(values->HardwareStatusPageFaultError, 3, 3) |
6688      __gen_uint(values->TLBPageVTDTranslationError, 4, 4) |
6689      __gen_uint(values->ContextPageVTDTranslationError, 5, 5) |
6690      __gen_uint(values->PageDirectoryEntryVTDTranslationError, 6, 6) |
6691      __gen_uint(values->HardwareStatusPageVTDTranslationError, 7, 7) |
6692      __gen_uint(values->UnloadedPDError, 8, 8);
6693}
6694
6695#define GEN7_GS_INVOCATION_COUNT_num      0x2328
6696#define GEN7_GS_INVOCATION_COUNT_length        2
6697struct GEN7_GS_INVOCATION_COUNT {
6698   uint64_t                             GSInvocationCountReport;
6699};
6700
6701static inline void
6702GEN7_GS_INVOCATION_COUNT_pack(__attribute__((unused)) __gen_user_data *data,
6703                              __attribute__((unused)) void * restrict dst,
6704                              __attribute__((unused)) const struct GEN7_GS_INVOCATION_COUNT * restrict values)
6705{
6706   uint32_t * restrict dw = (uint32_t * restrict) dst;
6707
6708   const uint64_t v0 =
6709      __gen_uint(values->GSInvocationCountReport, 0, 63);
6710   dw[0] = v0;
6711   dw[1] = v0 >> 32;
6712}
6713
6714#define GEN7_GS_PRIMITIVES_COUNT_num      0x2330
6715#define GEN7_GS_PRIMITIVES_COUNT_length        2
6716struct GEN7_GS_PRIMITIVES_COUNT {
6717   uint64_t                             GSPrimitivesCountReport;
6718};
6719
6720static inline void
6721GEN7_GS_PRIMITIVES_COUNT_pack(__attribute__((unused)) __gen_user_data *data,
6722                              __attribute__((unused)) void * restrict dst,
6723                              __attribute__((unused)) const struct GEN7_GS_PRIMITIVES_COUNT * restrict values)
6724{
6725   uint32_t * restrict dw = (uint32_t * restrict) dst;
6726
6727   const uint64_t v0 =
6728      __gen_uint(values->GSPrimitivesCountReport, 0, 63);
6729   dw[0] = v0;
6730   dw[1] = v0 >> 32;
6731}
6732
6733#define GEN7_HS_INVOCATION_COUNT_num      0x2300
6734#define GEN7_HS_INVOCATION_COUNT_length        2
6735struct GEN7_HS_INVOCATION_COUNT {
6736   uint64_t                             HSInvocationCountReport;
6737};
6738
6739static inline void
6740GEN7_HS_INVOCATION_COUNT_pack(__attribute__((unused)) __gen_user_data *data,
6741                              __attribute__((unused)) void * restrict dst,
6742                              __attribute__((unused)) const struct GEN7_HS_INVOCATION_COUNT * restrict values)
6743{
6744   uint32_t * restrict dw = (uint32_t * restrict) dst;
6745
6746   const uint64_t v0 =
6747      __gen_uint(values->HSInvocationCountReport, 0, 63);
6748   dw[0] = v0;
6749   dw[1] = v0 >> 32;
6750}
6751
6752#define GEN7_IA_PRIMITIVES_COUNT_num      0x2318
6753#define GEN7_IA_PRIMITIVES_COUNT_length        2
6754struct GEN7_IA_PRIMITIVES_COUNT {
6755   uint64_t                             IAPrimitivesCountReport;
6756};
6757
6758static inline void
6759GEN7_IA_PRIMITIVES_COUNT_pack(__attribute__((unused)) __gen_user_data *data,
6760                              __attribute__((unused)) void * restrict dst,
6761                              __attribute__((unused)) const struct GEN7_IA_PRIMITIVES_COUNT * restrict values)
6762{
6763   uint32_t * restrict dw = (uint32_t * restrict) dst;
6764
6765   const uint64_t v0 =
6766      __gen_uint(values->IAPrimitivesCountReport, 0, 63);
6767   dw[0] = v0;
6768   dw[1] = v0 >> 32;
6769}
6770
6771#define GEN7_IA_VERTICES_COUNT_num        0x2310
6772#define GEN7_IA_VERTICES_COUNT_length          2
6773struct GEN7_IA_VERTICES_COUNT {
6774   uint64_t                             IAVerticesCountReport;
6775};
6776
6777static inline void
6778GEN7_IA_VERTICES_COUNT_pack(__attribute__((unused)) __gen_user_data *data,
6779                            __attribute__((unused)) void * restrict dst,
6780                            __attribute__((unused)) const struct GEN7_IA_VERTICES_COUNT * restrict values)
6781{
6782   uint32_t * restrict dw = (uint32_t * restrict) dst;
6783
6784   const uint64_t v0 =
6785      __gen_uint(values->IAVerticesCountReport, 0, 63);
6786   dw[0] = v0;
6787   dw[1] = v0 >> 32;
6788}
6789
6790#define GEN7_INSTDONE_1_num               0x206c
6791#define GEN7_INSTDONE_1_length                 1
6792struct GEN7_INSTDONE_1 {
6793   bool                                 PRB0RingEnable;
6794   bool                                 VFGDone;
6795   bool                                 VSDone;
6796   bool                                 HSDone;
6797   bool                                 TEDone;
6798   bool                                 DSDone;
6799   bool                                 GSDone;
6800   bool                                 SOLDone;
6801   bool                                 CLDone;
6802   bool                                 SFDone;
6803   bool                                 TDGDone;
6804   bool                                 URBMDone;
6805   bool                                 SVGDone;
6806   bool                                 GAFSDone;
6807   bool                                 VFEDone;
6808   bool                                 TSGDone;
6809   bool                                 GAFMDone;
6810   bool                                 GAMDone;
6811   bool                                 SDEDone;
6812   bool                                 RCCFBCCSDone;
6813};
6814
6815static inline void
6816GEN7_INSTDONE_1_pack(__attribute__((unused)) __gen_user_data *data,
6817                     __attribute__((unused)) void * restrict dst,
6818                     __attribute__((unused)) const struct GEN7_INSTDONE_1 * restrict values)
6819{
6820   uint32_t * restrict dw = (uint32_t * restrict) dst;
6821
6822   dw[0] =
6823      __gen_uint(values->PRB0RingEnable, 0, 0) |
6824      __gen_uint(values->VFGDone, 1, 1) |
6825      __gen_uint(values->VSDone, 2, 2) |
6826      __gen_uint(values->HSDone, 3, 3) |
6827      __gen_uint(values->TEDone, 4, 4) |
6828      __gen_uint(values->DSDone, 5, 5) |
6829      __gen_uint(values->GSDone, 6, 6) |
6830      __gen_uint(values->SOLDone, 7, 7) |
6831      __gen_uint(values->CLDone, 8, 8) |
6832      __gen_uint(values->SFDone, 9, 9) |
6833      __gen_uint(values->TDGDone, 12, 12) |
6834      __gen_uint(values->URBMDone, 13, 13) |
6835      __gen_uint(values->SVGDone, 14, 14) |
6836      __gen_uint(values->GAFSDone, 15, 15) |
6837      __gen_uint(values->VFEDone, 16, 16) |
6838      __gen_uint(values->TSGDone, 17, 17) |
6839      __gen_uint(values->GAFMDone, 18, 18) |
6840      __gen_uint(values->GAMDone, 19, 19) |
6841      __gen_uint(values->SDEDone, 22, 22) |
6842      __gen_uint(values->RCCFBCCSDone, 23, 23);
6843}
6844
6845#define GEN7_INSTPM_num                   0x20c0
6846#define GEN7_INSTPM_length                     1
6847struct GEN7_INSTPM {
6848   bool                                 _3DStateInstructionDisable;
6849   bool                                 _3DRenderingInstructionDisable;
6850   bool                                 MediaInstructionDisable;
6851   bool                                 CONSTANT_BUFFERAddressOffsetDisable;
6852   bool                                 _3DStateInstructionDisableMask;
6853   bool                                 _3DRenderingInstructionDisableMask;
6854   bool                                 MediaInstructionDisableMask;
6855   bool                                 CONSTANT_BUFFERAddressOffsetDisableMask;
6856};
6857
6858static inline void
6859GEN7_INSTPM_pack(__attribute__((unused)) __gen_user_data *data,
6860                 __attribute__((unused)) void * restrict dst,
6861                 __attribute__((unused)) const struct GEN7_INSTPM * restrict values)
6862{
6863   uint32_t * restrict dw = (uint32_t * restrict) dst;
6864
6865   dw[0] =
6866      __gen_uint(values->_3DStateInstructionDisable, 1, 1) |
6867      __gen_uint(values->_3DRenderingInstructionDisable, 2, 2) |
6868      __gen_uint(values->MediaInstructionDisable, 3, 3) |
6869      __gen_uint(values->CONSTANT_BUFFERAddressOffsetDisable, 6, 6) |
6870      __gen_uint(values->_3DStateInstructionDisableMask, 17, 17) |
6871      __gen_uint(values->_3DRenderingInstructionDisableMask, 18, 18) |
6872      __gen_uint(values->MediaInstructionDisableMask, 19, 19) |
6873      __gen_uint(values->CONSTANT_BUFFERAddressOffsetDisableMask, 22, 22);
6874}
6875
6876#define GEN7_L3CNTLREG2_num               0xb020
6877#define GEN7_L3CNTLREG2_length                 1
6878struct GEN7_L3CNTLREG2 {
6879   uint32_t                             SLMEnable;
6880   uint32_t                             URBAllocation;
6881   uint32_t                             URBLowBandwidth;
6882   uint32_t                             ALLAllocation;
6883   uint32_t                             ROAllocation;
6884   uint32_t                             ROLowBandwidth;
6885   uint32_t                             DCAllocation;
6886   uint32_t                             DCLowBandwidth;
6887};
6888
6889static inline void
6890GEN7_L3CNTLREG2_pack(__attribute__((unused)) __gen_user_data *data,
6891                     __attribute__((unused)) void * restrict dst,
6892                     __attribute__((unused)) const struct GEN7_L3CNTLREG2 * restrict values)
6893{
6894   uint32_t * restrict dw = (uint32_t * restrict) dst;
6895
6896   dw[0] =
6897      __gen_uint(values->SLMEnable, 0, 0) |
6898      __gen_uint(values->URBAllocation, 1, 6) |
6899      __gen_uint(values->URBLowBandwidth, 7, 7) |
6900      __gen_uint(values->ALLAllocation, 8, 13) |
6901      __gen_uint(values->ROAllocation, 14, 19) |
6902      __gen_uint(values->ROLowBandwidth, 20, 20) |
6903      __gen_uint(values->DCAllocation, 21, 26) |
6904      __gen_uint(values->DCLowBandwidth, 27, 27);
6905}
6906
6907#define GEN7_L3CNTLREG3_num               0xb024
6908#define GEN7_L3CNTLREG3_length                 1
6909struct GEN7_L3CNTLREG3 {
6910   uint32_t                             ISAllocation;
6911   uint32_t                             ISLowBandwidth;
6912   uint32_t                             CAllocation;
6913   uint32_t                             CLowBandwidth;
6914   uint32_t                             TAllocation;
6915   uint32_t                             TLowBandwidth;
6916};
6917
6918static inline void
6919GEN7_L3CNTLREG3_pack(__attribute__((unused)) __gen_user_data *data,
6920                     __attribute__((unused)) void * restrict dst,
6921                     __attribute__((unused)) const struct GEN7_L3CNTLREG3 * restrict values)
6922{
6923   uint32_t * restrict dw = (uint32_t * restrict) dst;
6924
6925   dw[0] =
6926      __gen_uint(values->ISAllocation, 1, 6) |
6927      __gen_uint(values->ISLowBandwidth, 7, 7) |
6928      __gen_uint(values->CAllocation, 8, 13) |
6929      __gen_uint(values->CLowBandwidth, 14, 14) |
6930      __gen_uint(values->TAllocation, 15, 20) |
6931      __gen_uint(values->TLowBandwidth, 21, 21);
6932}
6933
6934#define GEN7_L3SQCREG1_num                0xb010
6935#define GEN7_L3SQCREG1_length                  1
6936struct GEN7_L3SQCREG1 {
6937   uint32_t                             ConvertDC_UC;
6938   uint32_t                             ConvertIS_UC;
6939   uint32_t                             ConvertC_UC;
6940   uint32_t                             ConvertT_UC;
6941};
6942
6943static inline void
6944GEN7_L3SQCREG1_pack(__attribute__((unused)) __gen_user_data *data,
6945                    __attribute__((unused)) void * restrict dst,
6946                    __attribute__((unused)) const struct GEN7_L3SQCREG1 * restrict values)
6947{
6948   uint32_t * restrict dw = (uint32_t * restrict) dst;
6949
6950   dw[0] =
6951      __gen_uint(values->ConvertDC_UC, 24, 24) |
6952      __gen_uint(values->ConvertIS_UC, 25, 25) |
6953      __gen_uint(values->ConvertC_UC, 26, 26) |
6954      __gen_uint(values->ConvertT_UC, 27, 27);
6955}
6956
6957#define GEN7_PS_INVOCATION_COUNT_num      0x2348
6958#define GEN7_PS_INVOCATION_COUNT_length        2
6959struct GEN7_PS_INVOCATION_COUNT {
6960   uint64_t                             PSInvocationCountReport;
6961};
6962
6963static inline void
6964GEN7_PS_INVOCATION_COUNT_pack(__attribute__((unused)) __gen_user_data *data,
6965                              __attribute__((unused)) void * restrict dst,
6966                              __attribute__((unused)) const struct GEN7_PS_INVOCATION_COUNT * restrict values)
6967{
6968   uint32_t * restrict dw = (uint32_t * restrict) dst;
6969
6970   const uint64_t v0 =
6971      __gen_uint(values->PSInvocationCountReport, 0, 63);
6972   dw[0] = v0;
6973   dw[1] = v0 >> 32;
6974}
6975
6976#define GEN7_RCS_FAULT_REG_num            0x4094
6977#define GEN7_RCS_FAULT_REG_length              1
6978struct GEN7_RCS_FAULT_REG {
6979   bool                                 ValidBit;
6980   uint32_t                             FaultType;
6981#define PageFault                                0
6982#define InvalidPDFault                           1
6983#define UnloadedPDFault                          2
6984#define InvalidandUnloadedPDfault                3
6985   uint32_t                             SRCIDofFault;
6986   uint32_t                             GTTSEL;
6987#define PPGTT                                    0
6988#define GGTT                                     1
6989   __gen_address_type                   VirtualAddressofFault;
6990};
6991
6992static inline void
6993GEN7_RCS_FAULT_REG_pack(__attribute__((unused)) __gen_user_data *data,
6994                        __attribute__((unused)) void * restrict dst,
6995                        __attribute__((unused)) const struct GEN7_RCS_FAULT_REG * restrict values)
6996{
6997   uint32_t * restrict dw = (uint32_t * restrict) dst;
6998
6999   const uint32_t v0 =
7000      __gen_uint(values->ValidBit, 0, 0) |
7001      __gen_uint(values->FaultType, 1, 2) |
7002      __gen_uint(values->SRCIDofFault, 3, 10) |
7003      __gen_uint(values->GTTSEL, 11, 11);
7004   dw[0] = __gen_combine_address(data, &dw[0], values->VirtualAddressofFault, v0);
7005}
7006
7007#define GEN7_RCS_RING_BUFFER_CTL_num      0x203c
7008#define GEN7_RCS_RING_BUFFER_CTL_length        1
7009struct GEN7_RCS_RING_BUFFER_CTL {
7010   bool                                 RingBufferEnable;
7011   uint32_t                             AutomaticReportHeadPointer;
7012#define MI_AUTOREPORT_OFF                        0
7013#define MI_AUTOREPORT_64KBMI_AUTOREPORT_4KB      1
7014#define MI_AUTOREPORT_128KB                      3
7015   bool                                 SemaphoreWait;
7016   bool                                 RBWait;
7017   uint32_t                             BufferLengthinpages1;
7018};
7019
7020static inline void
7021GEN7_RCS_RING_BUFFER_CTL_pack(__attribute__((unused)) __gen_user_data *data,
7022                              __attribute__((unused)) void * restrict dst,
7023                              __attribute__((unused)) const struct GEN7_RCS_RING_BUFFER_CTL * restrict values)
7024{
7025   uint32_t * restrict dw = (uint32_t * restrict) dst;
7026
7027   dw[0] =
7028      __gen_uint(values->RingBufferEnable, 0, 0) |
7029      __gen_uint(values->AutomaticReportHeadPointer, 1, 2) |
7030      __gen_uint(values->SemaphoreWait, 10, 10) |
7031      __gen_uint(values->RBWait, 11, 11) |
7032      __gen_uint(values->BufferLengthinpages1, 12, 20);
7033}
7034
7035#define GEN7_ROW_INSTDONE_num             0xe164
7036#define GEN7_ROW_INSTDONE_length               1
7037struct GEN7_ROW_INSTDONE {
7038   bool                                 BCDone;
7039   bool                                 PSDDone;
7040   bool                                 DCDone;
7041   bool                                 DAPRDone;
7042   bool                                 TDLDone;
7043   bool                                 GWDone;
7044   bool                                 ICDone;
7045   bool                                 EU00DoneSS0;
7046   bool                                 EU01DoneSS0;
7047   bool                                 EU02DoneSS0;
7048   bool                                 EU03DoneSS0;
7049   bool                                 MA0DoneSS0;
7050   bool                                 EU10DoneSS0;
7051   bool                                 EU11DoneSS0;
7052   bool                                 EU12DoneSS0;
7053   bool                                 EU13DoneSS0;
7054   bool                                 MA1Done;
7055};
7056
7057static inline void
7058GEN7_ROW_INSTDONE_pack(__attribute__((unused)) __gen_user_data *data,
7059                       __attribute__((unused)) void * restrict dst,
7060                       __attribute__((unused)) const struct GEN7_ROW_INSTDONE * restrict values)
7061{
7062   uint32_t * restrict dw = (uint32_t * restrict) dst;
7063
7064   dw[0] =
7065      __gen_uint(values->BCDone, 0, 0) |
7066      __gen_uint(values->PSDDone, 1, 1) |
7067      __gen_uint(values->DCDone, 2, 2) |
7068      __gen_uint(values->DAPRDone, 3, 3) |
7069      __gen_uint(values->TDLDone, 6, 6) |
7070      __gen_uint(values->GWDone, 8, 8) |
7071      __gen_uint(values->ICDone, 12, 12) |
7072      __gen_uint(values->EU00DoneSS0, 16, 16) |
7073      __gen_uint(values->EU01DoneSS0, 17, 17) |
7074      __gen_uint(values->EU02DoneSS0, 18, 18) |
7075      __gen_uint(values->EU03DoneSS0, 19, 19) |
7076      __gen_uint(values->MA0DoneSS0, 20, 20) |
7077      __gen_uint(values->EU10DoneSS0, 21, 21) |
7078      __gen_uint(values->EU11DoneSS0, 22, 22) |
7079      __gen_uint(values->EU12DoneSS0, 23, 23) |
7080      __gen_uint(values->EU13DoneSS0, 24, 24) |
7081      __gen_uint(values->MA1Done, 25, 25);
7082}
7083
7084#define GEN7_SAMPLER_INSTDONE_num         0xe160
7085#define GEN7_SAMPLER_INSTDONE_length           1
7086struct GEN7_SAMPLER_INSTDONE {
7087   bool                                 VMEDone;
7088   bool                                 PL0Done;
7089   bool                                 SO0Done;
7090   bool                                 DG0Done;
7091   bool                                 FT0Done;
7092   bool                                 DM0Done;
7093   bool                                 SCDone;
7094   bool                                 FL0Done;
7095   bool                                 QCDone;
7096   bool                                 SVSMDone;
7097   bool                                 SI0Done;
7098   bool                                 MT0Done;
7099   bool                                 AVSDone;
7100   bool                                 IEFDone;
7101   bool                                 VDIDone;
7102   bool                                 SVSMARB3;
7103   bool                                 SVSMARB2;
7104   bool                                 SVSMARB1;
7105   bool                                 SVSMAdapter;
7106};
7107
7108static inline void
7109GEN7_SAMPLER_INSTDONE_pack(__attribute__((unused)) __gen_user_data *data,
7110                           __attribute__((unused)) void * restrict dst,
7111                           __attribute__((unused)) const struct GEN7_SAMPLER_INSTDONE * restrict values)
7112{
7113   uint32_t * restrict dw = (uint32_t * restrict) dst;
7114
7115   dw[0] =
7116      __gen_uint(values->VMEDone, 0, 0) |
7117      __gen_uint(values->PL0Done, 1, 1) |
7118      __gen_uint(values->SO0Done, 2, 2) |
7119      __gen_uint(values->DG0Done, 3, 3) |
7120      __gen_uint(values->FT0Done, 4, 4) |
7121      __gen_uint(values->DM0Done, 5, 5) |
7122      __gen_uint(values->SCDone, 6, 6) |
7123      __gen_uint(values->FL0Done, 7, 7) |
7124      __gen_uint(values->QCDone, 8, 8) |
7125      __gen_uint(values->SVSMDone, 9, 9) |
7126      __gen_uint(values->SI0Done, 10, 10) |
7127      __gen_uint(values->MT0Done, 11, 11) |
7128      __gen_uint(values->AVSDone, 12, 12) |
7129      __gen_uint(values->IEFDone, 13, 13) |
7130      __gen_uint(values->VDIDone, 14, 14) |
7131      __gen_uint(values->SVSMARB3, 15, 15) |
7132      __gen_uint(values->SVSMARB2, 16, 16) |
7133      __gen_uint(values->SVSMARB1, 17, 17) |
7134      __gen_uint(values->SVSMAdapter, 18, 18);
7135}
7136
7137#define GEN7_SC_INSTDONE_num              0x7100
7138#define GEN7_SC_INSTDONE_length                1
7139struct GEN7_SC_INSTDONE {
7140   bool                                 SVLDone;
7141   bool                                 WMFEDone;
7142   bool                                 WMBEDone;
7143   bool                                 HIZDone;
7144   bool                                 STCDone;
7145   bool                                 IZDone;
7146   bool                                 SBEDone;
7147   bool                                 RCZDone;
7148   bool                                 RCCDone;
7149   bool                                 RCPBEDone;
7150   bool                                 RCPFEDone;
7151   bool                                 DAPBDone;
7152   bool                                 DAPRBEDone;
7153   bool                                 IECPDone;
7154   bool                                 SARBDone;
7155   bool                                 VSCDone;
7156};
7157
7158static inline void
7159GEN7_SC_INSTDONE_pack(__attribute__((unused)) __gen_user_data *data,
7160                      __attribute__((unused)) void * restrict dst,
7161                      __attribute__((unused)) const struct GEN7_SC_INSTDONE * restrict values)
7162{
7163   uint32_t * restrict dw = (uint32_t * restrict) dst;
7164
7165   dw[0] =
7166      __gen_uint(values->SVLDone, 0, 0) |
7167      __gen_uint(values->WMFEDone, 1, 1) |
7168      __gen_uint(values->WMBEDone, 2, 2) |
7169      __gen_uint(values->HIZDone, 3, 3) |
7170      __gen_uint(values->STCDone, 4, 4) |
7171      __gen_uint(values->IZDone, 5, 5) |
7172      __gen_uint(values->SBEDone, 6, 6) |
7173      __gen_uint(values->RCZDone, 8, 8) |
7174      __gen_uint(values->RCCDone, 9, 9) |
7175      __gen_uint(values->RCPBEDone, 10, 10) |
7176      __gen_uint(values->RCPFEDone, 11, 11) |
7177      __gen_uint(values->DAPBDone, 12, 12) |
7178      __gen_uint(values->DAPRBEDone, 13, 13) |
7179      __gen_uint(values->IECPDone, 14, 14) |
7180      __gen_uint(values->SARBDone, 15, 15) |
7181      __gen_uint(values->VSCDone, 16, 16);
7182}
7183
7184#define GEN7_SO_NUM_PRIMS_WRITTEN0_num    0x5200
7185#define GEN7_SO_NUM_PRIMS_WRITTEN0_length      2
7186struct GEN7_SO_NUM_PRIMS_WRITTEN0 {
7187   uint64_t                             NumPrimsWrittenCount;
7188};
7189
7190static inline void
7191GEN7_SO_NUM_PRIMS_WRITTEN0_pack(__attribute__((unused)) __gen_user_data *data,
7192                                __attribute__((unused)) void * restrict dst,
7193                                __attribute__((unused)) const struct GEN7_SO_NUM_PRIMS_WRITTEN0 * restrict values)
7194{
7195   uint32_t * restrict dw = (uint32_t * restrict) dst;
7196
7197   const uint64_t v0 =
7198      __gen_uint(values->NumPrimsWrittenCount, 0, 63);
7199   dw[0] = v0;
7200   dw[1] = v0 >> 32;
7201}
7202
7203#define GEN7_SO_NUM_PRIMS_WRITTEN1_num    0x5208
7204#define GEN7_SO_NUM_PRIMS_WRITTEN1_length      2
7205struct GEN7_SO_NUM_PRIMS_WRITTEN1 {
7206   uint64_t                             NumPrimsWrittenCount;
7207};
7208
7209static inline void
7210GEN7_SO_NUM_PRIMS_WRITTEN1_pack(__attribute__((unused)) __gen_user_data *data,
7211                                __attribute__((unused)) void * restrict dst,
7212                                __attribute__((unused)) const struct GEN7_SO_NUM_PRIMS_WRITTEN1 * restrict values)
7213{
7214   uint32_t * restrict dw = (uint32_t * restrict) dst;
7215
7216   const uint64_t v0 =
7217      __gen_uint(values->NumPrimsWrittenCount, 0, 63);
7218   dw[0] = v0;
7219   dw[1] = v0 >> 32;
7220}
7221
7222#define GEN7_SO_NUM_PRIMS_WRITTEN2_num    0x5210
7223#define GEN7_SO_NUM_PRIMS_WRITTEN2_length      2
7224struct GEN7_SO_NUM_PRIMS_WRITTEN2 {
7225   uint64_t                             NumPrimsWrittenCount;
7226};
7227
7228static inline void
7229GEN7_SO_NUM_PRIMS_WRITTEN2_pack(__attribute__((unused)) __gen_user_data *data,
7230                                __attribute__((unused)) void * restrict dst,
7231                                __attribute__((unused)) const struct GEN7_SO_NUM_PRIMS_WRITTEN2 * restrict values)
7232{
7233   uint32_t * restrict dw = (uint32_t * restrict) dst;
7234
7235   const uint64_t v0 =
7236      __gen_uint(values->NumPrimsWrittenCount, 0, 63);
7237   dw[0] = v0;
7238   dw[1] = v0 >> 32;
7239}
7240
7241#define GEN7_SO_NUM_PRIMS_WRITTEN3_num    0x5218
7242#define GEN7_SO_NUM_PRIMS_WRITTEN3_length      2
7243struct GEN7_SO_NUM_PRIMS_WRITTEN3 {
7244   uint64_t                             NumPrimsWrittenCount;
7245};
7246
7247static inline void
7248GEN7_SO_NUM_PRIMS_WRITTEN3_pack(__attribute__((unused)) __gen_user_data *data,
7249                                __attribute__((unused)) void * restrict dst,
7250                                __attribute__((unused)) const struct GEN7_SO_NUM_PRIMS_WRITTEN3 * restrict values)
7251{
7252   uint32_t * restrict dw = (uint32_t * restrict) dst;
7253
7254   const uint64_t v0 =
7255      __gen_uint(values->NumPrimsWrittenCount, 0, 63);
7256   dw[0] = v0;
7257   dw[1] = v0 >> 32;
7258}
7259
7260#define GEN7_SO_PRIM_STORAGE_NEEDED0_num  0x5240
7261#define GEN7_SO_PRIM_STORAGE_NEEDED0_length      2
7262struct GEN7_SO_PRIM_STORAGE_NEEDED0 {
7263   uint64_t                             PrimStorageNeededCount;
7264};
7265
7266static inline void
7267GEN7_SO_PRIM_STORAGE_NEEDED0_pack(__attribute__((unused)) __gen_user_data *data,
7268                                  __attribute__((unused)) void * restrict dst,
7269                                  __attribute__((unused)) const struct GEN7_SO_PRIM_STORAGE_NEEDED0 * restrict values)
7270{
7271   uint32_t * restrict dw = (uint32_t * restrict) dst;
7272
7273   const uint64_t v0 =
7274      __gen_uint(values->PrimStorageNeededCount, 0, 63);
7275   dw[0] = v0;
7276   dw[1] = v0 >> 32;
7277}
7278
7279#define GEN7_SO_PRIM_STORAGE_NEEDED1_num  0x5248
7280#define GEN7_SO_PRIM_STORAGE_NEEDED1_length      2
7281struct GEN7_SO_PRIM_STORAGE_NEEDED1 {
7282   uint64_t                             PrimStorageNeededCount;
7283};
7284
7285static inline void
7286GEN7_SO_PRIM_STORAGE_NEEDED1_pack(__attribute__((unused)) __gen_user_data *data,
7287                                  __attribute__((unused)) void * restrict dst,
7288                                  __attribute__((unused)) const struct GEN7_SO_PRIM_STORAGE_NEEDED1 * restrict values)
7289{
7290   uint32_t * restrict dw = (uint32_t * restrict) dst;
7291
7292   const uint64_t v0 =
7293      __gen_uint(values->PrimStorageNeededCount, 0, 63);
7294   dw[0] = v0;
7295   dw[1] = v0 >> 32;
7296}
7297
7298#define GEN7_SO_PRIM_STORAGE_NEEDED2_num  0x5250
7299#define GEN7_SO_PRIM_STORAGE_NEEDED2_length      2
7300struct GEN7_SO_PRIM_STORAGE_NEEDED2 {
7301   uint64_t                             PrimStorageNeededCount;
7302};
7303
7304static inline void
7305GEN7_SO_PRIM_STORAGE_NEEDED2_pack(__attribute__((unused)) __gen_user_data *data,
7306                                  __attribute__((unused)) void * restrict dst,
7307                                  __attribute__((unused)) const struct GEN7_SO_PRIM_STORAGE_NEEDED2 * restrict values)
7308{
7309   uint32_t * restrict dw = (uint32_t * restrict) dst;
7310
7311   const uint64_t v0 =
7312      __gen_uint(values->PrimStorageNeededCount, 0, 63);
7313   dw[0] = v0;
7314   dw[1] = v0 >> 32;
7315}
7316
7317#define GEN7_SO_PRIM_STORAGE_NEEDED3_num  0x5258
7318#define GEN7_SO_PRIM_STORAGE_NEEDED3_length      2
7319struct GEN7_SO_PRIM_STORAGE_NEEDED3 {
7320   uint64_t                             PrimStorageNeededCount;
7321};
7322
7323static inline void
7324GEN7_SO_PRIM_STORAGE_NEEDED3_pack(__attribute__((unused)) __gen_user_data *data,
7325                                  __attribute__((unused)) void * restrict dst,
7326                                  __attribute__((unused)) const struct GEN7_SO_PRIM_STORAGE_NEEDED3 * restrict values)
7327{
7328   uint32_t * restrict dw = (uint32_t * restrict) dst;
7329
7330   const uint64_t v0 =
7331      __gen_uint(values->PrimStorageNeededCount, 0, 63);
7332   dw[0] = v0;
7333   dw[1] = v0 >> 32;
7334}
7335
7336#define GEN7_SO_WRITE_OFFSET0_num         0x5280
7337#define GEN7_SO_WRITE_OFFSET0_length           1
7338struct GEN7_SO_WRITE_OFFSET0 {
7339   uint64_t                             WriteOffset;
7340};
7341
7342static inline void
7343GEN7_SO_WRITE_OFFSET0_pack(__attribute__((unused)) __gen_user_data *data,
7344                           __attribute__((unused)) void * restrict dst,
7345                           __attribute__((unused)) const struct GEN7_SO_WRITE_OFFSET0 * restrict values)
7346{
7347   uint32_t * restrict dw = (uint32_t * restrict) dst;
7348
7349   dw[0] =
7350      __gen_offset(values->WriteOffset, 2, 31);
7351}
7352
7353#define GEN7_SO_WRITE_OFFSET1_num         0x5284
7354#define GEN7_SO_WRITE_OFFSET1_length           1
7355struct GEN7_SO_WRITE_OFFSET1 {
7356   uint64_t                             WriteOffset;
7357};
7358
7359static inline void
7360GEN7_SO_WRITE_OFFSET1_pack(__attribute__((unused)) __gen_user_data *data,
7361                           __attribute__((unused)) void * restrict dst,
7362                           __attribute__((unused)) const struct GEN7_SO_WRITE_OFFSET1 * restrict values)
7363{
7364   uint32_t * restrict dw = (uint32_t * restrict) dst;
7365
7366   dw[0] =
7367      __gen_offset(values->WriteOffset, 2, 31);
7368}
7369
7370#define GEN7_SO_WRITE_OFFSET2_num         0x5288
7371#define GEN7_SO_WRITE_OFFSET2_length           1
7372struct GEN7_SO_WRITE_OFFSET2 {
7373   uint64_t                             WriteOffset;
7374};
7375
7376static inline void
7377GEN7_SO_WRITE_OFFSET2_pack(__attribute__((unused)) __gen_user_data *data,
7378                           __attribute__((unused)) void * restrict dst,
7379                           __attribute__((unused)) const struct GEN7_SO_WRITE_OFFSET2 * restrict values)
7380{
7381   uint32_t * restrict dw = (uint32_t * restrict) dst;
7382
7383   dw[0] =
7384      __gen_offset(values->WriteOffset, 2, 31);
7385}
7386
7387#define GEN7_SO_WRITE_OFFSET3_num         0x528c
7388#define GEN7_SO_WRITE_OFFSET3_length           1
7389struct GEN7_SO_WRITE_OFFSET3 {
7390   uint64_t                             WriteOffset;
7391};
7392
7393static inline void
7394GEN7_SO_WRITE_OFFSET3_pack(__attribute__((unused)) __gen_user_data *data,
7395                           __attribute__((unused)) void * restrict dst,
7396                           __attribute__((unused)) const struct GEN7_SO_WRITE_OFFSET3 * restrict values)
7397{
7398   uint32_t * restrict dw = (uint32_t * restrict) dst;
7399
7400   dw[0] =
7401      __gen_offset(values->WriteOffset, 2, 31);
7402}
7403
7404#define GEN7_VCS_FAULT_REG_num            0x4194
7405#define GEN7_VCS_FAULT_REG_length              1
7406struct GEN7_VCS_FAULT_REG {
7407   bool                                 ValidBit;
7408   uint32_t                             FaultType;
7409#define PageFault                                0
7410#define InvalidPDFault                           1
7411#define UnloadedPDFault                          2
7412#define InvalidandUnloadedPDfault                3
7413   uint32_t                             SRCIDofFault;
7414   uint32_t                             GTTSEL;
7415#define PPGTT                                    0
7416#define GGTT                                     1
7417   __gen_address_type                   VirtualAddressofFault;
7418};
7419
7420static inline void
7421GEN7_VCS_FAULT_REG_pack(__attribute__((unused)) __gen_user_data *data,
7422                        __attribute__((unused)) void * restrict dst,
7423                        __attribute__((unused)) const struct GEN7_VCS_FAULT_REG * restrict values)
7424{
7425   uint32_t * restrict dw = (uint32_t * restrict) dst;
7426
7427   const uint32_t v0 =
7428      __gen_uint(values->ValidBit, 0, 0) |
7429      __gen_uint(values->FaultType, 1, 2) |
7430      __gen_uint(values->SRCIDofFault, 3, 10) |
7431      __gen_uint(values->GTTSEL, 11, 11);
7432   dw[0] = __gen_combine_address(data, &dw[0], values->VirtualAddressofFault, v0);
7433}
7434
7435#define GEN7_VCS_INSTDONE_num             0x1206c
7436#define GEN7_VCS_INSTDONE_length               1
7437struct GEN7_VCS_INSTDONE {
7438   bool                                 RingEnable;
7439   bool                                 USBDone;
7440   bool                                 QRCDone;
7441   bool                                 SECDone;
7442   bool                                 MPCDone;
7443   bool                                 VFTDone;
7444   bool                                 BSPDone;
7445   bool                                 VLFDone;
7446   bool                                 VOPDone;
7447   bool                                 VMCDone;
7448   bool                                 VIPDone;
7449   bool                                 VITDone;
7450   bool                                 VDSDone;
7451   bool                                 VMXDone;
7452   bool                                 VCPDone;
7453   bool                                 VCDDone;
7454   bool                                 VADDone;
7455   bool                                 VMDDone;
7456   bool                                 VISDone;
7457   bool                                 VACDone;
7458   bool                                 VAMDone;
7459   bool                                 JPGDone;
7460   bool                                 VBPDone;
7461   bool                                 VHRDone;
7462   bool                                 VCIDone;
7463   bool                                 VCRDone;
7464   bool                                 VINDone;
7465   bool                                 VPRDone;
7466   bool                                 VTQDone;
7467   bool                                 VCSDone;
7468   bool                                 GACDone;
7469};
7470
7471static inline void
7472GEN7_VCS_INSTDONE_pack(__attribute__((unused)) __gen_user_data *data,
7473                       __attribute__((unused)) void * restrict dst,
7474                       __attribute__((unused)) const struct GEN7_VCS_INSTDONE * restrict values)
7475{
7476   uint32_t * restrict dw = (uint32_t * restrict) dst;
7477
7478   dw[0] =
7479      __gen_uint(values->RingEnable, 0, 0) |
7480      __gen_uint(values->USBDone, 1, 1) |
7481      __gen_uint(values->QRCDone, 2, 2) |
7482      __gen_uint(values->SECDone, 3, 3) |
7483      __gen_uint(values->MPCDone, 4, 4) |
7484      __gen_uint(values->VFTDone, 5, 5) |
7485      __gen_uint(values->BSPDone, 6, 6) |
7486      __gen_uint(values->VLFDone, 7, 7) |
7487      __gen_uint(values->VOPDone, 8, 8) |
7488      __gen_uint(values->VMCDone, 9, 9) |
7489      __gen_uint(values->VIPDone, 10, 10) |
7490      __gen_uint(values->VITDone, 11, 11) |
7491      __gen_uint(values->VDSDone, 12, 12) |
7492      __gen_uint(values->VMXDone, 13, 13) |
7493      __gen_uint(values->VCPDone, 14, 14) |
7494      __gen_uint(values->VCDDone, 15, 15) |
7495      __gen_uint(values->VADDone, 16, 16) |
7496      __gen_uint(values->VMDDone, 17, 17) |
7497      __gen_uint(values->VISDone, 18, 18) |
7498      __gen_uint(values->VACDone, 19, 19) |
7499      __gen_uint(values->VAMDone, 20, 20) |
7500      __gen_uint(values->JPGDone, 21, 21) |
7501      __gen_uint(values->VBPDone, 22, 22) |
7502      __gen_uint(values->VHRDone, 23, 23) |
7503      __gen_uint(values->VCIDone, 24, 24) |
7504      __gen_uint(values->VCRDone, 25, 25) |
7505      __gen_uint(values->VINDone, 26, 26) |
7506      __gen_uint(values->VPRDone, 27, 27) |
7507      __gen_uint(values->VTQDone, 28, 28) |
7508      __gen_uint(values->VCSDone, 30, 30) |
7509      __gen_uint(values->GACDone, 31, 31);
7510}
7511
7512#define GEN7_VCS_RING_BUFFER_CTL_num      0x1203c
7513#define GEN7_VCS_RING_BUFFER_CTL_length        1
7514struct GEN7_VCS_RING_BUFFER_CTL {
7515   bool                                 RingBufferEnable;
7516   uint32_t                             AutomaticReportHeadPointer;
7517#define MI_AUTOREPORT_OFF                        0
7518#define MI_AUTOREPORT_64KB                       1
7519#define MI_AUTOREPORT_4KB                        2
7520#define MI_AUTOREPORT_128KB                      3
7521   bool                                 DisableRegisterAccesses;
7522   bool                                 SemaphoreWait;
7523   bool                                 RBWait;
7524   uint32_t                             BufferLengthinpages1;
7525};
7526
7527static inline void
7528GEN7_VCS_RING_BUFFER_CTL_pack(__attribute__((unused)) __gen_user_data *data,
7529                              __attribute__((unused)) void * restrict dst,
7530                              __attribute__((unused)) const struct GEN7_VCS_RING_BUFFER_CTL * restrict values)
7531{
7532   uint32_t * restrict dw = (uint32_t * restrict) dst;
7533
7534   dw[0] =
7535      __gen_uint(values->RingBufferEnable, 0, 0) |
7536      __gen_uint(values->AutomaticReportHeadPointer, 1, 2) |
7537      __gen_uint(values->DisableRegisterAccesses, 8, 8) |
7538      __gen_uint(values->SemaphoreWait, 10, 10) |
7539      __gen_uint(values->RBWait, 11, 11) |
7540      __gen_uint(values->BufferLengthinpages1, 12, 20);
7541}
7542
7543#define GEN7_VS_INVOCATION_COUNT_num      0x2320
7544#define GEN7_VS_INVOCATION_COUNT_length        2
7545struct GEN7_VS_INVOCATION_COUNT {
7546   uint64_t                             VSInvocationCountReport;
7547};
7548
7549static inline void
7550GEN7_VS_INVOCATION_COUNT_pack(__attribute__((unused)) __gen_user_data *data,
7551                              __attribute__((unused)) void * restrict dst,
7552                              __attribute__((unused)) const struct GEN7_VS_INVOCATION_COUNT * restrict values)
7553{
7554   uint32_t * restrict dw = (uint32_t * restrict) dst;
7555
7556   const uint64_t v0 =
7557      __gen_uint(values->VSInvocationCountReport, 0, 63);
7558   dw[0] = v0;
7559   dw[1] = v0 >> 32;
7560}
7561
7562#endif /* GEN7_PACK_H */
7563