gen45_pack.h revision 10e230b6
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 CTG.
26 *
27 * This file has been generated, do not hand edit.
28 */
29
30#ifndef GEN45_PACK_H
31#define GEN45_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 GEN45_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 GEN45_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 GEN45_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 GEN45_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 GEN45_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};
252
253enum GEN45_3D_Stencil_Operation {
254   STENCILOP_KEEP                       =      0,
255   STENCILOP_ZERO                       =      1,
256   STENCILOP_REPLACE                    =      2,
257   STENCILOP_INCRSAT                    =      3,
258   STENCILOP_DECRSAT                    =      4,
259   STENCILOP_INCR                       =      5,
260   STENCILOP_DECR                       =      6,
261   STENCILOP_INVERT                     =      7,
262};
263
264enum GEN45_3D_Vertex_Component_Control {
265   VFCOMP_NOSTORE                       =      0,
266   VFCOMP_STORE_SRC                     =      1,
267   VFCOMP_STORE_0                       =      2,
268   VFCOMP_STORE_1_FP                    =      3,
269   VFCOMP_STORE_1_INT                   =      4,
270   VFCOMP_STORE_VID                     =      5,
271   VFCOMP_STORE_IID                     =      6,
272   VFCOMP_STORE_PID                     =      7,
273};
274
275enum GEN45_Texture_Coordinate_Mode {
276   TCM_WRAP                             =      0,
277   TCM_MIRROR                           =      1,
278   TCM_CLAMP                            =      2,
279   TCM_CUBE                             =      3,
280   TCM_CLAMP_BORDER                     =      4,
281   TCM_MIRROR_ONCE                      =      5,
282};
283
284#define GEN45_CC_VIEWPORT_length               2
285struct GEN45_CC_VIEWPORT {
286   float                                MinimumDepth;
287   float                                MaximumDepth;
288};
289
290static inline void
291GEN45_CC_VIEWPORT_pack(__attribute__((unused)) __gen_user_data *data,
292                       __attribute__((unused)) void * restrict dst,
293                       __attribute__((unused)) const struct GEN45_CC_VIEWPORT * restrict values)
294{
295   uint32_t * restrict dw = (uint32_t * restrict) dst;
296
297   dw[0] =
298      __gen_float(values->MinimumDepth);
299
300   dw[1] =
301      __gen_float(values->MaximumDepth);
302}
303
304#define GEN45_CLIP_STATE_length               11
305struct GEN45_CLIP_STATE {
306   uint32_t                             GRFRegisterCount;
307   __gen_address_type                   KernelStartPointer;
308   bool                                 SoftwareExceptionEnable;
309   bool                                 MaskStackExceptionEnable;
310   bool                                 IllegalOpcodeExceptionEnable;
311   uint32_t                             FloatingPointMode;
312#define FLOATING_POINT_MODE_IEEE754              0
313#define FLOATING_POINT_MODE_Alternate            1
314   uint32_t                             ThreadPriority;
315#define NormalPriority                           0
316#define HighPriority                             1
317   uint32_t                             BindingTableEntryCount;
318   bool                                 SingleProgramFlow;
319   uint32_t                             PerThreadScratchSpace;
320   __gen_address_type                   ScratchSpaceBasePointer;
321   uint32_t                             DispatchGRFStartRegisterForURBData;
322   uint32_t                             VertexURBEntryReadOffset;
323   uint32_t                             VertexURBEntryReadLength;
324   uint32_t                             ConstantURBEntryReadOffset;
325   uint32_t                             ConstantURBEntryReadLength;
326   bool                                 ClipperStatisticsEnable;
327   bool                                 GSOutputObjectStatisticsEnable;
328   uint32_t                             NumberofURBEntries;
329   uint32_t                             URBEntryAllocationSize;
330   uint32_t                             MaximumNumberofThreads;
331   uint32_t                             ClipMode;
332#define CLIPMODE_NORMAL                          0
333#define CLIPMODE_ALL                             1
334#define CLIPMODE_CLIP_NON_REJECTED               2
335#define CLIPMODE_REJECT_ALL                      3
336#define CLIPMODE_ACCEPT_ALL                      4
337   uint32_t                             UserClipDistanceClipTestEnableBitmask;
338   bool                                 UserClipFlagsMustClipEnable;
339   bool                                 NegativeWClipTestEnable;
340   bool                                 GuardbandClipTestEnable;
341   bool                                 ViewportZClipTestEnable;
342   bool                                 ViewportXYClipTestEnable;
343   uint32_t                             VertexPositionSpace;
344#define VPOS_NDCSPACE                            0
345#define VPOS_SCREENSPACE                         1
346   uint32_t                             APIMode;
347#define APIMODE_OGL                              0
348#define APIMODE_D3D                              1
349   __gen_address_type                   ClipperViewportStatePointer;
350   float                                ScreenSpaceViewportXMin;
351   float                                ScreenSpaceViewportXMax;
352   float                                ScreenSpaceViewportYMin;
353   float                                ScreenSpaceViewportYMax;
354};
355
356static inline void
357GEN45_CLIP_STATE_pack(__attribute__((unused)) __gen_user_data *data,
358                      __attribute__((unused)) void * restrict dst,
359                      __attribute__((unused)) const struct GEN45_CLIP_STATE * restrict values)
360{
361   uint32_t * restrict dw = (uint32_t * restrict) dst;
362
363   const uint32_t v0 =
364      __gen_uint(values->GRFRegisterCount, 1, 3);
365   dw[0] = __gen_combine_address(data, &dw[0], values->KernelStartPointer, v0);
366
367   dw[1] =
368      __gen_uint(values->SoftwareExceptionEnable, 7, 7) |
369      __gen_uint(values->MaskStackExceptionEnable, 11, 11) |
370      __gen_uint(values->IllegalOpcodeExceptionEnable, 13, 13) |
371      __gen_uint(values->FloatingPointMode, 16, 16) |
372      __gen_uint(values->ThreadPriority, 17, 17) |
373      __gen_uint(values->BindingTableEntryCount, 18, 25) |
374      __gen_uint(values->SingleProgramFlow, 31, 31);
375
376   const uint32_t v2 =
377      __gen_uint(values->PerThreadScratchSpace, 0, 3);
378   dw[2] = __gen_combine_address(data, &dw[2], values->ScratchSpaceBasePointer, v2);
379
380   dw[3] =
381      __gen_uint(values->DispatchGRFStartRegisterForURBData, 0, 3) |
382      __gen_uint(values->VertexURBEntryReadOffset, 4, 9) |
383      __gen_uint(values->VertexURBEntryReadLength, 11, 16) |
384      __gen_uint(values->ConstantURBEntryReadOffset, 18, 23) |
385      __gen_uint(values->ConstantURBEntryReadLength, 25, 30);
386
387   dw[4] =
388      __gen_uint(values->ClipperStatisticsEnable, 10, 10) |
389      __gen_uint(values->GSOutputObjectStatisticsEnable, 10, 10) |
390      __gen_uint(values->NumberofURBEntries, 11, 18) |
391      __gen_uint(values->URBEntryAllocationSize, 19, 23) |
392      __gen_uint(values->MaximumNumberofThreads, 25, 30);
393
394   dw[5] =
395      __gen_uint(values->ClipMode, 13, 15) |
396      __gen_uint(values->UserClipDistanceClipTestEnableBitmask, 16, 23) |
397      __gen_uint(values->UserClipFlagsMustClipEnable, 24, 24) |
398      __gen_uint(values->NegativeWClipTestEnable, 25, 25) |
399      __gen_uint(values->GuardbandClipTestEnable, 26, 26) |
400      __gen_uint(values->ViewportZClipTestEnable, 27, 27) |
401      __gen_uint(values->ViewportXYClipTestEnable, 28, 28) |
402      __gen_uint(values->VertexPositionSpace, 29, 29) |
403      __gen_uint(values->APIMode, 30, 30);
404
405   dw[6] = __gen_combine_address(data, &dw[6], values->ClipperViewportStatePointer, 0);
406
407   dw[7] =
408      __gen_float(values->ScreenSpaceViewportXMin);
409
410   dw[8] =
411      __gen_float(values->ScreenSpaceViewportXMax);
412
413   dw[9] =
414      __gen_float(values->ScreenSpaceViewportYMin);
415
416   dw[10] =
417      __gen_float(values->ScreenSpaceViewportYMax);
418}
419
420#define GEN45_CLIP_VIEWPORT_length             4
421struct GEN45_CLIP_VIEWPORT {
422   float                                XMinClipGuardband;
423   float                                XMaxClipGuardband;
424   float                                YMinClipGuardband;
425   float                                YMaxClipGuardband;
426};
427
428static inline void
429GEN45_CLIP_VIEWPORT_pack(__attribute__((unused)) __gen_user_data *data,
430                         __attribute__((unused)) void * restrict dst,
431                         __attribute__((unused)) const struct GEN45_CLIP_VIEWPORT * restrict values)
432{
433   uint32_t * restrict dw = (uint32_t * restrict) dst;
434
435   dw[0] =
436      __gen_float(values->XMinClipGuardband);
437
438   dw[1] =
439      __gen_float(values->XMaxClipGuardband);
440
441   dw[2] =
442      __gen_float(values->YMinClipGuardband);
443
444   dw[3] =
445      __gen_float(values->YMaxClipGuardband);
446}
447
448#define GEN45_COLOR_CALC_STATE_length          8
449struct GEN45_COLOR_CALC_STATE {
450   enum GEN45_3D_Stencil_Operation      BackfaceStencilPassDepthPassOp;
451   enum GEN45_3D_Stencil_Operation      BackfaceStencilPassDepthFailOp;
452   enum GEN45_3D_Stencil_Operation      BackfaceStencilFailOp;
453   enum GEN45_3D_Compare_Function       BackfaceStencilTestFunction;
454   bool                                 DoubleSidedStencilEnable;
455   bool                                 StencilBufferWriteEnable;
456   enum GEN45_3D_Stencil_Operation      StencilPassDepthPassOp;
457   enum GEN45_3D_Stencil_Operation      StencilPassDepthFailOp;
458   enum GEN45_3D_Stencil_Operation      StencilFailOp;
459   enum GEN45_3D_Compare_Function       StencilTestFunction;
460   bool                                 StencilTestEnable;
461   uint32_t                             BackfaceStencilReferenceValue;
462   uint32_t                             StencilWriteMask;
463   uint32_t                             StencilTestMask;
464   uint32_t                             StencilReferenceValue;
465   bool                                 LogicOpEnable;
466   bool                                 DepthBufferWriteEnable;
467   enum GEN45_3D_Compare_Function       DepthTestFunction;
468   bool                                 DepthTestEnable;
469   uint32_t                             BackfaceStencilWriteMask;
470   uint32_t                             BackfaceStencilTestMask;
471   enum GEN45_3D_Compare_Function       AlphaTestFunction;
472   bool                                 AlphaTestEnable;
473   bool                                 ColorBufferBlendEnable;
474   bool                                 IndependentAlphaBlendEnable;
475   uint32_t                             AlphaTestFormat;
476#define ALPHATEST_UNORM8                         0
477#define ALPHATEST_FLOAT32                        1
478   __gen_address_type                   CCViewportStatePointer;
479   enum GEN45_3D_Color_Buffer_Blend_Factor DestinationAlphaBlendFactor;
480   enum GEN45_3D_Color_Buffer_Blend_Factor SourceAlphaBlendFactor;
481   enum GEN45_3D_Color_Buffer_Blend_Function AlphaBlendFunction;
482   bool                                 StatisticsEnable;
483   enum GEN45_3D_Logic_Op_Function      LogicOpFunction;
484   bool                                 RoundDisableFunctionDisable;
485   bool                                 ColorDitherEnable;
486   bool                                 PostBlendColorClampEnable;
487   bool                                 PreBlendColorClampEnable;
488   uint32_t                             ColorClampRange;
489#define COLORCLAMP_UNORM                         0
490#define COLORCLAMP_SNORM                         1
491#define COLORCLAMP_RTFORMAT                      2
492   uint32_t                             YDitherOffset;
493   uint32_t                             XDitherOffset;
494   enum GEN45_3D_Color_Buffer_Blend_Factor DestinationBlendFactor;
495   enum GEN45_3D_Color_Buffer_Blend_Factor SourceBlendFactor;
496   enum GEN45_3D_Color_Buffer_Blend_Function ColorBlendFunction;
497   uint32_t                             AlphaReferenceValueAsUNORM8;
498   float                                AlphaReferenceValueAsFLOAT32;
499};
500
501static inline void
502GEN45_COLOR_CALC_STATE_pack(__attribute__((unused)) __gen_user_data *data,
503                            __attribute__((unused)) void * restrict dst,
504                            __attribute__((unused)) const struct GEN45_COLOR_CALC_STATE * restrict values)
505{
506   uint32_t * restrict dw = (uint32_t * restrict) dst;
507
508   dw[0] =
509      __gen_uint(values->BackfaceStencilPassDepthPassOp, 3, 5) |
510      __gen_uint(values->BackfaceStencilPassDepthFailOp, 6, 8) |
511      __gen_uint(values->BackfaceStencilFailOp, 9, 11) |
512      __gen_uint(values->BackfaceStencilTestFunction, 12, 14) |
513      __gen_uint(values->DoubleSidedStencilEnable, 15, 15) |
514      __gen_uint(values->StencilBufferWriteEnable, 18, 18) |
515      __gen_uint(values->StencilPassDepthPassOp, 19, 21) |
516      __gen_uint(values->StencilPassDepthFailOp, 22, 24) |
517      __gen_uint(values->StencilFailOp, 25, 27) |
518      __gen_uint(values->StencilTestFunction, 28, 30) |
519      __gen_uint(values->StencilTestEnable, 31, 31);
520
521   dw[1] =
522      __gen_uint(values->BackfaceStencilReferenceValue, 0, 7) |
523      __gen_uint(values->StencilWriteMask, 8, 15) |
524      __gen_uint(values->StencilTestMask, 16, 23) |
525      __gen_uint(values->StencilReferenceValue, 24, 31);
526
527   dw[2] =
528      __gen_uint(values->LogicOpEnable, 0, 0) |
529      __gen_uint(values->DepthBufferWriteEnable, 11, 11) |
530      __gen_uint(values->DepthTestFunction, 12, 14) |
531      __gen_uint(values->DepthTestEnable, 15, 15) |
532      __gen_uint(values->BackfaceStencilWriteMask, 16, 23) |
533      __gen_uint(values->BackfaceStencilTestMask, 24, 31);
534
535   dw[3] =
536      __gen_uint(values->AlphaTestFunction, 8, 10) |
537      __gen_uint(values->AlphaTestEnable, 11, 11) |
538      __gen_uint(values->ColorBufferBlendEnable, 12, 12) |
539      __gen_uint(values->IndependentAlphaBlendEnable, 13, 13) |
540      __gen_uint(values->AlphaTestFormat, 15, 15);
541
542   dw[4] = __gen_combine_address(data, &dw[4], values->CCViewportStatePointer, 0);
543
544   dw[5] =
545      __gen_uint(values->DestinationAlphaBlendFactor, 2, 6) |
546      __gen_uint(values->SourceAlphaBlendFactor, 7, 11) |
547      __gen_uint(values->AlphaBlendFunction, 12, 14) |
548      __gen_uint(values->StatisticsEnable, 15, 15) |
549      __gen_uint(values->LogicOpFunction, 16, 19) |
550      __gen_uint(values->RoundDisableFunctionDisable, 30, 30) |
551      __gen_uint(values->ColorDitherEnable, 31, 31);
552
553   dw[6] =
554      __gen_uint(values->PostBlendColorClampEnable, 0, 0) |
555      __gen_uint(values->PreBlendColorClampEnable, 1, 1) |
556      __gen_uint(values->ColorClampRange, 2, 3) |
557      __gen_uint(values->YDitherOffset, 15, 16) |
558      __gen_uint(values->XDitherOffset, 17, 18) |
559      __gen_uint(values->DestinationBlendFactor, 19, 23) |
560      __gen_uint(values->SourceBlendFactor, 24, 28) |
561      __gen_uint(values->ColorBlendFunction, 29, 31);
562
563   dw[7] =
564      __gen_uint(values->AlphaReferenceValueAsUNORM8, 0, 31) |
565      __gen_float(values->AlphaReferenceValueAsFLOAT32);
566}
567
568#define GEN45_GS_STATE_length                  7
569struct GEN45_GS_STATE {
570   uint32_t                             GRFRegisterCount;
571   __gen_address_type                   KernelStartPointer;
572   bool                                 SoftwareExceptionEnable;
573   bool                                 MaskStackExceptionEnable;
574   bool                                 IllegalOpcodeExceptionEnable;
575   uint32_t                             FloatingPointMode;
576#define FLOATING_POINT_MODE_IEEE754              0
577#define FLOATING_POINT_MODE_Alternate            1
578   uint32_t                             BindingTableEntryCount;
579   bool                                 SingleProgramFlow;
580   uint32_t                             PerThreadScratchSpace;
581   __gen_address_type                   ScratchSpaceBasePointer;
582   uint32_t                             DispatchGRFStartRegisterForURBData;
583   uint32_t                             VertexURBEntryReadOffset;
584   uint32_t                             VertexURBEntryReadLength;
585   uint32_t                             ConstantURBEntryReadOffset;
586   uint32_t                             ConstantURBEntryReadLength;
587   bool                                 RenderingEnable;
588   bool                                 GSStatisticsEnable;
589   uint32_t                             NumberofURBEntries;
590   uint32_t                             URBEntryAllocationSize;
591   uint32_t                             MaximumNumberofThreads;
592   uint32_t                             SamplerCount;
593   __gen_address_type                   SamplerStatePointer;
594   uint32_t                             MaximumVPIndex;
595   bool                                 DiscardAdjacency;
596   bool                                 ReorderEnable;
597};
598
599static inline void
600GEN45_GS_STATE_pack(__attribute__((unused)) __gen_user_data *data,
601                    __attribute__((unused)) void * restrict dst,
602                    __attribute__((unused)) const struct GEN45_GS_STATE * restrict values)
603{
604   uint32_t * restrict dw = (uint32_t * restrict) dst;
605
606   const uint32_t v0 =
607      __gen_uint(values->GRFRegisterCount, 1, 3);
608   dw[0] = __gen_combine_address(data, &dw[0], values->KernelStartPointer, v0);
609
610   dw[1] =
611      __gen_uint(values->SoftwareExceptionEnable, 7, 7) |
612      __gen_uint(values->MaskStackExceptionEnable, 11, 11) |
613      __gen_uint(values->IllegalOpcodeExceptionEnable, 13, 13) |
614      __gen_uint(values->FloatingPointMode, 16, 16) |
615      __gen_uint(values->BindingTableEntryCount, 18, 25) |
616      __gen_uint(values->SingleProgramFlow, 31, 31);
617
618   const uint32_t v2 =
619      __gen_uint(values->PerThreadScratchSpace, 0, 3);
620   dw[2] = __gen_combine_address(data, &dw[2], values->ScratchSpaceBasePointer, v2);
621
622   dw[3] =
623      __gen_uint(values->DispatchGRFStartRegisterForURBData, 0, 3) |
624      __gen_uint(values->VertexURBEntryReadOffset, 4, 9) |
625      __gen_uint(values->VertexURBEntryReadLength, 11, 16) |
626      __gen_uint(values->ConstantURBEntryReadOffset, 18, 23) |
627      __gen_uint(values->ConstantURBEntryReadLength, 25, 30);
628
629   dw[4] =
630      __gen_uint(values->RenderingEnable, 8, 8) |
631      __gen_uint(values->GSStatisticsEnable, 10, 10) |
632      __gen_uint(values->NumberofURBEntries, 11, 18) |
633      __gen_uint(values->URBEntryAllocationSize, 19, 23) |
634      __gen_uint(values->MaximumNumberofThreads, 25, 30);
635
636   const uint32_t v5 =
637      __gen_uint(values->SamplerCount, 0, 2);
638   dw[5] = __gen_combine_address(data, &dw[5], values->SamplerStatePointer, v5);
639
640   dw[6] =
641      __gen_uint(values->MaximumVPIndex, 0, 3) |
642      __gen_uint(values->DiscardAdjacency, 29, 29) |
643      __gen_uint(values->ReorderEnable, 30, 30);
644}
645
646#define GEN45_RENDER_SURFACE_STATE_length      6
647struct GEN45_RENDER_SURFACE_STATE {
648   bool                                 CubeFaceEnablePositiveZ;
649   bool                                 CubeFaceEnableNegativeZ;
650   bool                                 CubeFaceEnablePositiveY;
651   bool                                 CubeFaceEnableNegativeY;
652   bool                                 CubeFaceEnablePositiveX;
653   bool                                 CubeFaceEnableNegativeX;
654   uint32_t                             MediaBoundaryPixelMode;
655#define NORMAL_MODE                              0
656#define PROGRESSIVE_FRAME                        2
657#define INTERLACED_FRAME                         3
658   uint32_t                             RenderCacheReadWriteMode;
659#define WRITE_ONLY                               0
660#define READ_WRITE                               1
661   uint32_t                             MIPMapLayoutMode;
662#define MIPLAYOUT_BELOW                          0
663#define MIPLAYOUT_RIGHT                          1
664   uint32_t                             VerticalLineStrideOffset;
665   uint32_t                             VerticalLineStride;
666   bool                                 ColorBlendEnable;
667   uint32_t                             ColorBufferComponentWriteDisables;
668#define WRITEDISABLE_ALPHA                       8
669#define WRITEDISABLE_RED                         4
670#define WRITEDISABLE_GREEN                       2
671#define WRITEDISABLE_BLUE                        1
672   uint32_t                             SurfaceFormat;
673   uint32_t                             DataReturnFormat;
674#define DATA_RETURN_FLOAT32                      0
675#define DATA_RETURN_S114                         1
676   uint32_t                             SurfaceType;
677#define SURFTYPE_1D                              0
678#define SURFTYPE_2D                              1
679#define SURFTYPE_3D                              2
680#define SURFTYPE_CUBE                            3
681#define SURFTYPE_BUFFER                          4
682#define SURFTYPE_NULL                            7
683   __gen_address_type                   SurfaceBaseAddress;
684   uint32_t                             MIPCountLOD;
685   uint32_t                             Width;
686   uint32_t                             Height;
687   uint32_t                             TileWalk;
688#define TILEWALK_XMAJOR                          0
689#define TILEWALK_YMAJOR                          1
690   uint32_t                             TiledSurface;
691   uint32_t                             SurfacePitch;
692   uint32_t                             Depth;
693   uint32_t                             RenderTargetViewExtent;
694   uint32_t                             MinimumArrayElement;
695   uint32_t                             SurfaceMinLOD;
696   uint32_t                             YOffset;
697   uint32_t                             XOffset;
698};
699
700static inline void
701GEN45_RENDER_SURFACE_STATE_pack(__attribute__((unused)) __gen_user_data *data,
702                                __attribute__((unused)) void * restrict dst,
703                                __attribute__((unused)) const struct GEN45_RENDER_SURFACE_STATE * restrict values)
704{
705   uint32_t * restrict dw = (uint32_t * restrict) dst;
706
707   dw[0] =
708      __gen_uint(values->CubeFaceEnablePositiveZ, 0, 0) |
709      __gen_uint(values->CubeFaceEnableNegativeZ, 1, 1) |
710      __gen_uint(values->CubeFaceEnablePositiveY, 2, 2) |
711      __gen_uint(values->CubeFaceEnableNegativeY, 3, 3) |
712      __gen_uint(values->CubeFaceEnablePositiveX, 4, 4) |
713      __gen_uint(values->CubeFaceEnableNegativeX, 5, 5) |
714      __gen_uint(values->MediaBoundaryPixelMode, 6, 7) |
715      __gen_uint(values->RenderCacheReadWriteMode, 8, 8) |
716      __gen_uint(values->MIPMapLayoutMode, 10, 10) |
717      __gen_uint(values->VerticalLineStrideOffset, 11, 11) |
718      __gen_uint(values->VerticalLineStride, 12, 12) |
719      __gen_uint(values->ColorBlendEnable, 13, 13) |
720      __gen_uint(values->ColorBufferComponentWriteDisables, 14, 17) |
721      __gen_uint(values->SurfaceFormat, 18, 26) |
722      __gen_uint(values->DataReturnFormat, 27, 27) |
723      __gen_uint(values->SurfaceType, 29, 31);
724
725   dw[1] = __gen_combine_address(data, &dw[1], values->SurfaceBaseAddress, 0);
726
727   dw[2] =
728      __gen_uint(values->MIPCountLOD, 2, 5) |
729      __gen_uint(values->Width, 6, 18) |
730      __gen_uint(values->Height, 19, 31);
731
732   dw[3] =
733      __gen_uint(values->TileWalk, 0, 0) |
734      __gen_uint(values->TiledSurface, 1, 1) |
735      __gen_uint(values->SurfacePitch, 3, 19) |
736      __gen_uint(values->Depth, 21, 31);
737
738   dw[4] =
739      __gen_uint(values->RenderTargetViewExtent, 8, 16) |
740      __gen_uint(values->MinimumArrayElement, 17, 27) |
741      __gen_uint(values->SurfaceMinLOD, 28, 31);
742
743   dw[5] =
744      __gen_uint(values->YOffset, 20, 23) |
745      __gen_uint(values->XOffset, 25, 31);
746}
747
748#define GEN45_SAMPLER_BORDER_COLOR_STATE_length     12
749struct GEN45_SAMPLER_BORDER_COLOR_STATE {
750   float                                BorderColorRed;
751   float                                BorderColorGreen;
752   float                                BorderColorBlue;
753   float                                BorderColorAlpha;
754};
755
756static inline void
757GEN45_SAMPLER_BORDER_COLOR_STATE_pack(__attribute__((unused)) __gen_user_data *data,
758                                      __attribute__((unused)) void * restrict dst,
759                                      __attribute__((unused)) const struct GEN45_SAMPLER_BORDER_COLOR_STATE * restrict values)
760{
761   uint32_t * restrict dw = (uint32_t * restrict) dst;
762
763   dw[0] =
764      __gen_float(values->BorderColorRed);
765
766   dw[1] =
767      __gen_float(values->BorderColorGreen);
768
769   dw[2] =
770      __gen_float(values->BorderColorBlue);
771
772   dw[3] =
773      __gen_float(values->BorderColorAlpha);
774
775   dw[4] = 0;
776
777   dw[5] = 0;
778
779   dw[6] = 0;
780
781   dw[7] = 0;
782
783   dw[8] = 0;
784
785   dw[9] = 0;
786
787   dw[10] = 0;
788
789   dw[11] = 0;
790}
791
792#define GEN45_SAMPLER_STATE_length             4
793struct GEN45_SAMPLER_STATE {
794   uint32_t                             ShadowFunction;
795#define PREFILTEROP_ALWAYS                       0
796#define PREFILTEROP_NEVER                        1
797#define PREFILTEROP_LESS                         2
798#define PREFILTEROP_EQUAL                        3
799#define PREFILTEROP_LEQUAL                       4
800#define PREFILTEROP_GREATER                      5
801#define PREFILTEROP_NOTEQUAL                     6
802#define PREFILTEROP_GEQUAL                       7
803   float                                TextureLODBias;
804   uint32_t                             MinModeFilter;
805   uint32_t                             MagModeFilter;
806#define MAPFILTER_NEAREST                        0
807#define MAPFILTER_LINEAR                         1
808#define MAPFILTER_ANISOTROPIC                    2
809#define MAPFILTER_MONO                           6
810   uint32_t                             MipModeFilter;
811#define MIPFILTER_NONE                           0
812#define MIPFILTER_NEAREST                        1
813#define MIPFILTER_LINEAR                         3
814   float                                BaseMipLevel;
815   bool                                 LODPreClampEnable;
816   bool                                 SamplerDisable;
817   enum GEN45_Texture_Coordinate_Mode   TCZAddressControlMode;
818   enum GEN45_Texture_Coordinate_Mode   TCYAddressControlMode;
819   enum GEN45_Texture_Coordinate_Mode   TCXAddressControlMode;
820   uint32_t                             CubeSurfaceControlMode;
821#define CUBECTRLMODE_PROGRAMMED                  0
822#define CUBECTRLMODE_OVERRIDE                    1
823   float                                MaxLOD;
824   float                                MinLOD;
825   __gen_address_type                   BorderColorPointer;
826   bool                                 RAddressMinFilterRoundingEnable;
827   bool                                 RAddressMagFilterRoundingEnable;
828   bool                                 VAddressMinFilterRoundingEnable;
829   bool                                 VAddressMagFilterRoundingEnable;
830   bool                                 UAddressMinFilterRoundingEnable;
831   bool                                 UAddressMagFilterRoundingEnable;
832   uint32_t                             MaximumAnisotropy;
833#define RATIO21                                  0
834#define RATIO41                                  1
835#define RATIO61                                  2
836#define RATIO81                                  3
837#define RATIO101                                 4
838#define RATIO121                                 5
839#define RATIO141                                 6
840#define RATIO161                                 7
841   uint32_t                             ChromaKeyMode;
842#define KEYFILTER_KILL_ON_ANY_MATCH              0
843#define KEYFILTER_REPLACE_BLACK                  1
844   uint32_t                             ChromaKeyIndex;
845   bool                                 ChromaKeyEnable;
846   uint32_t                             MonochromeFilterWidth;
847   uint32_t                             MonochromeFilterHeight;
848};
849
850static inline void
851GEN45_SAMPLER_STATE_pack(__attribute__((unused)) __gen_user_data *data,
852                         __attribute__((unused)) void * restrict dst,
853                         __attribute__((unused)) const struct GEN45_SAMPLER_STATE * restrict values)
854{
855   uint32_t * restrict dw = (uint32_t * restrict) dst;
856
857   dw[0] =
858      __gen_uint(values->ShadowFunction, 0, 2) |
859      __gen_sfixed(values->TextureLODBias, 3, 13, 6) |
860      __gen_uint(values->MinModeFilter, 14, 16) |
861      __gen_uint(values->MagModeFilter, 17, 19) |
862      __gen_uint(values->MipModeFilter, 20, 21) |
863      __gen_ufixed(values->BaseMipLevel, 22, 26, 1) |
864      __gen_uint(values->LODPreClampEnable, 28, 28) |
865      __gen_uint(values->SamplerDisable, 31, 31);
866
867   dw[1] =
868      __gen_uint(values->TCZAddressControlMode, 0, 2) |
869      __gen_uint(values->TCYAddressControlMode, 3, 5) |
870      __gen_uint(values->TCXAddressControlMode, 6, 8) |
871      __gen_uint(values->CubeSurfaceControlMode, 9, 9) |
872      __gen_ufixed(values->MaxLOD, 12, 21, 6) |
873      __gen_ufixed(values->MinLOD, 22, 31, 6);
874
875   dw[2] = __gen_combine_address(data, &dw[2], values->BorderColorPointer, 0);
876
877   dw[3] =
878      __gen_uint(values->RAddressMinFilterRoundingEnable, 13, 13) |
879      __gen_uint(values->RAddressMagFilterRoundingEnable, 14, 14) |
880      __gen_uint(values->VAddressMinFilterRoundingEnable, 15, 15) |
881      __gen_uint(values->VAddressMagFilterRoundingEnable, 16, 16) |
882      __gen_uint(values->UAddressMinFilterRoundingEnable, 17, 17) |
883      __gen_uint(values->UAddressMagFilterRoundingEnable, 18, 18) |
884      __gen_uint(values->MaximumAnisotropy, 19, 21) |
885      __gen_uint(values->ChromaKeyMode, 22, 22) |
886      __gen_uint(values->ChromaKeyIndex, 23, 24) |
887      __gen_uint(values->ChromaKeyEnable, 25, 25) |
888      __gen_uint(values->MonochromeFilterWidth, 26, 28) |
889      __gen_uint(values->MonochromeFilterHeight, 29, 31);
890}
891
892#define GEN45_SCISSOR_RECT_length              2
893struct GEN45_SCISSOR_RECT {
894   uint32_t                             ScissorRectangleXMin;
895   uint32_t                             ScissorRectangleYMin;
896   uint32_t                             ScissorRectangleXMax;
897   uint32_t                             ScissorRectangleYMax;
898};
899
900static inline void
901GEN45_SCISSOR_RECT_pack(__attribute__((unused)) __gen_user_data *data,
902                        __attribute__((unused)) void * restrict dst,
903                        __attribute__((unused)) const struct GEN45_SCISSOR_RECT * restrict values)
904{
905   uint32_t * restrict dw = (uint32_t * restrict) dst;
906
907   dw[0] =
908      __gen_uint(values->ScissorRectangleXMin, 0, 15) |
909      __gen_uint(values->ScissorRectangleYMin, 16, 31);
910
911   dw[1] =
912      __gen_uint(values->ScissorRectangleXMax, 0, 15) |
913      __gen_uint(values->ScissorRectangleYMax, 16, 31);
914}
915
916#define GEN45_SF_STATE_length                  8
917struct GEN45_SF_STATE {
918   uint32_t                             GRFRegisterCount;
919   __gen_address_type                   KernelStartPointer;
920   bool                                 SoftwareExceptionEnable;
921   bool                                 MaskStackExceptionEnable;
922   bool                                 IllegalOpcodeExceptionEnable;
923   uint32_t                             FloatingPointMode;
924#define FLOATING_POINT_MODE_IEEE754              0
925#define FLOATING_POINT_MODE_Alternate            1
926   uint32_t                             ThreadPriority;
927#define NormalPriority                           0
928#define HighPriority                             1
929   uint32_t                             BindingTableEntryCount;
930   bool                                 SingleProgramFlow;
931   uint32_t                             PerThreadScratchSpace;
932   __gen_address_type                   ScratchSpaceBasePointer;
933   uint32_t                             DispatchGRFStartRegisterForURBData;
934   uint32_t                             VertexURBEntryReadOffset;
935   uint32_t                             VertexURBEntryReadLength;
936   uint32_t                             ConstantURBEntryReadOffset;
937   uint32_t                             ConstantURBEntryReadLength;
938   bool                                 StatisticsEnable;
939   uint32_t                             NumberofURBEntries;
940   uint32_t                             URBEntryAllocationSize;
941   uint32_t                             MaximumNumberofThreads;
942   uint32_t                             FrontWinding;
943#define FRONTWINDING_CW                          0
944#define FRONTWINDING_CCW                         1
945   bool                                 ViewportTransformEnable;
946   __gen_address_type                   SetupViewportStateOffset;
947   float                                DestinationOriginVerticalBias;
948   float                                DestinationOriginHorizontalBias;
949   bool                                 ScissorRectangleEnable;
950   bool                                 _2x2PixelTriangleFilterDisable;
951   bool                                 ZeroPixelTriangleFilterDisable;
952   uint32_t                             PointRasterizationRule;
953#define RASTRULE_UPPER_LEFT                      0
954#define RASTRULE_UPPER_RIGHT                     1
955   uint32_t                             LineEndCapAntialiasingRegionWidth;
956#define _05pixels                                0
957#define _10pixels                                1
958#define _20pixels                                2
959#define _40pixels                                3
960   float                                LineWidth;
961   bool                                 FastScissorClipDisable;
962   uint32_t                             CullMode;
963#define CULLMODE_BOTH                            0
964#define CULLMODE_NONE                            1
965#define CULLMODE_FRONT                           2
966#define CULLMODE_BACK                            3
967   bool                                 AntiAliasingEnable;
968   float                                PointWidth;
969   uint32_t                             PointWidthSource;
970#define Vertex                                   0
971#define State                                    1
972   uint32_t                             VertexSubPixelPrecisionSelect;
973#define _8SubPixelPrecisionBits                  0
974#define _4SubPixelPrecisionBits                  1
975   bool                                 SpritePointEnable;
976   uint32_t                             AALineDistanceMode;
977#define AALINEDISTANCE_MANHATTAN                 0
978#define AALINEDISTANCE_TRUE                      1
979   uint32_t                             TriangleFanProvokingVertexSelect;
980#define Vertex0                                  0
981#define Vertex1                                  1
982#define Vertex2                                  2
983   uint32_t                             LineStripListProvokingVertexSelect;
984#define Vertex0                                  0
985#define Vertex1                                  1
986   uint32_t                             TriangleStripListProvokingVertexSelect;
987#define Vertex0                                  0
988#define Vertex1                                  1
989#define Vertex2                                  2
990   bool                                 LastPixelEnable;
991};
992
993static inline void
994GEN45_SF_STATE_pack(__attribute__((unused)) __gen_user_data *data,
995                    __attribute__((unused)) void * restrict dst,
996                    __attribute__((unused)) const struct GEN45_SF_STATE * restrict values)
997{
998   uint32_t * restrict dw = (uint32_t * restrict) dst;
999
1000   const uint32_t v0 =
1001      __gen_uint(values->GRFRegisterCount, 1, 3);
1002   dw[0] = __gen_combine_address(data, &dw[0], values->KernelStartPointer, v0);
1003
1004   dw[1] =
1005      __gen_uint(values->SoftwareExceptionEnable, 7, 7) |
1006      __gen_uint(values->MaskStackExceptionEnable, 11, 11) |
1007      __gen_uint(values->IllegalOpcodeExceptionEnable, 13, 13) |
1008      __gen_uint(values->FloatingPointMode, 16, 16) |
1009      __gen_uint(values->ThreadPriority, 17, 17) |
1010      __gen_uint(values->BindingTableEntryCount, 18, 25) |
1011      __gen_uint(values->SingleProgramFlow, 31, 31);
1012
1013   const uint32_t v2 =
1014      __gen_uint(values->PerThreadScratchSpace, 0, 3);
1015   dw[2] = __gen_combine_address(data, &dw[2], values->ScratchSpaceBasePointer, v2);
1016
1017   dw[3] =
1018      __gen_uint(values->DispatchGRFStartRegisterForURBData, 0, 3) |
1019      __gen_uint(values->VertexURBEntryReadOffset, 4, 9) |
1020      __gen_uint(values->VertexURBEntryReadLength, 11, 16) |
1021      __gen_uint(values->ConstantURBEntryReadOffset, 18, 23) |
1022      __gen_uint(values->ConstantURBEntryReadLength, 25, 30);
1023
1024   dw[4] =
1025      __gen_uint(values->StatisticsEnable, 10, 10) |
1026      __gen_uint(values->NumberofURBEntries, 11, 18) |
1027      __gen_uint(values->URBEntryAllocationSize, 19, 23) |
1028      __gen_uint(values->MaximumNumberofThreads, 25, 30);
1029
1030   const uint32_t v5 =
1031      __gen_uint(values->FrontWinding, 0, 0) |
1032      __gen_uint(values->ViewportTransformEnable, 1, 1);
1033   dw[5] = __gen_combine_address(data, &dw[5], values->SetupViewportStateOffset, v5);
1034
1035   dw[6] =
1036      __gen_ufixed(values->DestinationOriginVerticalBias, 9, 12, 4) |
1037      __gen_ufixed(values->DestinationOriginHorizontalBias, 13, 16, 4) |
1038      __gen_uint(values->ScissorRectangleEnable, 17, 17) |
1039      __gen_uint(values->_2x2PixelTriangleFilterDisable, 18, 18) |
1040      __gen_uint(values->ZeroPixelTriangleFilterDisable, 19, 19) |
1041      __gen_uint(values->PointRasterizationRule, 20, 21) |
1042      __gen_uint(values->LineEndCapAntialiasingRegionWidth, 22, 23) |
1043      __gen_ufixed(values->LineWidth, 24, 27, 1) |
1044      __gen_uint(values->FastScissorClipDisable, 28, 28) |
1045      __gen_uint(values->CullMode, 29, 30) |
1046      __gen_uint(values->AntiAliasingEnable, 31, 31);
1047
1048   dw[7] =
1049      __gen_ufixed(values->PointWidth, 0, 10, 3) |
1050      __gen_uint(values->PointWidthSource, 11, 11) |
1051      __gen_uint(values->VertexSubPixelPrecisionSelect, 12, 12) |
1052      __gen_uint(values->SpritePointEnable, 13, 13) |
1053      __gen_uint(values->AALineDistanceMode, 14, 14) |
1054      __gen_uint(values->TriangleFanProvokingVertexSelect, 25, 26) |
1055      __gen_uint(values->LineStripListProvokingVertexSelect, 27, 28) |
1056      __gen_uint(values->TriangleStripListProvokingVertexSelect, 29, 30) |
1057      __gen_uint(values->LastPixelEnable, 31, 31);
1058}
1059
1060#define GEN45_SF_VIEWPORT_length               8
1061struct GEN45_SF_VIEWPORT {
1062   float                                ViewportMatrixElementm00;
1063   float                                ViewportMatrixElementm11;
1064   float                                ViewportMatrixElementm22;
1065   float                                ViewportMatrixElementm30;
1066   float                                ViewportMatrixElementm31;
1067   float                                ViewportMatrixElementm32;
1068   struct GEN45_SCISSOR_RECT            ScissorRectangle;
1069};
1070
1071static inline void
1072GEN45_SF_VIEWPORT_pack(__attribute__((unused)) __gen_user_data *data,
1073                       __attribute__((unused)) void * restrict dst,
1074                       __attribute__((unused)) const struct GEN45_SF_VIEWPORT * restrict values)
1075{
1076   uint32_t * restrict dw = (uint32_t * restrict) dst;
1077
1078   dw[0] =
1079      __gen_float(values->ViewportMatrixElementm00);
1080
1081   dw[1] =
1082      __gen_float(values->ViewportMatrixElementm11);
1083
1084   dw[2] =
1085      __gen_float(values->ViewportMatrixElementm22);
1086
1087   dw[3] =
1088      __gen_float(values->ViewportMatrixElementm30);
1089
1090   dw[4] =
1091      __gen_float(values->ViewportMatrixElementm31);
1092
1093   dw[5] =
1094      __gen_float(values->ViewportMatrixElementm32);
1095
1096   GEN45_SCISSOR_RECT_pack(data, &dw[6], &values->ScissorRectangle);
1097}
1098
1099#define GEN45_VERTEX_BUFFER_STATE_length       4
1100struct GEN45_VERTEX_BUFFER_STATE {
1101   uint32_t                             BufferPitch;
1102   uint32_t                             BufferAccessType;
1103#define VERTEXDATA                               0
1104#define INSTANCEDATA                             1
1105   uint32_t                             VertexBufferIndex;
1106   __gen_address_type                   BufferStartingAddress;
1107   uint32_t                             MaxIndex;
1108   uint32_t                             InstanceDataStepRate;
1109};
1110
1111static inline void
1112GEN45_VERTEX_BUFFER_STATE_pack(__attribute__((unused)) __gen_user_data *data,
1113                               __attribute__((unused)) void * restrict dst,
1114                               __attribute__((unused)) const struct GEN45_VERTEX_BUFFER_STATE * restrict values)
1115{
1116   uint32_t * restrict dw = (uint32_t * restrict) dst;
1117
1118   dw[0] =
1119      __gen_uint(values->BufferPitch, 0, 10) |
1120      __gen_uint(values->BufferAccessType, 26, 26) |
1121      __gen_uint(values->VertexBufferIndex, 27, 31);
1122
1123   dw[1] = __gen_combine_address(data, &dw[1], values->BufferStartingAddress, 0);
1124
1125   dw[2] =
1126      __gen_uint(values->MaxIndex, 0, 31);
1127
1128   dw[3] =
1129      __gen_uint(values->InstanceDataStepRate, 0, 31);
1130}
1131
1132#define GEN45_VERTEX_ELEMENT_STATE_length      2
1133struct GEN45_VERTEX_ELEMENT_STATE {
1134   uint32_t                             SourceElementOffset;
1135   uint32_t                             SourceElementFormat;
1136   bool                                 Valid;
1137   uint32_t                             VertexBufferIndex;
1138   uint32_t                             DestinationElementOffset;
1139   enum GEN45_3D_Vertex_Component_Control Component3Control;
1140   enum GEN45_3D_Vertex_Component_Control Component2Control;
1141   enum GEN45_3D_Vertex_Component_Control Component1Control;
1142   enum GEN45_3D_Vertex_Component_Control Component0Control;
1143};
1144
1145static inline void
1146GEN45_VERTEX_ELEMENT_STATE_pack(__attribute__((unused)) __gen_user_data *data,
1147                                __attribute__((unused)) void * restrict dst,
1148                                __attribute__((unused)) const struct GEN45_VERTEX_ELEMENT_STATE * restrict values)
1149{
1150   uint32_t * restrict dw = (uint32_t * restrict) dst;
1151
1152   dw[0] =
1153      __gen_uint(values->SourceElementOffset, 0, 10) |
1154      __gen_uint(values->SourceElementFormat, 16, 24) |
1155      __gen_uint(values->Valid, 26, 26) |
1156      __gen_uint(values->VertexBufferIndex, 27, 31);
1157
1158   dw[1] =
1159      __gen_uint(values->DestinationElementOffset, 0, 7) |
1160      __gen_uint(values->Component3Control, 16, 18) |
1161      __gen_uint(values->Component2Control, 20, 22) |
1162      __gen_uint(values->Component1Control, 24, 26) |
1163      __gen_uint(values->Component0Control, 28, 30);
1164}
1165
1166#define GEN45_VS_STATE_length                  7
1167struct GEN45_VS_STATE {
1168   uint32_t                             GRFRegisterCount;
1169   __gen_address_type                   KernelStartPointer;
1170   bool                                 SoftwareExceptionEnable;
1171   bool                                 MaskStackExceptionEnable;
1172   bool                                 IllegalOpcodeExceptionEnable;
1173   uint32_t                             FloatingPointMode;
1174#define FLOATING_POINT_MODE_IEEE754              0
1175#define FLOATING_POINT_MODE_Alternate            1
1176   uint32_t                             ThreadPriority;
1177#define NormalPriority                           0
1178#define HighPriority                             1
1179   uint32_t                             BindingTableEntryCount;
1180   bool                                 SingleProgramFlow;
1181   uint32_t                             PerThreadScratchSpace;
1182   __gen_address_type                   ScratchSpaceBasePointer;
1183   uint32_t                             DispatchGRFStartRegisterForURBData;
1184   uint32_t                             VertexURBEntryReadOffset;
1185   uint32_t                             VertexURBEntryReadLength;
1186   uint32_t                             ConstantURBEntryReadOffset;
1187   uint32_t                             ConstantURBEntryReadLength;
1188   bool                                 StatisticsEnable;
1189   uint32_t                             NumberofURBEntries;
1190   uint32_t                             URBEntryAllocationSize;
1191   uint32_t                             MaximumNumberofThreads;
1192   uint32_t                             SamplerCount;
1193   __gen_address_type                   SamplerStatePointer;
1194   bool                                 Enable;
1195   bool                                 VertexCacheDisable;
1196};
1197
1198static inline void
1199GEN45_VS_STATE_pack(__attribute__((unused)) __gen_user_data *data,
1200                    __attribute__((unused)) void * restrict dst,
1201                    __attribute__((unused)) const struct GEN45_VS_STATE * restrict values)
1202{
1203   uint32_t * restrict dw = (uint32_t * restrict) dst;
1204
1205   const uint32_t v0 =
1206      __gen_uint(values->GRFRegisterCount, 1, 3);
1207   dw[0] = __gen_combine_address(data, &dw[0], values->KernelStartPointer, v0);
1208
1209   dw[1] =
1210      __gen_uint(values->SoftwareExceptionEnable, 7, 7) |
1211      __gen_uint(values->MaskStackExceptionEnable, 11, 11) |
1212      __gen_uint(values->IllegalOpcodeExceptionEnable, 13, 13) |
1213      __gen_uint(values->FloatingPointMode, 16, 16) |
1214      __gen_uint(values->ThreadPriority, 17, 17) |
1215      __gen_uint(values->BindingTableEntryCount, 18, 25) |
1216      __gen_uint(values->SingleProgramFlow, 31, 31);
1217
1218   const uint32_t v2 =
1219      __gen_uint(values->PerThreadScratchSpace, 0, 3);
1220   dw[2] = __gen_combine_address(data, &dw[2], values->ScratchSpaceBasePointer, v2);
1221
1222   dw[3] =
1223      __gen_uint(values->DispatchGRFStartRegisterForURBData, 0, 3) |
1224      __gen_uint(values->VertexURBEntryReadOffset, 4, 9) |
1225      __gen_uint(values->VertexURBEntryReadLength, 11, 16) |
1226      __gen_uint(values->ConstantURBEntryReadOffset, 18, 23) |
1227      __gen_uint(values->ConstantURBEntryReadLength, 25, 30);
1228
1229   dw[4] =
1230      __gen_uint(values->StatisticsEnable, 10, 10) |
1231      __gen_uint(values->NumberofURBEntries, 11, 18) |
1232      __gen_uint(values->URBEntryAllocationSize, 19, 23) |
1233      __gen_uint(values->MaximumNumberofThreads, 25, 30);
1234
1235   const uint32_t v5 =
1236      __gen_uint(values->SamplerCount, 0, 2);
1237   dw[5] = __gen_combine_address(data, &dw[5], values->SamplerStatePointer, v5);
1238
1239   dw[6] =
1240      __gen_uint(values->Enable, 0, 0) |
1241      __gen_uint(values->VertexCacheDisable, 1, 1);
1242}
1243
1244#define GEN45_WM_STATE_length                  8
1245struct GEN45_WM_STATE {
1246   uint32_t                             GRFRegisterCount0;
1247   __gen_address_type                   KernelStartPointer0;
1248   bool                                 SoftwareExceptionEnable;
1249   bool                                 MaskStackExceptionEnable;
1250   bool                                 IllegalOpcodeExceptionEnable;
1251   uint32_t                             DepthCoefficientURBReadOffset;
1252   uint32_t                             FloatingPointMode;
1253#define FLOATING_POINT_MODE_IEEE754              0
1254#define FLOATING_POINT_MODE_Alternate            1
1255   uint32_t                             ThreadPriority;
1256#define Normal                                   0
1257#define High                                     1
1258   uint32_t                             BindingTableEntryCount;
1259   bool                                 SingleProgramFlow;
1260   uint32_t                             PerThreadScratchSpace;
1261   __gen_address_type                   ScratchSpaceBasePointer;
1262   uint32_t                             DispatchGRFStartRegisterForConstantSetupData0;
1263   uint32_t                             SetupURBEntryReadOffset;
1264   uint32_t                             SetupURBEntryReadLength;
1265   uint32_t                             ConstantURBEntryReadOffset;
1266   uint32_t                             ConstantURBEntryReadLength;
1267   bool                                 StatisticsEnable;
1268   uint32_t                             SamplerCount;
1269   __gen_address_type                   SamplerStatePointer;
1270   bool                                 _8PixelDispatchEnable;
1271   bool                                 _16PixelDispatchEnable;
1272   bool                                 _32PixelDispatchEnable;
1273   bool                                 Contiguous32PixelDispatchEnable;
1274   bool                                 Contiguous64PixelDispatchEnable;
1275   bool                                 LegacyGlobalDepthBiasEnable;
1276   bool                                 LineStippleEnable;
1277   bool                                 GlobalDepthOffsetEnable;
1278   bool                                 PolygonStippleEnable;
1279   uint32_t                             LineAntialiasingRegionWidth;
1280#define _05pixels                                0
1281#define _10pixels                                1
1282#define _20pixels                                2
1283#define _40pixels                                3
1284   uint32_t                             LineEndCapAntialiasingRegionWidth;
1285#define _05pixels                                0
1286#define _10pixels                                1
1287#define _20pixels                                2
1288#define _40pixels                                3
1289   bool                                 EarlyDepthTestEnable;
1290   bool                                 ThreadDispatchEnable;
1291   bool                                 PixelShaderUsesSourceDepth;
1292   bool                                 PixelShaderComputedDepth;
1293   bool                                 PixelShaderKillsPixel;
1294   bool                                 LegacyDiamondLineRasterization;
1295   uint32_t                             MaximumNumberofThreads;
1296   float                                GlobalDepthOffsetConstant;
1297   float                                GlobalDepthOffsetScale;
1298};
1299
1300static inline void
1301GEN45_WM_STATE_pack(__attribute__((unused)) __gen_user_data *data,
1302                    __attribute__((unused)) void * restrict dst,
1303                    __attribute__((unused)) const struct GEN45_WM_STATE * restrict values)
1304{
1305   uint32_t * restrict dw = (uint32_t * restrict) dst;
1306
1307   const uint32_t v0 =
1308      __gen_uint(values->GRFRegisterCount0, 1, 3);
1309   dw[0] = __gen_combine_address(data, &dw[0], values->KernelStartPointer0, v0);
1310
1311   dw[1] =
1312      __gen_uint(values->SoftwareExceptionEnable, 1, 1) |
1313      __gen_uint(values->MaskStackExceptionEnable, 2, 2) |
1314      __gen_uint(values->IllegalOpcodeExceptionEnable, 4, 4) |
1315      __gen_uint(values->DepthCoefficientURBReadOffset, 8, 13) |
1316      __gen_uint(values->FloatingPointMode, 16, 16) |
1317      __gen_uint(values->ThreadPriority, 17, 17) |
1318      __gen_uint(values->BindingTableEntryCount, 18, 25) |
1319      __gen_uint(values->SingleProgramFlow, 31, 31);
1320
1321   const uint32_t v2 =
1322      __gen_uint(values->PerThreadScratchSpace, 0, 3);
1323   dw[2] = __gen_combine_address(data, &dw[2], values->ScratchSpaceBasePointer, v2);
1324
1325   dw[3] =
1326      __gen_uint(values->DispatchGRFStartRegisterForConstantSetupData0, 0, 3) |
1327      __gen_uint(values->SetupURBEntryReadOffset, 4, 9) |
1328      __gen_uint(values->SetupURBEntryReadLength, 11, 16) |
1329      __gen_uint(values->ConstantURBEntryReadOffset, 18, 23) |
1330      __gen_uint(values->ConstantURBEntryReadLength, 25, 30);
1331
1332   const uint32_t v4 =
1333      __gen_uint(values->StatisticsEnable, 0, 0) |
1334      __gen_uint(values->SamplerCount, 2, 4);
1335   dw[4] = __gen_combine_address(data, &dw[4], values->SamplerStatePointer, v4);
1336
1337   dw[5] =
1338      __gen_uint(values->_8PixelDispatchEnable, 0, 0) |
1339      __gen_uint(values->_16PixelDispatchEnable, 1, 1) |
1340      __gen_uint(values->_32PixelDispatchEnable, 2, 2) |
1341      __gen_uint(values->Contiguous32PixelDispatchEnable, 3, 3) |
1342      __gen_uint(values->Contiguous64PixelDispatchEnable, 4, 4) |
1343      __gen_uint(values->LegacyGlobalDepthBiasEnable, 10, 10) |
1344      __gen_uint(values->LineStippleEnable, 11, 11) |
1345      __gen_uint(values->GlobalDepthOffsetEnable, 12, 12) |
1346      __gen_uint(values->PolygonStippleEnable, 13, 13) |
1347      __gen_uint(values->LineAntialiasingRegionWidth, 14, 15) |
1348      __gen_uint(values->LineEndCapAntialiasingRegionWidth, 16, 17) |
1349      __gen_uint(values->EarlyDepthTestEnable, 18, 18) |
1350      __gen_uint(values->ThreadDispatchEnable, 19, 19) |
1351      __gen_uint(values->PixelShaderUsesSourceDepth, 20, 20) |
1352      __gen_uint(values->PixelShaderComputedDepth, 21, 21) |
1353      __gen_uint(values->PixelShaderKillsPixel, 22, 22) |
1354      __gen_uint(values->LegacyDiamondLineRasterization, 23, 23) |
1355      __gen_uint(values->MaximumNumberofThreads, 25, 31);
1356
1357   dw[6] =
1358      __gen_float(values->GlobalDepthOffsetConstant);
1359
1360   dw[7] =
1361      __gen_float(values->GlobalDepthOffsetScale);
1362}
1363
1364#define GEN45_3DPRIMITIVE_length               6
1365#define GEN45_3DPRIMITIVE_length_bias          2
1366#define GEN45_3DPRIMITIVE_header                \
1367   .DWordLength                         =      4,  \
1368   ._3DCommandSubOpcode                 =      0,  \
1369   ._3DCommandOpcode                    =      3,  \
1370   .CommandSubType                      =      3,  \
1371   .CommandType                         =      3
1372
1373struct GEN45_3DPRIMITIVE {
1374   uint32_t                             DWordLength;
1375   uint32_t                             IndirectVertexCount;
1376   enum GEN45_3D_Prim_Topo_Type         PrimitiveTopologyType;
1377   uint32_t                             VertexAccessType;
1378#define SEQUENTIAL                               0
1379#define RANDOM                                   1
1380   uint32_t                             _3DCommandSubOpcode;
1381   uint32_t                             _3DCommandOpcode;
1382   uint32_t                             CommandSubType;
1383   uint32_t                             CommandType;
1384   uint32_t                             VertexCountPerInstance;
1385   uint32_t                             StartVertexLocation;
1386   uint32_t                             InstanceCount;
1387   uint32_t                             StartInstanceLocation;
1388   int32_t                              BaseVertexLocation;
1389};
1390
1391static inline void
1392GEN45_3DPRIMITIVE_pack(__attribute__((unused)) __gen_user_data *data,
1393                       __attribute__((unused)) void * restrict dst,
1394                       __attribute__((unused)) const struct GEN45_3DPRIMITIVE * restrict values)
1395{
1396   uint32_t * restrict dw = (uint32_t * restrict) dst;
1397
1398   dw[0] =
1399      __gen_uint(values->DWordLength, 0, 7) |
1400      __gen_uint(values->IndirectVertexCount, 9, 9) |
1401      __gen_uint(values->PrimitiveTopologyType, 10, 14) |
1402      __gen_uint(values->VertexAccessType, 15, 15) |
1403      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1404      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1405      __gen_uint(values->CommandSubType, 27, 28) |
1406      __gen_uint(values->CommandType, 29, 31);
1407
1408   dw[1] =
1409      __gen_uint(values->VertexCountPerInstance, 0, 31);
1410
1411   dw[2] =
1412      __gen_uint(values->StartVertexLocation, 0, 31);
1413
1414   dw[3] =
1415      __gen_uint(values->InstanceCount, 0, 31);
1416
1417   dw[4] =
1418      __gen_uint(values->StartInstanceLocation, 0, 31);
1419
1420   dw[5] =
1421      __gen_sint(values->BaseVertexLocation, 0, 31);
1422}
1423
1424#define GEN45_3DSTATE_AA_LINE_PARAMETERS_length      3
1425#define GEN45_3DSTATE_AA_LINE_PARAMETERS_length_bias      2
1426#define GEN45_3DSTATE_AA_LINE_PARAMETERS_header \
1427   .DWordLength                         =      1,  \
1428   ._3DCommandSubOpcode                 =     10,  \
1429   ._3DCommandOpcode                    =      1,  \
1430   .CommandSubType                      =      3,  \
1431   .CommandType                         =      3
1432
1433struct GEN45_3DSTATE_AA_LINE_PARAMETERS {
1434   uint32_t                             DWordLength;
1435   uint32_t                             _3DCommandSubOpcode;
1436   uint32_t                             _3DCommandOpcode;
1437   uint32_t                             CommandSubType;
1438   uint32_t                             CommandType;
1439   float                                AACoverageSlope;
1440   float                                AACoverageBias;
1441   float                                AACoverageEndCapSlope;
1442   float                                AACoverageEndCapBias;
1443};
1444
1445static inline void
1446GEN45_3DSTATE_AA_LINE_PARAMETERS_pack(__attribute__((unused)) __gen_user_data *data,
1447                                      __attribute__((unused)) void * restrict dst,
1448                                      __attribute__((unused)) const struct GEN45_3DSTATE_AA_LINE_PARAMETERS * restrict values)
1449{
1450   uint32_t * restrict dw = (uint32_t * restrict) dst;
1451
1452   dw[0] =
1453      __gen_uint(values->DWordLength, 0, 7) |
1454      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1455      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1456      __gen_uint(values->CommandSubType, 27, 28) |
1457      __gen_uint(values->CommandType, 29, 31);
1458
1459   dw[1] =
1460      __gen_ufixed(values->AACoverageSlope, 0, 7, 8) |
1461      __gen_ufixed(values->AACoverageBias, 16, 23, 8);
1462
1463   dw[2] =
1464      __gen_ufixed(values->AACoverageEndCapSlope, 0, 7, 8) |
1465      __gen_ufixed(values->AACoverageEndCapBias, 16, 23, 8);
1466}
1467
1468#define GEN45_3DSTATE_BINDING_TABLE_POINTERS_length      6
1469#define GEN45_3DSTATE_BINDING_TABLE_POINTERS_length_bias      2
1470#define GEN45_3DSTATE_BINDING_TABLE_POINTERS_header\
1471   .DWordLength                         =      4,  \
1472   ._3DCommandSubOpcode                 =      1,  \
1473   ._3DCommandOpcode                    =      0,  \
1474   .CommandSubType                      =      3,  \
1475   .CommandType                         =      3
1476
1477struct GEN45_3DSTATE_BINDING_TABLE_POINTERS {
1478   uint32_t                             DWordLength;
1479   uint32_t                             _3DCommandSubOpcode;
1480   uint32_t                             _3DCommandOpcode;
1481   uint32_t                             CommandSubType;
1482   uint32_t                             CommandType;
1483   uint64_t                             PointertoVSBindingTable;
1484   uint64_t                             PointertoGSBindingTable;
1485   uint64_t                             PointertoCLIPBindingTable;
1486   uint64_t                             PointertoSFBindingTable;
1487   uint64_t                             PointertoPSBindingTable;
1488};
1489
1490static inline void
1491GEN45_3DSTATE_BINDING_TABLE_POINTERS_pack(__attribute__((unused)) __gen_user_data *data,
1492                                          __attribute__((unused)) void * restrict dst,
1493                                          __attribute__((unused)) const struct GEN45_3DSTATE_BINDING_TABLE_POINTERS * restrict values)
1494{
1495   uint32_t * restrict dw = (uint32_t * restrict) dst;
1496
1497   dw[0] =
1498      __gen_uint(values->DWordLength, 0, 7) |
1499      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1500      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1501      __gen_uint(values->CommandSubType, 27, 28) |
1502      __gen_uint(values->CommandType, 29, 31);
1503
1504   dw[1] =
1505      __gen_offset(values->PointertoVSBindingTable, 5, 31);
1506
1507   dw[2] =
1508      __gen_offset(values->PointertoGSBindingTable, 5, 31);
1509
1510   dw[3] =
1511      __gen_offset(values->PointertoCLIPBindingTable, 5, 31);
1512
1513   dw[4] =
1514      __gen_offset(values->PointertoSFBindingTable, 5, 31);
1515
1516   dw[5] =
1517      __gen_offset(values->PointertoPSBindingTable, 5, 31);
1518}
1519
1520#define GEN45_3DSTATE_CONSTANT_COLOR_length      5
1521#define GEN45_3DSTATE_CONSTANT_COLOR_length_bias      2
1522#define GEN45_3DSTATE_CONSTANT_COLOR_header     \
1523   .DWordLength                         =      3,  \
1524   ._3DCommandSubOpcode                 =      1,  \
1525   ._3DCommandOpcode                    =      1,  \
1526   .CommandSubType                      =      3,  \
1527   .CommandType                         =      3
1528
1529struct GEN45_3DSTATE_CONSTANT_COLOR {
1530   uint32_t                             DWordLength;
1531   uint32_t                             _3DCommandSubOpcode;
1532   uint32_t                             _3DCommandOpcode;
1533   uint32_t                             CommandSubType;
1534   uint32_t                             CommandType;
1535   float                                BlendConstantColorRed;
1536   float                                BlendConstantColorGreen;
1537   float                                BlendConstantColorBlue;
1538   float                                BlendConstantColorAlpha;
1539};
1540
1541static inline void
1542GEN45_3DSTATE_CONSTANT_COLOR_pack(__attribute__((unused)) __gen_user_data *data,
1543                                  __attribute__((unused)) void * restrict dst,
1544                                  __attribute__((unused)) const struct GEN45_3DSTATE_CONSTANT_COLOR * restrict values)
1545{
1546   uint32_t * restrict dw = (uint32_t * restrict) dst;
1547
1548   dw[0] =
1549      __gen_uint(values->DWordLength, 0, 7) |
1550      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1551      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1552      __gen_uint(values->CommandSubType, 27, 28) |
1553      __gen_uint(values->CommandType, 29, 31);
1554
1555   dw[1] =
1556      __gen_float(values->BlendConstantColorRed);
1557
1558   dw[2] =
1559      __gen_float(values->BlendConstantColorGreen);
1560
1561   dw[3] =
1562      __gen_float(values->BlendConstantColorBlue);
1563
1564   dw[4] =
1565      __gen_float(values->BlendConstantColorAlpha);
1566}
1567
1568#define GEN45_3DSTATE_DEPTH_BUFFER_length      6
1569#define GEN45_3DSTATE_DEPTH_BUFFER_length_bias      2
1570#define GEN45_3DSTATE_DEPTH_BUFFER_header       \
1571   .DWordLength                         =      4,  \
1572   ._3DCommandSubOpcode                 =      5,  \
1573   ._3DCommandOpcode                    =      1,  \
1574   .CommandSubType                      =      3,  \
1575   .CommandType                         =      3
1576
1577struct GEN45_3DSTATE_DEPTH_BUFFER {
1578   uint32_t                             DWordLength;
1579   uint32_t                             _3DCommandSubOpcode;
1580   uint32_t                             _3DCommandOpcode;
1581   uint32_t                             CommandSubType;
1582   uint32_t                             CommandType;
1583   uint32_t                             SurfacePitch;
1584   uint32_t                             SurfaceFormat;
1585#define D32_FLOAT_S8X24_UINT                     0
1586#define D32_FLOAT                                1
1587#define D24_UNORM_S8_UINT                        2
1588#define D24_UNORM_X8_UINT                        3
1589#define D16_UNORM                                5
1590   uint32_t                             SoftwareTiledRenderingMode;
1591#define NORMAL                                   0
1592#define STR1                                     1
1593#define STR2                                     3
1594   bool                                 DepthBufferCoordinateOffsetDisable;
1595   uint32_t                             TileWalk;
1596#define TILEWALK_YMAJOR                          1
1597   bool                                 TiledSurface;
1598   uint32_t                             SurfaceType;
1599#define SURFTYPE_1D                              0
1600#define SURFTYPE_2D                              1
1601#define SURFTYPE_3D                              2
1602#define SURFTYPE_CUBE                            3
1603#define SURFTYPE_NULL                            7
1604   __gen_address_type                   SurfaceBaseAddress;
1605   uint32_t                             MIPMapLayoutMode;
1606#define MIPLAYOUT_BELOW                          0
1607#define MIPLAYOUT_RIGHT                          1
1608   uint32_t                             LOD;
1609   uint32_t                             Width;
1610   uint32_t                             Height;
1611#define SURFTYPE_1Dmustbezero                    0
1612   uint32_t                             RenderTargetViewExtent;
1613   uint32_t                             MinimumArrayElement;
1614   uint32_t                             Depth;
1615#define SURFTYPE_CUBEmustbezero                  0
1616   int32_t                              DepthCoordinateOffsetX;
1617   int32_t                              DepthCoordinateOffsetY;
1618};
1619
1620static inline void
1621GEN45_3DSTATE_DEPTH_BUFFER_pack(__attribute__((unused)) __gen_user_data *data,
1622                                __attribute__((unused)) void * restrict dst,
1623                                __attribute__((unused)) const struct GEN45_3DSTATE_DEPTH_BUFFER * restrict values)
1624{
1625   uint32_t * restrict dw = (uint32_t * restrict) dst;
1626
1627   dw[0] =
1628      __gen_uint(values->DWordLength, 0, 7) |
1629      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1630      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1631      __gen_uint(values->CommandSubType, 27, 28) |
1632      __gen_uint(values->CommandType, 29, 31);
1633
1634   dw[1] =
1635      __gen_uint(values->SurfacePitch, 0, 16) |
1636      __gen_uint(values->SurfaceFormat, 18, 20) |
1637      __gen_uint(values->SoftwareTiledRenderingMode, 23, 24) |
1638      __gen_uint(values->DepthBufferCoordinateOffsetDisable, 25, 25) |
1639      __gen_uint(values->TileWalk, 26, 26) |
1640      __gen_uint(values->TiledSurface, 27, 27) |
1641      __gen_uint(values->SurfaceType, 29, 31);
1642
1643   dw[2] = __gen_combine_address(data, &dw[2], values->SurfaceBaseAddress, 0);
1644
1645   dw[3] =
1646      __gen_uint(values->MIPMapLayoutMode, 1, 1) |
1647      __gen_uint(values->LOD, 2, 5) |
1648      __gen_uint(values->Width, 6, 18) |
1649      __gen_uint(values->Height, 19, 31);
1650
1651   dw[4] =
1652      __gen_uint(values->RenderTargetViewExtent, 1, 9) |
1653      __gen_uint(values->MinimumArrayElement, 10, 20) |
1654      __gen_uint(values->Depth, 21, 31);
1655
1656   dw[5] =
1657      __gen_sint(values->DepthCoordinateOffsetX, 0, 15) |
1658      __gen_sint(values->DepthCoordinateOffsetY, 16, 31);
1659}
1660
1661#define GEN45_3DSTATE_DRAWING_RECTANGLE_length      4
1662#define GEN45_3DSTATE_DRAWING_RECTANGLE_length_bias      2
1663#define GEN45_3DSTATE_DRAWING_RECTANGLE_header  \
1664   .DWordLength                         =      2,  \
1665   ._3DCommandSubOpcode                 =      0,  \
1666   ._3DCommandOpcode                    =      1,  \
1667   .CommandSubType                      =      3,  \
1668   .CommandType                         =      3
1669
1670struct GEN45_3DSTATE_DRAWING_RECTANGLE {
1671   uint32_t                             DWordLength;
1672   uint32_t                             _3DCommandSubOpcode;
1673   uint32_t                             _3DCommandOpcode;
1674   uint32_t                             CommandSubType;
1675   uint32_t                             CommandType;
1676   uint32_t                             ClippedDrawingRectangleXMin;
1677   uint32_t                             ClippedDrawingRectangleYMin;
1678   uint32_t                             ClippedDrawingRectangleXMax;
1679   uint32_t                             ClippedDrawingRectangleYMax;
1680   int32_t                              DrawingRectangleOriginX;
1681   int32_t                              DrawingRectangleOriginY;
1682};
1683
1684static inline void
1685GEN45_3DSTATE_DRAWING_RECTANGLE_pack(__attribute__((unused)) __gen_user_data *data,
1686                                     __attribute__((unused)) void * restrict dst,
1687                                     __attribute__((unused)) const struct GEN45_3DSTATE_DRAWING_RECTANGLE * restrict values)
1688{
1689   uint32_t * restrict dw = (uint32_t * restrict) dst;
1690
1691   dw[0] =
1692      __gen_uint(values->DWordLength, 0, 7) |
1693      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1694      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1695      __gen_uint(values->CommandSubType, 27, 28) |
1696      __gen_uint(values->CommandType, 29, 31);
1697
1698   dw[1] =
1699      __gen_uint(values->ClippedDrawingRectangleXMin, 0, 15) |
1700      __gen_uint(values->ClippedDrawingRectangleYMin, 16, 31);
1701
1702   dw[2] =
1703      __gen_uint(values->ClippedDrawingRectangleXMax, 0, 15) |
1704      __gen_uint(values->ClippedDrawingRectangleYMax, 16, 31);
1705
1706   dw[3] =
1707      __gen_sint(values->DrawingRectangleOriginX, 0, 15) |
1708      __gen_sint(values->DrawingRectangleOriginY, 16, 31);
1709}
1710
1711#define GEN45_3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP_length      2
1712#define GEN45_3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP_length_bias      2
1713#define GEN45_3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP_header\
1714   .DWordLength                         =      0,  \
1715   ._3DCommandSubOpcode                 =      9,  \
1716   ._3DCommandOpcode                    =      1,  \
1717   .CommandSubType                      =      3,  \
1718   .CommandType                         =      3
1719
1720struct GEN45_3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP {
1721   uint32_t                             DWordLength;
1722   uint32_t                             _3DCommandSubOpcode;
1723   uint32_t                             _3DCommandOpcode;
1724   uint32_t                             CommandSubType;
1725   uint32_t                             CommandType;
1726   float                                GlobalDepthOffsetClamp;
1727};
1728
1729static inline void
1730GEN45_3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP_pack(__attribute__((unused)) __gen_user_data *data,
1731                                             __attribute__((unused)) void * restrict dst,
1732                                             __attribute__((unused)) const struct GEN45_3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP * restrict values)
1733{
1734   uint32_t * restrict dw = (uint32_t * restrict) dst;
1735
1736   dw[0] =
1737      __gen_uint(values->DWordLength, 0, 7) |
1738      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1739      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1740      __gen_uint(values->CommandSubType, 27, 28) |
1741      __gen_uint(values->CommandType, 29, 31);
1742
1743   dw[1] =
1744      __gen_float(values->GlobalDepthOffsetClamp);
1745}
1746
1747#define GEN45_3DSTATE_INDEX_BUFFER_length      3
1748#define GEN45_3DSTATE_INDEX_BUFFER_length_bias      2
1749#define GEN45_3DSTATE_INDEX_BUFFER_header       \
1750   .DWordLength                         =      1,  \
1751   ._3DCommandSubOpcode                 =     10,  \
1752   ._3DCommandOpcode                    =      0,  \
1753   .CommandSubType                      =      3,  \
1754   .CommandType                         =      3
1755
1756struct GEN45_3DSTATE_INDEX_BUFFER {
1757   uint32_t                             DWordLength;
1758   uint32_t                             IndexFormat;
1759#define INDEX_BYTE                               0
1760#define INDEX_WORD                               1
1761#define INDEX_DWORD                              2
1762   bool                                 CutIndexEnable;
1763   uint32_t                             _3DCommandSubOpcode;
1764   uint32_t                             _3DCommandOpcode;
1765   uint32_t                             CommandSubType;
1766   uint32_t                             CommandType;
1767   __gen_address_type                   BufferStartingAddress;
1768   __gen_address_type                   BufferEndingAddress;
1769};
1770
1771static inline void
1772GEN45_3DSTATE_INDEX_BUFFER_pack(__attribute__((unused)) __gen_user_data *data,
1773                                __attribute__((unused)) void * restrict dst,
1774                                __attribute__((unused)) const struct GEN45_3DSTATE_INDEX_BUFFER * restrict values)
1775{
1776   uint32_t * restrict dw = (uint32_t * restrict) dst;
1777
1778   dw[0] =
1779      __gen_uint(values->DWordLength, 0, 7) |
1780      __gen_uint(values->IndexFormat, 8, 9) |
1781      __gen_uint(values->CutIndexEnable, 10, 10) |
1782      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1783      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1784      __gen_uint(values->CommandSubType, 27, 28) |
1785      __gen_uint(values->CommandType, 29, 31);
1786
1787   dw[1] = __gen_combine_address(data, &dw[1], values->BufferStartingAddress, 0);
1788
1789   dw[2] = __gen_combine_address(data, &dw[2], values->BufferEndingAddress, 0);
1790}
1791
1792#define GEN45_3DSTATE_LINE_STIPPLE_length      3
1793#define GEN45_3DSTATE_LINE_STIPPLE_length_bias      2
1794#define GEN45_3DSTATE_LINE_STIPPLE_header       \
1795   .DWordLength                         =      1,  \
1796   ._3DCommandSubOpcode                 =      8,  \
1797   ._3DCommandOpcode                    =      1,  \
1798   .CommandSubType                      =      3,  \
1799   .CommandType                         =      3
1800
1801struct GEN45_3DSTATE_LINE_STIPPLE {
1802   uint32_t                             DWordLength;
1803   uint32_t                             _3DCommandSubOpcode;
1804   uint32_t                             _3DCommandOpcode;
1805   uint32_t                             CommandSubType;
1806   uint32_t                             CommandType;
1807   uint32_t                             LineStipplePattern;
1808   uint32_t                             CurrentStippleIndex;
1809   uint32_t                             CurrentRepeatCounter;
1810   bool                                 ModifyEnableCurrentRepeatCounterCurrentStippleIndex;
1811   uint32_t                             LineStippleRepeatCount;
1812   float                                LineStippleInverseRepeatCount;
1813};
1814
1815static inline void
1816GEN45_3DSTATE_LINE_STIPPLE_pack(__attribute__((unused)) __gen_user_data *data,
1817                                __attribute__((unused)) void * restrict dst,
1818                                __attribute__((unused)) const struct GEN45_3DSTATE_LINE_STIPPLE * restrict values)
1819{
1820   uint32_t * restrict dw = (uint32_t * restrict) dst;
1821
1822   dw[0] =
1823      __gen_uint(values->DWordLength, 0, 7) |
1824      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1825      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1826      __gen_uint(values->CommandSubType, 27, 28) |
1827      __gen_uint(values->CommandType, 29, 31);
1828
1829   dw[1] =
1830      __gen_uint(values->LineStipplePattern, 0, 15) |
1831      __gen_uint(values->CurrentStippleIndex, 16, 19) |
1832      __gen_uint(values->CurrentRepeatCounter, 21, 29) |
1833      __gen_uint(values->ModifyEnableCurrentRepeatCounterCurrentStippleIndex, 31, 31);
1834
1835   dw[2] =
1836      __gen_uint(values->LineStippleRepeatCount, 0, 8) |
1837      __gen_ufixed(values->LineStippleInverseRepeatCount, 16, 31, 13);
1838}
1839
1840#define GEN45_3DSTATE_PIPELINED_POINTERS_length      7
1841#define GEN45_3DSTATE_PIPELINED_POINTERS_length_bias      2
1842#define GEN45_3DSTATE_PIPELINED_POINTERS_header \
1843   .DWordLength                         =      5,  \
1844   ._3DCommandSubOpcode                 =      0,  \
1845   ._3DCommandOpcode                    =      0,  \
1846   .CommandSubType                      =      3,  \
1847   .CommandType                         =      3
1848
1849struct GEN45_3DSTATE_PIPELINED_POINTERS {
1850   uint32_t                             DWordLength;
1851   uint32_t                             _3DCommandSubOpcode;
1852   uint32_t                             _3DCommandOpcode;
1853   uint32_t                             CommandSubType;
1854   uint32_t                             CommandType;
1855   __gen_address_type                   PointertoVSState;
1856   bool                                 GSEnable;
1857   __gen_address_type                   PointertoGSState;
1858   bool                                 ClipEnable;
1859   __gen_address_type                   PointertoCLIPState;
1860   __gen_address_type                   PointertoSFState;
1861   __gen_address_type                   PointertoWMState;
1862   __gen_address_type                   PointertoColorCalcState;
1863};
1864
1865static inline void
1866GEN45_3DSTATE_PIPELINED_POINTERS_pack(__attribute__((unused)) __gen_user_data *data,
1867                                      __attribute__((unused)) void * restrict dst,
1868                                      __attribute__((unused)) const struct GEN45_3DSTATE_PIPELINED_POINTERS * restrict values)
1869{
1870   uint32_t * restrict dw = (uint32_t * restrict) dst;
1871
1872   dw[0] =
1873      __gen_uint(values->DWordLength, 0, 7) |
1874      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1875      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1876      __gen_uint(values->CommandSubType, 27, 28) |
1877      __gen_uint(values->CommandType, 29, 31);
1878
1879   dw[1] = __gen_combine_address(data, &dw[1], values->PointertoVSState, 0);
1880
1881   const uint32_t v2 =
1882      __gen_uint(values->GSEnable, 0, 0);
1883   dw[2] = __gen_combine_address(data, &dw[2], values->PointertoGSState, v2);
1884
1885   const uint32_t v3 =
1886      __gen_uint(values->ClipEnable, 0, 0);
1887   dw[3] = __gen_combine_address(data, &dw[3], values->PointertoCLIPState, v3);
1888
1889   dw[4] = __gen_combine_address(data, &dw[4], values->PointertoSFState, 0);
1890
1891   dw[5] = __gen_combine_address(data, &dw[5], values->PointertoWMState, 0);
1892
1893   dw[6] = __gen_combine_address(data, &dw[6], values->PointertoColorCalcState, 0);
1894}
1895
1896#define GEN45_3DSTATE_POLY_STIPPLE_OFFSET_length      2
1897#define GEN45_3DSTATE_POLY_STIPPLE_OFFSET_length_bias      2
1898#define GEN45_3DSTATE_POLY_STIPPLE_OFFSET_header\
1899   .DWordLength                         =      0,  \
1900   ._3DCommandSubOpcode                 =      6,  \
1901   ._3DCommandOpcode                    =      1,  \
1902   .CommandSubType                      =      3,  \
1903   .CommandType                         =      3
1904
1905struct GEN45_3DSTATE_POLY_STIPPLE_OFFSET {
1906   uint32_t                             DWordLength;
1907   uint32_t                             _3DCommandSubOpcode;
1908   uint32_t                             _3DCommandOpcode;
1909   uint32_t                             CommandSubType;
1910   uint32_t                             CommandType;
1911   uint32_t                             PolygonStippleYOffset;
1912   uint32_t                             PolygonStippleXOffset;
1913};
1914
1915static inline void
1916GEN45_3DSTATE_POLY_STIPPLE_OFFSET_pack(__attribute__((unused)) __gen_user_data *data,
1917                                       __attribute__((unused)) void * restrict dst,
1918                                       __attribute__((unused)) const struct GEN45_3DSTATE_POLY_STIPPLE_OFFSET * restrict values)
1919{
1920   uint32_t * restrict dw = (uint32_t * restrict) dst;
1921
1922   dw[0] =
1923      __gen_uint(values->DWordLength, 0, 7) |
1924      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1925      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1926      __gen_uint(values->CommandSubType, 27, 28) |
1927      __gen_uint(values->CommandType, 29, 31);
1928
1929   dw[1] =
1930      __gen_uint(values->PolygonStippleYOffset, 0, 4) |
1931      __gen_uint(values->PolygonStippleXOffset, 8, 12);
1932}
1933
1934#define GEN45_3DSTATE_POLY_STIPPLE_PATTERN_length     33
1935#define GEN45_3DSTATE_POLY_STIPPLE_PATTERN_length_bias      2
1936#define GEN45_3DSTATE_POLY_STIPPLE_PATTERN_header\
1937   .DWordLength                         =     31,  \
1938   ._3DCommandSubOpcode                 =      7,  \
1939   ._3DCommandOpcode                    =      1,  \
1940   .CommandSubType                      =      3,  \
1941   .CommandType                         =      3
1942
1943struct GEN45_3DSTATE_POLY_STIPPLE_PATTERN {
1944   uint32_t                             DWordLength;
1945   uint32_t                             _3DCommandSubOpcode;
1946   uint32_t                             _3DCommandOpcode;
1947   uint32_t                             CommandSubType;
1948   uint32_t                             CommandType;
1949   uint32_t                             PatternRow[32];
1950};
1951
1952static inline void
1953GEN45_3DSTATE_POLY_STIPPLE_PATTERN_pack(__attribute__((unused)) __gen_user_data *data,
1954                                        __attribute__((unused)) void * restrict dst,
1955                                        __attribute__((unused)) const struct GEN45_3DSTATE_POLY_STIPPLE_PATTERN * restrict values)
1956{
1957   uint32_t * restrict dw = (uint32_t * restrict) dst;
1958
1959   dw[0] =
1960      __gen_uint(values->DWordLength, 0, 7) |
1961      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
1962      __gen_uint(values->_3DCommandOpcode, 24, 26) |
1963      __gen_uint(values->CommandSubType, 27, 28) |
1964      __gen_uint(values->CommandType, 29, 31);
1965
1966   dw[1] =
1967      __gen_uint(values->PatternRow[0], 0, 31);
1968
1969   dw[2] =
1970      __gen_uint(values->PatternRow[1], 0, 31);
1971
1972   dw[3] =
1973      __gen_uint(values->PatternRow[2], 0, 31);
1974
1975   dw[4] =
1976      __gen_uint(values->PatternRow[3], 0, 31);
1977
1978   dw[5] =
1979      __gen_uint(values->PatternRow[4], 0, 31);
1980
1981   dw[6] =
1982      __gen_uint(values->PatternRow[5], 0, 31);
1983
1984   dw[7] =
1985      __gen_uint(values->PatternRow[6], 0, 31);
1986
1987   dw[8] =
1988      __gen_uint(values->PatternRow[7], 0, 31);
1989
1990   dw[9] =
1991      __gen_uint(values->PatternRow[8], 0, 31);
1992
1993   dw[10] =
1994      __gen_uint(values->PatternRow[9], 0, 31);
1995
1996   dw[11] =
1997      __gen_uint(values->PatternRow[10], 0, 31);
1998
1999   dw[12] =
2000      __gen_uint(values->PatternRow[11], 0, 31);
2001
2002   dw[13] =
2003      __gen_uint(values->PatternRow[12], 0, 31);
2004
2005   dw[14] =
2006      __gen_uint(values->PatternRow[13], 0, 31);
2007
2008   dw[15] =
2009      __gen_uint(values->PatternRow[14], 0, 31);
2010
2011   dw[16] =
2012      __gen_uint(values->PatternRow[15], 0, 31);
2013
2014   dw[17] =
2015      __gen_uint(values->PatternRow[16], 0, 31);
2016
2017   dw[18] =
2018      __gen_uint(values->PatternRow[17], 0, 31);
2019
2020   dw[19] =
2021      __gen_uint(values->PatternRow[18], 0, 31);
2022
2023   dw[20] =
2024      __gen_uint(values->PatternRow[19], 0, 31);
2025
2026   dw[21] =
2027      __gen_uint(values->PatternRow[20], 0, 31);
2028
2029   dw[22] =
2030      __gen_uint(values->PatternRow[21], 0, 31);
2031
2032   dw[23] =
2033      __gen_uint(values->PatternRow[22], 0, 31);
2034
2035   dw[24] =
2036      __gen_uint(values->PatternRow[23], 0, 31);
2037
2038   dw[25] =
2039      __gen_uint(values->PatternRow[24], 0, 31);
2040
2041   dw[26] =
2042      __gen_uint(values->PatternRow[25], 0, 31);
2043
2044   dw[27] =
2045      __gen_uint(values->PatternRow[26], 0, 31);
2046
2047   dw[28] =
2048      __gen_uint(values->PatternRow[27], 0, 31);
2049
2050   dw[29] =
2051      __gen_uint(values->PatternRow[28], 0, 31);
2052
2053   dw[30] =
2054      __gen_uint(values->PatternRow[29], 0, 31);
2055
2056   dw[31] =
2057      __gen_uint(values->PatternRow[30], 0, 31);
2058
2059   dw[32] =
2060      __gen_uint(values->PatternRow[31], 0, 31);
2061}
2062
2063#define GEN45_3DSTATE_VERTEX_BUFFERS_length_bias      2
2064#define GEN45_3DSTATE_VERTEX_BUFFERS_header     \
2065   .DWordLength                         =      3,  \
2066   ._3DCommandSubOpcode                 =      8,  \
2067   ._3DCommandOpcode                    =      0,  \
2068   .CommandSubType                      =      3,  \
2069   .CommandType                         =      3
2070
2071struct GEN45_3DSTATE_VERTEX_BUFFERS {
2072   uint32_t                             DWordLength;
2073   uint32_t                             _3DCommandSubOpcode;
2074   uint32_t                             _3DCommandOpcode;
2075   uint32_t                             CommandSubType;
2076   uint32_t                             CommandType;
2077   /* variable length fields follow */
2078};
2079
2080static inline void
2081GEN45_3DSTATE_VERTEX_BUFFERS_pack(__attribute__((unused)) __gen_user_data *data,
2082                                  __attribute__((unused)) void * restrict dst,
2083                                  __attribute__((unused)) const struct GEN45_3DSTATE_VERTEX_BUFFERS * restrict values)
2084{
2085   uint32_t * restrict dw = (uint32_t * restrict) dst;
2086
2087   dw[0] =
2088      __gen_uint(values->DWordLength, 0, 7) |
2089      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2090      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2091      __gen_uint(values->CommandSubType, 27, 28) |
2092      __gen_uint(values->CommandType, 29, 31);
2093}
2094
2095#define GEN45_3DSTATE_VERTEX_ELEMENTS_length_bias      2
2096#define GEN45_3DSTATE_VERTEX_ELEMENTS_header    \
2097   .DWordLength                         =      1,  \
2098   ._3DCommandSubOpcode                 =      9,  \
2099   ._3DCommandOpcode                    =      0,  \
2100   .CommandSubType                      =      3,  \
2101   .CommandType                         =      3
2102
2103struct GEN45_3DSTATE_VERTEX_ELEMENTS {
2104   uint32_t                             DWordLength;
2105   uint32_t                             _3DCommandSubOpcode;
2106   uint32_t                             _3DCommandOpcode;
2107   uint32_t                             CommandSubType;
2108   uint32_t                             CommandType;
2109   /* variable length fields follow */
2110};
2111
2112static inline void
2113GEN45_3DSTATE_VERTEX_ELEMENTS_pack(__attribute__((unused)) __gen_user_data *data,
2114                                   __attribute__((unused)) void * restrict dst,
2115                                   __attribute__((unused)) const struct GEN45_3DSTATE_VERTEX_ELEMENTS * restrict values)
2116{
2117   uint32_t * restrict dw = (uint32_t * restrict) dst;
2118
2119   dw[0] =
2120      __gen_uint(values->DWordLength, 0, 7) |
2121      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2122      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2123      __gen_uint(values->CommandSubType, 27, 28) |
2124      __gen_uint(values->CommandType, 29, 31);
2125}
2126
2127#define GEN45_3DSTATE_VF_STATISTICS_length      1
2128#define GEN45_3DSTATE_VF_STATISTICS_length_bias      1
2129#define GEN45_3DSTATE_VF_STATISTICS_header      \
2130   ._3DCommandSubOpcode                 =     11,  \
2131   ._3DCommandOpcode                    =      0,  \
2132   .CommandSubType                      =      1,  \
2133   .CommandType                         =      3
2134
2135struct GEN45_3DSTATE_VF_STATISTICS {
2136   bool                                 StatisticsEnable;
2137   uint32_t                             _3DCommandSubOpcode;
2138   uint32_t                             _3DCommandOpcode;
2139   uint32_t                             CommandSubType;
2140   uint32_t                             CommandType;
2141};
2142
2143static inline void
2144GEN45_3DSTATE_VF_STATISTICS_pack(__attribute__((unused)) __gen_user_data *data,
2145                                 __attribute__((unused)) void * restrict dst,
2146                                 __attribute__((unused)) const struct GEN45_3DSTATE_VF_STATISTICS * restrict values)
2147{
2148   uint32_t * restrict dw = (uint32_t * restrict) dst;
2149
2150   dw[0] =
2151      __gen_uint(values->StatisticsEnable, 0, 0) |
2152      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2153      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2154      __gen_uint(values->CommandSubType, 27, 28) |
2155      __gen_uint(values->CommandType, 29, 31);
2156}
2157
2158#define GEN45_CONSTANT_BUFFER_length           2
2159#define GEN45_CONSTANT_BUFFER_length_bias      2
2160#define GEN45_CONSTANT_BUFFER_header            \
2161   .DWordLength                         =      0,  \
2162   .Valid                               =      0,  \
2163   ._3DCommandSubOpcode                 =      2,  \
2164   ._3DCommandOpcode                    =      0,  \
2165   .CommandSubType                      =      0,  \
2166   .CommandType                         =      3
2167
2168struct GEN45_CONSTANT_BUFFER {
2169   uint32_t                             DWordLength;
2170   bool                                 Valid;
2171   uint32_t                             _3DCommandSubOpcode;
2172   uint32_t                             _3DCommandOpcode;
2173   uint32_t                             CommandSubType;
2174   uint32_t                             CommandType;
2175   uint32_t                             BufferLength;
2176   __gen_address_type                   BufferStartingAddress;
2177};
2178
2179static inline void
2180GEN45_CONSTANT_BUFFER_pack(__attribute__((unused)) __gen_user_data *data,
2181                           __attribute__((unused)) void * restrict dst,
2182                           __attribute__((unused)) const struct GEN45_CONSTANT_BUFFER * restrict values)
2183{
2184   uint32_t * restrict dw = (uint32_t * restrict) dst;
2185
2186   dw[0] =
2187      __gen_uint(values->DWordLength, 0, 7) |
2188      __gen_uint(values->Valid, 8, 8) |
2189      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2190      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2191      __gen_uint(values->CommandSubType, 27, 28) |
2192      __gen_uint(values->CommandType, 29, 31);
2193
2194   const uint32_t v1 =
2195      __gen_uint(values->BufferLength, 0, 5);
2196   dw[1] = __gen_combine_address(data, &dw[1], values->BufferStartingAddress, v1);
2197}
2198
2199#define GEN45_CS_URB_STATE_length              2
2200#define GEN45_CS_URB_STATE_length_bias         2
2201#define GEN45_CS_URB_STATE_header               \
2202   .DWordLength                         =      0,  \
2203   ._3DCommandSubOpcode                 =      1,  \
2204   ._3DCommandOpcode                    =      0,  \
2205   .CommandSubType                      =      0,  \
2206   .CommandType                         =      3
2207
2208struct GEN45_CS_URB_STATE {
2209   uint32_t                             DWordLength;
2210   uint32_t                             _3DCommandSubOpcode;
2211   uint32_t                             _3DCommandOpcode;
2212   uint32_t                             CommandSubType;
2213   uint32_t                             CommandType;
2214   uint32_t                             NumberofURBEntries;
2215   uint32_t                             URBEntryAllocationSize;
2216};
2217
2218static inline void
2219GEN45_CS_URB_STATE_pack(__attribute__((unused)) __gen_user_data *data,
2220                        __attribute__((unused)) void * restrict dst,
2221                        __attribute__((unused)) const struct GEN45_CS_URB_STATE * restrict values)
2222{
2223   uint32_t * restrict dw = (uint32_t * restrict) dst;
2224
2225   dw[0] =
2226      __gen_uint(values->DWordLength, 0, 7) |
2227      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2228      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2229      __gen_uint(values->CommandSubType, 27, 28) |
2230      __gen_uint(values->CommandType, 29, 31);
2231
2232   dw[1] =
2233      __gen_uint(values->NumberofURBEntries, 0, 2) |
2234      __gen_uint(values->URBEntryAllocationSize, 4, 8);
2235}
2236
2237#define GEN45_MI_FLUSH_length                  1
2238#define GEN45_MI_FLUSH_length_bias             1
2239#define GEN45_MI_FLUSH_header                   \
2240   .MICommandOpcode                     =      4,  \
2241   .CommandType                         =      0
2242
2243struct GEN45_MI_FLUSH {
2244   uint32_t                             StateInstructionCacheInvalidate;
2245#define DontInvalidate                           0
2246#define Invalidate                               1
2247   uint32_t                             RenderCacheFlushInhibit;
2248#define Flush                                    0
2249#define DontFlush                                1
2250   uint32_t                             GlobalSnapshotCountReset;
2251#define DontReset                                0
2252#define Reset                                    1
2253   uint32_t                             MICommandOpcode;
2254   uint32_t                             CommandType;
2255};
2256
2257static inline void
2258GEN45_MI_FLUSH_pack(__attribute__((unused)) __gen_user_data *data,
2259                    __attribute__((unused)) void * restrict dst,
2260                    __attribute__((unused)) const struct GEN45_MI_FLUSH * restrict values)
2261{
2262   uint32_t * restrict dw = (uint32_t * restrict) dst;
2263
2264   dw[0] =
2265      __gen_uint(values->StateInstructionCacheInvalidate, 1, 1) |
2266      __gen_uint(values->RenderCacheFlushInhibit, 2, 2) |
2267      __gen_uint(values->GlobalSnapshotCountReset, 3, 3) |
2268      __gen_uint(values->MICommandOpcode, 23, 28) |
2269      __gen_uint(values->CommandType, 29, 31);
2270}
2271
2272#define GEN45_MI_LOAD_REGISTER_IMM_length      3
2273#define GEN45_MI_LOAD_REGISTER_IMM_length_bias      2
2274#define GEN45_MI_LOAD_REGISTER_IMM_header       \
2275   .DWordLength                         =      1,  \
2276   .MICommandOpcode                     =     34,  \
2277   .CommandType                         =      0
2278
2279struct GEN45_MI_LOAD_REGISTER_IMM {
2280   uint32_t                             DWordLength;
2281   uint32_t                             ByteWriteDisables;
2282   uint32_t                             MICommandOpcode;
2283   uint32_t                             CommandType;
2284   uint64_t                             RegisterOffset;
2285   uint32_t                             DataDWord;
2286   /* variable length fields follow */
2287};
2288
2289static inline void
2290GEN45_MI_LOAD_REGISTER_IMM_pack(__attribute__((unused)) __gen_user_data *data,
2291                                __attribute__((unused)) void * restrict dst,
2292                                __attribute__((unused)) const struct GEN45_MI_LOAD_REGISTER_IMM * restrict values)
2293{
2294   uint32_t * restrict dw = (uint32_t * restrict) dst;
2295
2296   dw[0] =
2297      __gen_uint(values->DWordLength, 0, 5) |
2298      __gen_uint(values->ByteWriteDisables, 8, 11) |
2299      __gen_uint(values->MICommandOpcode, 23, 28) |
2300      __gen_uint(values->CommandType, 29, 31);
2301
2302   dw[1] =
2303      __gen_offset(values->RegisterOffset, 2, 31);
2304
2305   dw[2] =
2306      __gen_uint(values->DataDWord, 0, 31);
2307}
2308
2309#define GEN45_MI_STORE_DATA_IMM_length         5
2310#define GEN45_MI_STORE_DATA_IMM_length_bias      2
2311#define GEN45_MI_STORE_DATA_IMM_header          \
2312   .DWordLength                         =      2,  \
2313   .MICommandOpcode                     =     32,  \
2314   .CommandType                         =      0
2315
2316struct GEN45_MI_STORE_DATA_IMM {
2317   uint32_t                             DWordLength;
2318   uint32_t                             BitFieldName;
2319   bool                                 MemoryAddressType;
2320   uint32_t                             MICommandOpcode;
2321   uint32_t                             CommandType;
2322   __gen_address_type                   PhysicalStartAddressExtension;
2323   __gen_address_type                   Address;
2324   uint32_t                             DataDWord0;
2325   uint32_t                             DataDWord1;
2326};
2327
2328static inline void
2329GEN45_MI_STORE_DATA_IMM_pack(__attribute__((unused)) __gen_user_data *data,
2330                             __attribute__((unused)) void * restrict dst,
2331                             __attribute__((unused)) const struct GEN45_MI_STORE_DATA_IMM * restrict values)
2332{
2333   uint32_t * restrict dw = (uint32_t * restrict) dst;
2334
2335   dw[0] =
2336      __gen_uint(values->DWordLength, 0, 5) |
2337      __gen_uint(values->BitFieldName, 21, 21) |
2338      __gen_uint(values->MemoryAddressType, 22, 22) |
2339      __gen_uint(values->MICommandOpcode, 23, 28) |
2340      __gen_uint(values->CommandType, 29, 31);
2341
2342   dw[1] = __gen_combine_address(data, &dw[1], values->PhysicalStartAddressExtension, 0);
2343
2344   dw[2] = __gen_combine_address(data, &dw[2], values->Address, 0);
2345
2346   dw[3] =
2347      __gen_uint(values->DataDWord0, 0, 31);
2348
2349   dw[4] =
2350      __gen_uint(values->DataDWord1, 0, 31);
2351}
2352
2353#define GEN45_MI_STORE_REGISTER_MEM_length      3
2354#define GEN45_MI_STORE_REGISTER_MEM_length_bias      2
2355#define GEN45_MI_STORE_REGISTER_MEM_header      \
2356   .DWordLength                         =      1,  \
2357   .MICommandOpcode                     =     36,  \
2358   .CommandType                         =      0
2359
2360struct GEN45_MI_STORE_REGISTER_MEM {
2361   uint32_t                             DWordLength;
2362   bool                                 UseGlobalGTT;
2363   uint32_t                             MICommandOpcode;
2364   uint32_t                             CommandType;
2365   uint64_t                             RegisterAddress;
2366   __gen_address_type                   PhysicalStartAddressExtension;
2367   __gen_address_type                   MemoryAddress;
2368};
2369
2370static inline void
2371GEN45_MI_STORE_REGISTER_MEM_pack(__attribute__((unused)) __gen_user_data *data,
2372                                 __attribute__((unused)) void * restrict dst,
2373                                 __attribute__((unused)) const struct GEN45_MI_STORE_REGISTER_MEM * restrict values)
2374{
2375   uint32_t * restrict dw = (uint32_t * restrict) dst;
2376
2377   dw[0] =
2378      __gen_uint(values->DWordLength, 0, 7) |
2379      __gen_uint(values->UseGlobalGTT, 22, 22) |
2380      __gen_uint(values->MICommandOpcode, 23, 28) |
2381      __gen_uint(values->CommandType, 29, 31);
2382
2383   const uint32_t v1 =
2384      __gen_offset(values->RegisterAddress, 2, 22);
2385   dw[1] = __gen_combine_address(data, &dw[1], values->PhysicalStartAddressExtension, v1);
2386
2387   dw[2] = __gen_combine_address(data, &dw[2], values->MemoryAddress, 0);
2388}
2389
2390#define GEN45_PIPELINE_SELECT_length           1
2391#define GEN45_PIPELINE_SELECT_length_bias      1
2392#define GEN45_PIPELINE_SELECT_header            \
2393   ._3DCommandSubOpcode                 =      4,  \
2394   ._3DCommandOpcode                    =      1,  \
2395   .CommandSubType                      =      1,  \
2396   .CommandType                         =      3
2397
2398struct GEN45_PIPELINE_SELECT {
2399   uint32_t                             PipelineSelection;
2400#define _3D                                      0
2401#define Media                                    1
2402   uint32_t                             _3DCommandSubOpcode;
2403   uint32_t                             _3DCommandOpcode;
2404   uint32_t                             CommandSubType;
2405   uint32_t                             CommandType;
2406};
2407
2408static inline void
2409GEN45_PIPELINE_SELECT_pack(__attribute__((unused)) __gen_user_data *data,
2410                           __attribute__((unused)) void * restrict dst,
2411                           __attribute__((unused)) const struct GEN45_PIPELINE_SELECT * restrict values)
2412{
2413   uint32_t * restrict dw = (uint32_t * restrict) dst;
2414
2415   dw[0] =
2416      __gen_uint(values->PipelineSelection, 0, 1) |
2417      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2418      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2419      __gen_uint(values->CommandSubType, 27, 28) |
2420      __gen_uint(values->CommandType, 29, 31);
2421}
2422
2423#define GEN45_PIPE_CONTROL_length              4
2424#define GEN45_PIPE_CONTROL_length_bias         2
2425#define GEN45_PIPE_CONTROL_header               \
2426   .DWordLength                         =      2,  \
2427   ._3DCommandSubOpcode                 =      0,  \
2428   ._3DCommandOpcode                    =      2,  \
2429   .CommandSubType                      =      3,  \
2430   .CommandType                         =      3
2431
2432struct GEN45_PIPE_CONTROL {
2433   uint32_t                             DWordLength;
2434   bool                                 NotifyEnable;
2435   bool                                 IndirectStatePointersDisable;
2436   bool                                 TextureCacheFlushEnable;
2437   bool                                 InstructionCacheInvalidateEnable;
2438   bool                                 WriteCacheFlush;
2439   bool                                 DepthStallEnable;
2440   uint32_t                             PostSyncOperation;
2441#define NoWrite                                  0
2442#define WriteImmediateData                       1
2443#define WritePSDepthCount                        2
2444#define WriteTimestamp                           3
2445   uint32_t                             _3DCommandSubOpcode;
2446   uint32_t                             _3DCommandOpcode;
2447   uint32_t                             CommandSubType;
2448   uint32_t                             CommandType;
2449   uint32_t                             DestinationAddressType;
2450#define DAT_PGTT                                 0
2451#define DAT_GGTT                                 1
2452   __gen_address_type                   Address;
2453   uint64_t                             ImmediateData;
2454};
2455
2456static inline void
2457GEN45_PIPE_CONTROL_pack(__attribute__((unused)) __gen_user_data *data,
2458                        __attribute__((unused)) void * restrict dst,
2459                        __attribute__((unused)) const struct GEN45_PIPE_CONTROL * restrict values)
2460{
2461   uint32_t * restrict dw = (uint32_t * restrict) dst;
2462
2463   dw[0] =
2464      __gen_uint(values->DWordLength, 0, 7) |
2465      __gen_uint(values->NotifyEnable, 8, 8) |
2466      __gen_uint(values->IndirectStatePointersDisable, 9, 9) |
2467      __gen_uint(values->TextureCacheFlushEnable, 10, 10) |
2468      __gen_uint(values->InstructionCacheInvalidateEnable, 11, 11) |
2469      __gen_uint(values->WriteCacheFlush, 12, 12) |
2470      __gen_uint(values->DepthStallEnable, 13, 13) |
2471      __gen_uint(values->PostSyncOperation, 14, 15) |
2472      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2473      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2474      __gen_uint(values->CommandSubType, 27, 28) |
2475      __gen_uint(values->CommandType, 29, 31);
2476
2477   const uint32_t v1 =
2478      __gen_uint(values->DestinationAddressType, 2, 2);
2479   dw[1] = __gen_combine_address(data, &dw[1], values->Address, v1);
2480
2481   const uint64_t v2 =
2482      __gen_uint(values->ImmediateData, 0, 63);
2483   dw[2] = v2;
2484   dw[3] = v2 >> 32;
2485}
2486
2487#define GEN45_STATE_BASE_ADDRESS_length        6
2488#define GEN45_STATE_BASE_ADDRESS_length_bias      2
2489#define GEN45_STATE_BASE_ADDRESS_header         \
2490   .DWordLength                         =      4,  \
2491   ._3DCommandSubOpcode                 =      1,  \
2492   ._3DCommandOpcode                    =      1,  \
2493   .CommandSubType                      =      0,  \
2494   .CommandType                         =      3
2495
2496struct GEN45_STATE_BASE_ADDRESS {
2497   uint32_t                             DWordLength;
2498   uint32_t                             _3DCommandSubOpcode;
2499   uint32_t                             _3DCommandOpcode;
2500   uint32_t                             CommandSubType;
2501   uint32_t                             CommandType;
2502   bool                                 GeneralStateBaseAddressModifyEnable;
2503   __gen_address_type                   GeneralStateBaseAddress;
2504   bool                                 SurfaceStateBaseAddressModifyEnable;
2505   __gen_address_type                   SurfaceStateBaseAddress;
2506   bool                                 IndirectObjectBaseAddressModifyEnable;
2507   __gen_address_type                   IndirectObjectBaseAddress;
2508   bool                                 GeneralStateAccessUpperBoundModifyEnable;
2509   __gen_address_type                   GeneralStateAccessUpperBound;
2510   bool                                 IndirectObjectAccessUpperBoundModifyEnable;
2511   __gen_address_type                   IndirectObjectAccessUpperBound;
2512};
2513
2514static inline void
2515GEN45_STATE_BASE_ADDRESS_pack(__attribute__((unused)) __gen_user_data *data,
2516                              __attribute__((unused)) void * restrict dst,
2517                              __attribute__((unused)) const struct GEN45_STATE_BASE_ADDRESS * restrict values)
2518{
2519   uint32_t * restrict dw = (uint32_t * restrict) dst;
2520
2521   dw[0] =
2522      __gen_uint(values->DWordLength, 0, 7) |
2523      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2524      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2525      __gen_uint(values->CommandSubType, 27, 28) |
2526      __gen_uint(values->CommandType, 29, 31);
2527
2528   const uint32_t v1 =
2529      __gen_uint(values->GeneralStateBaseAddressModifyEnable, 0, 0);
2530   dw[1] = __gen_combine_address(data, &dw[1], values->GeneralStateBaseAddress, v1);
2531
2532   const uint32_t v2 =
2533      __gen_uint(values->SurfaceStateBaseAddressModifyEnable, 0, 0);
2534   dw[2] = __gen_combine_address(data, &dw[2], values->SurfaceStateBaseAddress, v2);
2535
2536   const uint32_t v3 =
2537      __gen_uint(values->IndirectObjectBaseAddressModifyEnable, 0, 0);
2538   dw[3] = __gen_combine_address(data, &dw[3], values->IndirectObjectBaseAddress, v3);
2539
2540   const uint32_t v4 =
2541      __gen_uint(values->GeneralStateAccessUpperBoundModifyEnable, 0, 0);
2542   dw[4] = __gen_combine_address(data, &dw[4], values->GeneralStateAccessUpperBound, v4);
2543
2544   const uint32_t v5 =
2545      __gen_uint(values->IndirectObjectAccessUpperBoundModifyEnable, 0, 0);
2546   dw[5] = __gen_combine_address(data, &dw[5], values->IndirectObjectAccessUpperBound, v5);
2547}
2548
2549#define GEN45_STATE_SIP_length                 2
2550#define GEN45_STATE_SIP_length_bias            2
2551#define GEN45_STATE_SIP_header                  \
2552   .DWordLength                         =      0,  \
2553   ._3DCommandSubOpcode                 =      2,  \
2554   ._3DCommandOpcode                    =      1,  \
2555   .CommandSubType                      =      0,  \
2556   .CommandType                         =      3
2557
2558struct GEN45_STATE_SIP {
2559   uint32_t                             DWordLength;
2560   uint32_t                             _3DCommandSubOpcode;
2561   uint32_t                             _3DCommandOpcode;
2562   uint32_t                             CommandSubType;
2563   uint32_t                             CommandType;
2564   uint64_t                             SystemInstructionPointer;
2565};
2566
2567static inline void
2568GEN45_STATE_SIP_pack(__attribute__((unused)) __gen_user_data *data,
2569                     __attribute__((unused)) void * restrict dst,
2570                     __attribute__((unused)) const struct GEN45_STATE_SIP * restrict values)
2571{
2572   uint32_t * restrict dw = (uint32_t * restrict) dst;
2573
2574   dw[0] =
2575      __gen_uint(values->DWordLength, 0, 7) |
2576      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2577      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2578      __gen_uint(values->CommandSubType, 27, 28) |
2579      __gen_uint(values->CommandType, 29, 31);
2580
2581   dw[1] =
2582      __gen_offset(values->SystemInstructionPointer, 4, 31);
2583}
2584
2585#define GEN45_URB_FENCE_length                 3
2586#define GEN45_URB_FENCE_length_bias            2
2587#define GEN45_URB_FENCE_header                  \
2588   .DWordLength                         =      1,  \
2589   ._3DCommandSubOpcode                 =      0,  \
2590   ._3DCommandOpcode                    =      0,  \
2591   .CommandSubType                      =      0,  \
2592   .CommandType                         =      3
2593
2594struct GEN45_URB_FENCE {
2595   uint32_t                             DWordLength;
2596   bool                                 VSUnitURBReallocationRequest;
2597   bool                                 GSUnitURBReallocationRequest;
2598   bool                                 CLIPUnitURBReallocationRequest;
2599   bool                                 SFUnitURBReallocationRequest;
2600   bool                                 VFEUnitURBReallocationRequest;
2601   bool                                 CSUnitURBReallocationRequest;
2602   uint32_t                             _3DCommandSubOpcode;
2603   uint32_t                             _3DCommandOpcode;
2604   uint32_t                             CommandSubType;
2605   uint32_t                             CommandType;
2606   uint32_t                             VSFence;
2607   uint32_t                             GSFence;
2608   uint32_t                             CLIPFence;
2609   uint32_t                             SFFence;
2610   uint32_t                             VFEFence;
2611   uint32_t                             CSFence;
2612};
2613
2614static inline void
2615GEN45_URB_FENCE_pack(__attribute__((unused)) __gen_user_data *data,
2616                     __attribute__((unused)) void * restrict dst,
2617                     __attribute__((unused)) const struct GEN45_URB_FENCE * restrict values)
2618{
2619   uint32_t * restrict dw = (uint32_t * restrict) dst;
2620
2621   dw[0] =
2622      __gen_uint(values->DWordLength, 0, 7) |
2623      __gen_uint(values->VSUnitURBReallocationRequest, 8, 8) |
2624      __gen_uint(values->GSUnitURBReallocationRequest, 9, 9) |
2625      __gen_uint(values->CLIPUnitURBReallocationRequest, 10, 10) |
2626      __gen_uint(values->SFUnitURBReallocationRequest, 11, 11) |
2627      __gen_uint(values->VFEUnitURBReallocationRequest, 12, 12) |
2628      __gen_uint(values->CSUnitURBReallocationRequest, 13, 13) |
2629      __gen_uint(values->_3DCommandSubOpcode, 16, 23) |
2630      __gen_uint(values->_3DCommandOpcode, 24, 26) |
2631      __gen_uint(values->CommandSubType, 27, 28) |
2632      __gen_uint(values->CommandType, 29, 31);
2633
2634   dw[1] =
2635      __gen_uint(values->VSFence, 0, 9) |
2636      __gen_uint(values->GSFence, 10, 19) |
2637      __gen_uint(values->CLIPFence, 20, 29);
2638
2639   dw[2] =
2640      __gen_uint(values->SFFence, 0, 9) |
2641      __gen_uint(values->VFEFence, 10, 19) |
2642      __gen_uint(values->CSFence, 20, 30);
2643}
2644
2645#endif /* GEN45_PACK_H */
2646