vk/pack: Generate length macros for structs
[mesa.git] / src / vulkan / gen8_pack.h
1 /*
2 * Copyright © 2015 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 BDW.
26 *
27 * This file has been generated, do not hand edit.
28 */
29
30 #pragma once
31
32 #include <stdio.h>
33 #include <assert.h>
34
35 #ifndef __gen_field_functions
36 #define __gen_field_functions
37
38 union __gen_value {
39 float f;
40 uint32_t dw;
41 };
42
43 static inline uint64_t
44 __gen_field(uint64_t v, uint32_t start, uint32_t end)
45 {
46 #if DEBUG
47 if (end - start + 1 < 64)
48 assert(v < 1ul << (end - start + 1));
49 #endif
50
51 return v << start;
52 }
53
54 static inline uint64_t
55 __gen_offset(uint64_t v, uint32_t start, uint32_t end)
56 {
57 #if DEBUG
58 uint64_t mask = (~0ul >> (64 - (end - start + 1))) << start;
59
60 assert((v & ~mask) == 0);
61 #endif
62
63 return v;
64 }
65
66 static inline uint32_t
67 __gen_float(float v)
68 {
69 return ((union __gen_value) { .f = (v) }).dw;
70 }
71
72 #ifndef __gen_address_type
73 #error #define __gen_address_type before including this file
74 #endif
75
76 #ifndef __gen_user_data
77 #error #define __gen_combine_address before including this file
78 #endif
79
80 #endif
81
82 #define GEN8_3DSTATE_URB_VS_length 0x00000002
83 #define GEN8_3DSTATE_URB_VS_length_bias 0x00000002
84 #define GEN8_3DSTATE_URB_VS_header \
85 .CommandType = 3, \
86 .CommandSubType = 3, \
87 ._3DCommandOpcode = 0, \
88 ._3DCommandSubOpcode = 48, \
89 .DwordLength = 0
90
91 struct GEN8_3DSTATE_URB_VS {
92 uint32_t CommandType;
93 uint32_t CommandSubType;
94 uint32_t _3DCommandOpcode;
95 uint32_t _3DCommandSubOpcode;
96 uint32_t DwordLength;
97 uint32_t VSURBStartingAddress;
98 uint32_t VSURBEntryAllocationSize;
99 uint32_t VSNumberofURBEntries;
100 };
101
102 static inline void
103 GEN8_3DSTATE_URB_VS_pack(__gen_user_data *data, void * restrict dst,
104 const struct GEN8_3DSTATE_URB_VS * restrict values)
105 {
106 uint32_t *dw = (uint32_t * restrict) dst;
107
108 dw[0] =
109 __gen_field(values->CommandType, 29, 31) |
110 __gen_field(values->CommandSubType, 27, 28) |
111 __gen_field(values->_3DCommandOpcode, 24, 26) |
112 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
113 __gen_field(values->DwordLength, 0, 7) |
114 0;
115
116 dw[1] =
117 __gen_field(values->VSURBStartingAddress, 25, 31) |
118 __gen_field(values->VSURBEntryAllocationSize, 16, 24) |
119 __gen_field(values->VSNumberofURBEntries, 0, 15) |
120 0;
121
122 }
123
124 #define GEN8_3DSTATE_VS_length 0x00000009
125 #define GEN8_3DSTATE_VS_length_bias 0x00000002
126 #define GEN8_3DSTATE_VS_header \
127 .CommandType = 3, \
128 .CommandSubType = 3, \
129 ._3DCommandOpcode = 0, \
130 ._3DCommandSubOpcode = 16, \
131 .DwordLength = 7
132
133 struct GEN8_3DSTATE_VS {
134 uint32_t CommandType;
135 uint32_t CommandSubType;
136 uint32_t _3DCommandOpcode;
137 uint32_t _3DCommandSubOpcode;
138 uint32_t DwordLength;
139 uint32_t KernelStartPointer;
140 #define Multiple 0
141 #define Single 1
142 uint32_t SingleVertexDispatch;
143 #define Dmask 0
144 #define Vmask 1
145 uint32_t VectorMaskEnable;
146 #define NoSamplers 0
147 #define _14Samplers 1
148 #define _58Samplers 2
149 #define _912Samplers 3
150 #define _1316Samplers 4
151 uint32_t SamplerCount;
152 uint32_t BindingTableEntryCount;
153 #define Normal 0
154 #define High 1
155 uint32_t ThreadDispatchPriority;
156 #define IEEE754 0
157 #define Alternate 1
158 uint32_t FloatingPointMode;
159 uint32_t IllegalOpcodeExceptionEnable;
160 uint32_t AccessesUAV;
161 uint32_t SoftwareExceptionEnable;
162 uint32_t ScratchSpaceBasePointer;
163 uint32_t PerThreadScratchSpace;
164 uint32_t DispatchGRFStartRegisterForURBData;
165 uint32_t VertexURBEntryReadLength;
166 uint32_t VertexURBEntryReadOffset;
167 uint32_t MaximumNumberofThreads;
168 uint32_t StatisticsEnable;
169 uint32_t SIMD8DispatchEnable;
170 uint32_t VertexCacheDisable;
171 uint32_t FunctionEnable;
172 uint32_t VertexURBEntryOutputReadOffset;
173 uint32_t VertexURBEntryOutputLength;
174 uint32_t UserClipDistanceClipTestEnableBitmask;
175 uint32_t UserClipDistanceCullTestEnableBitmask;
176 };
177
178 static inline void
179 GEN8_3DSTATE_VS_pack(__gen_user_data *data, void * restrict dst,
180 const struct GEN8_3DSTATE_VS * restrict values)
181 {
182 uint32_t *dw = (uint32_t * restrict) dst;
183
184 dw[0] =
185 __gen_field(values->CommandType, 29, 31) |
186 __gen_field(values->CommandSubType, 27, 28) |
187 __gen_field(values->_3DCommandOpcode, 24, 26) |
188 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
189 __gen_field(values->DwordLength, 0, 7) |
190 0;
191
192 dw[1] =
193 __gen_offset(values->KernelStartPointer, 6, 63) |
194 0;
195
196 dw[3] =
197 __gen_field(values->SingleVertexDispatch, 31, 31) |
198 __gen_field(values->VectorMaskEnable, 30, 30) |
199 __gen_field(values->SamplerCount, 27, 29) |
200 __gen_field(values->BindingTableEntryCount, 18, 25) |
201 __gen_field(values->ThreadDispatchPriority, 17, 17) |
202 __gen_field(values->FloatingPointMode, 16, 16) |
203 __gen_field(values->IllegalOpcodeExceptionEnable, 13, 13) |
204 __gen_field(values->AccessesUAV, 12, 12) |
205 __gen_field(values->SoftwareExceptionEnable, 7, 7) |
206 0;
207
208 dw[4] =
209 __gen_offset(values->ScratchSpaceBasePointer, 10, 63) |
210 __gen_field(values->PerThreadScratchSpace, 0, 3) |
211 0;
212
213 dw[6] =
214 __gen_field(values->DispatchGRFStartRegisterForURBData, 20, 24) |
215 __gen_field(values->VertexURBEntryReadLength, 11, 16) |
216 __gen_field(values->VertexURBEntryReadOffset, 4, 9) |
217 0;
218
219 dw[7] =
220 __gen_field(values->MaximumNumberofThreads, 23, 31) |
221 __gen_field(values->StatisticsEnable, 10, 10) |
222 __gen_field(values->SIMD8DispatchEnable, 2, 2) |
223 __gen_field(values->VertexCacheDisable, 1, 1) |
224 __gen_field(values->FunctionEnable, 0, 0) |
225 0;
226
227 dw[8] =
228 __gen_field(values->VertexURBEntryOutputReadOffset, 21, 26) |
229 __gen_field(values->VertexURBEntryOutputLength, 16, 20) |
230 __gen_field(values->UserClipDistanceClipTestEnableBitmask, 8, 15) |
231 __gen_field(values->UserClipDistanceCullTestEnableBitmask, 0, 7) |
232 0;
233
234 }
235
236 #define GEN8_GPGPU_CSR_BASE_ADDRESS_length 0x00000003
237 #define GEN8_GPGPU_CSR_BASE_ADDRESS_length_bias 0x00000002
238 #define GEN8_GPGPU_CSR_BASE_ADDRESS_header \
239 .CommandType = 3, \
240 .CommandSubType = 0, \
241 ._3DCommandOpcode = 1, \
242 ._3DCommandSubOpcode = 4, \
243 .DwordLength = 1
244
245 struct GEN8_GPGPU_CSR_BASE_ADDRESS {
246 uint32_t CommandType;
247 uint32_t CommandSubType;
248 uint32_t _3DCommandOpcode;
249 uint32_t _3DCommandSubOpcode;
250 uint32_t DwordLength;
251 __gen_address_type GPGPUCSRBaseAddressHigh;
252 };
253
254 static inline void
255 GEN8_GPGPU_CSR_BASE_ADDRESS_pack(__gen_user_data *data, void * restrict dst,
256 const struct GEN8_GPGPU_CSR_BASE_ADDRESS * restrict values)
257 {
258 uint32_t *dw = (uint32_t * restrict) dst;
259
260 dw[0] =
261 __gen_field(values->CommandType, 29, 31) |
262 __gen_field(values->CommandSubType, 27, 28) |
263 __gen_field(values->_3DCommandOpcode, 24, 26) |
264 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
265 __gen_field(values->DwordLength, 0, 7) |
266 0;
267
268 uint32_t dw1 =
269 0;
270
271 dw[1] =
272 __gen_combine_address(data, &dw[1], values->GPGPUCSRBaseAddressHigh, dw1);
273
274 }
275
276 #define GEN8_MI_ATOMIC_length 0x00000003
277 #define GEN8_MI_ATOMIC_length_bias 0x00000002
278 #define GEN8_MI_ATOMIC_header \
279 .CommandType = 0, \
280 .MICommandOpcode = 47
281
282 struct GEN8_MI_ATOMIC {
283 uint32_t CommandType;
284 uint32_t MICommandOpcode;
285 #define PerProcessGraphicsAddress 0
286 #define GlobalGraphicsAddress 1
287 uint32_t MemoryType;
288 uint32_t PostSyncOperation;
289 #define DWORD 0
290 #define QWORD 1
291 #define OCTWORD 2
292 #define RESERVED 3
293 uint32_t DataSize;
294 uint32_t InlineData;
295 uint32_t CSSTALL;
296 uint32_t ReturnDataControl;
297 uint32_t ATOMICOPCODE;
298 uint32_t DwordLength;
299 __gen_address_type MemoryAddress;
300 uint32_t MemoryAddressHigh;
301 uint32_t Operand1DataDword0;
302 uint32_t Operand2DataDword0;
303 uint32_t Operand1DataDword1;
304 uint32_t Operand2DataDword1;
305 uint32_t Operand1DataDword2;
306 uint32_t Operand2DataDword2;
307 uint32_t Operand1DataDword3;
308 uint32_t Operand2DataDword3;
309 };
310
311 static inline void
312 GEN8_MI_ATOMIC_pack(__gen_user_data *data, void * restrict dst,
313 const struct GEN8_MI_ATOMIC * restrict values)
314 {
315 uint32_t *dw = (uint32_t * restrict) dst;
316
317 dw[0] =
318 __gen_field(values->CommandType, 29, 31) |
319 __gen_field(values->MICommandOpcode, 23, 28) |
320 __gen_field(values->MemoryType, 22, 22) |
321 __gen_field(values->PostSyncOperation, 21, 21) |
322 __gen_field(values->DataSize, 19, 20) |
323 __gen_field(values->InlineData, 18, 18) |
324 __gen_field(values->CSSTALL, 17, 17) |
325 __gen_field(values->ReturnDataControl, 16, 16) |
326 __gen_field(values->ATOMICOPCODE, 8, 15) |
327 __gen_field(values->DwordLength, 0, 7) |
328 0;
329
330 uint32_t dw1 =
331 0;
332
333 dw[1] =
334 __gen_combine_address(data, &dw[1], values->MemoryAddress, dw1);
335
336 dw[2] =
337 __gen_field(values->MemoryAddressHigh, 0, 15) |
338 0;
339
340 dw[3] =
341 __gen_field(values->Operand1DataDword0, 0, 31) |
342 0;
343
344 dw[4] =
345 __gen_field(values->Operand2DataDword0, 0, 31) |
346 0;
347
348 dw[5] =
349 __gen_field(values->Operand1DataDword1, 0, 31) |
350 0;
351
352 dw[6] =
353 __gen_field(values->Operand2DataDword1, 0, 31) |
354 0;
355
356 dw[7] =
357 __gen_field(values->Operand1DataDword2, 0, 31) |
358 0;
359
360 dw[8] =
361 __gen_field(values->Operand2DataDword2, 0, 31) |
362 0;
363
364 dw[9] =
365 __gen_field(values->Operand1DataDword3, 0, 31) |
366 0;
367
368 dw[10] =
369 __gen_field(values->Operand2DataDword3, 0, 31) |
370 0;
371
372 }
373
374 #define GEN8_MI_LOAD_REGISTER_REG_length 0x00000003
375 #define GEN8_MI_LOAD_REGISTER_REG_length_bias 0x00000002
376 #define GEN8_MI_LOAD_REGISTER_REG_header \
377 .CommandType = 0, \
378 .MICommandOpcode = 42, \
379 .DwordLength = 1
380
381 struct GEN8_MI_LOAD_REGISTER_REG {
382 uint32_t CommandType;
383 uint32_t MICommandOpcode;
384 uint32_t DwordLength;
385 uint32_t SourceRegisterAddress;
386 uint32_t DestinationRegisterAddress;
387 };
388
389 static inline void
390 GEN8_MI_LOAD_REGISTER_REG_pack(__gen_user_data *data, void * restrict dst,
391 const struct GEN8_MI_LOAD_REGISTER_REG * restrict values)
392 {
393 uint32_t *dw = (uint32_t * restrict) dst;
394
395 dw[0] =
396 __gen_field(values->CommandType, 29, 31) |
397 __gen_field(values->MICommandOpcode, 23, 28) |
398 __gen_field(values->DwordLength, 0, 7) |
399 0;
400
401 dw[1] =
402 __gen_offset(values->SourceRegisterAddress, 2, 22) |
403 0;
404
405 dw[2] =
406 __gen_offset(values->DestinationRegisterAddress, 2, 22) |
407 0;
408
409 }
410
411 #define GEN8_MI_SEMAPHORE_SIGNAL_length 0x00000002
412 #define GEN8_MI_SEMAPHORE_SIGNAL_length_bias 0x00000002
413 #define GEN8_MI_SEMAPHORE_SIGNAL_header \
414 .CommandType = 0, \
415 .MICommandOpcode = 27, \
416 .DwordLength = 0
417
418 struct GEN8_MI_SEMAPHORE_SIGNAL {
419 uint32_t CommandType;
420 uint32_t MICommandOpcode;
421 uint32_t PostSyncOperation;
422 #define RCS 0
423 #define VCS0 1
424 #define BCS 2
425 #define VECS 3
426 #define VCS1 4
427 uint32_t TargetEngineSelect;
428 uint32_t DwordLength;
429 uint32_t TargetContextID;
430 };
431
432 static inline void
433 GEN8_MI_SEMAPHORE_SIGNAL_pack(__gen_user_data *data, void * restrict dst,
434 const struct GEN8_MI_SEMAPHORE_SIGNAL * restrict values)
435 {
436 uint32_t *dw = (uint32_t * restrict) dst;
437
438 dw[0] =
439 __gen_field(values->CommandType, 29, 31) |
440 __gen_field(values->MICommandOpcode, 23, 28) |
441 __gen_field(values->PostSyncOperation, 21, 21) |
442 __gen_field(values->TargetEngineSelect, 15, 17) |
443 __gen_field(values->DwordLength, 0, 7) |
444 0;
445
446 dw[1] =
447 __gen_field(values->TargetContextID, 0, 31) |
448 0;
449
450 }
451
452 #define GEN8_MI_SEMAPHORE_WAIT_length 0x00000004
453 #define GEN8_MI_SEMAPHORE_WAIT_length_bias 0x00000002
454 #define GEN8_MI_SEMAPHORE_WAIT_header \
455 .CommandType = 0, \
456 .MICommandOpcode = 28, \
457 .DwordLength = 2
458
459 struct GEN8_MI_SEMAPHORE_WAIT {
460 uint32_t CommandType;
461 uint32_t MICommandOpcode;
462 #define PerProcessGraphicsAddress 0
463 #define GlobalGraphicsAddress 1
464 uint32_t MemoryType;
465 #define PollingMode 1
466 #define SignalMode 0
467 uint32_t WaitMode;
468 #define SAD_GREATER_THAN_SDD 0
469 #define SAD_GREATER_THAN_OR_EQUAL_SDD 1
470 #define SAD_LESS_THAN_SDD 2
471 #define SAD_LESS_THAN_OR_EQUAL_SDD 3
472 #define SAD_EQUAL_SDD 4
473 #define SAD_NOT_EQUAL_SDD 5
474 uint32_t CompareOperation;
475 uint32_t DwordLength;
476 uint32_t SemaphoreDataDword;
477 __gen_address_type SemaphoreAddress;
478 };
479
480 static inline void
481 GEN8_MI_SEMAPHORE_WAIT_pack(__gen_user_data *data, void * restrict dst,
482 const struct GEN8_MI_SEMAPHORE_WAIT * restrict values)
483 {
484 uint32_t *dw = (uint32_t * restrict) dst;
485
486 dw[0] =
487 __gen_field(values->CommandType, 29, 31) |
488 __gen_field(values->MICommandOpcode, 23, 28) |
489 __gen_field(values->MemoryType, 22, 22) |
490 __gen_field(values->WaitMode, 15, 15) |
491 __gen_field(values->CompareOperation, 12, 14) |
492 __gen_field(values->DwordLength, 0, 7) |
493 0;
494
495 dw[1] =
496 __gen_field(values->SemaphoreDataDword, 0, 31) |
497 0;
498
499 uint32_t dw2 =
500 0;
501
502 dw[2] =
503 __gen_combine_address(data, &dw[2], values->SemaphoreAddress, dw2);
504
505 }
506
507 #define GEN8_MI_STORE_REGISTER_MEM_length 0x00000004
508 #define GEN8_MI_STORE_REGISTER_MEM_length_bias 0x00000002
509 #define GEN8_MI_STORE_REGISTER_MEM_header \
510 .CommandType = 0, \
511 .MICommandOpcode = 36, \
512 .DwordLength = 2
513
514 struct GEN8_MI_STORE_REGISTER_MEM {
515 uint32_t CommandType;
516 uint32_t MICommandOpcode;
517 uint32_t UseGlobalGTT;
518 uint32_t PredicateEnable;
519 uint32_t DwordLength;
520 uint32_t RegisterAddress;
521 __gen_address_type MemoryAddress;
522 };
523
524 static inline void
525 GEN8_MI_STORE_REGISTER_MEM_pack(__gen_user_data *data, void * restrict dst,
526 const struct GEN8_MI_STORE_REGISTER_MEM * restrict values)
527 {
528 uint32_t *dw = (uint32_t * restrict) dst;
529
530 dw[0] =
531 __gen_field(values->CommandType, 29, 31) |
532 __gen_field(values->MICommandOpcode, 23, 28) |
533 __gen_field(values->UseGlobalGTT, 22, 22) |
534 __gen_field(values->PredicateEnable, 21, 21) |
535 __gen_field(values->DwordLength, 0, 7) |
536 0;
537
538 dw[1] =
539 __gen_offset(values->RegisterAddress, 2, 22) |
540 0;
541
542 uint32_t dw2 =
543 0;
544
545 dw[2] =
546 __gen_combine_address(data, &dw[2], values->MemoryAddress, dw2);
547
548 }
549
550 #define GEN8_PIPELINE_SELECT_length 0x00000001
551 #define GEN8_PIPELINE_SELECT_length_bias 0x00000001
552 #define GEN8_PIPELINE_SELECT_header \
553 .CommandType = 3, \
554 .CommandSubType = 1, \
555 ._3DCommandOpcode = 1, \
556 ._3DCommandSubOpcode = 4
557
558 struct GEN8_PIPELINE_SELECT {
559 uint32_t CommandType;
560 uint32_t CommandSubType;
561 uint32_t _3DCommandOpcode;
562 uint32_t _3DCommandSubOpcode;
563 #define _3D 0
564 #define Media 1
565 #define GPGPU 2
566 uint32_t PipelineSelection;
567 };
568
569 static inline void
570 GEN8_PIPELINE_SELECT_pack(__gen_user_data *data, void * restrict dst,
571 const struct GEN8_PIPELINE_SELECT * restrict values)
572 {
573 uint32_t *dw = (uint32_t * restrict) dst;
574
575 dw[0] =
576 __gen_field(values->CommandType, 29, 31) |
577 __gen_field(values->CommandSubType, 27, 28) |
578 __gen_field(values->_3DCommandOpcode, 24, 26) |
579 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
580 __gen_field(values->PipelineSelection, 0, 1) |
581 0;
582
583 }
584
585 #define GEN8_STATE_BASE_ADDRESS_length 0x00000010
586 #define GEN8_STATE_BASE_ADDRESS_length_bias 0x00000002
587 #define GEN8_STATE_BASE_ADDRESS_header \
588 .CommandType = 3, \
589 .CommandSubType = 0, \
590 ._3DCommandOpcode = 1, \
591 ._3DCommandSubOpcode = 1, \
592 .DwordLength = 14
593
594 struct GEN8_MEMORY_OBJECT_CONTROL_STATE {
595 #define UCwithFenceifcoherentcycle 0
596 #define UCUncacheable 1
597 #define WT 2
598 #define WB 3
599 uint32_t MemoryTypeLLCeLLCCacheabilityControl;
600 #define eLLCOnlywheneDRAMispresentelsegetsallocatedinLLC 0
601 #define LLCOnly 1
602 #define LLCeLLCAllowed 2
603 #define L3DefertoPATforLLCeLLCselection 3
604 uint32_t TargetCache;
605 uint32_t AgeforQUADLRU;
606 };
607
608 static inline void
609 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(__gen_user_data *data, void * restrict dst,
610 const struct GEN8_MEMORY_OBJECT_CONTROL_STATE * restrict values)
611 {
612 uint32_t *dw = (uint32_t * restrict) dst;
613
614 dw[0] =
615 __gen_field(values->MemoryTypeLLCeLLCCacheabilityControl, 5, 6) |
616 __gen_field(values->TargetCache, 3, 4) |
617 __gen_field(values->AgeforQUADLRU, 0, 1) |
618 0;
619
620 }
621
622 struct GEN8_STATE_BASE_ADDRESS {
623 uint32_t CommandType;
624 uint32_t CommandSubType;
625 uint32_t _3DCommandOpcode;
626 uint32_t _3DCommandSubOpcode;
627 uint32_t DwordLength;
628 __gen_address_type GeneralStateBaseAddress;
629 struct GEN8_MEMORY_OBJECT_CONTROL_STATE GeneralStateMemoryObjectControlState;
630 uint32_t GeneralStateBaseAddressModifyEnable;
631 struct GEN8_MEMORY_OBJECT_CONTROL_STATE StatelessDataPortAccessMemoryObjectControlState;
632 __gen_address_type SurfaceStateBaseAddress;
633 struct GEN8_MEMORY_OBJECT_CONTROL_STATE SurfaceStateMemoryObjectControlState;
634 uint32_t SurfaceStateBaseAddressModifyEnable;
635 __gen_address_type DynamicStateBaseAddress;
636 struct GEN8_MEMORY_OBJECT_CONTROL_STATE DynamicStateMemoryObjectControlState;
637 uint32_t DynamicStateBaseAddressModifyEnable;
638 __gen_address_type IndirectObjectBaseAddress;
639 struct GEN8_MEMORY_OBJECT_CONTROL_STATE IndirectObjectMemoryObjectControlState;
640 uint32_t IndirectObjectBaseAddressModifyEnable;
641 __gen_address_type InstructionBaseAddress;
642 struct GEN8_MEMORY_OBJECT_CONTROL_STATE InstructionMemoryObjectControlState;
643 uint32_t InstructionBaseAddressModifyEnable;
644 uint32_t GeneralStateBufferSize;
645 uint32_t GeneralStateBufferSizeModifyEnable;
646 uint32_t DynamicStateBufferSize;
647 uint32_t DynamicStateBufferSizeModifyEnable;
648 uint32_t IndirectObjectBufferSize;
649 uint32_t IndirectObjectBufferSizeModifyEnable;
650 uint32_t InstructionBufferSize;
651 uint32_t InstructionBuffersizeModifyEnable;
652 };
653
654 static inline void
655 GEN8_STATE_BASE_ADDRESS_pack(__gen_user_data *data, void * restrict dst,
656 const struct GEN8_STATE_BASE_ADDRESS * restrict values)
657 {
658 uint32_t *dw = (uint32_t * restrict) dst;
659
660 dw[0] =
661 __gen_field(values->CommandType, 29, 31) |
662 __gen_field(values->CommandSubType, 27, 28) |
663 __gen_field(values->_3DCommandOpcode, 24, 26) |
664 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
665 __gen_field(values->DwordLength, 0, 7) |
666 0;
667
668 uint32_t dw_GeneralStateMemoryObjectControlState;
669 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_GeneralStateMemoryObjectControlState, &values->GeneralStateMemoryObjectControlState);
670 uint32_t dw1 =
671 /* Struct GeneralStateMemoryObjectControlState (4..10): */
672 __gen_field(dw_GeneralStateMemoryObjectControlState, 4, 10) |
673 __gen_field(values->GeneralStateBaseAddressModifyEnable, 0, 0) |
674 0;
675
676 dw[1] =
677 __gen_combine_address(data, &dw[1], values->GeneralStateBaseAddress, dw1);
678
679 uint32_t dw_StatelessDataPortAccessMemoryObjectControlState;
680 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_StatelessDataPortAccessMemoryObjectControlState, &values->StatelessDataPortAccessMemoryObjectControlState);
681 dw[3] =
682 /* Struct StatelessDataPortAccessMemoryObjectControlState (16..22): */
683 __gen_field(dw_StatelessDataPortAccessMemoryObjectControlState, 16, 22) |
684 0;
685
686 uint32_t dw_SurfaceStateMemoryObjectControlState;
687 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_SurfaceStateMemoryObjectControlState, &values->SurfaceStateMemoryObjectControlState);
688 uint32_t dw4 =
689 /* Struct SurfaceStateMemoryObjectControlState (4..10): */
690 __gen_field(dw_SurfaceStateMemoryObjectControlState, 4, 10) |
691 __gen_field(values->SurfaceStateBaseAddressModifyEnable, 0, 0) |
692 0;
693
694 dw[4] =
695 __gen_combine_address(data, &dw[4], values->SurfaceStateBaseAddress, dw4);
696
697 uint32_t dw_DynamicStateMemoryObjectControlState;
698 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_DynamicStateMemoryObjectControlState, &values->DynamicStateMemoryObjectControlState);
699 uint32_t dw6 =
700 /* Struct DynamicStateMemoryObjectControlState (4..10): */
701 __gen_field(dw_DynamicStateMemoryObjectControlState, 4, 10) |
702 __gen_field(values->DynamicStateBaseAddressModifyEnable, 0, 0) |
703 0;
704
705 dw[6] =
706 __gen_combine_address(data, &dw[6], values->DynamicStateBaseAddress, dw6);
707
708 uint32_t dw_IndirectObjectMemoryObjectControlState;
709 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_IndirectObjectMemoryObjectControlState, &values->IndirectObjectMemoryObjectControlState);
710 uint32_t dw8 =
711 /* Struct IndirectObjectMemoryObjectControlState (4..10): */
712 __gen_field(dw_IndirectObjectMemoryObjectControlState, 4, 10) |
713 __gen_field(values->IndirectObjectBaseAddressModifyEnable, 0, 0) |
714 0;
715
716 dw[8] =
717 __gen_combine_address(data, &dw[8], values->IndirectObjectBaseAddress, dw8);
718
719 uint32_t dw_InstructionMemoryObjectControlState;
720 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_InstructionMemoryObjectControlState, &values->InstructionMemoryObjectControlState);
721 uint32_t dw10 =
722 /* Struct InstructionMemoryObjectControlState (4..10): */
723 __gen_field(dw_InstructionMemoryObjectControlState, 4, 10) |
724 __gen_field(values->InstructionBaseAddressModifyEnable, 0, 0) |
725 0;
726
727 dw[10] =
728 __gen_combine_address(data, &dw[10], values->InstructionBaseAddress, dw10);
729
730 dw[12] =
731 __gen_field(values->GeneralStateBufferSize, 12, 31) |
732 __gen_field(values->GeneralStateBufferSizeModifyEnable, 0, 0) |
733 0;
734
735 dw[13] =
736 __gen_field(values->DynamicStateBufferSize, 12, 31) |
737 __gen_field(values->DynamicStateBufferSizeModifyEnable, 0, 0) |
738 0;
739
740 dw[14] =
741 __gen_field(values->IndirectObjectBufferSize, 12, 31) |
742 __gen_field(values->IndirectObjectBufferSizeModifyEnable, 0, 0) |
743 0;
744
745 dw[15] =
746 __gen_field(values->InstructionBufferSize, 12, 31) |
747 __gen_field(values->InstructionBuffersizeModifyEnable, 0, 0) |
748 0;
749
750 }
751
752 #define GEN8_STATE_PREFETCH_length 0x00000002
753 #define GEN8_STATE_PREFETCH_length_bias 0x00000002
754 #define GEN8_STATE_PREFETCH_header \
755 .CommandType = 3, \
756 .CommandSubType = 0, \
757 ._3DCommandOpcode = 0, \
758 ._3DCommandSubOpcode = 3, \
759 .DwordLength = 0
760
761 struct GEN8_STATE_PREFETCH {
762 uint32_t CommandType;
763 uint32_t CommandSubType;
764 uint32_t _3DCommandOpcode;
765 uint32_t _3DCommandSubOpcode;
766 uint32_t DwordLength;
767 __gen_address_type PrefetchPointer;
768 uint32_t PrefetchCount;
769 };
770
771 static inline void
772 GEN8_STATE_PREFETCH_pack(__gen_user_data *data, void * restrict dst,
773 const struct GEN8_STATE_PREFETCH * restrict values)
774 {
775 uint32_t *dw = (uint32_t * restrict) dst;
776
777 dw[0] =
778 __gen_field(values->CommandType, 29, 31) |
779 __gen_field(values->CommandSubType, 27, 28) |
780 __gen_field(values->_3DCommandOpcode, 24, 26) |
781 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
782 __gen_field(values->DwordLength, 0, 7) |
783 0;
784
785 uint32_t dw1 =
786 __gen_field(values->PrefetchCount, 0, 2) |
787 0;
788
789 dw[1] =
790 __gen_combine_address(data, &dw[1], values->PrefetchPointer, dw1);
791
792 }
793
794 #define GEN8_STATE_SIP_length 0x00000003
795 #define GEN8_STATE_SIP_length_bias 0x00000002
796 #define GEN8_STATE_SIP_header \
797 .CommandType = 3, \
798 .CommandSubType = 0, \
799 ._3DCommandOpcode = 1, \
800 ._3DCommandSubOpcode = 2, \
801 .DwordLength = 1
802
803 struct GEN8_STATE_SIP {
804 uint32_t CommandType;
805 uint32_t CommandSubType;
806 uint32_t _3DCommandOpcode;
807 uint32_t _3DCommandSubOpcode;
808 uint32_t DwordLength;
809 uint32_t SystemInstructionPointer;
810 };
811
812 static inline void
813 GEN8_STATE_SIP_pack(__gen_user_data *data, void * restrict dst,
814 const struct GEN8_STATE_SIP * restrict values)
815 {
816 uint32_t *dw = (uint32_t * restrict) dst;
817
818 dw[0] =
819 __gen_field(values->CommandType, 29, 31) |
820 __gen_field(values->CommandSubType, 27, 28) |
821 __gen_field(values->_3DCommandOpcode, 24, 26) |
822 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
823 __gen_field(values->DwordLength, 0, 7) |
824 0;
825
826 dw[1] =
827 __gen_offset(values->SystemInstructionPointer, 4, 63) |
828 0;
829
830 }
831
832 #define GEN8_SWTESS_BASE_ADDRESS_length 0x00000002
833 #define GEN8_SWTESS_BASE_ADDRESS_length_bias 0x00000002
834 #define GEN8_SWTESS_BASE_ADDRESS_header \
835 .CommandType = 3, \
836 .CommandSubType = 0, \
837 ._3DCommandOpcode = 1, \
838 ._3DCommandSubOpcode = 3, \
839 .DwordLength = 0
840
841 struct GEN8_SWTESS_BASE_ADDRESS {
842 uint32_t CommandType;
843 uint32_t CommandSubType;
844 uint32_t _3DCommandOpcode;
845 uint32_t _3DCommandSubOpcode;
846 uint32_t DwordLength;
847 __gen_address_type SWTessellationBaseAddress;
848 struct GEN8_MEMORY_OBJECT_CONTROL_STATE SWTessellationMemoryObjectControlState;
849 __gen_address_type SWTessellationBaseAddressHigh;
850 };
851
852 static inline void
853 GEN8_SWTESS_BASE_ADDRESS_pack(__gen_user_data *data, void * restrict dst,
854 const struct GEN8_SWTESS_BASE_ADDRESS * restrict values)
855 {
856 uint32_t *dw = (uint32_t * restrict) dst;
857
858 dw[0] =
859 __gen_field(values->CommandType, 29, 31) |
860 __gen_field(values->CommandSubType, 27, 28) |
861 __gen_field(values->_3DCommandOpcode, 24, 26) |
862 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
863 __gen_field(values->DwordLength, 0, 7) |
864 0;
865
866 uint32_t dw_SWTessellationMemoryObjectControlState;
867 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_SWTessellationMemoryObjectControlState, &values->SWTessellationMemoryObjectControlState);
868 uint32_t dw1 =
869 /* Struct SWTessellationMemoryObjectControlState (8..11): */
870 __gen_field(dw_SWTessellationMemoryObjectControlState, 8, 11) |
871 0;
872
873 dw[1] =
874 __gen_combine_address(data, &dw[1], values->SWTessellationBaseAddress, dw1);
875
876 uint32_t dw2 =
877 0;
878
879 dw[2] =
880 __gen_combine_address(data, &dw[2], values->SWTessellationBaseAddressHigh, dw2);
881
882 }
883
884 #define GEN8_3DPRIMITIVE_length 0x00000007
885 #define GEN8_3DPRIMITIVE_length_bias 0x00000002
886 #define GEN8_3DPRIMITIVE_header \
887 .CommandType = 3, \
888 .CommandSubType = 3, \
889 ._3DCommandOpcode = 3, \
890 ._3DCommandSubOpcode = 0, \
891 .DwordLength = 5
892
893 struct GEN8_3DPRIMITIVE {
894 uint32_t CommandType;
895 uint32_t CommandSubType;
896 uint32_t _3DCommandOpcode;
897 uint32_t _3DCommandSubOpcode;
898 uint32_t IndirectParameterEnable;
899 uint32_t UAVCoherencyRequired;
900 uint32_t PredicateEnable;
901 uint32_t DwordLength;
902 uint32_t EndOffsetEnable;
903 #define SEQUENTIAL 0
904 #define RANDOM 1
905 uint32_t VertexAccessType;
906 uint32_t PrimitiveTopologyType;
907 uint32_t VertexCountPerInstance;
908 uint32_t StartVertexLocation;
909 uint32_t InstanceCount;
910 uint32_t StartInstanceLocation;
911 uint32_t BaseVertexLocation;
912 };
913
914 static inline void
915 GEN8_3DPRIMITIVE_pack(__gen_user_data *data, void * restrict dst,
916 const struct GEN8_3DPRIMITIVE * restrict values)
917 {
918 uint32_t *dw = (uint32_t * restrict) dst;
919
920 dw[0] =
921 __gen_field(values->CommandType, 29, 31) |
922 __gen_field(values->CommandSubType, 27, 28) |
923 __gen_field(values->_3DCommandOpcode, 24, 26) |
924 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
925 __gen_field(values->IndirectParameterEnable, 10, 10) |
926 __gen_field(values->UAVCoherencyRequired, 9, 9) |
927 __gen_field(values->PredicateEnable, 8, 8) |
928 __gen_field(values->DwordLength, 0, 7) |
929 0;
930
931 dw[1] =
932 __gen_field(values->EndOffsetEnable, 9, 9) |
933 __gen_field(values->VertexAccessType, 8, 8) |
934 __gen_field(values->PrimitiveTopologyType, 0, 5) |
935 0;
936
937 dw[2] =
938 __gen_field(values->VertexCountPerInstance, 0, 31) |
939 0;
940
941 dw[3] =
942 __gen_field(values->StartVertexLocation, 0, 31) |
943 0;
944
945 dw[4] =
946 __gen_field(values->InstanceCount, 0, 31) |
947 0;
948
949 dw[5] =
950 __gen_field(values->StartInstanceLocation, 0, 31) |
951 0;
952
953 dw[6] =
954 __gen_field(values->BaseVertexLocation, 0, 31) |
955 0;
956
957 }
958
959 #define GEN8_3DSTATE_AA_LINE_PARAMETERS_length 0x00000003
960 #define GEN8_3DSTATE_AA_LINE_PARAMETERS_length_bias 0x00000002
961 #define GEN8_3DSTATE_AA_LINE_PARAMETERS_header \
962 .CommandType = 3, \
963 .CommandSubType = 3, \
964 ._3DCommandOpcode = 1, \
965 ._3DCommandSubOpcode = 10, \
966 .DwordLength = 1
967
968 struct GEN8_3DSTATE_AA_LINE_PARAMETERS {
969 uint32_t CommandType;
970 uint32_t CommandSubType;
971 uint32_t _3DCommandOpcode;
972 uint32_t _3DCommandSubOpcode;
973 uint32_t DwordLength;
974 uint32_t AAPointCoverageBias;
975 uint32_t AACoverageBias;
976 uint32_t AAPointCoverageSlope;
977 uint32_t AACoverageSlope;
978 uint32_t AAPointCoverageEndCapBias;
979 uint32_t AACoverageEndCapBias;
980 uint32_t AAPointCoverageEndCapSlope;
981 uint32_t AACoverageEndCapSlope;
982 };
983
984 static inline void
985 GEN8_3DSTATE_AA_LINE_PARAMETERS_pack(__gen_user_data *data, void * restrict dst,
986 const struct GEN8_3DSTATE_AA_LINE_PARAMETERS * restrict values)
987 {
988 uint32_t *dw = (uint32_t * restrict) dst;
989
990 dw[0] =
991 __gen_field(values->CommandType, 29, 31) |
992 __gen_field(values->CommandSubType, 27, 28) |
993 __gen_field(values->_3DCommandOpcode, 24, 26) |
994 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
995 __gen_field(values->DwordLength, 0, 7) |
996 0;
997
998 dw[1] =
999 __gen_field(values->AAPointCoverageBias, 24, 31) |
1000 __gen_field(values->AACoverageBias, 16, 23) |
1001 __gen_field(values->AAPointCoverageSlope, 8, 15) |
1002 __gen_field(values->AACoverageSlope, 0, 7) |
1003 0;
1004
1005 dw[2] =
1006 __gen_field(values->AAPointCoverageEndCapBias, 24, 31) |
1007 __gen_field(values->AACoverageEndCapBias, 16, 23) |
1008 __gen_field(values->AAPointCoverageEndCapSlope, 8, 15) |
1009 __gen_field(values->AACoverageEndCapSlope, 0, 7) |
1010 0;
1011
1012 }
1013
1014 #define GEN8_3DSTATE_BINDING_TABLE_EDIT_DS_length_bias 0x00000002
1015 #define GEN8_3DSTATE_BINDING_TABLE_EDIT_DS_header\
1016 .CommandType = 3, \
1017 .CommandSubType = 3, \
1018 ._3DCommandOpcode = 0, \
1019 ._3DCommandSubOpcode = 70
1020
1021 struct GEN8_BINDING_TABLE_EDIT_ENTRY {
1022 uint32_t BindingTableIndex;
1023 uint32_t SurfaceStatePointer;
1024 };
1025
1026 static inline void
1027 GEN8_BINDING_TABLE_EDIT_ENTRY_pack(__gen_user_data *data, void * restrict dst,
1028 const struct GEN8_BINDING_TABLE_EDIT_ENTRY * restrict values)
1029 {
1030 uint32_t *dw = (uint32_t * restrict) dst;
1031
1032 dw[0] =
1033 __gen_field(values->BindingTableIndex, 16, 23) |
1034 __gen_offset(values->SurfaceStatePointer, 0, 15) |
1035 0;
1036
1037 }
1038
1039 struct GEN8_3DSTATE_BINDING_TABLE_EDIT_DS {
1040 uint32_t CommandType;
1041 uint32_t CommandSubType;
1042 uint32_t _3DCommandOpcode;
1043 uint32_t _3DCommandSubOpcode;
1044 uint32_t DwordLength;
1045 uint32_t BindingTableBlockClear;
1046 #define AllCores 3
1047 #define Core1 2
1048 #define Core0 1
1049 uint32_t BindingTableEditTarget;
1050 /* variable length fields follow */
1051 };
1052
1053 static inline void
1054 GEN8_3DSTATE_BINDING_TABLE_EDIT_DS_pack(__gen_user_data *data, void * restrict dst,
1055 const struct GEN8_3DSTATE_BINDING_TABLE_EDIT_DS * restrict values)
1056 {
1057 uint32_t *dw = (uint32_t * restrict) dst;
1058
1059 dw[0] =
1060 __gen_field(values->CommandType, 29, 31) |
1061 __gen_field(values->CommandSubType, 27, 28) |
1062 __gen_field(values->_3DCommandOpcode, 24, 26) |
1063 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1064 __gen_field(values->DwordLength, 0, 8) |
1065 0;
1066
1067 dw[1] =
1068 __gen_field(values->BindingTableBlockClear, 16, 31) |
1069 __gen_field(values->BindingTableEditTarget, 0, 1) |
1070 0;
1071
1072 /* variable length fields follow */
1073 }
1074
1075 #define GEN8_3DSTATE_BINDING_TABLE_EDIT_GS_length_bias 0x00000002
1076 #define GEN8_3DSTATE_BINDING_TABLE_EDIT_GS_header\
1077 .CommandType = 3, \
1078 .CommandSubType = 3, \
1079 ._3DCommandOpcode = 0, \
1080 ._3DCommandSubOpcode = 68
1081
1082 struct GEN8_3DSTATE_BINDING_TABLE_EDIT_GS {
1083 uint32_t CommandType;
1084 uint32_t CommandSubType;
1085 uint32_t _3DCommandOpcode;
1086 uint32_t _3DCommandSubOpcode;
1087 uint32_t DwordLength;
1088 uint32_t BindingTableBlockClear;
1089 #define AllCores 3
1090 #define Core1 2
1091 #define Core0 1
1092 uint32_t BindingTableEditTarget;
1093 /* variable length fields follow */
1094 };
1095
1096 static inline void
1097 GEN8_3DSTATE_BINDING_TABLE_EDIT_GS_pack(__gen_user_data *data, void * restrict dst,
1098 const struct GEN8_3DSTATE_BINDING_TABLE_EDIT_GS * restrict values)
1099 {
1100 uint32_t *dw = (uint32_t * restrict) dst;
1101
1102 dw[0] =
1103 __gen_field(values->CommandType, 29, 31) |
1104 __gen_field(values->CommandSubType, 27, 28) |
1105 __gen_field(values->_3DCommandOpcode, 24, 26) |
1106 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1107 __gen_field(values->DwordLength, 0, 8) |
1108 0;
1109
1110 dw[1] =
1111 __gen_field(values->BindingTableBlockClear, 16, 31) |
1112 __gen_field(values->BindingTableEditTarget, 0, 1) |
1113 0;
1114
1115 /* variable length fields follow */
1116 }
1117
1118 #define GEN8_3DSTATE_BINDING_TABLE_EDIT_HS_length_bias 0x00000002
1119 #define GEN8_3DSTATE_BINDING_TABLE_EDIT_HS_header\
1120 .CommandType = 3, \
1121 .CommandSubType = 3, \
1122 ._3DCommandOpcode = 0, \
1123 ._3DCommandSubOpcode = 69
1124
1125 struct GEN8_3DSTATE_BINDING_TABLE_EDIT_HS {
1126 uint32_t CommandType;
1127 uint32_t CommandSubType;
1128 uint32_t _3DCommandOpcode;
1129 uint32_t _3DCommandSubOpcode;
1130 uint32_t DwordLength;
1131 uint32_t BindingTableBlockClear;
1132 #define AllCores 3
1133 #define Core1 2
1134 #define Core0 1
1135 uint32_t BindingTableEditTarget;
1136 /* variable length fields follow */
1137 };
1138
1139 static inline void
1140 GEN8_3DSTATE_BINDING_TABLE_EDIT_HS_pack(__gen_user_data *data, void * restrict dst,
1141 const struct GEN8_3DSTATE_BINDING_TABLE_EDIT_HS * restrict values)
1142 {
1143 uint32_t *dw = (uint32_t * restrict) dst;
1144
1145 dw[0] =
1146 __gen_field(values->CommandType, 29, 31) |
1147 __gen_field(values->CommandSubType, 27, 28) |
1148 __gen_field(values->_3DCommandOpcode, 24, 26) |
1149 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1150 __gen_field(values->DwordLength, 0, 8) |
1151 0;
1152
1153 dw[1] =
1154 __gen_field(values->BindingTableBlockClear, 16, 31) |
1155 __gen_field(values->BindingTableEditTarget, 0, 1) |
1156 0;
1157
1158 /* variable length fields follow */
1159 }
1160
1161 #define GEN8_3DSTATE_BINDING_TABLE_EDIT_PS_length_bias 0x00000002
1162 #define GEN8_3DSTATE_BINDING_TABLE_EDIT_PS_header\
1163 .CommandType = 3, \
1164 .CommandSubType = 3, \
1165 ._3DCommandOpcode = 0, \
1166 ._3DCommandSubOpcode = 71
1167
1168 struct GEN8_3DSTATE_BINDING_TABLE_EDIT_PS {
1169 uint32_t CommandType;
1170 uint32_t CommandSubType;
1171 uint32_t _3DCommandOpcode;
1172 uint32_t _3DCommandSubOpcode;
1173 uint32_t DwordLength;
1174 uint32_t BindingTableBlockClear;
1175 #define AllCores 3
1176 #define Core1 2
1177 #define Core0 1
1178 uint32_t BindingTableEditTarget;
1179 /* variable length fields follow */
1180 };
1181
1182 static inline void
1183 GEN8_3DSTATE_BINDING_TABLE_EDIT_PS_pack(__gen_user_data *data, void * restrict dst,
1184 const struct GEN8_3DSTATE_BINDING_TABLE_EDIT_PS * restrict values)
1185 {
1186 uint32_t *dw = (uint32_t * restrict) dst;
1187
1188 dw[0] =
1189 __gen_field(values->CommandType, 29, 31) |
1190 __gen_field(values->CommandSubType, 27, 28) |
1191 __gen_field(values->_3DCommandOpcode, 24, 26) |
1192 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1193 __gen_field(values->DwordLength, 0, 8) |
1194 0;
1195
1196 dw[1] =
1197 __gen_field(values->BindingTableBlockClear, 16, 31) |
1198 __gen_field(values->BindingTableEditTarget, 0, 1) |
1199 0;
1200
1201 /* variable length fields follow */
1202 }
1203
1204 #define GEN8_3DSTATE_BINDING_TABLE_EDIT_VS_length_bias 0x00000002
1205 #define GEN8_3DSTATE_BINDING_TABLE_EDIT_VS_header\
1206 .CommandType = 3, \
1207 .CommandSubType = 3, \
1208 ._3DCommandOpcode = 0, \
1209 ._3DCommandSubOpcode = 67
1210
1211 struct GEN8_3DSTATE_BINDING_TABLE_EDIT_VS {
1212 uint32_t CommandType;
1213 uint32_t CommandSubType;
1214 uint32_t _3DCommandOpcode;
1215 uint32_t _3DCommandSubOpcode;
1216 uint32_t DwordLength;
1217 uint32_t BindingTableBlockClear;
1218 #define AllCores 3
1219 #define Core1 2
1220 #define Core0 1
1221 uint32_t BindingTableEditTarget;
1222 /* variable length fields follow */
1223 };
1224
1225 static inline void
1226 GEN8_3DSTATE_BINDING_TABLE_EDIT_VS_pack(__gen_user_data *data, void * restrict dst,
1227 const struct GEN8_3DSTATE_BINDING_TABLE_EDIT_VS * restrict values)
1228 {
1229 uint32_t *dw = (uint32_t * restrict) dst;
1230
1231 dw[0] =
1232 __gen_field(values->CommandType, 29, 31) |
1233 __gen_field(values->CommandSubType, 27, 28) |
1234 __gen_field(values->_3DCommandOpcode, 24, 26) |
1235 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1236 __gen_field(values->DwordLength, 0, 8) |
1237 0;
1238
1239 dw[1] =
1240 __gen_field(values->BindingTableBlockClear, 16, 31) |
1241 __gen_field(values->BindingTableEditTarget, 0, 1) |
1242 0;
1243
1244 /* variable length fields follow */
1245 }
1246
1247 #define GEN8_3DSTATE_BINDING_TABLE_POINTERS_DS_length 0x00000002
1248 #define GEN8_3DSTATE_BINDING_TABLE_POINTERS_DS_length_bias 0x00000002
1249 #define GEN8_3DSTATE_BINDING_TABLE_POINTERS_DS_header\
1250 .CommandType = 3, \
1251 .CommandSubType = 3, \
1252 ._3DCommandOpcode = 0, \
1253 ._3DCommandSubOpcode = 40, \
1254 .DwordLength = 0
1255
1256 struct GEN8_3DSTATE_BINDING_TABLE_POINTERS_DS {
1257 uint32_t CommandType;
1258 uint32_t CommandSubType;
1259 uint32_t _3DCommandOpcode;
1260 uint32_t _3DCommandSubOpcode;
1261 uint32_t DwordLength;
1262 uint32_t PointertoDSBindingTable;
1263 };
1264
1265 static inline void
1266 GEN8_3DSTATE_BINDING_TABLE_POINTERS_DS_pack(__gen_user_data *data, void * restrict dst,
1267 const struct GEN8_3DSTATE_BINDING_TABLE_POINTERS_DS * restrict values)
1268 {
1269 uint32_t *dw = (uint32_t * restrict) dst;
1270
1271 dw[0] =
1272 __gen_field(values->CommandType, 29, 31) |
1273 __gen_field(values->CommandSubType, 27, 28) |
1274 __gen_field(values->_3DCommandOpcode, 24, 26) |
1275 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1276 __gen_field(values->DwordLength, 0, 7) |
1277 0;
1278
1279 dw[1] =
1280 __gen_offset(values->PointertoDSBindingTable, 5, 15) |
1281 0;
1282
1283 }
1284
1285 #define GEN8_3DSTATE_BINDING_TABLE_POINTERS_GS_length 0x00000002
1286 #define GEN8_3DSTATE_BINDING_TABLE_POINTERS_GS_length_bias 0x00000002
1287 #define GEN8_3DSTATE_BINDING_TABLE_POINTERS_GS_header\
1288 .CommandType = 3, \
1289 .CommandSubType = 3, \
1290 ._3DCommandOpcode = 0, \
1291 ._3DCommandSubOpcode = 41, \
1292 .DwordLength = 0
1293
1294 struct GEN8_3DSTATE_BINDING_TABLE_POINTERS_GS {
1295 uint32_t CommandType;
1296 uint32_t CommandSubType;
1297 uint32_t _3DCommandOpcode;
1298 uint32_t _3DCommandSubOpcode;
1299 uint32_t DwordLength;
1300 uint32_t PointertoGSBindingTable;
1301 };
1302
1303 static inline void
1304 GEN8_3DSTATE_BINDING_TABLE_POINTERS_GS_pack(__gen_user_data *data, void * restrict dst,
1305 const struct GEN8_3DSTATE_BINDING_TABLE_POINTERS_GS * restrict values)
1306 {
1307 uint32_t *dw = (uint32_t * restrict) dst;
1308
1309 dw[0] =
1310 __gen_field(values->CommandType, 29, 31) |
1311 __gen_field(values->CommandSubType, 27, 28) |
1312 __gen_field(values->_3DCommandOpcode, 24, 26) |
1313 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1314 __gen_field(values->DwordLength, 0, 7) |
1315 0;
1316
1317 dw[1] =
1318 __gen_offset(values->PointertoGSBindingTable, 5, 15) |
1319 0;
1320
1321 }
1322
1323 #define GEN8_3DSTATE_BINDING_TABLE_POINTERS_HS_length 0x00000002
1324 #define GEN8_3DSTATE_BINDING_TABLE_POINTERS_HS_length_bias 0x00000002
1325 #define GEN8_3DSTATE_BINDING_TABLE_POINTERS_HS_header\
1326 .CommandType = 3, \
1327 .CommandSubType = 3, \
1328 ._3DCommandOpcode = 0, \
1329 ._3DCommandSubOpcode = 39, \
1330 .DwordLength = 0
1331
1332 struct GEN8_3DSTATE_BINDING_TABLE_POINTERS_HS {
1333 uint32_t CommandType;
1334 uint32_t CommandSubType;
1335 uint32_t _3DCommandOpcode;
1336 uint32_t _3DCommandSubOpcode;
1337 uint32_t DwordLength;
1338 uint32_t PointertoHSBindingTable;
1339 };
1340
1341 static inline void
1342 GEN8_3DSTATE_BINDING_TABLE_POINTERS_HS_pack(__gen_user_data *data, void * restrict dst,
1343 const struct GEN8_3DSTATE_BINDING_TABLE_POINTERS_HS * restrict values)
1344 {
1345 uint32_t *dw = (uint32_t * restrict) dst;
1346
1347 dw[0] =
1348 __gen_field(values->CommandType, 29, 31) |
1349 __gen_field(values->CommandSubType, 27, 28) |
1350 __gen_field(values->_3DCommandOpcode, 24, 26) |
1351 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1352 __gen_field(values->DwordLength, 0, 7) |
1353 0;
1354
1355 dw[1] =
1356 __gen_offset(values->PointertoHSBindingTable, 5, 15) |
1357 0;
1358
1359 }
1360
1361 #define GEN8_3DSTATE_BINDING_TABLE_POINTERS_PS_length 0x00000002
1362 #define GEN8_3DSTATE_BINDING_TABLE_POINTERS_PS_length_bias 0x00000002
1363 #define GEN8_3DSTATE_BINDING_TABLE_POINTERS_PS_header\
1364 .CommandType = 3, \
1365 .CommandSubType = 3, \
1366 ._3DCommandOpcode = 0, \
1367 ._3DCommandSubOpcode = 42, \
1368 .DwordLength = 0
1369
1370 struct GEN8_3DSTATE_BINDING_TABLE_POINTERS_PS {
1371 uint32_t CommandType;
1372 uint32_t CommandSubType;
1373 uint32_t _3DCommandOpcode;
1374 uint32_t _3DCommandSubOpcode;
1375 uint32_t DwordLength;
1376 uint32_t PointertoPSBindingTable;
1377 };
1378
1379 static inline void
1380 GEN8_3DSTATE_BINDING_TABLE_POINTERS_PS_pack(__gen_user_data *data, void * restrict dst,
1381 const struct GEN8_3DSTATE_BINDING_TABLE_POINTERS_PS * restrict values)
1382 {
1383 uint32_t *dw = (uint32_t * restrict) dst;
1384
1385 dw[0] =
1386 __gen_field(values->CommandType, 29, 31) |
1387 __gen_field(values->CommandSubType, 27, 28) |
1388 __gen_field(values->_3DCommandOpcode, 24, 26) |
1389 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1390 __gen_field(values->DwordLength, 0, 7) |
1391 0;
1392
1393 dw[1] =
1394 __gen_offset(values->PointertoPSBindingTable, 5, 15) |
1395 0;
1396
1397 }
1398
1399 #define GEN8_3DSTATE_BINDING_TABLE_POINTERS_VS_length 0x00000002
1400 #define GEN8_3DSTATE_BINDING_TABLE_POINTERS_VS_length_bias 0x00000002
1401 #define GEN8_3DSTATE_BINDING_TABLE_POINTERS_VS_header\
1402 .CommandType = 3, \
1403 .CommandSubType = 3, \
1404 ._3DCommandOpcode = 0, \
1405 ._3DCommandSubOpcode = 38, \
1406 .DwordLength = 0
1407
1408 struct GEN8_3DSTATE_BINDING_TABLE_POINTERS_VS {
1409 uint32_t CommandType;
1410 uint32_t CommandSubType;
1411 uint32_t _3DCommandOpcode;
1412 uint32_t _3DCommandSubOpcode;
1413 uint32_t DwordLength;
1414 uint32_t PointertoVSBindingTable;
1415 };
1416
1417 static inline void
1418 GEN8_3DSTATE_BINDING_TABLE_POINTERS_VS_pack(__gen_user_data *data, void * restrict dst,
1419 const struct GEN8_3DSTATE_BINDING_TABLE_POINTERS_VS * restrict values)
1420 {
1421 uint32_t *dw = (uint32_t * restrict) dst;
1422
1423 dw[0] =
1424 __gen_field(values->CommandType, 29, 31) |
1425 __gen_field(values->CommandSubType, 27, 28) |
1426 __gen_field(values->_3DCommandOpcode, 24, 26) |
1427 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1428 __gen_field(values->DwordLength, 0, 7) |
1429 0;
1430
1431 dw[1] =
1432 __gen_offset(values->PointertoVSBindingTable, 5, 15) |
1433 0;
1434
1435 }
1436
1437 #define GEN8_3DSTATE_BINDING_TABLE_POOL_ALLOC_length 0x00000004
1438 #define GEN8_3DSTATE_BINDING_TABLE_POOL_ALLOC_length_bias 0x00000002
1439 #define GEN8_3DSTATE_BINDING_TABLE_POOL_ALLOC_header\
1440 .CommandType = 3, \
1441 .CommandSubType = 3, \
1442 ._3DCommandOpcode = 1, \
1443 ._3DCommandSubOpcode = 25, \
1444 .DwordLength = 2
1445
1446 struct GEN8_3DSTATE_BINDING_TABLE_POOL_ALLOC {
1447 uint32_t CommandType;
1448 uint32_t CommandSubType;
1449 uint32_t _3DCommandOpcode;
1450 uint32_t _3DCommandSubOpcode;
1451 uint32_t DwordLength;
1452 __gen_address_type BindingTablePoolBaseAddress;
1453 uint32_t BindingTablePoolEnable;
1454 struct GEN8_MEMORY_OBJECT_CONTROL_STATE SurfaceObjectControlState;
1455 #define NoValidData 0
1456 uint32_t BindingTablePoolBufferSize;
1457 };
1458
1459 static inline void
1460 GEN8_3DSTATE_BINDING_TABLE_POOL_ALLOC_pack(__gen_user_data *data, void * restrict dst,
1461 const struct GEN8_3DSTATE_BINDING_TABLE_POOL_ALLOC * restrict values)
1462 {
1463 uint32_t *dw = (uint32_t * restrict) dst;
1464
1465 dw[0] =
1466 __gen_field(values->CommandType, 29, 31) |
1467 __gen_field(values->CommandSubType, 27, 28) |
1468 __gen_field(values->_3DCommandOpcode, 24, 26) |
1469 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1470 __gen_field(values->DwordLength, 0, 7) |
1471 0;
1472
1473 uint32_t dw_SurfaceObjectControlState;
1474 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_SurfaceObjectControlState, &values->SurfaceObjectControlState);
1475 uint32_t dw1 =
1476 __gen_field(values->BindingTablePoolEnable, 11, 11) |
1477 /* Struct SurfaceObjectControlState (0..6): */
1478 __gen_field(dw_SurfaceObjectControlState, 0, 6) |
1479 0;
1480
1481 dw[1] =
1482 __gen_combine_address(data, &dw[1], values->BindingTablePoolBaseAddress, dw1);
1483
1484 dw[3] =
1485 __gen_field(values->BindingTablePoolBufferSize, 12, 31) |
1486 0;
1487
1488 }
1489
1490 #define GEN8_3DSTATE_BLEND_STATE_POINTERS_length 0x00000002
1491 #define GEN8_3DSTATE_BLEND_STATE_POINTERS_length_bias 0x00000002
1492 #define GEN8_3DSTATE_BLEND_STATE_POINTERS_header\
1493 .CommandType = 3, \
1494 .CommandSubType = 3, \
1495 ._3DCommandOpcode = 0, \
1496 ._3DCommandSubOpcode = 36, \
1497 .DwordLength = 0
1498
1499 struct GEN8_3DSTATE_BLEND_STATE_POINTERS {
1500 uint32_t CommandType;
1501 uint32_t CommandSubType;
1502 uint32_t _3DCommandOpcode;
1503 uint32_t _3DCommandSubOpcode;
1504 uint32_t DwordLength;
1505 uint32_t BlendStatePointer;
1506 uint32_t BlendStatePointerValid;
1507 };
1508
1509 static inline void
1510 GEN8_3DSTATE_BLEND_STATE_POINTERS_pack(__gen_user_data *data, void * restrict dst,
1511 const struct GEN8_3DSTATE_BLEND_STATE_POINTERS * restrict values)
1512 {
1513 uint32_t *dw = (uint32_t * restrict) dst;
1514
1515 dw[0] =
1516 __gen_field(values->CommandType, 29, 31) |
1517 __gen_field(values->CommandSubType, 27, 28) |
1518 __gen_field(values->_3DCommandOpcode, 24, 26) |
1519 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1520 __gen_field(values->DwordLength, 0, 7) |
1521 0;
1522
1523 dw[1] =
1524 __gen_offset(values->BlendStatePointer, 6, 31) |
1525 __gen_field(values->BlendStatePointerValid, 0, 0) |
1526 0;
1527
1528 }
1529
1530 #define GEN8_3DSTATE_CC_STATE_POINTERS_length 0x00000002
1531 #define GEN8_3DSTATE_CC_STATE_POINTERS_length_bias 0x00000002
1532 #define GEN8_3DSTATE_CC_STATE_POINTERS_header \
1533 .CommandType = 3, \
1534 .CommandSubType = 3, \
1535 ._3DCommandOpcode = 0, \
1536 ._3DCommandSubOpcode = 14, \
1537 .DwordLength = 0
1538
1539 struct GEN8_3DSTATE_CC_STATE_POINTERS {
1540 uint32_t CommandType;
1541 uint32_t CommandSubType;
1542 uint32_t _3DCommandOpcode;
1543 uint32_t _3DCommandSubOpcode;
1544 uint32_t DwordLength;
1545 uint32_t ColorCalcStatePointer;
1546 uint32_t ColorCalcStatePointerValid;
1547 };
1548
1549 static inline void
1550 GEN8_3DSTATE_CC_STATE_POINTERS_pack(__gen_user_data *data, void * restrict dst,
1551 const struct GEN8_3DSTATE_CC_STATE_POINTERS * restrict values)
1552 {
1553 uint32_t *dw = (uint32_t * restrict) dst;
1554
1555 dw[0] =
1556 __gen_field(values->CommandType, 29, 31) |
1557 __gen_field(values->CommandSubType, 27, 28) |
1558 __gen_field(values->_3DCommandOpcode, 24, 26) |
1559 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1560 __gen_field(values->DwordLength, 0, 7) |
1561 0;
1562
1563 dw[1] =
1564 __gen_offset(values->ColorCalcStatePointer, 6, 31) |
1565 __gen_field(values->ColorCalcStatePointerValid, 0, 0) |
1566 0;
1567
1568 }
1569
1570 #define GEN8_3DSTATE_CHROMA_KEY_length 0x00000004
1571 #define GEN8_3DSTATE_CHROMA_KEY_length_bias 0x00000002
1572 #define GEN8_3DSTATE_CHROMA_KEY_header \
1573 .CommandType = 3, \
1574 .CommandSubType = 3, \
1575 ._3DCommandOpcode = 1, \
1576 ._3DCommandSubOpcode = 4, \
1577 .DwordLength = 2
1578
1579 struct GEN8_3DSTATE_CHROMA_KEY {
1580 uint32_t CommandType;
1581 uint32_t CommandSubType;
1582 uint32_t _3DCommandOpcode;
1583 uint32_t _3DCommandSubOpcode;
1584 uint32_t DwordLength;
1585 uint32_t ChromaKeyTableIndex;
1586 uint32_t ChromaKeyLowValue;
1587 uint32_t ChromaKeyHighValue;
1588 };
1589
1590 static inline void
1591 GEN8_3DSTATE_CHROMA_KEY_pack(__gen_user_data *data, void * restrict dst,
1592 const struct GEN8_3DSTATE_CHROMA_KEY * restrict values)
1593 {
1594 uint32_t *dw = (uint32_t * restrict) dst;
1595
1596 dw[0] =
1597 __gen_field(values->CommandType, 29, 31) |
1598 __gen_field(values->CommandSubType, 27, 28) |
1599 __gen_field(values->_3DCommandOpcode, 24, 26) |
1600 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1601 __gen_field(values->DwordLength, 0, 7) |
1602 0;
1603
1604 dw[1] =
1605 __gen_field(values->ChromaKeyTableIndex, 30, 31) |
1606 0;
1607
1608 dw[2] =
1609 __gen_field(values->ChromaKeyLowValue, 0, 31) |
1610 0;
1611
1612 dw[3] =
1613 __gen_field(values->ChromaKeyHighValue, 0, 31) |
1614 0;
1615
1616 }
1617
1618 #define GEN8_3DSTATE_CLEAR_PARAMS_length 0x00000003
1619 #define GEN8_3DSTATE_CLEAR_PARAMS_length_bias 0x00000002
1620 #define GEN8_3DSTATE_CLEAR_PARAMS_header \
1621 .CommandType = 3, \
1622 .CommandSubType = 3, \
1623 ._3DCommandOpcode = 0, \
1624 ._3DCommandSubOpcode = 4, \
1625 .DwordLength = 1
1626
1627 struct GEN8_3DSTATE_CLEAR_PARAMS {
1628 uint32_t CommandType;
1629 uint32_t CommandSubType;
1630 uint32_t _3DCommandOpcode;
1631 uint32_t _3DCommandSubOpcode;
1632 uint32_t DwordLength;
1633 float DepthClearValue;
1634 uint32_t DepthClearValueValid;
1635 };
1636
1637 static inline void
1638 GEN8_3DSTATE_CLEAR_PARAMS_pack(__gen_user_data *data, void * restrict dst,
1639 const struct GEN8_3DSTATE_CLEAR_PARAMS * restrict values)
1640 {
1641 uint32_t *dw = (uint32_t * restrict) dst;
1642
1643 dw[0] =
1644 __gen_field(values->CommandType, 29, 31) |
1645 __gen_field(values->CommandSubType, 27, 28) |
1646 __gen_field(values->_3DCommandOpcode, 24, 26) |
1647 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1648 __gen_field(values->DwordLength, 0, 7) |
1649 0;
1650
1651 dw[1] =
1652 __gen_float(values->DepthClearValue) |
1653 0;
1654
1655 dw[2] =
1656 __gen_field(values->DepthClearValueValid, 0, 0) |
1657 0;
1658
1659 }
1660
1661 #define GEN8_3DSTATE_CLIP_length 0x00000004
1662 #define GEN8_3DSTATE_CLIP_length_bias 0x00000002
1663 #define GEN8_3DSTATE_CLIP_header \
1664 .CommandType = 3, \
1665 .CommandSubType = 3, \
1666 ._3DCommandOpcode = 0, \
1667 ._3DCommandSubOpcode = 18, \
1668 .DwordLength = 2
1669
1670 struct GEN8_3DSTATE_CLIP {
1671 uint32_t CommandType;
1672 uint32_t CommandSubType;
1673 uint32_t _3DCommandOpcode;
1674 uint32_t _3DCommandSubOpcode;
1675 uint32_t DwordLength;
1676 #define Normal 0
1677 #define Force 1
1678 uint32_t ForceUserClipDistanceCullTestEnableBitmask;
1679 #define _8Bit 0
1680 #define _4Bit 1
1681 uint32_t VertexSubPixelPrecisionSelect;
1682 uint32_t EarlyCullEnable;
1683 #define Normal 0
1684 #define Force 1
1685 uint32_t ForceUserClipDistanceClipTestEnableBitmask;
1686 #define Normal 0
1687 #define Force 1
1688 uint32_t ForceClipMode;
1689 uint32_t ClipperStatisticsEnable;
1690 uint32_t UserClipDistanceCullTestEnableBitmask;
1691 uint32_t ClipEnable;
1692 #define API_OGL 0
1693 uint32_t APIMode;
1694 uint32_t ViewportXYClipTestEnable;
1695 uint32_t GuardbandClipTestEnable;
1696 uint32_t UserClipDistanceClipTestEnableBitmask;
1697 #define NORMAL 0
1698 #define REJECT_ALL 3
1699 #define ACCEPT_ALL 4
1700 uint32_t ClipMode;
1701 uint32_t PerspectiveDivideDisable;
1702 uint32_t NonPerspectiveBarycentricEnable;
1703 uint32_t TriangleStripListProvokingVertexSelect;
1704 uint32_t LineStripListProvokingVertexSelect;
1705 uint32_t TriangleFanProvokingVertexSelect;
1706 uint32_t MinimumPointWidth;
1707 uint32_t MaximumPointWidth;
1708 uint32_t ForceZeroRTAIndexEnable;
1709 uint32_t MaximumVPIndex;
1710 };
1711
1712 static inline void
1713 GEN8_3DSTATE_CLIP_pack(__gen_user_data *data, void * restrict dst,
1714 const struct GEN8_3DSTATE_CLIP * restrict values)
1715 {
1716 uint32_t *dw = (uint32_t * restrict) dst;
1717
1718 dw[0] =
1719 __gen_field(values->CommandType, 29, 31) |
1720 __gen_field(values->CommandSubType, 27, 28) |
1721 __gen_field(values->_3DCommandOpcode, 24, 26) |
1722 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1723 __gen_field(values->DwordLength, 0, 7) |
1724 0;
1725
1726 dw[1] =
1727 __gen_field(values->ForceUserClipDistanceCullTestEnableBitmask, 20, 20) |
1728 __gen_field(values->VertexSubPixelPrecisionSelect, 19, 19) |
1729 __gen_field(values->EarlyCullEnable, 18, 18) |
1730 __gen_field(values->ForceUserClipDistanceClipTestEnableBitmask, 17, 17) |
1731 __gen_field(values->ForceClipMode, 16, 16) |
1732 __gen_field(values->ClipperStatisticsEnable, 10, 10) |
1733 __gen_field(values->UserClipDistanceCullTestEnableBitmask, 0, 7) |
1734 0;
1735
1736 dw[2] =
1737 __gen_field(values->ClipEnable, 31, 31) |
1738 __gen_field(values->APIMode, 30, 30) |
1739 __gen_field(values->ViewportXYClipTestEnable, 28, 28) |
1740 __gen_field(values->GuardbandClipTestEnable, 26, 26) |
1741 __gen_field(values->UserClipDistanceClipTestEnableBitmask, 16, 23) |
1742 __gen_field(values->ClipMode, 13, 15) |
1743 __gen_field(values->PerspectiveDivideDisable, 9, 9) |
1744 __gen_field(values->NonPerspectiveBarycentricEnable, 8, 8) |
1745 __gen_field(values->TriangleStripListProvokingVertexSelect, 4, 5) |
1746 __gen_field(values->LineStripListProvokingVertexSelect, 2, 3) |
1747 __gen_field(values->TriangleFanProvokingVertexSelect, 0, 1) |
1748 0;
1749
1750 dw[3] =
1751 __gen_field(values->MinimumPointWidth, 17, 27) |
1752 __gen_field(values->MaximumPointWidth, 6, 16) |
1753 __gen_field(values->ForceZeroRTAIndexEnable, 5, 5) |
1754 __gen_field(values->MaximumVPIndex, 0, 3) |
1755 0;
1756
1757 }
1758
1759 #define GEN8_3DSTATE_CONSTANT_DS_length 0x0000000b
1760 #define GEN8_3DSTATE_CONSTANT_DS_length_bias 0x00000002
1761 #define GEN8_3DSTATE_CONSTANT_DS_header \
1762 .CommandType = 3, \
1763 .CommandSubType = 3, \
1764 ._3DCommandOpcode = 0, \
1765 ._3DCommandSubOpcode = 26, \
1766 .DwordLength = 9
1767
1768 struct GEN8_3DSTATE_CONSTANT_BODY {
1769 uint32_t ConstantBuffer1ReadLength;
1770 uint32_t ConstantBuffer0ReadLength;
1771 uint32_t ConstantBuffer3ReadLength;
1772 uint32_t ConstantBuffer2ReadLength;
1773 __gen_address_type PointerToConstantBuffer0;
1774 __gen_address_type PointerToConstantBuffer1;
1775 __gen_address_type PointerToConstantBuffer2;
1776 __gen_address_type PointerToConstantBuffer3;
1777 };
1778
1779 static inline void
1780 GEN8_3DSTATE_CONSTANT_BODY_pack(__gen_user_data *data, void * restrict dst,
1781 const struct GEN8_3DSTATE_CONSTANT_BODY * restrict values)
1782 {
1783 uint32_t *dw = (uint32_t * restrict) dst;
1784
1785 dw[0] =
1786 __gen_field(values->ConstantBuffer1ReadLength, 16, 31) |
1787 __gen_field(values->ConstantBuffer0ReadLength, 0, 15) |
1788 0;
1789
1790 dw[1] =
1791 __gen_field(values->ConstantBuffer3ReadLength, 16, 31) |
1792 __gen_field(values->ConstantBuffer2ReadLength, 0, 15) |
1793 0;
1794
1795 uint32_t dw2 =
1796 0;
1797
1798 dw[2] =
1799 __gen_combine_address(data, &dw[2], values->PointerToConstantBuffer0, dw2);
1800
1801 uint32_t dw4 =
1802 0;
1803
1804 dw[4] =
1805 __gen_combine_address(data, &dw[4], values->PointerToConstantBuffer1, dw4);
1806
1807 uint32_t dw6 =
1808 0;
1809
1810 dw[6] =
1811 __gen_combine_address(data, &dw[6], values->PointerToConstantBuffer2, dw6);
1812
1813 uint32_t dw8 =
1814 0;
1815
1816 dw[8] =
1817 __gen_combine_address(data, &dw[8], values->PointerToConstantBuffer3, dw8);
1818
1819 }
1820
1821 struct GEN8_3DSTATE_CONSTANT_DS {
1822 uint32_t CommandType;
1823 uint32_t CommandSubType;
1824 uint32_t _3DCommandOpcode;
1825 uint32_t _3DCommandSubOpcode;
1826 struct GEN8_MEMORY_OBJECT_CONTROL_STATE ConstantBufferObjectControlState;
1827 uint32_t DwordLength;
1828 struct GEN8_3DSTATE_CONSTANT_BODY ConstantBody;
1829 };
1830
1831 static inline void
1832 GEN8_3DSTATE_CONSTANT_DS_pack(__gen_user_data *data, void * restrict dst,
1833 const struct GEN8_3DSTATE_CONSTANT_DS * restrict values)
1834 {
1835 uint32_t *dw = (uint32_t * restrict) dst;
1836
1837 uint32_t dw_ConstantBufferObjectControlState;
1838 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_ConstantBufferObjectControlState, &values->ConstantBufferObjectControlState);
1839 dw[0] =
1840 __gen_field(values->CommandType, 29, 31) |
1841 __gen_field(values->CommandSubType, 27, 28) |
1842 __gen_field(values->_3DCommandOpcode, 24, 26) |
1843 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1844 /* Struct ConstantBufferObjectControlState (8..14): */
1845 __gen_field(dw_ConstantBufferObjectControlState, 8, 14) |
1846 __gen_field(values->DwordLength, 0, 7) |
1847 0;
1848
1849 GEN8_3DSTATE_CONSTANT_BODY_pack(data, &dw[1], &values->ConstantBody);
1850 }
1851
1852 #define GEN8_3DSTATE_CONSTANT_GS_length 0x0000000b
1853 #define GEN8_3DSTATE_CONSTANT_GS_length_bias 0x00000002
1854 #define GEN8_3DSTATE_CONSTANT_GS_header \
1855 .CommandType = 3, \
1856 .CommandSubType = 3, \
1857 ._3DCommandOpcode = 0, \
1858 ._3DCommandSubOpcode = 22, \
1859 .DwordLength = 9
1860
1861 struct GEN8_3DSTATE_CONSTANT_GS {
1862 uint32_t CommandType;
1863 uint32_t CommandSubType;
1864 uint32_t _3DCommandOpcode;
1865 uint32_t _3DCommandSubOpcode;
1866 struct GEN8_MEMORY_OBJECT_CONTROL_STATE ConstantBufferObjectControlState;
1867 uint32_t DwordLength;
1868 struct GEN8_3DSTATE_CONSTANT_BODY ConstantBody;
1869 };
1870
1871 static inline void
1872 GEN8_3DSTATE_CONSTANT_GS_pack(__gen_user_data *data, void * restrict dst,
1873 const struct GEN8_3DSTATE_CONSTANT_GS * restrict values)
1874 {
1875 uint32_t *dw = (uint32_t * restrict) dst;
1876
1877 uint32_t dw_ConstantBufferObjectControlState;
1878 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_ConstantBufferObjectControlState, &values->ConstantBufferObjectControlState);
1879 dw[0] =
1880 __gen_field(values->CommandType, 29, 31) |
1881 __gen_field(values->CommandSubType, 27, 28) |
1882 __gen_field(values->_3DCommandOpcode, 24, 26) |
1883 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1884 /* Struct ConstantBufferObjectControlState (8..14): */
1885 __gen_field(dw_ConstantBufferObjectControlState, 8, 14) |
1886 __gen_field(values->DwordLength, 0, 7) |
1887 0;
1888
1889 GEN8_3DSTATE_CONSTANT_BODY_pack(data, &dw[1], &values->ConstantBody);
1890 }
1891
1892 #define GEN8_3DSTATE_CONSTANT_HS_length 0x0000000b
1893 #define GEN8_3DSTATE_CONSTANT_HS_length_bias 0x00000002
1894 #define GEN8_3DSTATE_CONSTANT_HS_header \
1895 .CommandType = 3, \
1896 .CommandSubType = 3, \
1897 ._3DCommandOpcode = 0, \
1898 ._3DCommandSubOpcode = 25, \
1899 .DwordLength = 9
1900
1901 struct GEN8_3DSTATE_CONSTANT_HS {
1902 uint32_t CommandType;
1903 uint32_t CommandSubType;
1904 uint32_t _3DCommandOpcode;
1905 uint32_t _3DCommandSubOpcode;
1906 struct GEN8_MEMORY_OBJECT_CONTROL_STATE ConstantBufferObjectControlState;
1907 uint32_t DwordLength;
1908 struct GEN8_3DSTATE_CONSTANT_BODY ConstantBody;
1909 };
1910
1911 static inline void
1912 GEN8_3DSTATE_CONSTANT_HS_pack(__gen_user_data *data, void * restrict dst,
1913 const struct GEN8_3DSTATE_CONSTANT_HS * restrict values)
1914 {
1915 uint32_t *dw = (uint32_t * restrict) dst;
1916
1917 uint32_t dw_ConstantBufferObjectControlState;
1918 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_ConstantBufferObjectControlState, &values->ConstantBufferObjectControlState);
1919 dw[0] =
1920 __gen_field(values->CommandType, 29, 31) |
1921 __gen_field(values->CommandSubType, 27, 28) |
1922 __gen_field(values->_3DCommandOpcode, 24, 26) |
1923 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1924 /* Struct ConstantBufferObjectControlState (8..14): */
1925 __gen_field(dw_ConstantBufferObjectControlState, 8, 14) |
1926 __gen_field(values->DwordLength, 0, 7) |
1927 0;
1928
1929 GEN8_3DSTATE_CONSTANT_BODY_pack(data, &dw[1], &values->ConstantBody);
1930 }
1931
1932 #define GEN8_3DSTATE_CONSTANT_PS_length 0x0000000b
1933 #define GEN8_3DSTATE_CONSTANT_PS_length_bias 0x00000002
1934 #define GEN8_3DSTATE_CONSTANT_PS_header \
1935 .CommandType = 3, \
1936 .CommandSubType = 3, \
1937 ._3DCommandOpcode = 0, \
1938 ._3DCommandSubOpcode = 23, \
1939 .DwordLength = 9
1940
1941 struct GEN8_3DSTATE_CONSTANT_PS {
1942 uint32_t CommandType;
1943 uint32_t CommandSubType;
1944 uint32_t _3DCommandOpcode;
1945 uint32_t _3DCommandSubOpcode;
1946 struct GEN8_MEMORY_OBJECT_CONTROL_STATE ConstantBufferObjectControlState;
1947 uint32_t DwordLength;
1948 struct GEN8_3DSTATE_CONSTANT_BODY ConstantBody;
1949 };
1950
1951 static inline void
1952 GEN8_3DSTATE_CONSTANT_PS_pack(__gen_user_data *data, void * restrict dst,
1953 const struct GEN8_3DSTATE_CONSTANT_PS * restrict values)
1954 {
1955 uint32_t *dw = (uint32_t * restrict) dst;
1956
1957 uint32_t dw_ConstantBufferObjectControlState;
1958 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_ConstantBufferObjectControlState, &values->ConstantBufferObjectControlState);
1959 dw[0] =
1960 __gen_field(values->CommandType, 29, 31) |
1961 __gen_field(values->CommandSubType, 27, 28) |
1962 __gen_field(values->_3DCommandOpcode, 24, 26) |
1963 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
1964 /* Struct ConstantBufferObjectControlState (8..14): */
1965 __gen_field(dw_ConstantBufferObjectControlState, 8, 14) |
1966 __gen_field(values->DwordLength, 0, 7) |
1967 0;
1968
1969 GEN8_3DSTATE_CONSTANT_BODY_pack(data, &dw[1], &values->ConstantBody);
1970 }
1971
1972 #define GEN8_3DSTATE_CONSTANT_VS_length 0x0000000b
1973 #define GEN8_3DSTATE_CONSTANT_VS_length_bias 0x00000002
1974 #define GEN8_3DSTATE_CONSTANT_VS_header \
1975 .CommandType = 3, \
1976 .CommandSubType = 3, \
1977 ._3DCommandOpcode = 0, \
1978 ._3DCommandSubOpcode = 21, \
1979 .DwordLength = 9
1980
1981 struct GEN8_3DSTATE_CONSTANT_VS {
1982 uint32_t CommandType;
1983 uint32_t CommandSubType;
1984 uint32_t _3DCommandOpcode;
1985 uint32_t _3DCommandSubOpcode;
1986 struct GEN8_MEMORY_OBJECT_CONTROL_STATE ConstantBufferObjectControlState;
1987 uint32_t DwordLength;
1988 struct GEN8_3DSTATE_CONSTANT_BODY ConstantBody;
1989 };
1990
1991 static inline void
1992 GEN8_3DSTATE_CONSTANT_VS_pack(__gen_user_data *data, void * restrict dst,
1993 const struct GEN8_3DSTATE_CONSTANT_VS * restrict values)
1994 {
1995 uint32_t *dw = (uint32_t * restrict) dst;
1996
1997 uint32_t dw_ConstantBufferObjectControlState;
1998 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_ConstantBufferObjectControlState, &values->ConstantBufferObjectControlState);
1999 dw[0] =
2000 __gen_field(values->CommandType, 29, 31) |
2001 __gen_field(values->CommandSubType, 27, 28) |
2002 __gen_field(values->_3DCommandOpcode, 24, 26) |
2003 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
2004 /* Struct ConstantBufferObjectControlState (8..14): */
2005 __gen_field(dw_ConstantBufferObjectControlState, 8, 14) |
2006 __gen_field(values->DwordLength, 0, 7) |
2007 0;
2008
2009 GEN8_3DSTATE_CONSTANT_BODY_pack(data, &dw[1], &values->ConstantBody);
2010 }
2011
2012 #define GEN8_3DSTATE_DEPTH_BUFFER_length 0x00000008
2013 #define GEN8_3DSTATE_DEPTH_BUFFER_length_bias 0x00000002
2014 #define GEN8_3DSTATE_DEPTH_BUFFER_header \
2015 .CommandType = 3, \
2016 .CommandSubType = 3, \
2017 ._3DCommandOpcode = 0, \
2018 ._3DCommandSubOpcode = 5, \
2019 .DwordLength = 6
2020
2021 struct GEN8_3DSTATE_DEPTH_BUFFER {
2022 uint32_t CommandType;
2023 uint32_t CommandSubType;
2024 uint32_t _3DCommandOpcode;
2025 uint32_t _3DCommandSubOpcode;
2026 uint32_t DwordLength;
2027 #define SURFTYPE_1D 0
2028 #define SURFTYPE_2D 1
2029 #define SURFTYPE_3D 2
2030 #define SURFTYPE_CUBE 3
2031 #define SURFTYPE_NULL 7
2032 uint32_t SurfaceType;
2033 uint32_t DepthWriteEnable;
2034 uint32_t StencilWriteEnable;
2035 uint32_t HierarchicalDepthBufferEnable;
2036 #define D32_FLOAT 1
2037 #define D24_UNORM_X8_UINT 3
2038 #define D16_UNORM 5
2039 uint32_t SurfaceFormat;
2040 uint32_t SurfacePitch;
2041 __gen_address_type SurfaceBaseAddress;
2042 uint32_t Height;
2043 uint32_t Width;
2044 uint32_t LOD;
2045 uint32_t Depth;
2046 uint32_t MinimumArrayElement;
2047 struct GEN8_MEMORY_OBJECT_CONTROL_STATE DepthBufferObjectControlState;
2048 uint32_t RenderTargetViewExtent;
2049 uint32_t SurfaceQPitch;
2050 };
2051
2052 static inline void
2053 GEN8_3DSTATE_DEPTH_BUFFER_pack(__gen_user_data *data, void * restrict dst,
2054 const struct GEN8_3DSTATE_DEPTH_BUFFER * restrict values)
2055 {
2056 uint32_t *dw = (uint32_t * restrict) dst;
2057
2058 dw[0] =
2059 __gen_field(values->CommandType, 29, 31) |
2060 __gen_field(values->CommandSubType, 27, 28) |
2061 __gen_field(values->_3DCommandOpcode, 24, 26) |
2062 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
2063 __gen_field(values->DwordLength, 0, 7) |
2064 0;
2065
2066 dw[1] =
2067 __gen_field(values->SurfaceType, 29, 31) |
2068 __gen_field(values->DepthWriteEnable, 28, 28) |
2069 __gen_field(values->StencilWriteEnable, 27, 27) |
2070 __gen_field(values->HierarchicalDepthBufferEnable, 22, 22) |
2071 __gen_field(values->SurfaceFormat, 18, 20) |
2072 __gen_field(values->SurfacePitch, 0, 17) |
2073 0;
2074
2075 uint32_t dw2 =
2076 0;
2077
2078 dw[2] =
2079 __gen_combine_address(data, &dw[2], values->SurfaceBaseAddress, dw2);
2080
2081 dw[4] =
2082 __gen_field(values->Height, 18, 31) |
2083 __gen_field(values->Width, 4, 17) |
2084 __gen_field(values->LOD, 0, 3) |
2085 0;
2086
2087 uint32_t dw_DepthBufferObjectControlState;
2088 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_DepthBufferObjectControlState, &values->DepthBufferObjectControlState);
2089 dw[5] =
2090 __gen_field(values->Depth, 21, 31) |
2091 __gen_field(values->MinimumArrayElement, 10, 20) |
2092 /* Struct DepthBufferObjectControlState (0..6): */
2093 __gen_field(dw_DepthBufferObjectControlState, 0, 6) |
2094 0;
2095
2096 dw[6] =
2097 0;
2098
2099 dw[7] =
2100 __gen_field(values->RenderTargetViewExtent, 21, 31) |
2101 __gen_field(values->SurfaceQPitch, 0, 14) |
2102 0;
2103
2104 }
2105
2106 #define GEN8_3DSTATE_DRAWING_RECTANGLE_length 0x00000004
2107 #define GEN8_3DSTATE_DRAWING_RECTANGLE_length_bias 0x00000002
2108 #define GEN8_3DSTATE_DRAWING_RECTANGLE_header \
2109 .CommandType = 3, \
2110 .CommandSubType = 3, \
2111 ._3DCommandOpcode = 1, \
2112 ._3DCommandSubOpcode = 0, \
2113 .DwordLength = 2
2114
2115 struct GEN8_3DSTATE_DRAWING_RECTANGLE {
2116 uint32_t CommandType;
2117 uint32_t CommandSubType;
2118 uint32_t _3DCommandOpcode;
2119 uint32_t _3DCommandSubOpcode;
2120 #define Legacy 0
2121 #define Core0Enabled 1
2122 #define Core1Enabled 2
2123 uint32_t CoreModeSelect;
2124 uint32_t DwordLength;
2125 uint32_t ClippedDrawingRectangleYMin;
2126 uint32_t ClippedDrawingRectangleXMin;
2127 uint32_t ClippedDrawingRectangleYMax;
2128 uint32_t ClippedDrawingRectangleXMax;
2129 uint32_t DrawingRectangleOriginY;
2130 uint32_t DrawingRectangleOriginX;
2131 };
2132
2133 static inline void
2134 GEN8_3DSTATE_DRAWING_RECTANGLE_pack(__gen_user_data *data, void * restrict dst,
2135 const struct GEN8_3DSTATE_DRAWING_RECTANGLE * restrict values)
2136 {
2137 uint32_t *dw = (uint32_t * restrict) dst;
2138
2139 dw[0] =
2140 __gen_field(values->CommandType, 29, 31) |
2141 __gen_field(values->CommandSubType, 27, 28) |
2142 __gen_field(values->_3DCommandOpcode, 24, 26) |
2143 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
2144 __gen_field(values->CoreModeSelect, 14, 15) |
2145 __gen_field(values->DwordLength, 0, 7) |
2146 0;
2147
2148 dw[1] =
2149 __gen_field(values->ClippedDrawingRectangleYMin, 16, 31) |
2150 __gen_field(values->ClippedDrawingRectangleXMin, 0, 15) |
2151 0;
2152
2153 dw[2] =
2154 __gen_field(values->ClippedDrawingRectangleYMax, 16, 31) |
2155 __gen_field(values->ClippedDrawingRectangleXMax, 0, 15) |
2156 0;
2157
2158 dw[3] =
2159 __gen_field(values->DrawingRectangleOriginY, 16, 31) |
2160 __gen_field(values->DrawingRectangleOriginX, 0, 15) |
2161 0;
2162
2163 }
2164
2165 #define GEN8_3DSTATE_DS_length 0x00000009
2166 #define GEN8_3DSTATE_DS_length_bias 0x00000002
2167 #define GEN8_3DSTATE_DS_header \
2168 .CommandType = 3, \
2169 .CommandSubType = 3, \
2170 ._3DCommandOpcode = 0, \
2171 ._3DCommandSubOpcode = 29, \
2172 .DwordLength = 7
2173
2174 struct GEN8_3DSTATE_DS {
2175 uint32_t CommandType;
2176 uint32_t CommandSubType;
2177 uint32_t _3DCommandOpcode;
2178 uint32_t _3DCommandSubOpcode;
2179 uint32_t DwordLength;
2180 uint32_t KernelStartPointer;
2181 #define Multiple 0
2182 #define Single 1
2183 uint32_t SingleDomainPointDispatch;
2184 #define Dmask 0
2185 #define Vmask 1
2186 uint32_t VectorMaskEnable;
2187 #define NoSamplers 0
2188 #define _14Samplers 1
2189 #define _58Samplers 2
2190 #define _912Samplers 3
2191 #define _1316Samplers 4
2192 uint32_t SamplerCount;
2193 uint32_t BindingTableEntryCount;
2194 #define Normal 0
2195 #define High 1
2196 uint32_t ThreadDispatchPriority;
2197 #define IEEE754 0
2198 #define Alternate 1
2199 uint32_t FloatingPointMode;
2200 uint32_t AccessesUAV;
2201 uint32_t IllegalOpcodeExceptionEnable;
2202 uint32_t SoftwareExceptionEnable;
2203 uint32_t ScratchSpaceBasePointer;
2204 uint32_t PerThreadScratchSpace;
2205 uint32_t DispatchGRFStartRegisterForURBData;
2206 uint32_t PatchURBEntryReadLength;
2207 uint32_t PatchURBEntryReadOffset;
2208 uint32_t MaximumNumberofThreads;
2209 uint32_t StatisticsEnable;
2210 uint32_t SIMD8DispatchEnable;
2211 uint32_t ComputeWCoordinateEnable;
2212 uint32_t CacheDisable;
2213 uint32_t FunctionEnable;
2214 uint32_t VertexURBEntryOutputReadOffset;
2215 uint32_t VertexURBEntryOutputLength;
2216 uint32_t UserClipDistanceClipTestEnableBitmask;
2217 uint32_t UserClipDistanceCullTestEnableBitmask;
2218 };
2219
2220 static inline void
2221 GEN8_3DSTATE_DS_pack(__gen_user_data *data, void * restrict dst,
2222 const struct GEN8_3DSTATE_DS * restrict values)
2223 {
2224 uint32_t *dw = (uint32_t * restrict) dst;
2225
2226 dw[0] =
2227 __gen_field(values->CommandType, 29, 31) |
2228 __gen_field(values->CommandSubType, 27, 28) |
2229 __gen_field(values->_3DCommandOpcode, 24, 26) |
2230 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
2231 __gen_field(values->DwordLength, 0, 7) |
2232 0;
2233
2234 dw[1] =
2235 __gen_offset(values->KernelStartPointer, 6, 63) |
2236 0;
2237
2238 dw[3] =
2239 __gen_field(values->SingleDomainPointDispatch, 31, 31) |
2240 __gen_field(values->VectorMaskEnable, 30, 30) |
2241 __gen_field(values->SamplerCount, 27, 29) |
2242 __gen_field(values->BindingTableEntryCount, 18, 25) |
2243 __gen_field(values->ThreadDispatchPriority, 17, 17) |
2244 __gen_field(values->FloatingPointMode, 16, 16) |
2245 __gen_field(values->AccessesUAV, 14, 14) |
2246 __gen_field(values->IllegalOpcodeExceptionEnable, 13, 13) |
2247 __gen_field(values->SoftwareExceptionEnable, 7, 7) |
2248 0;
2249
2250 dw[4] =
2251 __gen_offset(values->ScratchSpaceBasePointer, 10, 63) |
2252 __gen_field(values->PerThreadScratchSpace, 0, 3) |
2253 0;
2254
2255 dw[6] =
2256 __gen_field(values->DispatchGRFStartRegisterForURBData, 20, 24) |
2257 __gen_field(values->PatchURBEntryReadLength, 11, 17) |
2258 __gen_field(values->PatchURBEntryReadOffset, 4, 9) |
2259 0;
2260
2261 dw[7] =
2262 __gen_field(values->MaximumNumberofThreads, 21, 29) |
2263 __gen_field(values->StatisticsEnable, 10, 10) |
2264 __gen_field(values->SIMD8DispatchEnable, 3, 3) |
2265 __gen_field(values->ComputeWCoordinateEnable, 2, 2) |
2266 __gen_field(values->CacheDisable, 1, 1) |
2267 __gen_field(values->FunctionEnable, 0, 0) |
2268 0;
2269
2270 dw[8] =
2271 __gen_field(values->VertexURBEntryOutputReadOffset, 21, 26) |
2272 __gen_field(values->VertexURBEntryOutputLength, 16, 20) |
2273 __gen_field(values->UserClipDistanceClipTestEnableBitmask, 8, 15) |
2274 __gen_field(values->UserClipDistanceCullTestEnableBitmask, 0, 7) |
2275 0;
2276
2277 }
2278
2279 #define GEN8_3DSTATE_GATHER_CONSTANT_DS_length_bias 0x00000002
2280 #define GEN8_3DSTATE_GATHER_CONSTANT_DS_header \
2281 .CommandType = 3, \
2282 .CommandSubType = 3, \
2283 ._3DCommandOpcode = 0, \
2284 ._3DCommandSubOpcode = 55
2285
2286 struct GEN8_GATHER_CONSTANT_ENTRY {
2287 uint32_t ConstantBufferOffset;
2288 uint32_t ChannelMask;
2289 uint32_t BindingTableIndexOffset;
2290 };
2291
2292 static inline void
2293 GEN8_GATHER_CONSTANT_ENTRY_pack(__gen_user_data *data, void * restrict dst,
2294 const struct GEN8_GATHER_CONSTANT_ENTRY * restrict values)
2295 {
2296 uint32_t *dw = (uint32_t * restrict) dst;
2297
2298 dw[0] =
2299 __gen_offset(values->ConstantBufferOffset, 8, 15) |
2300 __gen_field(values->ChannelMask, 4, 7) |
2301 __gen_field(values->BindingTableIndexOffset, 0, 3) |
2302 0;
2303
2304 }
2305
2306 struct GEN8_3DSTATE_GATHER_CONSTANT_DS {
2307 uint32_t CommandType;
2308 uint32_t CommandSubType;
2309 uint32_t _3DCommandOpcode;
2310 uint32_t _3DCommandSubOpcode;
2311 uint32_t DwordLength;
2312 uint32_t ConstantBufferValid;
2313 uint32_t ConstantBufferBindingTableBlock;
2314 uint32_t GatherBufferOffset;
2315 uint32_t ConstantBufferDx9GenerateStall;
2316 /* variable length fields follow */
2317 };
2318
2319 static inline void
2320 GEN8_3DSTATE_GATHER_CONSTANT_DS_pack(__gen_user_data *data, void * restrict dst,
2321 const struct GEN8_3DSTATE_GATHER_CONSTANT_DS * restrict values)
2322 {
2323 uint32_t *dw = (uint32_t * restrict) dst;
2324
2325 dw[0] =
2326 __gen_field(values->CommandType, 29, 31) |
2327 __gen_field(values->CommandSubType, 27, 28) |
2328 __gen_field(values->_3DCommandOpcode, 24, 26) |
2329 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
2330 __gen_field(values->DwordLength, 0, 7) |
2331 0;
2332
2333 dw[1] =
2334 __gen_field(values->ConstantBufferValid, 16, 31) |
2335 __gen_field(values->ConstantBufferBindingTableBlock, 12, 15) |
2336 0;
2337
2338 dw[2] =
2339 __gen_offset(values->GatherBufferOffset, 6, 22) |
2340 __gen_field(values->ConstantBufferDx9GenerateStall, 5, 5) |
2341 0;
2342
2343 /* variable length fields follow */
2344 }
2345
2346 #define GEN8_3DSTATE_GATHER_CONSTANT_GS_length_bias 0x00000002
2347 #define GEN8_3DSTATE_GATHER_CONSTANT_GS_header \
2348 .CommandType = 3, \
2349 .CommandSubType = 3, \
2350 ._3DCommandOpcode = 0, \
2351 ._3DCommandSubOpcode = 53
2352
2353 struct GEN8_3DSTATE_GATHER_CONSTANT_GS {
2354 uint32_t CommandType;
2355 uint32_t CommandSubType;
2356 uint32_t _3DCommandOpcode;
2357 uint32_t _3DCommandSubOpcode;
2358 uint32_t DwordLength;
2359 uint32_t ConstantBufferValid;
2360 uint32_t ConstantBufferBindingTableBlock;
2361 uint32_t GatherBufferOffset;
2362 uint32_t ConstantBufferDx9GenerateStall;
2363 /* variable length fields follow */
2364 };
2365
2366 static inline void
2367 GEN8_3DSTATE_GATHER_CONSTANT_GS_pack(__gen_user_data *data, void * restrict dst,
2368 const struct GEN8_3DSTATE_GATHER_CONSTANT_GS * restrict values)
2369 {
2370 uint32_t *dw = (uint32_t * restrict) dst;
2371
2372 dw[0] =
2373 __gen_field(values->CommandType, 29, 31) |
2374 __gen_field(values->CommandSubType, 27, 28) |
2375 __gen_field(values->_3DCommandOpcode, 24, 26) |
2376 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
2377 __gen_field(values->DwordLength, 0, 7) |
2378 0;
2379
2380 dw[1] =
2381 __gen_field(values->ConstantBufferValid, 16, 31) |
2382 __gen_field(values->ConstantBufferBindingTableBlock, 12, 15) |
2383 0;
2384
2385 dw[2] =
2386 __gen_offset(values->GatherBufferOffset, 6, 22) |
2387 __gen_field(values->ConstantBufferDx9GenerateStall, 5, 5) |
2388 0;
2389
2390 /* variable length fields follow */
2391 }
2392
2393 #define GEN8_3DSTATE_GATHER_CONSTANT_HS_length_bias 0x00000002
2394 #define GEN8_3DSTATE_GATHER_CONSTANT_HS_header \
2395 .CommandType = 3, \
2396 .CommandSubType = 3, \
2397 ._3DCommandOpcode = 0, \
2398 ._3DCommandSubOpcode = 54
2399
2400 struct GEN8_3DSTATE_GATHER_CONSTANT_HS {
2401 uint32_t CommandType;
2402 uint32_t CommandSubType;
2403 uint32_t _3DCommandOpcode;
2404 uint32_t _3DCommandSubOpcode;
2405 uint32_t DwordLength;
2406 uint32_t ConstantBufferValid;
2407 uint32_t ConstantBufferBindingTableBlock;
2408 uint32_t GatherBufferOffset;
2409 uint32_t ConstantBufferDx9GenerateStall;
2410 /* variable length fields follow */
2411 };
2412
2413 static inline void
2414 GEN8_3DSTATE_GATHER_CONSTANT_HS_pack(__gen_user_data *data, void * restrict dst,
2415 const struct GEN8_3DSTATE_GATHER_CONSTANT_HS * restrict values)
2416 {
2417 uint32_t *dw = (uint32_t * restrict) dst;
2418
2419 dw[0] =
2420 __gen_field(values->CommandType, 29, 31) |
2421 __gen_field(values->CommandSubType, 27, 28) |
2422 __gen_field(values->_3DCommandOpcode, 24, 26) |
2423 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
2424 __gen_field(values->DwordLength, 0, 7) |
2425 0;
2426
2427 dw[1] =
2428 __gen_field(values->ConstantBufferValid, 16, 31) |
2429 __gen_field(values->ConstantBufferBindingTableBlock, 12, 15) |
2430 0;
2431
2432 dw[2] =
2433 __gen_offset(values->GatherBufferOffset, 6, 22) |
2434 __gen_field(values->ConstantBufferDx9GenerateStall, 5, 5) |
2435 0;
2436
2437 /* variable length fields follow */
2438 }
2439
2440 #define GEN8_3DSTATE_GATHER_CONSTANT_PS_length_bias 0x00000002
2441 #define GEN8_3DSTATE_GATHER_CONSTANT_PS_header \
2442 .CommandType = 3, \
2443 .CommandSubType = 3, \
2444 ._3DCommandOpcode = 0, \
2445 ._3DCommandSubOpcode = 56
2446
2447 struct GEN8_3DSTATE_GATHER_CONSTANT_PS {
2448 uint32_t CommandType;
2449 uint32_t CommandSubType;
2450 uint32_t _3DCommandOpcode;
2451 uint32_t _3DCommandSubOpcode;
2452 uint32_t DwordLength;
2453 uint32_t ConstantBufferValid;
2454 uint32_t ConstantBufferBindingTableBlock;
2455 uint32_t GatherBufferOffset;
2456 uint32_t ConstantBufferDx9GenerateStall;
2457 uint32_t ConstantBufferDx9Enable;
2458 /* variable length fields follow */
2459 };
2460
2461 static inline void
2462 GEN8_3DSTATE_GATHER_CONSTANT_PS_pack(__gen_user_data *data, void * restrict dst,
2463 const struct GEN8_3DSTATE_GATHER_CONSTANT_PS * restrict values)
2464 {
2465 uint32_t *dw = (uint32_t * restrict) dst;
2466
2467 dw[0] =
2468 __gen_field(values->CommandType, 29, 31) |
2469 __gen_field(values->CommandSubType, 27, 28) |
2470 __gen_field(values->_3DCommandOpcode, 24, 26) |
2471 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
2472 __gen_field(values->DwordLength, 0, 7) |
2473 0;
2474
2475 dw[1] =
2476 __gen_field(values->ConstantBufferValid, 16, 31) |
2477 __gen_field(values->ConstantBufferBindingTableBlock, 12, 15) |
2478 0;
2479
2480 dw[2] =
2481 __gen_offset(values->GatherBufferOffset, 6, 22) |
2482 __gen_field(values->ConstantBufferDx9GenerateStall, 5, 5) |
2483 __gen_field(values->ConstantBufferDx9Enable, 4, 4) |
2484 0;
2485
2486 /* variable length fields follow */
2487 }
2488
2489 #define GEN8_3DSTATE_GATHER_CONSTANT_VS_length_bias 0x00000002
2490 #define GEN8_3DSTATE_GATHER_CONSTANT_VS_header \
2491 .CommandType = 3, \
2492 .CommandSubType = 3, \
2493 ._3DCommandOpcode = 0, \
2494 ._3DCommandSubOpcode = 52
2495
2496 struct GEN8_3DSTATE_GATHER_CONSTANT_VS {
2497 uint32_t CommandType;
2498 uint32_t CommandSubType;
2499 uint32_t _3DCommandOpcode;
2500 uint32_t _3DCommandSubOpcode;
2501 uint32_t DwordLength;
2502 uint32_t ConstantBufferValid;
2503 uint32_t ConstantBufferBindingTableBlock;
2504 uint32_t GatherBufferOffset;
2505 uint32_t ConstantBufferDx9GenerateStall;
2506 uint32_t ConstantBufferDx9Enable;
2507 /* variable length fields follow */
2508 };
2509
2510 static inline void
2511 GEN8_3DSTATE_GATHER_CONSTANT_VS_pack(__gen_user_data *data, void * restrict dst,
2512 const struct GEN8_3DSTATE_GATHER_CONSTANT_VS * restrict values)
2513 {
2514 uint32_t *dw = (uint32_t * restrict) dst;
2515
2516 dw[0] =
2517 __gen_field(values->CommandType, 29, 31) |
2518 __gen_field(values->CommandSubType, 27, 28) |
2519 __gen_field(values->_3DCommandOpcode, 24, 26) |
2520 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
2521 __gen_field(values->DwordLength, 0, 7) |
2522 0;
2523
2524 dw[1] =
2525 __gen_field(values->ConstantBufferValid, 16, 31) |
2526 __gen_field(values->ConstantBufferBindingTableBlock, 12, 15) |
2527 0;
2528
2529 dw[2] =
2530 __gen_offset(values->GatherBufferOffset, 6, 22) |
2531 __gen_field(values->ConstantBufferDx9GenerateStall, 5, 5) |
2532 __gen_field(values->ConstantBufferDx9Enable, 4, 4) |
2533 0;
2534
2535 /* variable length fields follow */
2536 }
2537
2538 #define GEN8_3DSTATE_GATHER_POOL_ALLOC_length 0x00000004
2539 #define GEN8_3DSTATE_GATHER_POOL_ALLOC_length_bias 0x00000002
2540 #define GEN8_3DSTATE_GATHER_POOL_ALLOC_header \
2541 .CommandType = 3, \
2542 .CommandSubType = 3, \
2543 ._3DCommandOpcode = 1, \
2544 ._3DCommandSubOpcode = 26, \
2545 .DwordLength = 2
2546
2547 struct GEN8_3DSTATE_GATHER_POOL_ALLOC {
2548 uint32_t CommandType;
2549 uint32_t CommandSubType;
2550 uint32_t _3DCommandOpcode;
2551 uint32_t _3DCommandSubOpcode;
2552 uint32_t DwordLength;
2553 __gen_address_type GatherPoolBaseAddress;
2554 uint32_t GatherPoolEnable;
2555 struct GEN8_MEMORY_OBJECT_CONTROL_STATE MemoryObjectControlState;
2556 uint32_t GatherPoolBufferSize;
2557 };
2558
2559 static inline void
2560 GEN8_3DSTATE_GATHER_POOL_ALLOC_pack(__gen_user_data *data, void * restrict dst,
2561 const struct GEN8_3DSTATE_GATHER_POOL_ALLOC * restrict values)
2562 {
2563 uint32_t *dw = (uint32_t * restrict) dst;
2564
2565 dw[0] =
2566 __gen_field(values->CommandType, 29, 31) |
2567 __gen_field(values->CommandSubType, 27, 28) |
2568 __gen_field(values->_3DCommandOpcode, 24, 26) |
2569 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
2570 __gen_field(values->DwordLength, 0, 7) |
2571 0;
2572
2573 uint32_t dw_MemoryObjectControlState;
2574 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_MemoryObjectControlState, &values->MemoryObjectControlState);
2575 uint32_t dw1 =
2576 __gen_field(values->GatherPoolEnable, 11, 11) |
2577 /* Struct MemoryObjectControlState (0..6): */
2578 __gen_field(dw_MemoryObjectControlState, 0, 6) |
2579 0;
2580
2581 dw[1] =
2582 __gen_combine_address(data, &dw[1], values->GatherPoolBaseAddress, dw1);
2583
2584 dw[3] =
2585 __gen_field(values->GatherPoolBufferSize, 12, 31) |
2586 0;
2587
2588 }
2589
2590 #define GEN8_3DSTATE_GS_length 0x0000000a
2591 #define GEN8_3DSTATE_GS_length_bias 0x00000002
2592 #define GEN8_3DSTATE_GS_header \
2593 .CommandType = 3, \
2594 .CommandSubType = 3, \
2595 ._3DCommandOpcode = 0, \
2596 ._3DCommandSubOpcode = 17, \
2597 .DwordLength = 8
2598
2599 struct GEN8_3DSTATE_GS {
2600 uint32_t CommandType;
2601 uint32_t CommandSubType;
2602 uint32_t _3DCommandOpcode;
2603 uint32_t _3DCommandSubOpcode;
2604 uint32_t DwordLength;
2605 uint32_t KernelStartPointer;
2606 uint32_t SingleProgramFlow;
2607 #define Dmask 0
2608 #define Vmask 1
2609 uint32_t VectorMaskEnable;
2610 #define NoSamplers 0
2611 #define _14Samplers 1
2612 #define _58Samplers 2
2613 #define _912Samplers 3
2614 #define _1316Samplers 4
2615 uint32_t SamplerCount;
2616 uint32_t BindingTableEntryCount;
2617 #define Normal 0
2618 #define High 1
2619 uint32_t ThreadDispatchPriority;
2620 #define IEEE754 0
2621 #define Alternate 1
2622 uint32_t FloatingPointMode;
2623 uint32_t IllegalOpcodeExceptionEnable;
2624 uint32_t AccessesUAV;
2625 uint32_t MaskStackExceptionEnable;
2626 uint32_t SoftwareExceptionEnable;
2627 uint32_t ExpectedVertexCount;
2628 uint32_t ScratchSpaceBasePointer;
2629 uint32_t PerThreadScratchSpace;
2630 uint32_t OutputVertexSize;
2631 uint32_t OutputTopology;
2632 uint32_t VertexURBEntryReadLength;
2633 uint32_t IncludeVertexHandles;
2634 uint32_t VertexURBEntryReadOffset;
2635 uint32_t DispatchGRFStartRegisterForURBData;
2636 uint32_t MaximumNumberofThreads;
2637 uint32_t ControlDataHeaderSize;
2638 uint32_t InstanceControl;
2639 uint32_t DefaultStreamId;
2640 #define DispatchModeSingle 0
2641 #define DispatchModeDualInstance 1
2642 #define DispatchModeDualObject 2
2643 #define DispatchModeSIMD8 3
2644 uint32_t DispatchMode;
2645 uint32_t StatisticsEnable;
2646 uint32_t InvocationsIncrementValue;
2647 uint32_t IncludePrimitiveID;
2648 uint32_t Hint;
2649 #define LEADING 0
2650 #define TRAILING 1
2651 uint32_t ReorderMode;
2652 uint32_t DiscardAdjacency;
2653 uint32_t Enable;
2654 #define CUT 0
2655 #define SID 1
2656 uint32_t ControlDataFormat;
2657 uint32_t StaticOutput;
2658 uint32_t StaticOutputVertexCount;
2659 uint32_t VertexURBEntryOutputReadOffset;
2660 uint32_t VertexURBEntryOutputLength;
2661 uint32_t UserClipDistanceClipTestEnableBitmask;
2662 uint32_t UserClipDistanceCullTestEnableBitmask;
2663 };
2664
2665 static inline void
2666 GEN8_3DSTATE_GS_pack(__gen_user_data *data, void * restrict dst,
2667 const struct GEN8_3DSTATE_GS * restrict values)
2668 {
2669 uint32_t *dw = (uint32_t * restrict) dst;
2670
2671 dw[0] =
2672 __gen_field(values->CommandType, 29, 31) |
2673 __gen_field(values->CommandSubType, 27, 28) |
2674 __gen_field(values->_3DCommandOpcode, 24, 26) |
2675 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
2676 __gen_field(values->DwordLength, 0, 7) |
2677 0;
2678
2679 dw[1] =
2680 __gen_offset(values->KernelStartPointer, 6, 63) |
2681 0;
2682
2683 dw[3] =
2684 __gen_field(values->SingleProgramFlow, 31, 31) |
2685 __gen_field(values->VectorMaskEnable, 30, 30) |
2686 __gen_field(values->SamplerCount, 27, 29) |
2687 __gen_field(values->BindingTableEntryCount, 18, 25) |
2688 __gen_field(values->ThreadDispatchPriority, 17, 17) |
2689 __gen_field(values->FloatingPointMode, 16, 16) |
2690 __gen_field(values->IllegalOpcodeExceptionEnable, 13, 13) |
2691 __gen_field(values->AccessesUAV, 12, 12) |
2692 __gen_field(values->MaskStackExceptionEnable, 11, 11) |
2693 __gen_field(values->SoftwareExceptionEnable, 7, 7) |
2694 __gen_field(values->ExpectedVertexCount, 0, 5) |
2695 0;
2696
2697 dw[4] =
2698 __gen_offset(values->ScratchSpaceBasePointer, 10, 63) |
2699 __gen_field(values->PerThreadScratchSpace, 0, 3) |
2700 0;
2701
2702 dw[6] =
2703 __gen_field(values->OutputVertexSize, 23, 28) |
2704 __gen_field(values->OutputTopology, 17, 22) |
2705 __gen_field(values->VertexURBEntryReadLength, 11, 16) |
2706 __gen_field(values->IncludeVertexHandles, 10, 10) |
2707 __gen_field(values->VertexURBEntryReadOffset, 4, 9) |
2708 __gen_field(values->DispatchGRFStartRegisterForURBData, 0, 3) |
2709 0;
2710
2711 dw[7] =
2712 __gen_field(values->MaximumNumberofThreads, 24, 31) |
2713 __gen_field(values->ControlDataHeaderSize, 20, 23) |
2714 __gen_field(values->InstanceControl, 15, 19) |
2715 __gen_field(values->DefaultStreamId, 13, 14) |
2716 __gen_field(values->DispatchMode, 11, 12) |
2717 __gen_field(values->StatisticsEnable, 10, 10) |
2718 __gen_field(values->InvocationsIncrementValue, 5, 9) |
2719 __gen_field(values->IncludePrimitiveID, 4, 4) |
2720 __gen_field(values->Hint, 3, 3) |
2721 __gen_field(values->ReorderMode, 2, 2) |
2722 __gen_field(values->DiscardAdjacency, 1, 1) |
2723 __gen_field(values->Enable, 0, 0) |
2724 0;
2725
2726 dw[8] =
2727 __gen_field(values->ControlDataFormat, 31, 31) |
2728 __gen_field(values->StaticOutput, 30, 30) |
2729 __gen_field(values->StaticOutputVertexCount, 16, 26) |
2730 0;
2731
2732 dw[9] =
2733 __gen_field(values->VertexURBEntryOutputReadOffset, 21, 26) |
2734 __gen_field(values->VertexURBEntryOutputLength, 16, 20) |
2735 __gen_field(values->UserClipDistanceClipTestEnableBitmask, 8, 15) |
2736 __gen_field(values->UserClipDistanceCullTestEnableBitmask, 0, 7) |
2737 0;
2738
2739 }
2740
2741 #define GEN8_3DSTATE_HIER_DEPTH_BUFFER_length 0x00000005
2742 #define GEN8_3DSTATE_HIER_DEPTH_BUFFER_length_bias 0x00000002
2743 #define GEN8_3DSTATE_HIER_DEPTH_BUFFER_header \
2744 .CommandType = 3, \
2745 .CommandSubType = 3, \
2746 ._3DCommandOpcode = 0, \
2747 ._3DCommandSubOpcode = 7, \
2748 .DwordLength = 3
2749
2750 struct GEN8_3DSTATE_HIER_DEPTH_BUFFER {
2751 uint32_t CommandType;
2752 uint32_t CommandSubType;
2753 uint32_t _3DCommandOpcode;
2754 uint32_t _3DCommandSubOpcode;
2755 uint32_t DwordLength;
2756 struct GEN8_MEMORY_OBJECT_CONTROL_STATE HierarchicalDepthBufferObjectControlState;
2757 uint32_t SurfacePitch;
2758 __gen_address_type SurfaceBaseAddress;
2759 uint32_t SurfaceQPitch;
2760 };
2761
2762 static inline void
2763 GEN8_3DSTATE_HIER_DEPTH_BUFFER_pack(__gen_user_data *data, void * restrict dst,
2764 const struct GEN8_3DSTATE_HIER_DEPTH_BUFFER * restrict values)
2765 {
2766 uint32_t *dw = (uint32_t * restrict) dst;
2767
2768 dw[0] =
2769 __gen_field(values->CommandType, 29, 31) |
2770 __gen_field(values->CommandSubType, 27, 28) |
2771 __gen_field(values->_3DCommandOpcode, 24, 26) |
2772 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
2773 __gen_field(values->DwordLength, 0, 7) |
2774 0;
2775
2776 uint32_t dw_HierarchicalDepthBufferObjectControlState;
2777 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_HierarchicalDepthBufferObjectControlState, &values->HierarchicalDepthBufferObjectControlState);
2778 dw[1] =
2779 /* Struct HierarchicalDepthBufferObjectControlState (25..31): */
2780 __gen_field(dw_HierarchicalDepthBufferObjectControlState, 25, 31) |
2781 __gen_field(values->SurfacePitch, 0, 16) |
2782 0;
2783
2784 uint32_t dw2 =
2785 0;
2786
2787 dw[2] =
2788 __gen_combine_address(data, &dw[2], values->SurfaceBaseAddress, dw2);
2789
2790 dw[4] =
2791 __gen_field(values->SurfaceQPitch, 0, 14) |
2792 0;
2793
2794 }
2795
2796 #define GEN8_3DSTATE_HS_length 0x00000009
2797 #define GEN8_3DSTATE_HS_length_bias 0x00000002
2798 #define GEN8_3DSTATE_HS_header \
2799 .CommandType = 3, \
2800 .CommandSubType = 3, \
2801 ._3DCommandOpcode = 0, \
2802 ._3DCommandSubOpcode = 27, \
2803 .DwordLength = 7
2804
2805 struct GEN8_3DSTATE_HS {
2806 uint32_t CommandType;
2807 uint32_t CommandSubType;
2808 uint32_t _3DCommandOpcode;
2809 uint32_t _3DCommandSubOpcode;
2810 uint32_t DwordLength;
2811 #define NoSamplers 0
2812 #define _14Samplers 1
2813 #define _58Samplers 2
2814 #define _912Samplers 3
2815 #define _1316Samplers 4
2816 uint32_t SamplerCount;
2817 uint32_t BindingTableEntryCount;
2818 #define Normal 0
2819 #define High 1
2820 uint32_t ThreadDispatchPriority;
2821 #define IEEE754 0
2822 #define alternate 1
2823 uint32_t FloatingPointMode;
2824 uint32_t IllegalOpcodeExceptionEnable;
2825 uint32_t SoftwareExceptionEnable;
2826 uint32_t Enable;
2827 uint32_t StatisticsEnable;
2828 uint32_t MaximumNumberofThreads;
2829 uint32_t InstanceCount;
2830 uint32_t KernelStartPointer;
2831 uint32_t ScratchSpaceBasePointer;
2832 uint32_t PerThreadScratchSpace;
2833 uint32_t SingleProgramFlow;
2834 #define Dmask 0
2835 #define Vmask 1
2836 uint32_t VectorMaskEnable;
2837 uint32_t AccessesUAV;
2838 uint32_t IncludeVertexHandles;
2839 uint32_t DispatchGRFStartRegisterForURBData;
2840 uint32_t VertexURBEntryReadLength;
2841 uint32_t VertexURBEntryReadOffset;
2842 };
2843
2844 static inline void
2845 GEN8_3DSTATE_HS_pack(__gen_user_data *data, void * restrict dst,
2846 const struct GEN8_3DSTATE_HS * restrict values)
2847 {
2848 uint32_t *dw = (uint32_t * restrict) dst;
2849
2850 dw[0] =
2851 __gen_field(values->CommandType, 29, 31) |
2852 __gen_field(values->CommandSubType, 27, 28) |
2853 __gen_field(values->_3DCommandOpcode, 24, 26) |
2854 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
2855 __gen_field(values->DwordLength, 0, 7) |
2856 0;
2857
2858 dw[1] =
2859 __gen_field(values->SamplerCount, 27, 29) |
2860 __gen_field(values->BindingTableEntryCount, 18, 25) |
2861 __gen_field(values->ThreadDispatchPriority, 17, 17) |
2862 __gen_field(values->FloatingPointMode, 16, 16) |
2863 __gen_field(values->IllegalOpcodeExceptionEnable, 13, 13) |
2864 __gen_field(values->SoftwareExceptionEnable, 12, 12) |
2865 0;
2866
2867 dw[2] =
2868 __gen_field(values->Enable, 31, 31) |
2869 __gen_field(values->StatisticsEnable, 29, 29) |
2870 __gen_field(values->MaximumNumberofThreads, 8, 16) |
2871 __gen_field(values->InstanceCount, 0, 3) |
2872 0;
2873
2874 dw[3] =
2875 __gen_offset(values->KernelStartPointer, 6, 63) |
2876 0;
2877
2878 dw[5] =
2879 __gen_offset(values->ScratchSpaceBasePointer, 10, 63) |
2880 __gen_field(values->PerThreadScratchSpace, 0, 3) |
2881 0;
2882
2883 dw[7] =
2884 __gen_field(values->SingleProgramFlow, 27, 27) |
2885 __gen_field(values->VectorMaskEnable, 26, 26) |
2886 __gen_field(values->AccessesUAV, 25, 25) |
2887 __gen_field(values->IncludeVertexHandles, 24, 24) |
2888 __gen_field(values->DispatchGRFStartRegisterForURBData, 19, 23) |
2889 __gen_field(values->VertexURBEntryReadLength, 11, 16) |
2890 __gen_field(values->VertexURBEntryReadOffset, 4, 9) |
2891 0;
2892
2893 dw[8] =
2894 0;
2895
2896 }
2897
2898 #define GEN8_3DSTATE_INDEX_BUFFER_length 0x00000005
2899 #define GEN8_3DSTATE_INDEX_BUFFER_length_bias 0x00000002
2900 #define GEN8_3DSTATE_INDEX_BUFFER_header \
2901 .CommandType = 3, \
2902 .CommandSubType = 3, \
2903 ._3DCommandOpcode = 0, \
2904 ._3DCommandSubOpcode = 10, \
2905 .DwordLength = 3
2906
2907 struct GEN8_3DSTATE_INDEX_BUFFER {
2908 uint32_t CommandType;
2909 uint32_t CommandSubType;
2910 uint32_t _3DCommandOpcode;
2911 uint32_t _3DCommandSubOpcode;
2912 uint32_t DwordLength;
2913 #define INDEX_BYTE 0
2914 #define INDEX_WORD 1
2915 #define INDEX_DWORD 2
2916 uint32_t IndexFormat;
2917 struct GEN8_MEMORY_OBJECT_CONTROL_STATE MemoryObjectControlState;
2918 __gen_address_type BufferStartingAddress;
2919 uint32_t BufferSize;
2920 };
2921
2922 static inline void
2923 GEN8_3DSTATE_INDEX_BUFFER_pack(__gen_user_data *data, void * restrict dst,
2924 const struct GEN8_3DSTATE_INDEX_BUFFER * restrict values)
2925 {
2926 uint32_t *dw = (uint32_t * restrict) dst;
2927
2928 dw[0] =
2929 __gen_field(values->CommandType, 29, 31) |
2930 __gen_field(values->CommandSubType, 27, 28) |
2931 __gen_field(values->_3DCommandOpcode, 24, 26) |
2932 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
2933 __gen_field(values->DwordLength, 0, 7) |
2934 0;
2935
2936 uint32_t dw_MemoryObjectControlState;
2937 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_MemoryObjectControlState, &values->MemoryObjectControlState);
2938 dw[1] =
2939 __gen_field(values->IndexFormat, 8, 9) |
2940 /* Struct MemoryObjectControlState (0..6): */
2941 __gen_field(dw_MemoryObjectControlState, 0, 6) |
2942 0;
2943
2944 uint32_t dw2 =
2945 0;
2946
2947 dw[2] =
2948 __gen_combine_address(data, &dw[2], values->BufferStartingAddress, dw2);
2949
2950 dw[4] =
2951 __gen_field(values->BufferSize, 0, 31) |
2952 0;
2953
2954 }
2955
2956 #define GEN8_3DSTATE_LINE_STIPPLE_length 0x00000003
2957 #define GEN8_3DSTATE_LINE_STIPPLE_length_bias 0x00000002
2958 #define GEN8_3DSTATE_LINE_STIPPLE_header \
2959 .CommandType = 3, \
2960 .CommandSubType = 3, \
2961 ._3DCommandOpcode = 1, \
2962 ._3DCommandSubOpcode = 8, \
2963 .DwordLength = 1
2964
2965 struct GEN8_3DSTATE_LINE_STIPPLE {
2966 uint32_t CommandType;
2967 uint32_t CommandSubType;
2968 uint32_t _3DCommandOpcode;
2969 uint32_t _3DCommandSubOpcode;
2970 uint32_t DwordLength;
2971 uint32_t ModifyEnableCurrentRepeatCounterCurrentStippleIndex;
2972 uint32_t CurrentRepeatCounter;
2973 uint32_t CurrentStippleIndex;
2974 uint32_t LineStipplePattern;
2975 uint32_t LineStippleInverseRepeatCount;
2976 uint32_t LineStippleRepeatCount;
2977 };
2978
2979 static inline void
2980 GEN8_3DSTATE_LINE_STIPPLE_pack(__gen_user_data *data, void * restrict dst,
2981 const struct GEN8_3DSTATE_LINE_STIPPLE * restrict values)
2982 {
2983 uint32_t *dw = (uint32_t * restrict) dst;
2984
2985 dw[0] =
2986 __gen_field(values->CommandType, 29, 31) |
2987 __gen_field(values->CommandSubType, 27, 28) |
2988 __gen_field(values->_3DCommandOpcode, 24, 26) |
2989 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
2990 __gen_field(values->DwordLength, 0, 7) |
2991 0;
2992
2993 dw[1] =
2994 __gen_field(values->ModifyEnableCurrentRepeatCounterCurrentStippleIndex, 31, 31) |
2995 __gen_field(values->CurrentRepeatCounter, 21, 29) |
2996 __gen_field(values->CurrentStippleIndex, 16, 19) |
2997 __gen_field(values->LineStipplePattern, 0, 15) |
2998 0;
2999
3000 dw[2] =
3001 __gen_field(values->LineStippleInverseRepeatCount, 15, 31) |
3002 __gen_field(values->LineStippleRepeatCount, 0, 8) |
3003 0;
3004
3005 }
3006
3007 #define GEN8_3DSTATE_MONOFILTER_SIZE_length 0x00000002
3008 #define GEN8_3DSTATE_MONOFILTER_SIZE_length_bias 0x00000002
3009 #define GEN8_3DSTATE_MONOFILTER_SIZE_header \
3010 .CommandType = 3, \
3011 .CommandSubType = 3, \
3012 ._3DCommandOpcode = 1, \
3013 ._3DCommandSubOpcode = 17, \
3014 .DwordLength = 0
3015
3016 struct GEN8_3DSTATE_MONOFILTER_SIZE {
3017 uint32_t CommandType;
3018 uint32_t CommandSubType;
3019 uint32_t _3DCommandOpcode;
3020 uint32_t _3DCommandSubOpcode;
3021 uint32_t DwordLength;
3022 uint32_t MonochromeFilterWidth;
3023 uint32_t MonochromeFilterHeight;
3024 };
3025
3026 static inline void
3027 GEN8_3DSTATE_MONOFILTER_SIZE_pack(__gen_user_data *data, void * restrict dst,
3028 const struct GEN8_3DSTATE_MONOFILTER_SIZE * restrict values)
3029 {
3030 uint32_t *dw = (uint32_t * restrict) dst;
3031
3032 dw[0] =
3033 __gen_field(values->CommandType, 29, 31) |
3034 __gen_field(values->CommandSubType, 27, 28) |
3035 __gen_field(values->_3DCommandOpcode, 24, 26) |
3036 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3037 __gen_field(values->DwordLength, 0, 7) |
3038 0;
3039
3040 dw[1] =
3041 __gen_field(values->MonochromeFilterWidth, 3, 5) |
3042 __gen_field(values->MonochromeFilterHeight, 0, 2) |
3043 0;
3044
3045 }
3046
3047 #define GEN8_3DSTATE_MULTISAMPLE_length 0x00000002
3048 #define GEN8_3DSTATE_MULTISAMPLE_length_bias 0x00000002
3049 #define GEN8_3DSTATE_MULTISAMPLE_header \
3050 .CommandType = 3, \
3051 .CommandSubType = 3, \
3052 ._3DCommandOpcode = 0, \
3053 ._3DCommandSubOpcode = 13, \
3054 .DwordLength = 0
3055
3056 struct GEN8_3DSTATE_MULTISAMPLE {
3057 uint32_t CommandType;
3058 uint32_t CommandSubType;
3059 uint32_t _3DCommandOpcode;
3060 uint32_t _3DCommandSubOpcode;
3061 uint32_t DwordLength;
3062 uint32_t PixelPositionOffsetEnable;
3063 #define CENTER 0
3064 #define UL_CORNER 1
3065 uint32_t PixelLocation;
3066 uint32_t NumberofMultisamples;
3067 };
3068
3069 static inline void
3070 GEN8_3DSTATE_MULTISAMPLE_pack(__gen_user_data *data, void * restrict dst,
3071 const struct GEN8_3DSTATE_MULTISAMPLE * restrict values)
3072 {
3073 uint32_t *dw = (uint32_t * restrict) dst;
3074
3075 dw[0] =
3076 __gen_field(values->CommandType, 29, 31) |
3077 __gen_field(values->CommandSubType, 27, 28) |
3078 __gen_field(values->_3DCommandOpcode, 24, 26) |
3079 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3080 __gen_field(values->DwordLength, 0, 7) |
3081 0;
3082
3083 dw[1] =
3084 __gen_field(values->PixelPositionOffsetEnable, 5, 5) |
3085 __gen_field(values->PixelLocation, 4, 4) |
3086 __gen_field(values->NumberofMultisamples, 1, 3) |
3087 0;
3088
3089 }
3090
3091 #define GEN8_3DSTATE_POLY_STIPPLE_OFFSET_length 0x00000002
3092 #define GEN8_3DSTATE_POLY_STIPPLE_OFFSET_length_bias 0x00000002
3093 #define GEN8_3DSTATE_POLY_STIPPLE_OFFSET_header \
3094 .CommandType = 3, \
3095 .CommandSubType = 3, \
3096 ._3DCommandOpcode = 1, \
3097 ._3DCommandSubOpcode = 6, \
3098 .DwordLength = 0
3099
3100 struct GEN8_3DSTATE_POLY_STIPPLE_OFFSET {
3101 uint32_t CommandType;
3102 uint32_t CommandSubType;
3103 uint32_t _3DCommandOpcode;
3104 uint32_t _3DCommandSubOpcode;
3105 uint32_t DwordLength;
3106 uint32_t PolygonStippleXOffset;
3107 uint32_t PolygonStippleYOffset;
3108 };
3109
3110 static inline void
3111 GEN8_3DSTATE_POLY_STIPPLE_OFFSET_pack(__gen_user_data *data, void * restrict dst,
3112 const struct GEN8_3DSTATE_POLY_STIPPLE_OFFSET * restrict values)
3113 {
3114 uint32_t *dw = (uint32_t * restrict) dst;
3115
3116 dw[0] =
3117 __gen_field(values->CommandType, 29, 31) |
3118 __gen_field(values->CommandSubType, 27, 28) |
3119 __gen_field(values->_3DCommandOpcode, 24, 26) |
3120 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3121 __gen_field(values->DwordLength, 0, 7) |
3122 0;
3123
3124 dw[1] =
3125 __gen_field(values->PolygonStippleXOffset, 8, 12) |
3126 __gen_field(values->PolygonStippleYOffset, 0, 4) |
3127 0;
3128
3129 }
3130
3131 #define GEN8_3DSTATE_POLY_STIPPLE_PATTERN_length 0x00000021
3132 #define GEN8_3DSTATE_POLY_STIPPLE_PATTERN_length_bias 0x00000002
3133 #define GEN8_3DSTATE_POLY_STIPPLE_PATTERN_header\
3134 .CommandType = 3, \
3135 .CommandSubType = 3, \
3136 ._3DCommandOpcode = 1, \
3137 ._3DCommandSubOpcode = 7, \
3138 .DwordLength = 31
3139
3140 struct GEN8_3DSTATE_POLY_STIPPLE_PATTERN {
3141 uint32_t CommandType;
3142 uint32_t CommandSubType;
3143 uint32_t _3DCommandOpcode;
3144 uint32_t _3DCommandSubOpcode;
3145 uint32_t DwordLength;
3146 uint32_t PatternRow;
3147 };
3148
3149 static inline void
3150 GEN8_3DSTATE_POLY_STIPPLE_PATTERN_pack(__gen_user_data *data, void * restrict dst,
3151 const struct GEN8_3DSTATE_POLY_STIPPLE_PATTERN * restrict values)
3152 {
3153 uint32_t *dw = (uint32_t * restrict) dst;
3154
3155 dw[0] =
3156 __gen_field(values->CommandType, 29, 31) |
3157 __gen_field(values->CommandSubType, 27, 28) |
3158 __gen_field(values->_3DCommandOpcode, 24, 26) |
3159 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3160 __gen_field(values->DwordLength, 0, 7) |
3161 0;
3162
3163 dw[1] =
3164 __gen_field(values->PatternRow, 0, 31) |
3165 0;
3166
3167 }
3168
3169 #define GEN8_3DSTATE_PS_length 0x0000000c
3170 #define GEN8_3DSTATE_PS_length_bias 0x00000002
3171 #define GEN8_3DSTATE_PS_header \
3172 .CommandType = 3, \
3173 .CommandSubType = 3, \
3174 ._3DCommandOpcode = 0, \
3175 ._3DCommandSubOpcode = 32, \
3176 .DwordLength = 10
3177
3178 struct GEN8_3DSTATE_PS {
3179 uint32_t CommandType;
3180 uint32_t CommandSubType;
3181 uint32_t _3DCommandOpcode;
3182 uint32_t _3DCommandSubOpcode;
3183 uint32_t DwordLength;
3184 uint32_t KernelStartPointer0;
3185 #define Multiple 0
3186 #define Single 1
3187 uint32_t SingleProgramFlow;
3188 #define Dmask 0
3189 #define Vmask 1
3190 uint32_t VectorMaskEnable;
3191 #define NoSamplers 0
3192 #define _14Samplers 1
3193 #define _58Samplers 2
3194 #define _912Samplers 3
3195 #define _1316Samplers 4
3196 uint32_t SamplerCount;
3197 #define FlushedtoZero 0
3198 #define Retained 1
3199 uint32_t SinglePrecisionDenormalMode;
3200 uint32_t BindingTableEntryCount;
3201 #define Normal 0
3202 #define High 1
3203 uint32_t ThreadDispatchPriority;
3204 #define IEEE754 0
3205 #define Alternate 1
3206 uint32_t FloatingPointMode;
3207 #define RTNE 0
3208 #define RU 1
3209 #define RD 2
3210 #define RTZ 3
3211 uint32_t RoundingMode;
3212 uint32_t IllegalOpcodeExceptionEnable;
3213 uint32_t MaskStackExceptionEnable;
3214 uint32_t SoftwareExceptionEnable;
3215 uint32_t ScratchSpaceBasePointer;
3216 uint32_t PerThreadScratchSpace;
3217 uint32_t MaximumNumberofThreadsPerPSD;
3218 uint32_t PushConstantEnable;
3219 uint32_t RenderTargetFastClearEnable;
3220 uint32_t RenderTargetResolveEnable;
3221 #define POSOFFSET_NONE 0
3222 #define POSOFFSET_CENTROID 2
3223 #define POSOFFSET_SAMPLE 3
3224 uint32_t PositionXYOffsetSelect;
3225 uint32_t _32PixelDispatchEnable;
3226 uint32_t _16PixelDispatchEnable;
3227 uint32_t _8PixelDispatchEnable;
3228 uint32_t DispatchGRFStartRegisterForConstantSetupData0;
3229 uint32_t DispatchGRFStartRegisterForConstantSetupData1;
3230 uint32_t DispatchGRFStartRegisterForConstantSetupData2;
3231 uint32_t KernelStartPointer1;
3232 uint32_t KernelStartPointer2;
3233 };
3234
3235 static inline void
3236 GEN8_3DSTATE_PS_pack(__gen_user_data *data, void * restrict dst,
3237 const struct GEN8_3DSTATE_PS * restrict values)
3238 {
3239 uint32_t *dw = (uint32_t * restrict) dst;
3240
3241 dw[0] =
3242 __gen_field(values->CommandType, 29, 31) |
3243 __gen_field(values->CommandSubType, 27, 28) |
3244 __gen_field(values->_3DCommandOpcode, 24, 26) |
3245 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3246 __gen_field(values->DwordLength, 0, 7) |
3247 0;
3248
3249 dw[1] =
3250 __gen_offset(values->KernelStartPointer0, 6, 63) |
3251 0;
3252
3253 dw[3] =
3254 __gen_field(values->SingleProgramFlow, 31, 31) |
3255 __gen_field(values->VectorMaskEnable, 30, 30) |
3256 __gen_field(values->SamplerCount, 27, 29) |
3257 __gen_field(values->SinglePrecisionDenormalMode, 26, 26) |
3258 __gen_field(values->BindingTableEntryCount, 18, 25) |
3259 __gen_field(values->ThreadDispatchPriority, 17, 17) |
3260 __gen_field(values->FloatingPointMode, 16, 16) |
3261 __gen_field(values->RoundingMode, 14, 15) |
3262 __gen_field(values->IllegalOpcodeExceptionEnable, 13, 13) |
3263 __gen_field(values->MaskStackExceptionEnable, 11, 11) |
3264 __gen_field(values->SoftwareExceptionEnable, 7, 7) |
3265 0;
3266
3267 dw[4] =
3268 __gen_offset(values->ScratchSpaceBasePointer, 10, 63) |
3269 __gen_field(values->PerThreadScratchSpace, 0, 3) |
3270 0;
3271
3272 dw[6] =
3273 __gen_field(values->MaximumNumberofThreadsPerPSD, 23, 31) |
3274 __gen_field(values->PushConstantEnable, 11, 11) |
3275 __gen_field(values->RenderTargetFastClearEnable, 8, 8) |
3276 __gen_field(values->RenderTargetResolveEnable, 6, 6) |
3277 __gen_field(values->PositionXYOffsetSelect, 3, 4) |
3278 __gen_field(values->_32PixelDispatchEnable, 2, 2) |
3279 __gen_field(values->_16PixelDispatchEnable, 1, 1) |
3280 __gen_field(values->_8PixelDispatchEnable, 0, 0) |
3281 0;
3282
3283 dw[7] =
3284 __gen_field(values->DispatchGRFStartRegisterForConstantSetupData0, 16, 22) |
3285 __gen_field(values->DispatchGRFStartRegisterForConstantSetupData1, 8, 14) |
3286 __gen_field(values->DispatchGRFStartRegisterForConstantSetupData2, 0, 6) |
3287 0;
3288
3289 dw[8] =
3290 __gen_offset(values->KernelStartPointer1, 6, 63) |
3291 0;
3292
3293 dw[10] =
3294 __gen_offset(values->KernelStartPointer2, 6, 63) |
3295 0;
3296
3297 }
3298
3299 #define GEN8_3DSTATE_PS_BLEND_length 0x00000002
3300 #define GEN8_3DSTATE_PS_BLEND_length_bias 0x00000002
3301 #define GEN8_3DSTATE_PS_BLEND_header \
3302 .CommandType = 3, \
3303 .CommandSubType = 3, \
3304 ._3DCommandOpcode = 0, \
3305 ._3DCommandSubOpcode = 77, \
3306 .DwordLength = 0
3307
3308 struct GEN8_3DSTATE_PS_BLEND {
3309 uint32_t CommandType;
3310 uint32_t CommandSubType;
3311 uint32_t _3DCommandOpcode;
3312 uint32_t _3DCommandSubOpcode;
3313 uint32_t DwordLength;
3314 uint32_t AlphaToCoverageEnable;
3315 uint32_t HasWriteableRT;
3316 uint32_t ColorBufferBlendEnable;
3317 uint32_t SourceAlphaBlendFactor;
3318 uint32_t DestinationAlphaBlendFactor;
3319 uint32_t SourceBlendFactor;
3320 uint32_t DestinationBlendFactor;
3321 uint32_t AlphaTestEnable;
3322 uint32_t IndependentAlphaBlendEnable;
3323 };
3324
3325 static inline void
3326 GEN8_3DSTATE_PS_BLEND_pack(__gen_user_data *data, void * restrict dst,
3327 const struct GEN8_3DSTATE_PS_BLEND * restrict values)
3328 {
3329 uint32_t *dw = (uint32_t * restrict) dst;
3330
3331 dw[0] =
3332 __gen_field(values->CommandType, 29, 31) |
3333 __gen_field(values->CommandSubType, 27, 28) |
3334 __gen_field(values->_3DCommandOpcode, 24, 26) |
3335 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3336 __gen_field(values->DwordLength, 0, 7) |
3337 0;
3338
3339 dw[1] =
3340 __gen_field(values->AlphaToCoverageEnable, 31, 31) |
3341 __gen_field(values->HasWriteableRT, 30, 30) |
3342 __gen_field(values->ColorBufferBlendEnable, 29, 29) |
3343 __gen_field(values->SourceAlphaBlendFactor, 24, 28) |
3344 __gen_field(values->DestinationAlphaBlendFactor, 19, 23) |
3345 __gen_field(values->SourceBlendFactor, 14, 18) |
3346 __gen_field(values->DestinationBlendFactor, 9, 13) |
3347 __gen_field(values->AlphaTestEnable, 8, 8) |
3348 __gen_field(values->IndependentAlphaBlendEnable, 7, 7) |
3349 0;
3350
3351 }
3352
3353 #define GEN8_3DSTATE_PS_EXTRA_length 0x00000002
3354 #define GEN8_3DSTATE_PS_EXTRA_length_bias 0x00000002
3355 #define GEN8_3DSTATE_PS_EXTRA_header \
3356 .CommandType = 3, \
3357 .CommandSubType = 3, \
3358 ._3DCommandOpcode = 0, \
3359 ._3DCommandSubOpcode = 79, \
3360 .DwordLength = 0
3361
3362 struct GEN8_3DSTATE_PS_EXTRA {
3363 uint32_t CommandType;
3364 uint32_t CommandSubType;
3365 uint32_t _3DCommandOpcode;
3366 uint32_t _3DCommandSubOpcode;
3367 uint32_t DwordLength;
3368 uint32_t PixelShaderValid;
3369 uint32_t PixelShaderDoesnotwritetoRT;
3370 uint32_t oMaskPresenttoRenderTarget;
3371 uint32_t PixelShaderKillsPixel;
3372 #define PSCDEPTH_OFF 0
3373 #define PSCDEPTH_ON 1
3374 #define PSCDEPTH_ON_GE 2
3375 #define PSCDEPTH_ON_LE 3
3376 uint32_t PixelShaderComputedDepthMode;
3377 uint32_t ForceComputedDepth;
3378 uint32_t PixelShaderUsesSourceDepth;
3379 uint32_t PixelShaderUsesSourceW;
3380 uint32_t Removed;
3381 uint32_t AttributeEnable;
3382 uint32_t PixelShaderDisablesAlphaToCoverage;
3383 uint32_t PixelShaderIsPerSample;
3384 uint32_t PixelShaderHasUAV;
3385 uint32_t PixelShaderUsesInputCoverageMask;
3386 };
3387
3388 static inline void
3389 GEN8_3DSTATE_PS_EXTRA_pack(__gen_user_data *data, void * restrict dst,
3390 const struct GEN8_3DSTATE_PS_EXTRA * restrict values)
3391 {
3392 uint32_t *dw = (uint32_t * restrict) dst;
3393
3394 dw[0] =
3395 __gen_field(values->CommandType, 29, 31) |
3396 __gen_field(values->CommandSubType, 27, 28) |
3397 __gen_field(values->_3DCommandOpcode, 24, 26) |
3398 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3399 __gen_field(values->DwordLength, 0, 7) |
3400 0;
3401
3402 dw[1] =
3403 __gen_field(values->PixelShaderValid, 31, 31) |
3404 __gen_field(values->PixelShaderDoesnotwritetoRT, 30, 30) |
3405 __gen_field(values->oMaskPresenttoRenderTarget, 29, 29) |
3406 __gen_field(values->PixelShaderKillsPixel, 28, 28) |
3407 __gen_field(values->PixelShaderComputedDepthMode, 26, 27) |
3408 __gen_field(values->ForceComputedDepth, 25, 25) |
3409 __gen_field(values->PixelShaderUsesSourceDepth, 24, 24) |
3410 __gen_field(values->PixelShaderUsesSourceW, 23, 23) |
3411 __gen_field(values->Removed, 17, 17) |
3412 __gen_field(values->AttributeEnable, 8, 8) |
3413 __gen_field(values->PixelShaderDisablesAlphaToCoverage, 7, 7) |
3414 __gen_field(values->PixelShaderIsPerSample, 6, 6) |
3415 __gen_field(values->PixelShaderHasUAV, 2, 2) |
3416 __gen_field(values->PixelShaderUsesInputCoverageMask, 1, 1) |
3417 0;
3418
3419 }
3420
3421 #define GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_DS_length 0x00000002
3422 #define GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_DS_length_bias 0x00000002
3423 #define GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_DS_header\
3424 .CommandType = 3, \
3425 .CommandSubType = 3, \
3426 ._3DCommandOpcode = 1, \
3427 ._3DCommandSubOpcode = 20, \
3428 .DwordLength = 0
3429
3430 struct GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_DS {
3431 uint32_t CommandType;
3432 uint32_t CommandSubType;
3433 uint32_t _3DCommandOpcode;
3434 uint32_t _3DCommandSubOpcode;
3435 uint32_t DwordLength;
3436 uint32_t ConstantBufferOffset;
3437 uint32_t ConstantBufferSize;
3438 };
3439
3440 static inline void
3441 GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_DS_pack(__gen_user_data *data, void * restrict dst,
3442 const struct GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_DS * restrict values)
3443 {
3444 uint32_t *dw = (uint32_t * restrict) dst;
3445
3446 dw[0] =
3447 __gen_field(values->CommandType, 29, 31) |
3448 __gen_field(values->CommandSubType, 27, 28) |
3449 __gen_field(values->_3DCommandOpcode, 24, 26) |
3450 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3451 __gen_field(values->DwordLength, 0, 7) |
3452 0;
3453
3454 dw[1] =
3455 __gen_field(values->ConstantBufferOffset, 16, 20) |
3456 __gen_field(values->ConstantBufferSize, 0, 5) |
3457 0;
3458
3459 }
3460
3461 #define GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_GS_length 0x00000002
3462 #define GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_GS_length_bias 0x00000002
3463 #define GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_GS_header\
3464 .CommandType = 3, \
3465 .CommandSubType = 3, \
3466 ._3DCommandOpcode = 1, \
3467 ._3DCommandSubOpcode = 21, \
3468 .DwordLength = 0
3469
3470 struct GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_GS {
3471 uint32_t CommandType;
3472 uint32_t CommandSubType;
3473 uint32_t _3DCommandOpcode;
3474 uint32_t _3DCommandSubOpcode;
3475 uint32_t DwordLength;
3476 uint32_t ConstantBufferOffset;
3477 uint32_t ConstantBufferSize;
3478 };
3479
3480 static inline void
3481 GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_GS_pack(__gen_user_data *data, void * restrict dst,
3482 const struct GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_GS * restrict values)
3483 {
3484 uint32_t *dw = (uint32_t * restrict) dst;
3485
3486 dw[0] =
3487 __gen_field(values->CommandType, 29, 31) |
3488 __gen_field(values->CommandSubType, 27, 28) |
3489 __gen_field(values->_3DCommandOpcode, 24, 26) |
3490 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3491 __gen_field(values->DwordLength, 0, 7) |
3492 0;
3493
3494 dw[1] =
3495 __gen_field(values->ConstantBufferOffset, 16, 20) |
3496 __gen_field(values->ConstantBufferSize, 0, 5) |
3497 0;
3498
3499 }
3500
3501 #define GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_HS_length 0x00000002
3502 #define GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_HS_length_bias 0x00000002
3503 #define GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_HS_header\
3504 .CommandType = 3, \
3505 .CommandSubType = 3, \
3506 ._3DCommandOpcode = 1, \
3507 ._3DCommandSubOpcode = 19, \
3508 .DwordLength = 0
3509
3510 struct GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_HS {
3511 uint32_t CommandType;
3512 uint32_t CommandSubType;
3513 uint32_t _3DCommandOpcode;
3514 uint32_t _3DCommandSubOpcode;
3515 uint32_t DwordLength;
3516 uint32_t ConstantBufferOffset;
3517 uint32_t ConstantBufferSize;
3518 };
3519
3520 static inline void
3521 GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_HS_pack(__gen_user_data *data, void * restrict dst,
3522 const struct GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_HS * restrict values)
3523 {
3524 uint32_t *dw = (uint32_t * restrict) dst;
3525
3526 dw[0] =
3527 __gen_field(values->CommandType, 29, 31) |
3528 __gen_field(values->CommandSubType, 27, 28) |
3529 __gen_field(values->_3DCommandOpcode, 24, 26) |
3530 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3531 __gen_field(values->DwordLength, 0, 7) |
3532 0;
3533
3534 dw[1] =
3535 __gen_field(values->ConstantBufferOffset, 16, 20) |
3536 __gen_field(values->ConstantBufferSize, 0, 5) |
3537 0;
3538
3539 }
3540
3541 #define GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_PS_length 0x00000002
3542 #define GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_PS_length_bias 0x00000002
3543 #define GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_PS_header\
3544 .CommandType = 3, \
3545 .CommandSubType = 3, \
3546 ._3DCommandOpcode = 1, \
3547 ._3DCommandSubOpcode = 22, \
3548 .DwordLength = 0
3549
3550 struct GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_PS {
3551 uint32_t CommandType;
3552 uint32_t CommandSubType;
3553 uint32_t _3DCommandOpcode;
3554 uint32_t _3DCommandSubOpcode;
3555 uint32_t DwordLength;
3556 uint32_t ConstantBufferOffset;
3557 uint32_t ConstantBufferSize;
3558 };
3559
3560 static inline void
3561 GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_PS_pack(__gen_user_data *data, void * restrict dst,
3562 const struct GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_PS * restrict values)
3563 {
3564 uint32_t *dw = (uint32_t * restrict) dst;
3565
3566 dw[0] =
3567 __gen_field(values->CommandType, 29, 31) |
3568 __gen_field(values->CommandSubType, 27, 28) |
3569 __gen_field(values->_3DCommandOpcode, 24, 26) |
3570 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3571 __gen_field(values->DwordLength, 0, 7) |
3572 0;
3573
3574 dw[1] =
3575 __gen_field(values->ConstantBufferOffset, 16, 20) |
3576 __gen_field(values->ConstantBufferSize, 0, 5) |
3577 0;
3578
3579 }
3580
3581 #define GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_VS_length 0x00000002
3582 #define GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_VS_length_bias 0x00000002
3583 #define GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_VS_header\
3584 .CommandType = 3, \
3585 .CommandSubType = 3, \
3586 ._3DCommandOpcode = 1, \
3587 ._3DCommandSubOpcode = 18, \
3588 .DwordLength = 0
3589
3590 struct GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_VS {
3591 uint32_t CommandType;
3592 uint32_t CommandSubType;
3593 uint32_t _3DCommandOpcode;
3594 uint32_t _3DCommandSubOpcode;
3595 uint32_t DwordLength;
3596 uint32_t ConstantBufferOffset;
3597 uint32_t ConstantBufferSize;
3598 };
3599
3600 static inline void
3601 GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_VS_pack(__gen_user_data *data, void * restrict dst,
3602 const struct GEN8_3DSTATE_PUSH_CONSTANT_ALLOC_VS * restrict values)
3603 {
3604 uint32_t *dw = (uint32_t * restrict) dst;
3605
3606 dw[0] =
3607 __gen_field(values->CommandType, 29, 31) |
3608 __gen_field(values->CommandSubType, 27, 28) |
3609 __gen_field(values->_3DCommandOpcode, 24, 26) |
3610 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3611 __gen_field(values->DwordLength, 0, 7) |
3612 0;
3613
3614 dw[1] =
3615 __gen_field(values->ConstantBufferOffset, 16, 20) |
3616 __gen_field(values->ConstantBufferSize, 0, 5) |
3617 0;
3618
3619 }
3620
3621 #define GEN8_3DSTATE_RASTER_length 0x00000005
3622 #define GEN8_3DSTATE_RASTER_length_bias 0x00000002
3623 #define GEN8_3DSTATE_RASTER_header \
3624 .CommandType = 3, \
3625 .CommandSubType = 3, \
3626 ._3DCommandOpcode = 0, \
3627 ._3DCommandSubOpcode = 80, \
3628 .DwordLength = 3
3629
3630 struct GEN8_3DSTATE_RASTER {
3631 uint32_t CommandType;
3632 uint32_t CommandSubType;
3633 uint32_t _3DCommandOpcode;
3634 uint32_t _3DCommandSubOpcode;
3635 uint32_t DwordLength;
3636 #define DX9OGL 0
3637 #define DX100 1
3638 #define DX101 2
3639 uint32_t APIMode;
3640 #define Clockwise 0
3641 #define CounterClockwise 1
3642 uint32_t FrontWinding;
3643 #define FSC_NUMRASTSAMPLES_0 0
3644 #define FSC_NUMRASTSAMPLES_1 1
3645 #define FSC_NUMRASTSAMPLES_2 2
3646 #define FSC_NUMRASTSAMPLES_4 3
3647 #define FSC_NUMRASTSAMPLES_8 4
3648 #define FSC_NUMRASTSAMPLES_16 5
3649 uint32_t ForcedSampleCount;
3650 #define CULLMODE_BOTH 0
3651 #define CULLMODE_NONE 1
3652 #define CULLMODE_FRONT 2
3653 #define CULLMODE_BACK 3
3654 uint32_t CullMode;
3655 #define Normal 0
3656 #define Force 1
3657 uint32_t ForceMultisampling;
3658 uint32_t SmoothPointEnable;
3659 uint32_t DXMultisampleRasterizationEnable;
3660 #define MSRASTMODE_OFF_PIXEL 0
3661 #define MSRASTMODE_OFF_PATTERN 1
3662 #define MSRASTMODE_ON_PIXEL 2
3663 #define MSRASTMODE_ON_PATTERN 3
3664 uint32_t DXMultisampleRasterizationMode;
3665 uint32_t GlobalDepthOffsetEnableSolid;
3666 uint32_t GlobalDepthOffsetEnableWireframe;
3667 uint32_t GlobalDepthOffsetEnablePoint;
3668 #define RASTER_SOLID 0
3669 #define RASTER_WIREFRAME 1
3670 #define RASTER_POINT 2
3671 uint32_t FrontFaceFillMode;
3672 #define RASTER_SOLID 0
3673 #define RASTER_WIREFRAME 1
3674 #define RASTER_POINT 2
3675 uint32_t BackFaceFillMode;
3676 uint32_t AntialiasingEnable;
3677 uint32_t ScissorRectangleEnable;
3678 uint32_t ViewportZClipTestEnable;
3679 float GlobalDepthOffsetConstant;
3680 float GlobalDepthOffsetScale;
3681 float GlobalDepthOffsetClamp;
3682 };
3683
3684 static inline void
3685 GEN8_3DSTATE_RASTER_pack(__gen_user_data *data, void * restrict dst,
3686 const struct GEN8_3DSTATE_RASTER * restrict values)
3687 {
3688 uint32_t *dw = (uint32_t * restrict) dst;
3689
3690 dw[0] =
3691 __gen_field(values->CommandType, 29, 31) |
3692 __gen_field(values->CommandSubType, 27, 28) |
3693 __gen_field(values->_3DCommandOpcode, 24, 26) |
3694 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3695 __gen_field(values->DwordLength, 0, 7) |
3696 0;
3697
3698 dw[1] =
3699 __gen_field(values->APIMode, 22, 23) |
3700 __gen_field(values->FrontWinding, 21, 21) |
3701 __gen_field(values->ForcedSampleCount, 18, 20) |
3702 __gen_field(values->CullMode, 16, 17) |
3703 __gen_field(values->ForceMultisampling, 14, 14) |
3704 __gen_field(values->SmoothPointEnable, 13, 13) |
3705 __gen_field(values->DXMultisampleRasterizationEnable, 12, 12) |
3706 __gen_field(values->DXMultisampleRasterizationMode, 10, 11) |
3707 __gen_field(values->GlobalDepthOffsetEnableSolid, 9, 9) |
3708 __gen_field(values->GlobalDepthOffsetEnableWireframe, 8, 8) |
3709 __gen_field(values->GlobalDepthOffsetEnablePoint, 7, 7) |
3710 __gen_field(values->FrontFaceFillMode, 5, 6) |
3711 __gen_field(values->BackFaceFillMode, 3, 4) |
3712 __gen_field(values->AntialiasingEnable, 2, 2) |
3713 __gen_field(values->ScissorRectangleEnable, 1, 1) |
3714 __gen_field(values->ViewportZClipTestEnable, 0, 0) |
3715 0;
3716
3717 dw[2] =
3718 __gen_float(values->GlobalDepthOffsetConstant) |
3719 0;
3720
3721 dw[3] =
3722 __gen_float(values->GlobalDepthOffsetScale) |
3723 0;
3724
3725 dw[4] =
3726 __gen_float(values->GlobalDepthOffsetClamp) |
3727 0;
3728
3729 }
3730
3731 #define GEN8_3DSTATE_SAMPLER_PALETTE_LOAD0_length_bias 0x00000002
3732 #define GEN8_3DSTATE_SAMPLER_PALETTE_LOAD0_header\
3733 .CommandType = 3, \
3734 .CommandSubType = 3, \
3735 ._3DCommandOpcode = 1, \
3736 ._3DCommandSubOpcode = 2
3737
3738 struct GEN8_PALETTE_ENTRY {
3739 uint32_t Alpha;
3740 uint32_t Red;
3741 uint32_t Green;
3742 uint32_t Blue;
3743 };
3744
3745 static inline void
3746 GEN8_PALETTE_ENTRY_pack(__gen_user_data *data, void * restrict dst,
3747 const struct GEN8_PALETTE_ENTRY * restrict values)
3748 {
3749 uint32_t *dw = (uint32_t * restrict) dst;
3750
3751 dw[0] =
3752 __gen_field(values->Alpha, 24, 31) |
3753 __gen_field(values->Red, 16, 23) |
3754 __gen_field(values->Green, 8, 15) |
3755 __gen_field(values->Blue, 0, 7) |
3756 0;
3757
3758 }
3759
3760 struct GEN8_3DSTATE_SAMPLER_PALETTE_LOAD0 {
3761 uint32_t CommandType;
3762 uint32_t CommandSubType;
3763 uint32_t _3DCommandOpcode;
3764 uint32_t _3DCommandSubOpcode;
3765 uint32_t DwordLength;
3766 /* variable length fields follow */
3767 };
3768
3769 static inline void
3770 GEN8_3DSTATE_SAMPLER_PALETTE_LOAD0_pack(__gen_user_data *data, void * restrict dst,
3771 const struct GEN8_3DSTATE_SAMPLER_PALETTE_LOAD0 * restrict values)
3772 {
3773 uint32_t *dw = (uint32_t * restrict) dst;
3774
3775 dw[0] =
3776 __gen_field(values->CommandType, 29, 31) |
3777 __gen_field(values->CommandSubType, 27, 28) |
3778 __gen_field(values->_3DCommandOpcode, 24, 26) |
3779 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3780 __gen_field(values->DwordLength, 0, 7) |
3781 0;
3782
3783 /* variable length fields follow */
3784 }
3785
3786 #define GEN8_3DSTATE_SAMPLER_PALETTE_LOAD1_length_bias 0x00000002
3787 #define GEN8_3DSTATE_SAMPLER_PALETTE_LOAD1_header\
3788 .CommandType = 3, \
3789 .CommandSubType = 3, \
3790 ._3DCommandOpcode = 1, \
3791 ._3DCommandSubOpcode = 12
3792
3793 struct GEN8_3DSTATE_SAMPLER_PALETTE_LOAD1 {
3794 uint32_t CommandType;
3795 uint32_t CommandSubType;
3796 uint32_t _3DCommandOpcode;
3797 uint32_t _3DCommandSubOpcode;
3798 uint32_t DwordLength;
3799 /* variable length fields follow */
3800 };
3801
3802 static inline void
3803 GEN8_3DSTATE_SAMPLER_PALETTE_LOAD1_pack(__gen_user_data *data, void * restrict dst,
3804 const struct GEN8_3DSTATE_SAMPLER_PALETTE_LOAD1 * restrict values)
3805 {
3806 uint32_t *dw = (uint32_t * restrict) dst;
3807
3808 dw[0] =
3809 __gen_field(values->CommandType, 29, 31) |
3810 __gen_field(values->CommandSubType, 27, 28) |
3811 __gen_field(values->_3DCommandOpcode, 24, 26) |
3812 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3813 __gen_field(values->DwordLength, 0, 7) |
3814 0;
3815
3816 /* variable length fields follow */
3817 }
3818
3819 #define GEN8_3DSTATE_SAMPLER_STATE_POINTERS_DS_length 0x00000002
3820 #define GEN8_3DSTATE_SAMPLER_STATE_POINTERS_DS_length_bias 0x00000002
3821 #define GEN8_3DSTATE_SAMPLER_STATE_POINTERS_DS_header\
3822 .CommandType = 3, \
3823 .CommandSubType = 3, \
3824 ._3DCommandOpcode = 0, \
3825 ._3DCommandSubOpcode = 45, \
3826 .DwordLength = 0
3827
3828 struct GEN8_3DSTATE_SAMPLER_STATE_POINTERS_DS {
3829 uint32_t CommandType;
3830 uint32_t CommandSubType;
3831 uint32_t _3DCommandOpcode;
3832 uint32_t _3DCommandSubOpcode;
3833 uint32_t DwordLength;
3834 uint32_t PointertoDSSamplerState;
3835 };
3836
3837 static inline void
3838 GEN8_3DSTATE_SAMPLER_STATE_POINTERS_DS_pack(__gen_user_data *data, void * restrict dst,
3839 const struct GEN8_3DSTATE_SAMPLER_STATE_POINTERS_DS * restrict values)
3840 {
3841 uint32_t *dw = (uint32_t * restrict) dst;
3842
3843 dw[0] =
3844 __gen_field(values->CommandType, 29, 31) |
3845 __gen_field(values->CommandSubType, 27, 28) |
3846 __gen_field(values->_3DCommandOpcode, 24, 26) |
3847 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3848 __gen_field(values->DwordLength, 0, 7) |
3849 0;
3850
3851 dw[1] =
3852 __gen_offset(values->PointertoDSSamplerState, 5, 31) |
3853 0;
3854
3855 }
3856
3857 #define GEN8_3DSTATE_SAMPLER_STATE_POINTERS_GS_length 0x00000002
3858 #define GEN8_3DSTATE_SAMPLER_STATE_POINTERS_GS_length_bias 0x00000002
3859 #define GEN8_3DSTATE_SAMPLER_STATE_POINTERS_GS_header\
3860 .CommandType = 3, \
3861 .CommandSubType = 3, \
3862 ._3DCommandOpcode = 0, \
3863 ._3DCommandSubOpcode = 46, \
3864 .DwordLength = 0
3865
3866 struct GEN8_3DSTATE_SAMPLER_STATE_POINTERS_GS {
3867 uint32_t CommandType;
3868 uint32_t CommandSubType;
3869 uint32_t _3DCommandOpcode;
3870 uint32_t _3DCommandSubOpcode;
3871 uint32_t DwordLength;
3872 uint32_t PointertoGSSamplerState;
3873 };
3874
3875 static inline void
3876 GEN8_3DSTATE_SAMPLER_STATE_POINTERS_GS_pack(__gen_user_data *data, void * restrict dst,
3877 const struct GEN8_3DSTATE_SAMPLER_STATE_POINTERS_GS * restrict values)
3878 {
3879 uint32_t *dw = (uint32_t * restrict) dst;
3880
3881 dw[0] =
3882 __gen_field(values->CommandType, 29, 31) |
3883 __gen_field(values->CommandSubType, 27, 28) |
3884 __gen_field(values->_3DCommandOpcode, 24, 26) |
3885 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3886 __gen_field(values->DwordLength, 0, 7) |
3887 0;
3888
3889 dw[1] =
3890 __gen_offset(values->PointertoGSSamplerState, 5, 31) |
3891 0;
3892
3893 }
3894
3895 #define GEN8_3DSTATE_SAMPLER_STATE_POINTERS_HS_length 0x00000002
3896 #define GEN8_3DSTATE_SAMPLER_STATE_POINTERS_HS_length_bias 0x00000002
3897 #define GEN8_3DSTATE_SAMPLER_STATE_POINTERS_HS_header\
3898 .CommandType = 3, \
3899 .CommandSubType = 3, \
3900 ._3DCommandOpcode = 0, \
3901 ._3DCommandSubOpcode = 44, \
3902 .DwordLength = 0
3903
3904 struct GEN8_3DSTATE_SAMPLER_STATE_POINTERS_HS {
3905 uint32_t CommandType;
3906 uint32_t CommandSubType;
3907 uint32_t _3DCommandOpcode;
3908 uint32_t _3DCommandSubOpcode;
3909 uint32_t DwordLength;
3910 uint32_t PointertoHSSamplerState;
3911 };
3912
3913 static inline void
3914 GEN8_3DSTATE_SAMPLER_STATE_POINTERS_HS_pack(__gen_user_data *data, void * restrict dst,
3915 const struct GEN8_3DSTATE_SAMPLER_STATE_POINTERS_HS * restrict values)
3916 {
3917 uint32_t *dw = (uint32_t * restrict) dst;
3918
3919 dw[0] =
3920 __gen_field(values->CommandType, 29, 31) |
3921 __gen_field(values->CommandSubType, 27, 28) |
3922 __gen_field(values->_3DCommandOpcode, 24, 26) |
3923 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3924 __gen_field(values->DwordLength, 0, 7) |
3925 0;
3926
3927 dw[1] =
3928 __gen_offset(values->PointertoHSSamplerState, 5, 31) |
3929 0;
3930
3931 }
3932
3933 #define GEN8_3DSTATE_SAMPLER_STATE_POINTERS_PS_length 0x00000002
3934 #define GEN8_3DSTATE_SAMPLER_STATE_POINTERS_PS_length_bias 0x00000002
3935 #define GEN8_3DSTATE_SAMPLER_STATE_POINTERS_PS_header\
3936 .CommandType = 3, \
3937 .CommandSubType = 3, \
3938 ._3DCommandOpcode = 0, \
3939 ._3DCommandSubOpcode = 47, \
3940 .DwordLength = 0
3941
3942 struct GEN8_3DSTATE_SAMPLER_STATE_POINTERS_PS {
3943 uint32_t CommandType;
3944 uint32_t CommandSubType;
3945 uint32_t _3DCommandOpcode;
3946 uint32_t _3DCommandSubOpcode;
3947 uint32_t DwordLength;
3948 uint32_t PointertoPSSamplerState;
3949 };
3950
3951 static inline void
3952 GEN8_3DSTATE_SAMPLER_STATE_POINTERS_PS_pack(__gen_user_data *data, void * restrict dst,
3953 const struct GEN8_3DSTATE_SAMPLER_STATE_POINTERS_PS * restrict values)
3954 {
3955 uint32_t *dw = (uint32_t * restrict) dst;
3956
3957 dw[0] =
3958 __gen_field(values->CommandType, 29, 31) |
3959 __gen_field(values->CommandSubType, 27, 28) |
3960 __gen_field(values->_3DCommandOpcode, 24, 26) |
3961 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
3962 __gen_field(values->DwordLength, 0, 7) |
3963 0;
3964
3965 dw[1] =
3966 __gen_offset(values->PointertoPSSamplerState, 5, 31) |
3967 0;
3968
3969 }
3970
3971 #define GEN8_3DSTATE_SAMPLER_STATE_POINTERS_VS_length 0x00000002
3972 #define GEN8_3DSTATE_SAMPLER_STATE_POINTERS_VS_length_bias 0x00000002
3973 #define GEN8_3DSTATE_SAMPLER_STATE_POINTERS_VS_header\
3974 .CommandType = 3, \
3975 .CommandSubType = 3, \
3976 ._3DCommandOpcode = 0, \
3977 ._3DCommandSubOpcode = 43, \
3978 .DwordLength = 0
3979
3980 struct GEN8_3DSTATE_SAMPLER_STATE_POINTERS_VS {
3981 uint32_t CommandType;
3982 uint32_t CommandSubType;
3983 uint32_t _3DCommandOpcode;
3984 uint32_t _3DCommandSubOpcode;
3985 uint32_t DwordLength;
3986 uint32_t PointertoVSSamplerState;
3987 };
3988
3989 static inline void
3990 GEN8_3DSTATE_SAMPLER_STATE_POINTERS_VS_pack(__gen_user_data *data, void * restrict dst,
3991 const struct GEN8_3DSTATE_SAMPLER_STATE_POINTERS_VS * restrict values)
3992 {
3993 uint32_t *dw = (uint32_t * restrict) dst;
3994
3995 dw[0] =
3996 __gen_field(values->CommandType, 29, 31) |
3997 __gen_field(values->CommandSubType, 27, 28) |
3998 __gen_field(values->_3DCommandOpcode, 24, 26) |
3999 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
4000 __gen_field(values->DwordLength, 0, 7) |
4001 0;
4002
4003 dw[1] =
4004 __gen_offset(values->PointertoVSSamplerState, 5, 31) |
4005 0;
4006
4007 }
4008
4009 #define GEN8_3DSTATE_SAMPLE_MASK_length 0x00000002
4010 #define GEN8_3DSTATE_SAMPLE_MASK_length_bias 0x00000002
4011 #define GEN8_3DSTATE_SAMPLE_MASK_header \
4012 .CommandType = 3, \
4013 .CommandSubType = 3, \
4014 ._3DCommandOpcode = 0, \
4015 ._3DCommandSubOpcode = 24, \
4016 .DwordLength = 0
4017
4018 struct GEN8_3DSTATE_SAMPLE_MASK {
4019 uint32_t CommandType;
4020 uint32_t CommandSubType;
4021 uint32_t _3DCommandOpcode;
4022 uint32_t _3DCommandSubOpcode;
4023 uint32_t DwordLength;
4024 uint32_t SampleMask;
4025 };
4026
4027 static inline void
4028 GEN8_3DSTATE_SAMPLE_MASK_pack(__gen_user_data *data, void * restrict dst,
4029 const struct GEN8_3DSTATE_SAMPLE_MASK * restrict values)
4030 {
4031 uint32_t *dw = (uint32_t * restrict) dst;
4032
4033 dw[0] =
4034 __gen_field(values->CommandType, 29, 31) |
4035 __gen_field(values->CommandSubType, 27, 28) |
4036 __gen_field(values->_3DCommandOpcode, 24, 26) |
4037 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
4038 __gen_field(values->DwordLength, 0, 7) |
4039 0;
4040
4041 dw[1] =
4042 __gen_field(values->SampleMask, 0, 15) |
4043 0;
4044
4045 }
4046
4047 #define GEN8_3DSTATE_SAMPLE_PATTERN_length 0x00000009
4048 #define GEN8_3DSTATE_SAMPLE_PATTERN_length_bias 0x00000002
4049 #define GEN8_3DSTATE_SAMPLE_PATTERN_header \
4050 .CommandType = 3, \
4051 .CommandSubType = 3, \
4052 ._3DCommandOpcode = 1, \
4053 ._3DCommandSubOpcode = 28, \
4054 .DwordLength = 7
4055
4056 struct GEN8_3DSTATE_SAMPLE_PATTERN {
4057 uint32_t CommandType;
4058 uint32_t CommandSubType;
4059 uint32_t _3DCommandOpcode;
4060 uint32_t _3DCommandSubOpcode;
4061 uint32_t DwordLength;
4062 uint32_t _8xSample7XOffset;
4063 uint32_t _8xSample7YOffset;
4064 uint32_t _8xSample6XOffset;
4065 uint32_t _8xSample6YOffset;
4066 uint32_t _8xSample5XOffset;
4067 uint32_t _8xSample5YOffset;
4068 uint32_t _8xSample4XOffset;
4069 uint32_t _8xSample4YOffset;
4070 uint32_t _8xSample3XOffset;
4071 uint32_t _8xSample3YOffset;
4072 uint32_t _8xSample2XOffset;
4073 uint32_t _8xSample2YOffset;
4074 uint32_t _8xSample1XOffset;
4075 uint32_t _8xSample1YOffset;
4076 uint32_t _8xSample0XOffset;
4077 uint32_t _8xSample0YOffset;
4078 uint32_t _4xSample3XOffset;
4079 uint32_t _4xSample3YOffset;
4080 uint32_t _4xSample2XOffset;
4081 uint32_t _4xSample2YOffset;
4082 uint32_t _4xSample1XOffset;
4083 uint32_t _4xSample1YOffset;
4084 uint32_t _4xSample0XOffset;
4085 uint32_t _4xSample0YOffset;
4086 uint32_t _1xSample0XOffset;
4087 uint32_t _1xSample0YOffset;
4088 uint32_t _2xSample1XOffset;
4089 uint32_t _2xSample1YOffset;
4090 uint32_t _2xSample0XOffset;
4091 uint32_t _2xSample0YOffset;
4092 };
4093
4094 static inline void
4095 GEN8_3DSTATE_SAMPLE_PATTERN_pack(__gen_user_data *data, void * restrict dst,
4096 const struct GEN8_3DSTATE_SAMPLE_PATTERN * restrict values)
4097 {
4098 uint32_t *dw = (uint32_t * restrict) dst;
4099
4100 dw[0] =
4101 __gen_field(values->CommandType, 29, 31) |
4102 __gen_field(values->CommandSubType, 27, 28) |
4103 __gen_field(values->_3DCommandOpcode, 24, 26) |
4104 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
4105 __gen_field(values->DwordLength, 0, 7) |
4106 0;
4107
4108 dw[1] =
4109 0;
4110
4111 dw[5] =
4112 __gen_field(values->_8xSample7XOffset, 28, 31) |
4113 __gen_field(values->_8xSample7YOffset, 24, 27) |
4114 __gen_field(values->_8xSample6XOffset, 20, 23) |
4115 __gen_field(values->_8xSample6YOffset, 16, 19) |
4116 __gen_field(values->_8xSample5XOffset, 12, 15) |
4117 __gen_field(values->_8xSample5YOffset, 8, 11) |
4118 __gen_field(values->_8xSample4XOffset, 4, 7) |
4119 __gen_field(values->_8xSample4YOffset, 0, 3) |
4120 0;
4121
4122 dw[6] =
4123 __gen_field(values->_8xSample3XOffset, 28, 31) |
4124 __gen_field(values->_8xSample3YOffset, 24, 27) |
4125 __gen_field(values->_8xSample2XOffset, 20, 23) |
4126 __gen_field(values->_8xSample2YOffset, 16, 19) |
4127 __gen_field(values->_8xSample1XOffset, 12, 15) |
4128 __gen_field(values->_8xSample1YOffset, 8, 11) |
4129 __gen_field(values->_8xSample0XOffset, 4, 7) |
4130 __gen_field(values->_8xSample0YOffset, 0, 3) |
4131 0;
4132
4133 dw[7] =
4134 __gen_field(values->_4xSample3XOffset, 28, 31) |
4135 __gen_field(values->_4xSample3YOffset, 24, 27) |
4136 __gen_field(values->_4xSample2XOffset, 20, 23) |
4137 __gen_field(values->_4xSample2YOffset, 16, 19) |
4138 __gen_field(values->_4xSample1XOffset, 12, 15) |
4139 __gen_field(values->_4xSample1YOffset, 8, 11) |
4140 __gen_field(values->_4xSample0XOffset, 4, 7) |
4141 __gen_field(values->_4xSample0YOffset, 0, 3) |
4142 0;
4143
4144 dw[8] =
4145 __gen_field(values->_1xSample0XOffset, 20, 23) |
4146 __gen_field(values->_1xSample0YOffset, 16, 19) |
4147 __gen_field(values->_2xSample1XOffset, 12, 15) |
4148 __gen_field(values->_2xSample1YOffset, 8, 11) |
4149 __gen_field(values->_2xSample0XOffset, 4, 7) |
4150 __gen_field(values->_2xSample0YOffset, 0, 3) |
4151 0;
4152
4153 }
4154
4155 #define GEN8_3DSTATE_SBE_length 0x00000004
4156 #define GEN8_3DSTATE_SBE_length_bias 0x00000002
4157 #define GEN8_3DSTATE_SBE_header \
4158 .CommandType = 3, \
4159 .CommandSubType = 3, \
4160 ._3DCommandOpcode = 0, \
4161 ._3DCommandSubOpcode = 31, \
4162 .DwordLength = 2
4163
4164 struct GEN8_3DSTATE_SBE {
4165 uint32_t CommandType;
4166 uint32_t CommandSubType;
4167 uint32_t _3DCommandOpcode;
4168 uint32_t _3DCommandSubOpcode;
4169 uint32_t DwordLength;
4170 uint32_t ForceVertexURBEntryReadLength;
4171 uint32_t ForceVertexURBEntryReadOffset;
4172 uint32_t NumberofSFOutputAttributes;
4173 uint32_t AttributeSwizzleEnable;
4174 #define UPPERLEFT 0
4175 #define LOWERLEFT 1
4176 uint32_t PointSpriteTextureCoordinateOrigin;
4177 uint32_t PrimitiveIDOverrideComponentW;
4178 uint32_t PrimitiveIDOverrideComponentZ;
4179 uint32_t PrimitiveIDOverrideComponentY;
4180 uint32_t PrimitiveIDOverrideComponentX;
4181 uint32_t VertexURBEntryReadLength;
4182 uint32_t VertexURBEntryReadOffset;
4183 uint32_t PrimitiveIDOverrideAttributeSelect;
4184 uint32_t PointSpriteTextureCoordinateEnable;
4185 uint32_t ConstantInterpolationEnable;
4186 };
4187
4188 static inline void
4189 GEN8_3DSTATE_SBE_pack(__gen_user_data *data, void * restrict dst,
4190 const struct GEN8_3DSTATE_SBE * restrict values)
4191 {
4192 uint32_t *dw = (uint32_t * restrict) dst;
4193
4194 dw[0] =
4195 __gen_field(values->CommandType, 29, 31) |
4196 __gen_field(values->CommandSubType, 27, 28) |
4197 __gen_field(values->_3DCommandOpcode, 24, 26) |
4198 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
4199 __gen_field(values->DwordLength, 0, 7) |
4200 0;
4201
4202 dw[1] =
4203 __gen_field(values->ForceVertexURBEntryReadLength, 29, 29) |
4204 __gen_field(values->ForceVertexURBEntryReadOffset, 28, 28) |
4205 __gen_field(values->NumberofSFOutputAttributes, 22, 27) |
4206 __gen_field(values->AttributeSwizzleEnable, 21, 21) |
4207 __gen_field(values->PointSpriteTextureCoordinateOrigin, 20, 20) |
4208 __gen_field(values->PrimitiveIDOverrideComponentW, 19, 19) |
4209 __gen_field(values->PrimitiveIDOverrideComponentZ, 18, 18) |
4210 __gen_field(values->PrimitiveIDOverrideComponentY, 17, 17) |
4211 __gen_field(values->PrimitiveIDOverrideComponentX, 16, 16) |
4212 __gen_field(values->VertexURBEntryReadLength, 11, 15) |
4213 __gen_field(values->VertexURBEntryReadOffset, 5, 10) |
4214 __gen_field(values->PrimitiveIDOverrideAttributeSelect, 0, 4) |
4215 0;
4216
4217 dw[2] =
4218 __gen_field(values->PointSpriteTextureCoordinateEnable, 0, 31) |
4219 0;
4220
4221 dw[3] =
4222 __gen_field(values->ConstantInterpolationEnable, 0, 31) |
4223 0;
4224
4225 }
4226
4227 #define GEN8_3DSTATE_SBE_SWIZ_length 0x0000000b
4228 #define GEN8_3DSTATE_SBE_SWIZ_length_bias 0x00000002
4229 #define GEN8_3DSTATE_SBE_SWIZ_header \
4230 .CommandType = 3, \
4231 .CommandSubType = 3, \
4232 ._3DCommandOpcode = 0, \
4233 ._3DCommandSubOpcode = 81, \
4234 .DwordLength = 9
4235
4236 struct GEN8_SF_OUTPUT_ATTRIBUTE_DETAIL {
4237 uint32_t ComponentOverrideW;
4238 uint32_t ComponentOverrideZ;
4239 uint32_t ComponentOverrideY;
4240 uint32_t ComponentOverrideX;
4241 uint32_t SwizzleControlMode;
4242 #define CONST_0000 0
4243 #define CONST_0001_FLOAT 1
4244 #define CONST_1111_FLOAT 2
4245 #define PRIM_ID 3
4246 uint32_t ConstantSource;
4247 #define INPUTATTR 0
4248 #define INPUTATTR_FACING 1
4249 #define INPUTATTR_W 2
4250 #define INPUTATTR_FACING_W 3
4251 uint32_t SwizzleSelect;
4252 uint32_t SourceAttribute;
4253 };
4254
4255 static inline void
4256 GEN8_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(__gen_user_data *data, void * restrict dst,
4257 const struct GEN8_SF_OUTPUT_ATTRIBUTE_DETAIL * restrict values)
4258 {
4259 uint32_t *dw = (uint32_t * restrict) dst;
4260
4261 dw[0] =
4262 __gen_field(values->ComponentOverrideW, 15, 15) |
4263 __gen_field(values->ComponentOverrideZ, 14, 14) |
4264 __gen_field(values->ComponentOverrideY, 13, 13) |
4265 __gen_field(values->ComponentOverrideX, 12, 12) |
4266 __gen_field(values->SwizzleControlMode, 11, 11) |
4267 __gen_field(values->ConstantSource, 9, 10) |
4268 __gen_field(values->SwizzleSelect, 6, 7) |
4269 __gen_field(values->SourceAttribute, 0, 4) |
4270 0;
4271
4272 }
4273
4274 struct GEN8_3DSTATE_SBE_SWIZ {
4275 uint32_t CommandType;
4276 uint32_t CommandSubType;
4277 uint32_t _3DCommandOpcode;
4278 uint32_t _3DCommandSubOpcode;
4279 uint32_t DwordLength;
4280 struct GEN8_SF_OUTPUT_ATTRIBUTE_DETAIL Attribute;
4281 uint32_t Attribute15WrapShortestEnables;
4282 uint32_t Attribute14WrapShortestEnables;
4283 uint32_t Attribute13WrapShortestEnables;
4284 uint32_t Attribute12WrapShortestEnables;
4285 uint32_t Attribute11WrapShortestEnables;
4286 uint32_t Attribute10WrapShortestEnables;
4287 uint32_t Attribute09WrapShortestEnables;
4288 uint32_t Attribute08WrapShortestEnables;
4289 uint32_t Attribute07WrapShortestEnables;
4290 uint32_t Attribute06WrapShortestEnables;
4291 uint32_t Attribute05WrapShortestEnables;
4292 uint32_t Attribute04WrapShortestEnables;
4293 uint32_t Attribute03WrapShortestEnables;
4294 uint32_t Attribute02WrapShortestEnables;
4295 uint32_t Attribute01WrapShortestEnables;
4296 uint32_t Attribute00WrapShortestEnables;
4297 };
4298
4299 static inline void
4300 GEN8_3DSTATE_SBE_SWIZ_pack(__gen_user_data *data, void * restrict dst,
4301 const struct GEN8_3DSTATE_SBE_SWIZ * restrict values)
4302 {
4303 uint32_t *dw = (uint32_t * restrict) dst;
4304
4305 dw[0] =
4306 __gen_field(values->CommandType, 29, 31) |
4307 __gen_field(values->CommandSubType, 27, 28) |
4308 __gen_field(values->_3DCommandOpcode, 24, 26) |
4309 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
4310 __gen_field(values->DwordLength, 0, 7) |
4311 0;
4312
4313 uint32_t dw_Attribute;
4314 GEN8_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &dw_Attribute, &values->Attribute);
4315 dw[1] =
4316 /* Struct Attribute (0..15): */
4317 __gen_field(dw_Attribute, 0, 15) |
4318 0;
4319
4320 GEN8_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &dw[1], &values->Attribute);
4321 dw[9] =
4322 __gen_field(values->Attribute15WrapShortestEnables, 60, 63) |
4323 __gen_field(values->Attribute14WrapShortestEnables, 56, 59) |
4324 __gen_field(values->Attribute13WrapShortestEnables, 52, 55) |
4325 __gen_field(values->Attribute12WrapShortestEnables, 48, 51) |
4326 __gen_field(values->Attribute11WrapShortestEnables, 44, 47) |
4327 __gen_field(values->Attribute10WrapShortestEnables, 40, 43) |
4328 __gen_field(values->Attribute09WrapShortestEnables, 36, 39) |
4329 __gen_field(values->Attribute08WrapShortestEnables, 32, 35) |
4330 __gen_field(values->Attribute07WrapShortestEnables, 28, 31) |
4331 __gen_field(values->Attribute06WrapShortestEnables, 24, 27) |
4332 __gen_field(values->Attribute05WrapShortestEnables, 20, 23) |
4333 __gen_field(values->Attribute04WrapShortestEnables, 16, 19) |
4334 __gen_field(values->Attribute03WrapShortestEnables, 12, 15) |
4335 __gen_field(values->Attribute02WrapShortestEnables, 8, 11) |
4336 __gen_field(values->Attribute01WrapShortestEnables, 4, 7) |
4337 __gen_field(values->Attribute00WrapShortestEnables, 0, 3) |
4338 0;
4339
4340 }
4341
4342 #define GEN8_3DSTATE_SCISSOR_STATE_POINTERS_length 0x00000002
4343 #define GEN8_3DSTATE_SCISSOR_STATE_POINTERS_length_bias 0x00000002
4344 #define GEN8_3DSTATE_SCISSOR_STATE_POINTERS_header\
4345 .CommandType = 3, \
4346 .CommandSubType = 3, \
4347 ._3DCommandOpcode = 0, \
4348 ._3DCommandSubOpcode = 15, \
4349 .DwordLength = 0
4350
4351 struct GEN8_3DSTATE_SCISSOR_STATE_POINTERS {
4352 uint32_t CommandType;
4353 uint32_t CommandSubType;
4354 uint32_t _3DCommandOpcode;
4355 uint32_t _3DCommandSubOpcode;
4356 uint32_t DwordLength;
4357 uint32_t ScissorRectPointer;
4358 };
4359
4360 static inline void
4361 GEN8_3DSTATE_SCISSOR_STATE_POINTERS_pack(__gen_user_data *data, void * restrict dst,
4362 const struct GEN8_3DSTATE_SCISSOR_STATE_POINTERS * restrict values)
4363 {
4364 uint32_t *dw = (uint32_t * restrict) dst;
4365
4366 dw[0] =
4367 __gen_field(values->CommandType, 29, 31) |
4368 __gen_field(values->CommandSubType, 27, 28) |
4369 __gen_field(values->_3DCommandOpcode, 24, 26) |
4370 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
4371 __gen_field(values->DwordLength, 0, 7) |
4372 0;
4373
4374 dw[1] =
4375 __gen_offset(values->ScissorRectPointer, 5, 31) |
4376 0;
4377
4378 }
4379
4380 #define GEN8_3DSTATE_SF_length 0x00000004
4381 #define GEN8_3DSTATE_SF_length_bias 0x00000002
4382 #define GEN8_3DSTATE_SF_header \
4383 .CommandType = 3, \
4384 .CommandSubType = 3, \
4385 ._3DCommandOpcode = 0, \
4386 ._3DCommandSubOpcode = 19, \
4387 .DwordLength = 2
4388
4389 struct GEN8_3DSTATE_SF {
4390 uint32_t CommandType;
4391 uint32_t CommandSubType;
4392 uint32_t _3DCommandOpcode;
4393 uint32_t _3DCommandSubOpcode;
4394 uint32_t DwordLength;
4395 uint32_t LegacyGlobalDepthBiasEnable;
4396 uint32_t StatisticsEnable;
4397 uint32_t ViewportTransformEnable;
4398 uint32_t LineWidth;
4399 #define _05pixels 0
4400 #define _10pixels 1
4401 #define _20pixels 2
4402 #define _40pixels 3
4403 uint32_t LineEndCapAntialiasingRegionWidth;
4404 uint32_t LastPixelEnable;
4405 uint32_t TriangleStripListProvokingVertexSelect;
4406 uint32_t LineStripListProvokingVertexSelect;
4407 uint32_t TriangleFanProvokingVertexSelect;
4408 #define AALINEDISTANCE_TRUE 1
4409 uint32_t AALineDistanceMode;
4410 uint32_t SmoothPointEnable;
4411 uint32_t VertexSubPixelPrecisionSelect;
4412 #define Vertex 0
4413 #define State 1
4414 uint32_t PointWidthSource;
4415 uint32_t PointWidth;
4416 };
4417
4418 static inline void
4419 GEN8_3DSTATE_SF_pack(__gen_user_data *data, void * restrict dst,
4420 const struct GEN8_3DSTATE_SF * restrict values)
4421 {
4422 uint32_t *dw = (uint32_t * restrict) dst;
4423
4424 dw[0] =
4425 __gen_field(values->CommandType, 29, 31) |
4426 __gen_field(values->CommandSubType, 27, 28) |
4427 __gen_field(values->_3DCommandOpcode, 24, 26) |
4428 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
4429 __gen_field(values->DwordLength, 0, 7) |
4430 0;
4431
4432 dw[1] =
4433 __gen_field(values->LegacyGlobalDepthBiasEnable, 11, 11) |
4434 __gen_field(values->StatisticsEnable, 10, 10) |
4435 __gen_field(values->ViewportTransformEnable, 1, 1) |
4436 0;
4437
4438 dw[2] =
4439 __gen_field(values->LineWidth, 18, 27) |
4440 __gen_field(values->LineEndCapAntialiasingRegionWidth, 16, 17) |
4441 0;
4442
4443 dw[3] =
4444 __gen_field(values->LastPixelEnable, 31, 31) |
4445 __gen_field(values->TriangleStripListProvokingVertexSelect, 29, 30) |
4446 __gen_field(values->LineStripListProvokingVertexSelect, 27, 28) |
4447 __gen_field(values->TriangleFanProvokingVertexSelect, 25, 26) |
4448 __gen_field(values->AALineDistanceMode, 14, 14) |
4449 __gen_field(values->SmoothPointEnable, 13, 13) |
4450 __gen_field(values->VertexSubPixelPrecisionSelect, 12, 12) |
4451 __gen_field(values->PointWidthSource, 11, 11) |
4452 __gen_field(values->PointWidth, 0, 10) |
4453 0;
4454
4455 }
4456
4457 #define GEN8_3DSTATE_SO_BUFFER_length 0x00000008
4458 #define GEN8_3DSTATE_SO_BUFFER_length_bias 0x00000002
4459 #define GEN8_3DSTATE_SO_BUFFER_header \
4460 .CommandType = 3, \
4461 .CommandSubType = 3, \
4462 ._3DCommandOpcode = 1, \
4463 ._3DCommandSubOpcode = 24, \
4464 .DwordLength = 6
4465
4466 struct GEN8_3DSTATE_SO_BUFFER {
4467 uint32_t CommandType;
4468 uint32_t CommandSubType;
4469 uint32_t _3DCommandOpcode;
4470 uint32_t _3DCommandSubOpcode;
4471 uint32_t DwordLength;
4472 uint32_t SOBufferEnable;
4473 uint32_t SOBufferIndex;
4474 struct GEN8_MEMORY_OBJECT_CONTROL_STATE SOBufferObjectControlState;
4475 uint32_t StreamOffsetWriteEnable;
4476 uint32_t StreamOutputBufferOffsetAddressEnable;
4477 __gen_address_type SurfaceBaseAddress;
4478 uint32_t SurfaceSize;
4479 __gen_address_type StreamOutputBufferOffsetAddress;
4480 uint32_t StreamOffset;
4481 };
4482
4483 static inline void
4484 GEN8_3DSTATE_SO_BUFFER_pack(__gen_user_data *data, void * restrict dst,
4485 const struct GEN8_3DSTATE_SO_BUFFER * restrict values)
4486 {
4487 uint32_t *dw = (uint32_t * restrict) dst;
4488
4489 dw[0] =
4490 __gen_field(values->CommandType, 29, 31) |
4491 __gen_field(values->CommandSubType, 27, 28) |
4492 __gen_field(values->_3DCommandOpcode, 24, 26) |
4493 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
4494 __gen_field(values->DwordLength, 0, 7) |
4495 0;
4496
4497 uint32_t dw_SOBufferObjectControlState;
4498 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_SOBufferObjectControlState, &values->SOBufferObjectControlState);
4499 dw[1] =
4500 __gen_field(values->SOBufferEnable, 31, 31) |
4501 __gen_field(values->SOBufferIndex, 29, 30) |
4502 /* Struct SOBufferObjectControlState (22..28): */
4503 __gen_field(dw_SOBufferObjectControlState, 22, 28) |
4504 __gen_field(values->StreamOffsetWriteEnable, 21, 21) |
4505 __gen_field(values->StreamOutputBufferOffsetAddressEnable, 20, 20) |
4506 0;
4507
4508 uint32_t dw2 =
4509 0;
4510
4511 dw[2] =
4512 __gen_combine_address(data, &dw[2], values->SurfaceBaseAddress, dw2);
4513
4514 dw[4] =
4515 __gen_field(values->SurfaceSize, 0, 29) |
4516 0;
4517
4518 uint32_t dw5 =
4519 0;
4520
4521 dw[5] =
4522 __gen_combine_address(data, &dw[5], values->StreamOutputBufferOffsetAddress, dw5);
4523
4524 dw[7] =
4525 __gen_field(values->StreamOffset, 0, 31) |
4526 0;
4527
4528 }
4529
4530 #define GEN8_3DSTATE_SO_DECL_LIST_length_bias 0x00000002
4531 #define GEN8_3DSTATE_SO_DECL_LIST_header \
4532 .CommandType = 3, \
4533 .CommandSubType = 3, \
4534 ._3DCommandOpcode = 1, \
4535 ._3DCommandSubOpcode = 23
4536
4537 struct GEN8_SO_DECL {
4538 uint32_t OutputBufferSlot;
4539 uint32_t HoleFlag;
4540 uint32_t RegisterIndex;
4541 uint32_t ComponentMask;
4542 };
4543
4544 static inline void
4545 GEN8_SO_DECL_pack(__gen_user_data *data, void * restrict dst,
4546 const struct GEN8_SO_DECL * restrict values)
4547 {
4548 uint32_t *dw = (uint32_t * restrict) dst;
4549
4550 dw[0] =
4551 __gen_field(values->OutputBufferSlot, 12, 13) |
4552 __gen_field(values->HoleFlag, 11, 11) |
4553 __gen_field(values->RegisterIndex, 4, 9) |
4554 __gen_field(values->ComponentMask, 0, 3) |
4555 0;
4556
4557 }
4558
4559 struct GEN8_SO_DECL_ENTRY {
4560 struct GEN8_SO_DECL Stream3Decl;
4561 struct GEN8_SO_DECL Stream2Decl;
4562 struct GEN8_SO_DECL Stream1Decl;
4563 struct GEN8_SO_DECL Stream0Decl;
4564 };
4565
4566 static inline void
4567 GEN8_SO_DECL_ENTRY_pack(__gen_user_data *data, void * restrict dst,
4568 const struct GEN8_SO_DECL_ENTRY * restrict values)
4569 {
4570 uint32_t *dw = (uint32_t * restrict) dst;
4571
4572 uint32_t dw_Stream3Decl;
4573 GEN8_SO_DECL_pack(data, &dw_Stream3Decl, &values->Stream3Decl);
4574 uint32_t dw_Stream2Decl;
4575 GEN8_SO_DECL_pack(data, &dw_Stream2Decl, &values->Stream2Decl);
4576 uint32_t dw_Stream1Decl;
4577 GEN8_SO_DECL_pack(data, &dw_Stream1Decl, &values->Stream1Decl);
4578 uint32_t dw_Stream0Decl;
4579 GEN8_SO_DECL_pack(data, &dw_Stream0Decl, &values->Stream0Decl);
4580 dw[0] =
4581 /* Struct Stream3Decl (48..63): */
4582 __gen_field(dw_Stream3Decl, 48, 63) |
4583 /* Struct Stream2Decl (32..47): */
4584 __gen_field(dw_Stream2Decl, 32, 47) |
4585 /* Struct Stream1Decl (16..31): */
4586 __gen_field(dw_Stream1Decl, 16, 31) |
4587 /* Struct Stream0Decl (0..15): */
4588 __gen_field(dw_Stream0Decl, 0, 15) |
4589 0;
4590
4591 GEN8_SO_DECL_pack(data, &dw[0], &values->Stream0Decl);
4592 }
4593
4594 struct GEN8_3DSTATE_SO_DECL_LIST {
4595 uint32_t CommandType;
4596 uint32_t CommandSubType;
4597 uint32_t _3DCommandOpcode;
4598 uint32_t _3DCommandSubOpcode;
4599 uint32_t DwordLength;
4600 uint32_t StreamtoBufferSelects3;
4601 uint32_t StreamtoBufferSelects2;
4602 uint32_t StreamtoBufferSelects1;
4603 uint32_t StreamtoBufferSelects0;
4604 uint32_t NumEntries3;
4605 uint32_t NumEntries2;
4606 uint32_t NumEntries1;
4607 uint32_t NumEntries0;
4608 /* variable length fields follow */
4609 };
4610
4611 static inline void
4612 GEN8_3DSTATE_SO_DECL_LIST_pack(__gen_user_data *data, void * restrict dst,
4613 const struct GEN8_3DSTATE_SO_DECL_LIST * restrict values)
4614 {
4615 uint32_t *dw = (uint32_t * restrict) dst;
4616
4617 dw[0] =
4618 __gen_field(values->CommandType, 29, 31) |
4619 __gen_field(values->CommandSubType, 27, 28) |
4620 __gen_field(values->_3DCommandOpcode, 24, 26) |
4621 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
4622 __gen_field(values->DwordLength, 0, 8) |
4623 0;
4624
4625 dw[1] =
4626 __gen_field(values->StreamtoBufferSelects3, 12, 15) |
4627 __gen_field(values->StreamtoBufferSelects2, 8, 11) |
4628 __gen_field(values->StreamtoBufferSelects1, 4, 7) |
4629 __gen_field(values->StreamtoBufferSelects0, 0, 3) |
4630 0;
4631
4632 dw[2] =
4633 __gen_field(values->NumEntries3, 24, 31) |
4634 __gen_field(values->NumEntries2, 16, 23) |
4635 __gen_field(values->NumEntries1, 8, 15) |
4636 __gen_field(values->NumEntries0, 0, 7) |
4637 0;
4638
4639 /* variable length fields follow */
4640 }
4641
4642 #define GEN8_3DSTATE_STENCIL_BUFFER_length 0x00000005
4643 #define GEN8_3DSTATE_STENCIL_BUFFER_length_bias 0x00000002
4644 #define GEN8_3DSTATE_STENCIL_BUFFER_header \
4645 .CommandType = 3, \
4646 .CommandSubType = 3, \
4647 ._3DCommandOpcode = 0, \
4648 ._3DCommandSubOpcode = 6, \
4649 .DwordLength = 3
4650
4651 struct GEN8_3DSTATE_STENCIL_BUFFER {
4652 uint32_t CommandType;
4653 uint32_t CommandSubType;
4654 uint32_t _3DCommandOpcode;
4655 uint32_t _3DCommandSubOpcode;
4656 uint32_t DwordLength;
4657 uint32_t StencilBufferEnable;
4658 struct GEN8_MEMORY_OBJECT_CONTROL_STATE StencilBufferObjectControlState;
4659 uint32_t SurfacePitch;
4660 __gen_address_type SurfaceBaseAddress;
4661 uint32_t SurfaceQPitch;
4662 };
4663
4664 static inline void
4665 GEN8_3DSTATE_STENCIL_BUFFER_pack(__gen_user_data *data, void * restrict dst,
4666 const struct GEN8_3DSTATE_STENCIL_BUFFER * restrict values)
4667 {
4668 uint32_t *dw = (uint32_t * restrict) dst;
4669
4670 dw[0] =
4671 __gen_field(values->CommandType, 29, 31) |
4672 __gen_field(values->CommandSubType, 27, 28) |
4673 __gen_field(values->_3DCommandOpcode, 24, 26) |
4674 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
4675 __gen_field(values->DwordLength, 0, 7) |
4676 0;
4677
4678 uint32_t dw_StencilBufferObjectControlState;
4679 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_StencilBufferObjectControlState, &values->StencilBufferObjectControlState);
4680 dw[1] =
4681 __gen_field(values->StencilBufferEnable, 31, 31) |
4682 /* Struct StencilBufferObjectControlState (22..28): */
4683 __gen_field(dw_StencilBufferObjectControlState, 22, 28) |
4684 __gen_field(values->SurfacePitch, 0, 16) |
4685 0;
4686
4687 uint32_t dw2 =
4688 0;
4689
4690 dw[2] =
4691 __gen_combine_address(data, &dw[2], values->SurfaceBaseAddress, dw2);
4692
4693 dw[4] =
4694 __gen_field(values->SurfaceQPitch, 0, 14) |
4695 0;
4696
4697 }
4698
4699 #define GEN8_3DSTATE_STREAMOUT_length 0x00000005
4700 #define GEN8_3DSTATE_STREAMOUT_length_bias 0x00000002
4701 #define GEN8_3DSTATE_STREAMOUT_header \
4702 .CommandType = 3, \
4703 .CommandSubType = 3, \
4704 ._3DCommandOpcode = 0, \
4705 ._3DCommandSubOpcode = 30, \
4706 .DwordLength = 3
4707
4708 struct GEN8_3DSTATE_STREAMOUT {
4709 uint32_t CommandType;
4710 uint32_t CommandSubType;
4711 uint32_t _3DCommandOpcode;
4712 uint32_t _3DCommandSubOpcode;
4713 uint32_t DwordLength;
4714 uint32_t SOFunctionEnable;
4715 uint32_t APIRenderingDisable;
4716 uint32_t RenderStreamSelect;
4717 #define LEADING 0
4718 #define TRAILING 1
4719 uint32_t ReorderMode;
4720 uint32_t SOStatisticsEnable;
4721 #define Normal 0
4722 #define Resreved 1
4723 #define Force_Off 2
4724 #define Force_on 3
4725 uint32_t ForceRendering;
4726 uint32_t Stream3VertexReadOffset;
4727 uint32_t Stream3VertexReadLength;
4728 uint32_t Stream2VertexReadOffset;
4729 uint32_t Stream2VertexReadLength;
4730 uint32_t Stream1VertexReadOffset;
4731 uint32_t Stream1VertexReadLength;
4732 uint32_t Stream0VertexReadOffset;
4733 uint32_t Stream0VertexReadLength;
4734 uint32_t Buffer1SurfacePitch;
4735 uint32_t Buffer0SurfacePitch;
4736 uint32_t Buffer3SurfacePitch;
4737 uint32_t Buffer2SurfacePitch;
4738 };
4739
4740 static inline void
4741 GEN8_3DSTATE_STREAMOUT_pack(__gen_user_data *data, void * restrict dst,
4742 const struct GEN8_3DSTATE_STREAMOUT * restrict values)
4743 {
4744 uint32_t *dw = (uint32_t * restrict) dst;
4745
4746 dw[0] =
4747 __gen_field(values->CommandType, 29, 31) |
4748 __gen_field(values->CommandSubType, 27, 28) |
4749 __gen_field(values->_3DCommandOpcode, 24, 26) |
4750 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
4751 __gen_field(values->DwordLength, 0, 7) |
4752 0;
4753
4754 dw[1] =
4755 __gen_field(values->SOFunctionEnable, 31, 31) |
4756 __gen_field(values->APIRenderingDisable, 30, 30) |
4757 __gen_field(values->RenderStreamSelect, 27, 28) |
4758 __gen_field(values->ReorderMode, 26, 26) |
4759 __gen_field(values->SOStatisticsEnable, 25, 25) |
4760 __gen_field(values->ForceRendering, 23, 24) |
4761 0;
4762
4763 dw[2] =
4764 __gen_field(values->Stream3VertexReadOffset, 29, 29) |
4765 __gen_field(values->Stream3VertexReadLength, 24, 28) |
4766 __gen_field(values->Stream2VertexReadOffset, 21, 21) |
4767 __gen_field(values->Stream2VertexReadLength, 16, 20) |
4768 __gen_field(values->Stream1VertexReadOffset, 13, 13) |
4769 __gen_field(values->Stream1VertexReadLength, 8, 12) |
4770 __gen_field(values->Stream0VertexReadOffset, 5, 5) |
4771 __gen_field(values->Stream0VertexReadLength, 0, 4) |
4772 0;
4773
4774 dw[3] =
4775 __gen_field(values->Buffer1SurfacePitch, 16, 27) |
4776 __gen_field(values->Buffer0SurfacePitch, 0, 11) |
4777 0;
4778
4779 dw[4] =
4780 __gen_field(values->Buffer3SurfacePitch, 16, 27) |
4781 __gen_field(values->Buffer2SurfacePitch, 0, 11) |
4782 0;
4783
4784 }
4785
4786 #define GEN8_3DSTATE_TE_length 0x00000004
4787 #define GEN8_3DSTATE_TE_length_bias 0x00000002
4788 #define GEN8_3DSTATE_TE_header \
4789 .CommandType = 3, \
4790 .CommandSubType = 3, \
4791 ._3DCommandOpcode = 0, \
4792 ._3DCommandSubOpcode = 28, \
4793 .DwordLength = 2
4794
4795 struct GEN8_3DSTATE_TE {
4796 uint32_t CommandType;
4797 uint32_t CommandSubType;
4798 uint32_t _3DCommandOpcode;
4799 uint32_t _3DCommandSubOpcode;
4800 uint32_t DwordLength;
4801 #define INTEGER 0
4802 #define ODD_FRACTIONAL 1
4803 #define EVEN_FRACTIONAL 2
4804 uint32_t Partitioning;
4805 #define POINT 0
4806 #define LINE 1
4807 #define TRI_CW 2
4808 #define TRI_CCW 3
4809 uint32_t OutputTopology;
4810 #define QUAD 0
4811 #define TRI 1
4812 #define ISOLINE 2
4813 uint32_t TEDomain;
4814 #define HW_TESS 0
4815 #define SW_TESS 1
4816 uint32_t TEMode;
4817 uint32_t TEEnable;
4818 float MaximumTessellationFactorOdd;
4819 float MaximumTessellationFactorNotOdd;
4820 };
4821
4822 static inline void
4823 GEN8_3DSTATE_TE_pack(__gen_user_data *data, void * restrict dst,
4824 const struct GEN8_3DSTATE_TE * restrict values)
4825 {
4826 uint32_t *dw = (uint32_t * restrict) dst;
4827
4828 dw[0] =
4829 __gen_field(values->CommandType, 29, 31) |
4830 __gen_field(values->CommandSubType, 27, 28) |
4831 __gen_field(values->_3DCommandOpcode, 24, 26) |
4832 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
4833 __gen_field(values->DwordLength, 0, 7) |
4834 0;
4835
4836 dw[1] =
4837 __gen_field(values->Partitioning, 12, 13) |
4838 __gen_field(values->OutputTopology, 8, 9) |
4839 __gen_field(values->TEDomain, 4, 5) |
4840 __gen_field(values->TEMode, 1, 2) |
4841 __gen_field(values->TEEnable, 0, 0) |
4842 0;
4843
4844 dw[2] =
4845 __gen_float(values->MaximumTessellationFactorOdd) |
4846 0;
4847
4848 dw[3] =
4849 __gen_float(values->MaximumTessellationFactorNotOdd) |
4850 0;
4851
4852 }
4853
4854 #define GEN8_3DSTATE_URB_DS_length 0x00000002
4855 #define GEN8_3DSTATE_URB_DS_length_bias 0x00000002
4856 #define GEN8_3DSTATE_URB_DS_header \
4857 .CommandType = 3, \
4858 .CommandSubType = 3, \
4859 ._3DCommandOpcode = 0, \
4860 ._3DCommandSubOpcode = 50, \
4861 .DwordLength = 0
4862
4863 struct GEN8_3DSTATE_URB_DS {
4864 uint32_t CommandType;
4865 uint32_t CommandSubType;
4866 uint32_t _3DCommandOpcode;
4867 uint32_t _3DCommandSubOpcode;
4868 uint32_t DwordLength;
4869 uint32_t DSURBStartingAddress;
4870 uint32_t DSURBEntryAllocationSize;
4871 uint32_t DSNumberofURBEntries;
4872 };
4873
4874 static inline void
4875 GEN8_3DSTATE_URB_DS_pack(__gen_user_data *data, void * restrict dst,
4876 const struct GEN8_3DSTATE_URB_DS * restrict values)
4877 {
4878 uint32_t *dw = (uint32_t * restrict) dst;
4879
4880 dw[0] =
4881 __gen_field(values->CommandType, 29, 31) |
4882 __gen_field(values->CommandSubType, 27, 28) |
4883 __gen_field(values->_3DCommandOpcode, 24, 26) |
4884 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
4885 __gen_field(values->DwordLength, 0, 7) |
4886 0;
4887
4888 dw[1] =
4889 __gen_field(values->DSURBStartingAddress, 25, 31) |
4890 __gen_field(values->DSURBEntryAllocationSize, 16, 24) |
4891 __gen_field(values->DSNumberofURBEntries, 0, 15) |
4892 0;
4893
4894 }
4895
4896 #define GEN8_3DSTATE_URB_GS_length 0x00000002
4897 #define GEN8_3DSTATE_URB_GS_length_bias 0x00000002
4898 #define GEN8_3DSTATE_URB_GS_header \
4899 .CommandType = 3, \
4900 .CommandSubType = 3, \
4901 ._3DCommandOpcode = 0, \
4902 ._3DCommandSubOpcode = 51, \
4903 .DwordLength = 0
4904
4905 struct GEN8_3DSTATE_URB_GS {
4906 uint32_t CommandType;
4907 uint32_t CommandSubType;
4908 uint32_t _3DCommandOpcode;
4909 uint32_t _3DCommandSubOpcode;
4910 uint32_t DwordLength;
4911 uint32_t GSURBStartingAddress;
4912 uint32_t GSURBEntryAllocationSize;
4913 uint32_t GSNumberofURBEntries;
4914 };
4915
4916 static inline void
4917 GEN8_3DSTATE_URB_GS_pack(__gen_user_data *data, void * restrict dst,
4918 const struct GEN8_3DSTATE_URB_GS * restrict values)
4919 {
4920 uint32_t *dw = (uint32_t * restrict) dst;
4921
4922 dw[0] =
4923 __gen_field(values->CommandType, 29, 31) |
4924 __gen_field(values->CommandSubType, 27, 28) |
4925 __gen_field(values->_3DCommandOpcode, 24, 26) |
4926 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
4927 __gen_field(values->DwordLength, 0, 7) |
4928 0;
4929
4930 dw[1] =
4931 __gen_field(values->GSURBStartingAddress, 25, 31) |
4932 __gen_field(values->GSURBEntryAllocationSize, 16, 24) |
4933 __gen_field(values->GSNumberofURBEntries, 0, 15) |
4934 0;
4935
4936 }
4937
4938 #define GEN8_3DSTATE_URB_HS_length 0x00000002
4939 #define GEN8_3DSTATE_URB_HS_length_bias 0x00000002
4940 #define GEN8_3DSTATE_URB_HS_header \
4941 .CommandType = 3, \
4942 .CommandSubType = 3, \
4943 ._3DCommandOpcode = 0, \
4944 ._3DCommandSubOpcode = 49, \
4945 .DwordLength = 0
4946
4947 struct GEN8_3DSTATE_URB_HS {
4948 uint32_t CommandType;
4949 uint32_t CommandSubType;
4950 uint32_t _3DCommandOpcode;
4951 uint32_t _3DCommandSubOpcode;
4952 uint32_t DwordLength;
4953 uint32_t HSURBStartingAddress;
4954 uint32_t HSURBEntryAllocationSize;
4955 uint32_t HSNumberofURBEntries;
4956 };
4957
4958 static inline void
4959 GEN8_3DSTATE_URB_HS_pack(__gen_user_data *data, void * restrict dst,
4960 const struct GEN8_3DSTATE_URB_HS * restrict values)
4961 {
4962 uint32_t *dw = (uint32_t * restrict) dst;
4963
4964 dw[0] =
4965 __gen_field(values->CommandType, 29, 31) |
4966 __gen_field(values->CommandSubType, 27, 28) |
4967 __gen_field(values->_3DCommandOpcode, 24, 26) |
4968 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
4969 __gen_field(values->DwordLength, 0, 7) |
4970 0;
4971
4972 dw[1] =
4973 __gen_field(values->HSURBStartingAddress, 25, 31) |
4974 __gen_field(values->HSURBEntryAllocationSize, 16, 24) |
4975 __gen_field(values->HSNumberofURBEntries, 0, 15) |
4976 0;
4977
4978 }
4979
4980 #define GEN8_3DSTATE_VERTEX_BUFFERS_length_bias 0x00000002
4981 #define GEN8_3DSTATE_VERTEX_BUFFERS_header \
4982 .CommandType = 3, \
4983 .CommandSubType = 3, \
4984 ._3DCommandOpcode = 0, \
4985 ._3DCommandSubOpcode = 8
4986
4987 struct GEN8_VERTEX_BUFFER_STATE {
4988 uint32_t VertexBufferIndex;
4989 struct GEN8_MEMORY_OBJECT_CONTROL_STATE MemoryObjectControlState;
4990 uint32_t AddressModifyEnable;
4991 uint32_t NullVertexBuffer;
4992 uint32_t BufferPitch;
4993 __gen_address_type BufferStartingAddress;
4994 uint32_t BufferSize;
4995 };
4996
4997 static inline void
4998 GEN8_VERTEX_BUFFER_STATE_pack(__gen_user_data *data, void * restrict dst,
4999 const struct GEN8_VERTEX_BUFFER_STATE * restrict values)
5000 {
5001 uint32_t *dw = (uint32_t * restrict) dst;
5002
5003 uint32_t dw_MemoryObjectControlState;
5004 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_MemoryObjectControlState, &values->MemoryObjectControlState);
5005 dw[0] =
5006 __gen_field(values->VertexBufferIndex, 26, 31) |
5007 /* Struct MemoryObjectControlState (16..22): */
5008 __gen_field(dw_MemoryObjectControlState, 16, 22) |
5009 __gen_field(values->AddressModifyEnable, 14, 14) |
5010 __gen_field(values->NullVertexBuffer, 13, 13) |
5011 __gen_field(values->BufferPitch, 0, 11) |
5012 0;
5013
5014 uint32_t dw1 =
5015 0;
5016
5017 dw[1] =
5018 __gen_combine_address(data, &dw[1], values->BufferStartingAddress, dw1);
5019
5020 dw[3] =
5021 __gen_field(values->BufferSize, 0, 31) |
5022 0;
5023
5024 }
5025
5026 struct GEN8_3DSTATE_VERTEX_BUFFERS {
5027 uint32_t CommandType;
5028 uint32_t CommandSubType;
5029 uint32_t _3DCommandOpcode;
5030 uint32_t _3DCommandSubOpcode;
5031 uint32_t DwordLength;
5032 /* variable length fields follow */
5033 };
5034
5035 static inline void
5036 GEN8_3DSTATE_VERTEX_BUFFERS_pack(__gen_user_data *data, void * restrict dst,
5037 const struct GEN8_3DSTATE_VERTEX_BUFFERS * restrict values)
5038 {
5039 uint32_t *dw = (uint32_t * restrict) dst;
5040
5041 dw[0] =
5042 __gen_field(values->CommandType, 29, 31) |
5043 __gen_field(values->CommandSubType, 27, 28) |
5044 __gen_field(values->_3DCommandOpcode, 24, 26) |
5045 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
5046 __gen_field(values->DwordLength, 0, 7) |
5047 0;
5048
5049 /* variable length fields follow */
5050 }
5051
5052 #define GEN8_3DSTATE_VERTEX_ELEMENTS_length_bias 0x00000002
5053 #define GEN8_3DSTATE_VERTEX_ELEMENTS_header \
5054 .CommandType = 3, \
5055 .CommandSubType = 3, \
5056 ._3DCommandOpcode = 0, \
5057 ._3DCommandSubOpcode = 9
5058
5059 struct GEN8_VERTEX_ELEMENT_STATE {
5060 uint32_t VertexBufferIndex;
5061 uint32_t Valid;
5062 uint32_t SourceElementFormat;
5063 uint32_t EdgeFlagEnable;
5064 uint32_t SourceElementOffset;
5065 uint32_t Component0Control;
5066 uint32_t Component1Control;
5067 uint32_t Component2Control;
5068 uint32_t Component3Control;
5069 };
5070
5071 static inline void
5072 GEN8_VERTEX_ELEMENT_STATE_pack(__gen_user_data *data, void * restrict dst,
5073 const struct GEN8_VERTEX_ELEMENT_STATE * restrict values)
5074 {
5075 uint32_t *dw = (uint32_t * restrict) dst;
5076
5077 dw[0] =
5078 __gen_field(values->VertexBufferIndex, 26, 31) |
5079 __gen_field(values->Valid, 25, 25) |
5080 __gen_field(values->SourceElementFormat, 16, 24) |
5081 __gen_field(values->EdgeFlagEnable, 15, 15) |
5082 __gen_field(values->SourceElementOffset, 0, 11) |
5083 0;
5084
5085 dw[1] =
5086 __gen_field(values->Component0Control, 28, 30) |
5087 __gen_field(values->Component1Control, 24, 26) |
5088 __gen_field(values->Component2Control, 20, 22) |
5089 __gen_field(values->Component3Control, 16, 18) |
5090 0;
5091
5092 }
5093
5094 struct GEN8_3DSTATE_VERTEX_ELEMENTS {
5095 uint32_t CommandType;
5096 uint32_t CommandSubType;
5097 uint32_t _3DCommandOpcode;
5098 uint32_t _3DCommandSubOpcode;
5099 uint32_t DwordLength;
5100 /* variable length fields follow */
5101 };
5102
5103 static inline void
5104 GEN8_3DSTATE_VERTEX_ELEMENTS_pack(__gen_user_data *data, void * restrict dst,
5105 const struct GEN8_3DSTATE_VERTEX_ELEMENTS * restrict values)
5106 {
5107 uint32_t *dw = (uint32_t * restrict) dst;
5108
5109 dw[0] =
5110 __gen_field(values->CommandType, 29, 31) |
5111 __gen_field(values->CommandSubType, 27, 28) |
5112 __gen_field(values->_3DCommandOpcode, 24, 26) |
5113 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
5114 __gen_field(values->DwordLength, 0, 7) |
5115 0;
5116
5117 /* variable length fields follow */
5118 }
5119
5120 #define GEN8_3DSTATE_VF_length 0x00000002
5121 #define GEN8_3DSTATE_VF_length_bias 0x00000002
5122 #define GEN8_3DSTATE_VF_header \
5123 .CommandType = 3, \
5124 .CommandSubType = 3, \
5125 ._3DCommandOpcode = 0, \
5126 ._3DCommandSubOpcode = 12, \
5127 .DwordLength = 0
5128
5129 struct GEN8_3DSTATE_VF {
5130 uint32_t CommandType;
5131 uint32_t CommandSubType;
5132 uint32_t _3DCommandOpcode;
5133 uint32_t _3DCommandSubOpcode;
5134 uint32_t IndexedDrawCutIndexEnable;
5135 uint32_t DwordLength;
5136 uint32_t CutIndex;
5137 };
5138
5139 static inline void
5140 GEN8_3DSTATE_VF_pack(__gen_user_data *data, void * restrict dst,
5141 const struct GEN8_3DSTATE_VF * restrict values)
5142 {
5143 uint32_t *dw = (uint32_t * restrict) dst;
5144
5145 dw[0] =
5146 __gen_field(values->CommandType, 29, 31) |
5147 __gen_field(values->CommandSubType, 27, 28) |
5148 __gen_field(values->_3DCommandOpcode, 24, 26) |
5149 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
5150 __gen_field(values->IndexedDrawCutIndexEnable, 8, 8) |
5151 __gen_field(values->DwordLength, 0, 7) |
5152 0;
5153
5154 dw[1] =
5155 __gen_field(values->CutIndex, 0, 31) |
5156 0;
5157
5158 }
5159
5160 #define GEN8_3DSTATE_VF_INSTANCING_length 0x00000003
5161 #define GEN8_3DSTATE_VF_INSTANCING_length_bias 0x00000002
5162 #define GEN8_3DSTATE_VF_INSTANCING_header \
5163 .CommandType = 3, \
5164 .CommandSubType = 3, \
5165 ._3DCommandOpcode = 0, \
5166 ._3DCommandSubOpcode = 73, \
5167 .DwordLength = 1
5168
5169 struct GEN8_3DSTATE_VF_INSTANCING {
5170 uint32_t CommandType;
5171 uint32_t CommandSubType;
5172 uint32_t _3DCommandOpcode;
5173 uint32_t _3DCommandSubOpcode;
5174 uint32_t DwordLength;
5175 uint32_t InstancingEnable;
5176 uint32_t VertexElementIndex;
5177 uint32_t InstanceDataStepRate;
5178 };
5179
5180 static inline void
5181 GEN8_3DSTATE_VF_INSTANCING_pack(__gen_user_data *data, void * restrict dst,
5182 const struct GEN8_3DSTATE_VF_INSTANCING * restrict values)
5183 {
5184 uint32_t *dw = (uint32_t * restrict) dst;
5185
5186 dw[0] =
5187 __gen_field(values->CommandType, 29, 31) |
5188 __gen_field(values->CommandSubType, 27, 28) |
5189 __gen_field(values->_3DCommandOpcode, 24, 26) |
5190 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
5191 __gen_field(values->DwordLength, 0, 7) |
5192 0;
5193
5194 dw[1] =
5195 __gen_field(values->InstancingEnable, 8, 8) |
5196 __gen_field(values->VertexElementIndex, 0, 5) |
5197 0;
5198
5199 dw[2] =
5200 __gen_field(values->InstanceDataStepRate, 0, 31) |
5201 0;
5202
5203 }
5204
5205 #define GEN8_3DSTATE_VF_SGVS_length 0x00000002
5206 #define GEN8_3DSTATE_VF_SGVS_length_bias 0x00000002
5207 #define GEN8_3DSTATE_VF_SGVS_header \
5208 .CommandType = 3, \
5209 .CommandSubType = 3, \
5210 ._3DCommandOpcode = 0, \
5211 ._3DCommandSubOpcode = 74, \
5212 .DwordLength = 0
5213
5214 struct GEN8_3DSTATE_VF_SGVS {
5215 uint32_t CommandType;
5216 uint32_t CommandSubType;
5217 uint32_t _3DCommandOpcode;
5218 uint32_t _3DCommandSubOpcode;
5219 uint32_t DwordLength;
5220 uint32_t InstanceIDEnable;
5221 #define COMP_0 0
5222 #define COMP_1 1
5223 #define COMP_2 2
5224 #define COMP_3 3
5225 uint32_t InstanceIDComponentNumber;
5226 uint32_t InstanceIDElementOffset;
5227 uint32_t VertexIDEnable;
5228 #define COMP_0 0
5229 #define COMP_1 1
5230 #define COMP_2 2
5231 #define COMP_3 3
5232 uint32_t VertexIDComponentNumber;
5233 uint32_t VertexIDElementOffset;
5234 };
5235
5236 static inline void
5237 GEN8_3DSTATE_VF_SGVS_pack(__gen_user_data *data, void * restrict dst,
5238 const struct GEN8_3DSTATE_VF_SGVS * restrict values)
5239 {
5240 uint32_t *dw = (uint32_t * restrict) dst;
5241
5242 dw[0] =
5243 __gen_field(values->CommandType, 29, 31) |
5244 __gen_field(values->CommandSubType, 27, 28) |
5245 __gen_field(values->_3DCommandOpcode, 24, 26) |
5246 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
5247 __gen_field(values->DwordLength, 0, 7) |
5248 0;
5249
5250 dw[1] =
5251 __gen_field(values->InstanceIDEnable, 31, 31) |
5252 __gen_field(values->InstanceIDComponentNumber, 29, 30) |
5253 __gen_field(values->InstanceIDElementOffset, 16, 21) |
5254 __gen_field(values->VertexIDEnable, 15, 15) |
5255 __gen_field(values->VertexIDComponentNumber, 13, 14) |
5256 __gen_field(values->VertexIDElementOffset, 0, 5) |
5257 0;
5258
5259 }
5260
5261 #define GEN8_3DSTATE_VF_STATISTICS_length 0x00000001
5262 #define GEN8_3DSTATE_VF_STATISTICS_length_bias 0x00000001
5263 #define GEN8_3DSTATE_VF_STATISTICS_header \
5264 .CommandType = 3, \
5265 .CommandSubType = 1, \
5266 ._3DCommandOpcode = 0, \
5267 ._3DCommandSubOpcode = 11
5268
5269 struct GEN8_3DSTATE_VF_STATISTICS {
5270 uint32_t CommandType;
5271 uint32_t CommandSubType;
5272 uint32_t _3DCommandOpcode;
5273 uint32_t _3DCommandSubOpcode;
5274 uint32_t StatisticsEnable;
5275 };
5276
5277 static inline void
5278 GEN8_3DSTATE_VF_STATISTICS_pack(__gen_user_data *data, void * restrict dst,
5279 const struct GEN8_3DSTATE_VF_STATISTICS * restrict values)
5280 {
5281 uint32_t *dw = (uint32_t * restrict) dst;
5282
5283 dw[0] =
5284 __gen_field(values->CommandType, 29, 31) |
5285 __gen_field(values->CommandSubType, 27, 28) |
5286 __gen_field(values->_3DCommandOpcode, 24, 26) |
5287 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
5288 __gen_field(values->StatisticsEnable, 0, 0) |
5289 0;
5290
5291 }
5292
5293 #define GEN8_3DSTATE_VF_TOPOLOGY_length 0x00000002
5294 #define GEN8_3DSTATE_VF_TOPOLOGY_length_bias 0x00000002
5295 #define GEN8_3DSTATE_VF_TOPOLOGY_header \
5296 .CommandType = 3, \
5297 .CommandSubType = 3, \
5298 ._3DCommandOpcode = 0, \
5299 ._3DCommandSubOpcode = 75, \
5300 .DwordLength = 0
5301
5302 struct GEN8_3DSTATE_VF_TOPOLOGY {
5303 uint32_t CommandType;
5304 uint32_t CommandSubType;
5305 uint32_t _3DCommandOpcode;
5306 uint32_t _3DCommandSubOpcode;
5307 uint32_t DwordLength;
5308 uint32_t PrimitiveTopologyType;
5309 };
5310
5311 static inline void
5312 GEN8_3DSTATE_VF_TOPOLOGY_pack(__gen_user_data *data, void * restrict dst,
5313 const struct GEN8_3DSTATE_VF_TOPOLOGY * restrict values)
5314 {
5315 uint32_t *dw = (uint32_t * restrict) dst;
5316
5317 dw[0] =
5318 __gen_field(values->CommandType, 29, 31) |
5319 __gen_field(values->CommandSubType, 27, 28) |
5320 __gen_field(values->_3DCommandOpcode, 24, 26) |
5321 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
5322 __gen_field(values->DwordLength, 0, 7) |
5323 0;
5324
5325 dw[1] =
5326 __gen_field(values->PrimitiveTopologyType, 0, 5) |
5327 0;
5328
5329 }
5330
5331 #define GEN8_3DSTATE_VIEWPORT_STATE_POINTERS_CC_length 0x00000002
5332 #define GEN8_3DSTATE_VIEWPORT_STATE_POINTERS_CC_length_bias 0x00000002
5333 #define GEN8_3DSTATE_VIEWPORT_STATE_POINTERS_CC_header\
5334 .CommandType = 3, \
5335 .CommandSubType = 3, \
5336 ._3DCommandOpcode = 0, \
5337 ._3DCommandSubOpcode = 35, \
5338 .DwordLength = 0
5339
5340 struct GEN8_3DSTATE_VIEWPORT_STATE_POINTERS_CC {
5341 uint32_t CommandType;
5342 uint32_t CommandSubType;
5343 uint32_t _3DCommandOpcode;
5344 uint32_t _3DCommandSubOpcode;
5345 uint32_t DwordLength;
5346 uint32_t CCViewportPointer;
5347 };
5348
5349 static inline void
5350 GEN8_3DSTATE_VIEWPORT_STATE_POINTERS_CC_pack(__gen_user_data *data, void * restrict dst,
5351 const struct GEN8_3DSTATE_VIEWPORT_STATE_POINTERS_CC * restrict values)
5352 {
5353 uint32_t *dw = (uint32_t * restrict) dst;
5354
5355 dw[0] =
5356 __gen_field(values->CommandType, 29, 31) |
5357 __gen_field(values->CommandSubType, 27, 28) |
5358 __gen_field(values->_3DCommandOpcode, 24, 26) |
5359 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
5360 __gen_field(values->DwordLength, 0, 7) |
5361 0;
5362
5363 dw[1] =
5364 __gen_offset(values->CCViewportPointer, 5, 31) |
5365 0;
5366
5367 }
5368
5369 #define GEN8_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP_length 0x00000002
5370 #define GEN8_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP_length_bias 0x00000002
5371 #define GEN8_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP_header\
5372 .CommandType = 3, \
5373 .CommandSubType = 3, \
5374 ._3DCommandOpcode = 0, \
5375 ._3DCommandSubOpcode = 33, \
5376 .DwordLength = 0
5377
5378 struct GEN8_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP {
5379 uint32_t CommandType;
5380 uint32_t CommandSubType;
5381 uint32_t _3DCommandOpcode;
5382 uint32_t _3DCommandSubOpcode;
5383 uint32_t DwordLength;
5384 uint32_t SFClipViewportPointer;
5385 };
5386
5387 static inline void
5388 GEN8_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP_pack(__gen_user_data *data, void * restrict dst,
5389 const struct GEN8_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP * restrict values)
5390 {
5391 uint32_t *dw = (uint32_t * restrict) dst;
5392
5393 dw[0] =
5394 __gen_field(values->CommandType, 29, 31) |
5395 __gen_field(values->CommandSubType, 27, 28) |
5396 __gen_field(values->_3DCommandOpcode, 24, 26) |
5397 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
5398 __gen_field(values->DwordLength, 0, 7) |
5399 0;
5400
5401 dw[1] =
5402 __gen_offset(values->SFClipViewportPointer, 6, 31) |
5403 0;
5404
5405 }
5406
5407 #define GEN8_3DSTATE_WM_length 0x00000002
5408 #define GEN8_3DSTATE_WM_length_bias 0x00000002
5409 #define GEN8_3DSTATE_WM_header \
5410 .CommandType = 3, \
5411 .CommandSubType = 3, \
5412 ._3DCommandOpcode = 0, \
5413 ._3DCommandSubOpcode = 20, \
5414 .DwordLength = 0
5415
5416 struct GEN8_3DSTATE_WM {
5417 uint32_t CommandType;
5418 uint32_t CommandSubType;
5419 uint32_t _3DCommandOpcode;
5420 uint32_t _3DCommandSubOpcode;
5421 uint32_t DwordLength;
5422 uint32_t StatisticsEnable;
5423 uint32_t LegacyDepthBufferClearEnable;
5424 uint32_t LegacyDepthBufferResolveEnable;
5425 uint32_t LegacyHierarchicalDepthBufferResolveEnable;
5426 uint32_t LegacyDiamondLineRasterization;
5427 #define NORMAL 0
5428 #define PSEXEC 1
5429 #define PREPS 2
5430 uint32_t EarlyDepthStencilControl;
5431 #define Normal 0
5432 #define ForceOff 1
5433 #define ForceON 2
5434 uint32_t ForceThreadDispatchEnable;
5435 #define INTERP_PIXEL 0
5436 #define INTERP_CENTROID 2
5437 #define INTERP_SAMPLE 3
5438 uint32_t PositionZWInterpolationMode;
5439 uint32_t BarycentricInterpolationMode;
5440 #define _05pixels 0
5441 #define _10pixels 1
5442 #define _20pixels 2
5443 #define _40pixels 3
5444 uint32_t LineEndCapAntialiasingRegionWidth;
5445 #define _05pixels 0
5446 #define _10pixels 1
5447 #define _20pixels 2
5448 #define _40pixels 3
5449 uint32_t LineAntialiasingRegionWidth;
5450 uint32_t PolygonStippleEnable;
5451 uint32_t LineStippleEnable;
5452 #define RASTRULE_UPPER_LEFT 0
5453 #define RASTRULE_UPPER_RIGHT 1
5454 uint32_t PointRasterizationRule;
5455 #define Normal 0
5456 #define ForceOff 1
5457 #define ForceON 2
5458 uint32_t ForceKillPixelEnable;
5459 };
5460
5461 static inline void
5462 GEN8_3DSTATE_WM_pack(__gen_user_data *data, void * restrict dst,
5463 const struct GEN8_3DSTATE_WM * restrict values)
5464 {
5465 uint32_t *dw = (uint32_t * restrict) dst;
5466
5467 dw[0] =
5468 __gen_field(values->CommandType, 29, 31) |
5469 __gen_field(values->CommandSubType, 27, 28) |
5470 __gen_field(values->_3DCommandOpcode, 24, 26) |
5471 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
5472 __gen_field(values->DwordLength, 0, 7) |
5473 0;
5474
5475 dw[1] =
5476 __gen_field(values->StatisticsEnable, 31, 31) |
5477 __gen_field(values->LegacyDepthBufferClearEnable, 30, 30) |
5478 __gen_field(values->LegacyDepthBufferResolveEnable, 28, 28) |
5479 __gen_field(values->LegacyHierarchicalDepthBufferResolveEnable, 27, 27) |
5480 __gen_field(values->LegacyDiamondLineRasterization, 26, 26) |
5481 __gen_field(values->EarlyDepthStencilControl, 21, 22) |
5482 __gen_field(values->ForceThreadDispatchEnable, 19, 20) |
5483 __gen_field(values->PositionZWInterpolationMode, 17, 18) |
5484 __gen_field(values->BarycentricInterpolationMode, 11, 16) |
5485 __gen_field(values->LineEndCapAntialiasingRegionWidth, 8, 9) |
5486 __gen_field(values->LineAntialiasingRegionWidth, 6, 7) |
5487 __gen_field(values->PolygonStippleEnable, 4, 4) |
5488 __gen_field(values->LineStippleEnable, 3, 3) |
5489 __gen_field(values->PointRasterizationRule, 2, 2) |
5490 __gen_field(values->ForceKillPixelEnable, 0, 1) |
5491 0;
5492
5493 }
5494
5495 #define GEN8_3DSTATE_WM_CHROMAKEY_length 0x00000002
5496 #define GEN8_3DSTATE_WM_CHROMAKEY_length_bias 0x00000002
5497 #define GEN8_3DSTATE_WM_CHROMAKEY_header \
5498 .CommandType = 3, \
5499 .CommandSubType = 3, \
5500 ._3DCommandOpcode = 0, \
5501 ._3DCommandSubOpcode = 76, \
5502 .DwordLength = 0
5503
5504 struct GEN8_3DSTATE_WM_CHROMAKEY {
5505 uint32_t CommandType;
5506 uint32_t CommandSubType;
5507 uint32_t _3DCommandOpcode;
5508 uint32_t _3DCommandSubOpcode;
5509 uint32_t DwordLength;
5510 uint32_t ChromaKeyKillEnable;
5511 };
5512
5513 static inline void
5514 GEN8_3DSTATE_WM_CHROMAKEY_pack(__gen_user_data *data, void * restrict dst,
5515 const struct GEN8_3DSTATE_WM_CHROMAKEY * restrict values)
5516 {
5517 uint32_t *dw = (uint32_t * restrict) dst;
5518
5519 dw[0] =
5520 __gen_field(values->CommandType, 29, 31) |
5521 __gen_field(values->CommandSubType, 27, 28) |
5522 __gen_field(values->_3DCommandOpcode, 24, 26) |
5523 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
5524 __gen_field(values->DwordLength, 0, 7) |
5525 0;
5526
5527 dw[1] =
5528 __gen_field(values->ChromaKeyKillEnable, 31, 31) |
5529 0;
5530
5531 }
5532
5533 #define GEN8_3DSTATE_WM_DEPTH_STENCIL_length 0x00000003
5534 #define GEN8_3DSTATE_WM_DEPTH_STENCIL_length_bias 0x00000002
5535 #define GEN8_3DSTATE_WM_DEPTH_STENCIL_header \
5536 .CommandType = 3, \
5537 .CommandSubType = 3, \
5538 ._3DCommandOpcode = 0, \
5539 ._3DCommandSubOpcode = 78, \
5540 .DwordLength = 1
5541
5542 struct GEN8_3DSTATE_WM_DEPTH_STENCIL {
5543 uint32_t CommandType;
5544 uint32_t CommandSubType;
5545 uint32_t _3DCommandOpcode;
5546 uint32_t _3DCommandSubOpcode;
5547 uint32_t DwordLength;
5548 uint32_t StencilFailOp;
5549 uint32_t StencilPassDepthFailOp;
5550 uint32_t StencilPassDepthPassOp;
5551 uint32_t BackfaceStencilTestFunction;
5552 uint32_t BackfaceStencilFailOp;
5553 uint32_t BackfaceStencilPassDepthFailOp;
5554 uint32_t BackfaceStencilPassDepthPassOp;
5555 uint32_t StencilTestFunction;
5556 uint32_t DepthTestFunction;
5557 #define False 0
5558 #define True 1
5559 uint32_t DoubleSidedStencilEnable;
5560 uint32_t StencilTestEnable;
5561 uint32_t StencilBufferWriteEnable;
5562 uint32_t DepthTestEnable;
5563 uint32_t DepthBufferWriteEnable;
5564 uint32_t StencilTestMask;
5565 uint32_t StencilWriteMask;
5566 uint32_t BackfaceStencilTestMask;
5567 uint32_t BackfaceStencilWriteMask;
5568 };
5569
5570 static inline void
5571 GEN8_3DSTATE_WM_DEPTH_STENCIL_pack(__gen_user_data *data, void * restrict dst,
5572 const struct GEN8_3DSTATE_WM_DEPTH_STENCIL * restrict values)
5573 {
5574 uint32_t *dw = (uint32_t * restrict) dst;
5575
5576 dw[0] =
5577 __gen_field(values->CommandType, 29, 31) |
5578 __gen_field(values->CommandSubType, 27, 28) |
5579 __gen_field(values->_3DCommandOpcode, 24, 26) |
5580 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
5581 __gen_field(values->DwordLength, 0, 7) |
5582 0;
5583
5584 dw[1] =
5585 __gen_field(values->StencilFailOp, 29, 31) |
5586 __gen_field(values->StencilPassDepthFailOp, 26, 28) |
5587 __gen_field(values->StencilPassDepthPassOp, 23, 25) |
5588 __gen_field(values->BackfaceStencilTestFunction, 20, 22) |
5589 __gen_field(values->BackfaceStencilFailOp, 17, 19) |
5590 __gen_field(values->BackfaceStencilPassDepthFailOp, 14, 16) |
5591 __gen_field(values->BackfaceStencilPassDepthPassOp, 11, 13) |
5592 __gen_field(values->StencilTestFunction, 8, 10) |
5593 __gen_field(values->DepthTestFunction, 5, 7) |
5594 __gen_field(values->DoubleSidedStencilEnable, 4, 4) |
5595 __gen_field(values->StencilTestEnable, 3, 3) |
5596 __gen_field(values->StencilBufferWriteEnable, 2, 2) |
5597 __gen_field(values->DepthTestEnable, 1, 1) |
5598 __gen_field(values->DepthBufferWriteEnable, 0, 0) |
5599 0;
5600
5601 dw[2] =
5602 __gen_field(values->StencilTestMask, 24, 31) |
5603 __gen_field(values->StencilWriteMask, 16, 23) |
5604 __gen_field(values->BackfaceStencilTestMask, 8, 15) |
5605 __gen_field(values->BackfaceStencilWriteMask, 0, 7) |
5606 0;
5607
5608 }
5609
5610 #define GEN8_3DSTATE_WM_HZ_OP_length 0x00000005
5611 #define GEN8_3DSTATE_WM_HZ_OP_length_bias 0x00000002
5612 #define GEN8_3DSTATE_WM_HZ_OP_header \
5613 .CommandType = 3, \
5614 .CommandSubType = 3, \
5615 ._3DCommandOpcode = 0, \
5616 ._3DCommandSubOpcode = 82, \
5617 .DwordLength = 3
5618
5619 struct GEN8_3DSTATE_WM_HZ_OP {
5620 uint32_t CommandType;
5621 uint32_t CommandSubType;
5622 uint32_t _3DCommandOpcode;
5623 uint32_t _3DCommandSubOpcode;
5624 uint32_t DwordLength;
5625 uint32_t StencilBufferClearEnable;
5626 uint32_t DepthBufferClearEnable;
5627 uint32_t ScissorRectangleEnable;
5628 uint32_t DepthBufferResolveEnable;
5629 uint32_t HierarchicalDepthBufferResolveEnable;
5630 uint32_t PixelPositionOffsetEnable;
5631 uint32_t FullSurfaceDepthClear;
5632 uint32_t StencilClearValue;
5633 uint32_t NumberofMultisamples;
5634 uint32_t ClearRectangleYMin;
5635 uint32_t ClearRectangleXMin;
5636 uint32_t ClearRectangleYMax;
5637 uint32_t ClearRectangleXMax;
5638 uint32_t SampleMask;
5639 };
5640
5641 static inline void
5642 GEN8_3DSTATE_WM_HZ_OP_pack(__gen_user_data *data, void * restrict dst,
5643 const struct GEN8_3DSTATE_WM_HZ_OP * restrict values)
5644 {
5645 uint32_t *dw = (uint32_t * restrict) dst;
5646
5647 dw[0] =
5648 __gen_field(values->CommandType, 29, 31) |
5649 __gen_field(values->CommandSubType, 27, 28) |
5650 __gen_field(values->_3DCommandOpcode, 24, 26) |
5651 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
5652 __gen_field(values->DwordLength, 0, 7) |
5653 0;
5654
5655 dw[1] =
5656 __gen_field(values->StencilBufferClearEnable, 31, 31) |
5657 __gen_field(values->DepthBufferClearEnable, 30, 30) |
5658 __gen_field(values->ScissorRectangleEnable, 29, 29) |
5659 __gen_field(values->DepthBufferResolveEnable, 28, 28) |
5660 __gen_field(values->HierarchicalDepthBufferResolveEnable, 27, 27) |
5661 __gen_field(values->PixelPositionOffsetEnable, 26, 26) |
5662 __gen_field(values->FullSurfaceDepthClear, 25, 25) |
5663 __gen_field(values->StencilClearValue, 16, 23) |
5664 __gen_field(values->NumberofMultisamples, 13, 15) |
5665 0;
5666
5667 dw[2] =
5668 __gen_field(values->ClearRectangleYMin, 16, 31) |
5669 __gen_field(values->ClearRectangleXMin, 0, 15) |
5670 0;
5671
5672 dw[3] =
5673 __gen_field(values->ClearRectangleYMax, 16, 31) |
5674 __gen_field(values->ClearRectangleXMax, 0, 15) |
5675 0;
5676
5677 dw[4] =
5678 __gen_field(values->SampleMask, 0, 15) |
5679 0;
5680
5681 }
5682
5683 #define GEN8_GPGPU_WALKER_length 0x0000000f
5684 #define GEN8_GPGPU_WALKER_length_bias 0x00000002
5685 #define GEN8_GPGPU_WALKER_header \
5686 .CommandType = 3, \
5687 .Pipeline = 2, \
5688 .MediaCommandOpcode = 1, \
5689 .SubOpcode = 5, \
5690 .DwordLength = 13
5691
5692 struct GEN8_GPGPU_WALKER {
5693 uint32_t CommandType;
5694 uint32_t Pipeline;
5695 uint32_t MediaCommandOpcode;
5696 uint32_t SubOpcode;
5697 uint32_t IndirectParameterEnable;
5698 uint32_t PredicateEnable;
5699 uint32_t DwordLength;
5700 uint32_t InterfaceDescriptorOffset;
5701 uint32_t IndirectDataLength;
5702 uint32_t IndirectDataStartAddress;
5703 #define SIMD8 0
5704 #define SIMD16 1
5705 #define SIMD32 2
5706 uint32_t SIMDSize;
5707 uint32_t ThreadDepthCounterMaximum;
5708 uint32_t ThreadHeightCounterMaximum;
5709 uint32_t ThreadWidthCounterMaximum;
5710 uint32_t ThreadGroupIDStartingX;
5711 uint32_t ThreadGroupIDXDimension;
5712 uint32_t ThreadGroupIDStartingY;
5713 uint32_t ThreadGroupIDYDimension;
5714 uint32_t ThreadGroupIDStartingResumeZ;
5715 uint32_t ThreadGroupIDZDimension;
5716 uint32_t RightExecutionMask;
5717 uint32_t BottomExecutionMask;
5718 };
5719
5720 static inline void
5721 GEN8_GPGPU_WALKER_pack(__gen_user_data *data, void * restrict dst,
5722 const struct GEN8_GPGPU_WALKER * restrict values)
5723 {
5724 uint32_t *dw = (uint32_t * restrict) dst;
5725
5726 dw[0] =
5727 __gen_field(values->CommandType, 29, 31) |
5728 __gen_field(values->Pipeline, 27, 28) |
5729 __gen_field(values->MediaCommandOpcode, 24, 26) |
5730 __gen_field(values->SubOpcode, 16, 23) |
5731 __gen_field(values->IndirectParameterEnable, 10, 10) |
5732 __gen_field(values->PredicateEnable, 8, 8) |
5733 __gen_field(values->DwordLength, 0, 7) |
5734 0;
5735
5736 dw[1] =
5737 __gen_field(values->InterfaceDescriptorOffset, 0, 5) |
5738 0;
5739
5740 dw[2] =
5741 __gen_field(values->IndirectDataLength, 0, 16) |
5742 0;
5743
5744 dw[3] =
5745 __gen_offset(values->IndirectDataStartAddress, 6, 31) |
5746 0;
5747
5748 dw[4] =
5749 __gen_field(values->SIMDSize, 30, 31) |
5750 __gen_field(values->ThreadDepthCounterMaximum, 16, 21) |
5751 __gen_field(values->ThreadHeightCounterMaximum, 8, 13) |
5752 __gen_field(values->ThreadWidthCounterMaximum, 0, 5) |
5753 0;
5754
5755 dw[5] =
5756 __gen_field(values->ThreadGroupIDStartingX, 0, 31) |
5757 0;
5758
5759 dw[6] =
5760 0;
5761
5762 dw[7] =
5763 __gen_field(values->ThreadGroupIDXDimension, 0, 31) |
5764 0;
5765
5766 dw[8] =
5767 __gen_field(values->ThreadGroupIDStartingY, 0, 31) |
5768 0;
5769
5770 dw[9] =
5771 0;
5772
5773 dw[10] =
5774 __gen_field(values->ThreadGroupIDYDimension, 0, 31) |
5775 0;
5776
5777 dw[11] =
5778 __gen_field(values->ThreadGroupIDStartingResumeZ, 0, 31) |
5779 0;
5780
5781 dw[12] =
5782 __gen_field(values->ThreadGroupIDZDimension, 0, 31) |
5783 0;
5784
5785 dw[13] =
5786 __gen_field(values->RightExecutionMask, 0, 31) |
5787 0;
5788
5789 dw[14] =
5790 __gen_field(values->BottomExecutionMask, 0, 31) |
5791 0;
5792
5793 }
5794
5795 #define GEN8_MEDIA_CURBE_LOAD_length 0x00000004
5796 #define GEN8_MEDIA_CURBE_LOAD_length_bias 0x00000002
5797 #define GEN8_MEDIA_CURBE_LOAD_header \
5798 .CommandType = 3, \
5799 .Pipeline = 2, \
5800 .MediaCommandOpcode = 0, \
5801 .SubOpcode = 1, \
5802 .DwordLength = 2
5803
5804 struct GEN8_MEDIA_CURBE_LOAD {
5805 uint32_t CommandType;
5806 uint32_t Pipeline;
5807 uint32_t MediaCommandOpcode;
5808 uint32_t SubOpcode;
5809 uint32_t DwordLength;
5810 uint32_t CURBETotalDataLength;
5811 uint32_t CURBEDataStartAddress;
5812 };
5813
5814 static inline void
5815 GEN8_MEDIA_CURBE_LOAD_pack(__gen_user_data *data, void * restrict dst,
5816 const struct GEN8_MEDIA_CURBE_LOAD * restrict values)
5817 {
5818 uint32_t *dw = (uint32_t * restrict) dst;
5819
5820 dw[0] =
5821 __gen_field(values->CommandType, 29, 31) |
5822 __gen_field(values->Pipeline, 27, 28) |
5823 __gen_field(values->MediaCommandOpcode, 24, 26) |
5824 __gen_field(values->SubOpcode, 16, 23) |
5825 __gen_field(values->DwordLength, 0, 15) |
5826 0;
5827
5828 dw[1] =
5829 0;
5830
5831 dw[2] =
5832 __gen_field(values->CURBETotalDataLength, 0, 16) |
5833 0;
5834
5835 dw[3] =
5836 __gen_field(values->CURBEDataStartAddress, 0, 31) |
5837 0;
5838
5839 }
5840
5841 #define GEN8_MEDIA_INTERFACE_DESCRIPTOR_LOAD_length 0x00000004
5842 #define GEN8_MEDIA_INTERFACE_DESCRIPTOR_LOAD_length_bias 0x00000002
5843 #define GEN8_MEDIA_INTERFACE_DESCRIPTOR_LOAD_header\
5844 .CommandType = 3, \
5845 .Pipeline = 2, \
5846 .MediaCommandOpcode = 0, \
5847 .SubOpcode = 2, \
5848 .DwordLength = 2
5849
5850 struct GEN8_MEDIA_INTERFACE_DESCRIPTOR_LOAD {
5851 uint32_t CommandType;
5852 uint32_t Pipeline;
5853 uint32_t MediaCommandOpcode;
5854 uint32_t SubOpcode;
5855 uint32_t DwordLength;
5856 uint32_t InterfaceDescriptorTotalLength;
5857 uint32_t InterfaceDescriptorDataStartAddress;
5858 };
5859
5860 static inline void
5861 GEN8_MEDIA_INTERFACE_DESCRIPTOR_LOAD_pack(__gen_user_data *data, void * restrict dst,
5862 const struct GEN8_MEDIA_INTERFACE_DESCRIPTOR_LOAD * restrict values)
5863 {
5864 uint32_t *dw = (uint32_t * restrict) dst;
5865
5866 dw[0] =
5867 __gen_field(values->CommandType, 29, 31) |
5868 __gen_field(values->Pipeline, 27, 28) |
5869 __gen_field(values->MediaCommandOpcode, 24, 26) |
5870 __gen_field(values->SubOpcode, 16, 23) |
5871 __gen_field(values->DwordLength, 0, 15) |
5872 0;
5873
5874 dw[1] =
5875 0;
5876
5877 dw[2] =
5878 __gen_field(values->InterfaceDescriptorTotalLength, 0, 16) |
5879 0;
5880
5881 dw[3] =
5882 __gen_offset(values->InterfaceDescriptorDataStartAddress, 0, 31) |
5883 0;
5884
5885 }
5886
5887 #define GEN8_MEDIA_OBJECT_length_bias 0x00000002
5888 #define GEN8_MEDIA_OBJECT_header \
5889 .CommandType = 3, \
5890 .MediaCommandPipeline = 2, \
5891 .MediaCommandOpcode = 1, \
5892 .MediaCommandSubOpcode = 0
5893
5894 struct GEN8_MEDIA_OBJECT {
5895 uint32_t CommandType;
5896 uint32_t MediaCommandPipeline;
5897 uint32_t MediaCommandOpcode;
5898 uint32_t MediaCommandSubOpcode;
5899 uint32_t DwordLength;
5900 uint32_t InterfaceDescriptorOffset;
5901 uint32_t ChildrenPresent;
5902 #define Nothreadsynchronization 0
5903 #define Threaddispatchissynchronizedbythespawnrootthreadmessage 1
5904 uint32_t ThreadSynchronization;
5905 uint32_t ForceDestination;
5906 #define Notusingscoreboard 0
5907 #define Usingscoreboard 1
5908 uint32_t UseScoreboard;
5909 #define Slice0 0
5910 #define Slice1 1
5911 #define Slice2 2
5912 uint32_t SliceDestinationSelect;
5913 #define SubSlice2 2
5914 #define SubSlice1 1
5915 #define SubSlice0 0
5916 uint32_t SubSliceDestinationSelect;
5917 uint32_t IndirectDataLength;
5918 __gen_address_type IndirectDataStartAddress;
5919 uint32_t ScoredboardY;
5920 uint32_t ScoreboardX;
5921 uint32_t ScoreboardColor;
5922 uint32_t ScoreboardMask;
5923 /* variable length fields follow */
5924 };
5925
5926 static inline void
5927 GEN8_MEDIA_OBJECT_pack(__gen_user_data *data, void * restrict dst,
5928 const struct GEN8_MEDIA_OBJECT * restrict values)
5929 {
5930 uint32_t *dw = (uint32_t * restrict) dst;
5931
5932 dw[0] =
5933 __gen_field(values->CommandType, 29, 31) |
5934 __gen_field(values->MediaCommandPipeline, 27, 28) |
5935 __gen_field(values->MediaCommandOpcode, 24, 26) |
5936 __gen_field(values->MediaCommandSubOpcode, 16, 23) |
5937 __gen_field(values->DwordLength, 0, 15) |
5938 0;
5939
5940 dw[1] =
5941 __gen_field(values->InterfaceDescriptorOffset, 0, 5) |
5942 0;
5943
5944 dw[2] =
5945 __gen_field(values->ChildrenPresent, 31, 31) |
5946 __gen_field(values->ThreadSynchronization, 24, 24) |
5947 __gen_field(values->ForceDestination, 22, 22) |
5948 __gen_field(values->UseScoreboard, 21, 21) |
5949 __gen_field(values->SliceDestinationSelect, 19, 20) |
5950 __gen_field(values->SubSliceDestinationSelect, 17, 18) |
5951 __gen_field(values->IndirectDataLength, 0, 16) |
5952 0;
5953
5954 uint32_t dw3 =
5955 0;
5956
5957 dw[3] =
5958 __gen_combine_address(data, &dw[3], values->IndirectDataStartAddress, dw3);
5959
5960 dw[4] =
5961 __gen_field(values->ScoredboardY, 16, 24) |
5962 __gen_field(values->ScoreboardX, 0, 8) |
5963 0;
5964
5965 dw[5] =
5966 __gen_field(values->ScoreboardColor, 16, 19) |
5967 __gen_field(values->ScoreboardMask, 0, 7) |
5968 0;
5969
5970 /* variable length fields follow */
5971 }
5972
5973 #define GEN8_MEDIA_OBJECT_GRPID_length_bias 0x00000002
5974 #define GEN8_MEDIA_OBJECT_GRPID_header \
5975 .CommandType = 3, \
5976 .MediaCommandPipeline = 2, \
5977 .MediaCommandOpcode = 1, \
5978 .MediaCommandSubOpcode = 6
5979
5980 struct GEN8_MEDIA_OBJECT_GRPID {
5981 uint32_t CommandType;
5982 uint32_t MediaCommandPipeline;
5983 uint32_t MediaCommandOpcode;
5984 uint32_t MediaCommandSubOpcode;
5985 uint32_t DwordLength;
5986 uint32_t InterfaceDescriptorOffset;
5987 uint32_t EndofThreadGroup;
5988 uint32_t ForceDestination;
5989 #define Notusingscoreboard 0
5990 #define Usingscoreboard 1
5991 uint32_t UseScoreboard;
5992 #define Slice0 0
5993 #define Slice1 1
5994 #define Slice2 2
5995 uint32_t SliceDestinationSelect;
5996 #define SubSlice2 2
5997 #define SubSlice1 1
5998 #define SubSlice0 0
5999 uint32_t SubSliceDestinationSelect;
6000 uint32_t IndirectDataLength;
6001 __gen_address_type IndirectDataStartAddress;
6002 uint32_t ScoredboardY;
6003 uint32_t ScoreboardX;
6004 uint32_t ScoreboardColor;
6005 uint32_t ScoreboardMask;
6006 uint32_t GroupID;
6007 /* variable length fields follow */
6008 };
6009
6010 static inline void
6011 GEN8_MEDIA_OBJECT_GRPID_pack(__gen_user_data *data, void * restrict dst,
6012 const struct GEN8_MEDIA_OBJECT_GRPID * restrict values)
6013 {
6014 uint32_t *dw = (uint32_t * restrict) dst;
6015
6016 dw[0] =
6017 __gen_field(values->CommandType, 29, 31) |
6018 __gen_field(values->MediaCommandPipeline, 27, 28) |
6019 __gen_field(values->MediaCommandOpcode, 24, 26) |
6020 __gen_field(values->MediaCommandSubOpcode, 16, 23) |
6021 __gen_field(values->DwordLength, 0, 15) |
6022 0;
6023
6024 dw[1] =
6025 __gen_field(values->InterfaceDescriptorOffset, 0, 5) |
6026 0;
6027
6028 dw[2] =
6029 __gen_field(values->EndofThreadGroup, 23, 23) |
6030 __gen_field(values->ForceDestination, 22, 22) |
6031 __gen_field(values->UseScoreboard, 21, 21) |
6032 __gen_field(values->SliceDestinationSelect, 19, 20) |
6033 __gen_field(values->SubSliceDestinationSelect, 17, 18) |
6034 __gen_field(values->IndirectDataLength, 0, 16) |
6035 0;
6036
6037 uint32_t dw3 =
6038 0;
6039
6040 dw[3] =
6041 __gen_combine_address(data, &dw[3], values->IndirectDataStartAddress, dw3);
6042
6043 dw[4] =
6044 __gen_field(values->ScoredboardY, 16, 24) |
6045 __gen_field(values->ScoreboardX, 0, 8) |
6046 0;
6047
6048 dw[5] =
6049 __gen_field(values->ScoreboardColor, 16, 19) |
6050 __gen_field(values->ScoreboardMask, 0, 7) |
6051 0;
6052
6053 dw[6] =
6054 __gen_field(values->GroupID, 0, 31) |
6055 0;
6056
6057 /* variable length fields follow */
6058 }
6059
6060 #define GEN8_MEDIA_OBJECT_PRT_length 0x00000010
6061 #define GEN8_MEDIA_OBJECT_PRT_length_bias 0x00000002
6062 #define GEN8_MEDIA_OBJECT_PRT_header \
6063 .CommandType = 3, \
6064 .Pipeline = 2, \
6065 .MediaCommandOpcode = 1, \
6066 .SubOpcode = 2, \
6067 .DwordLength = 14
6068
6069 struct GEN8_MEDIA_OBJECT_PRT {
6070 uint32_t CommandType;
6071 uint32_t Pipeline;
6072 uint32_t MediaCommandOpcode;
6073 uint32_t SubOpcode;
6074 uint32_t DwordLength;
6075 uint32_t InterfaceDescriptorOffset;
6076 uint32_t ChildrenPresent;
6077 uint32_t PRT_FenceNeeded;
6078 #define Rootthreadqueue 0
6079 #define VFEstateflush 1
6080 uint32_t PRT_FenceType;
6081 uint32_t InlineData;
6082 };
6083
6084 static inline void
6085 GEN8_MEDIA_OBJECT_PRT_pack(__gen_user_data *data, void * restrict dst,
6086 const struct GEN8_MEDIA_OBJECT_PRT * restrict values)
6087 {
6088 uint32_t *dw = (uint32_t * restrict) dst;
6089
6090 dw[0] =
6091 __gen_field(values->CommandType, 29, 31) |
6092 __gen_field(values->Pipeline, 27, 28) |
6093 __gen_field(values->MediaCommandOpcode, 24, 26) |
6094 __gen_field(values->SubOpcode, 16, 23) |
6095 __gen_field(values->DwordLength, 0, 15) |
6096 0;
6097
6098 dw[1] =
6099 __gen_field(values->InterfaceDescriptorOffset, 0, 5) |
6100 0;
6101
6102 dw[2] =
6103 __gen_field(values->ChildrenPresent, 31, 31) |
6104 __gen_field(values->PRT_FenceNeeded, 23, 23) |
6105 __gen_field(values->PRT_FenceType, 22, 22) |
6106 0;
6107
6108 dw[3] =
6109 0;
6110
6111 dw[4] =
6112 __gen_field(values->InlineData, 0, 31) |
6113 0;
6114
6115 }
6116
6117 #define GEN8_MEDIA_OBJECT_WALKER_length_bias 0x00000002
6118 #define GEN8_MEDIA_OBJECT_WALKER_header \
6119 .CommandType = 3, \
6120 .Pipeline = 2, \
6121 .MediaCommandOpcode = 1, \
6122 .SubOpcode = 3
6123
6124 struct GEN8_MEDIA_OBJECT_WALKER {
6125 uint32_t CommandType;
6126 uint32_t Pipeline;
6127 uint32_t MediaCommandOpcode;
6128 uint32_t SubOpcode;
6129 uint32_t DwordLength;
6130 uint32_t InterfaceDescriptorOffset;
6131 uint32_t ChildrenPresent;
6132 #define Nothreadsynchronization 0
6133 #define Threaddispatchissynchronizedbythespawnrootthreadmessage 1
6134 uint32_t ThreadSynchronization;
6135 #define Notusingscoreboard 0
6136 #define Usingscoreboard 1
6137 uint32_t UseScoreboard;
6138 uint32_t IndirectDataLength;
6139 uint32_t IndirectDataStartAddress;
6140 uint32_t GroupIDLoopSelect;
6141 uint32_t ScoreboardMask;
6142 uint32_t ColorCountMinusOne;
6143 uint32_t MiddleLoopExtraSteps;
6144 uint32_t LocalMidLoopUnitY;
6145 uint32_t MidLoopUnitX;
6146 uint32_t GlobalLoopExecCount;
6147 uint32_t LocalLoopExecCount;
6148 uint32_t BlockResolutionY;
6149 uint32_t BlockResolutionX;
6150 uint32_t LocalStartY;
6151 uint32_t LocalStartX;
6152 uint32_t LocalOuterLoopStrideY;
6153 uint32_t LocalOuterLoopStrideX;
6154 uint32_t LocalInnerLoopUnitY;
6155 uint32_t LocalInnerLoopUnitX;
6156 uint32_t GlobalResolutionY;
6157 uint32_t GlobalResolutionX;
6158 uint32_t GlobalStartY;
6159 uint32_t GlobalStartX;
6160 uint32_t GlobalOuterLoopStrideY;
6161 uint32_t GlobalOuterLoopStrideX;
6162 uint32_t GlobalInnerLoopUnitY;
6163 uint32_t GlobalInnerLoopUnitX;
6164 /* variable length fields follow */
6165 };
6166
6167 static inline void
6168 GEN8_MEDIA_OBJECT_WALKER_pack(__gen_user_data *data, void * restrict dst,
6169 const struct GEN8_MEDIA_OBJECT_WALKER * restrict values)
6170 {
6171 uint32_t *dw = (uint32_t * restrict) dst;
6172
6173 dw[0] =
6174 __gen_field(values->CommandType, 29, 31) |
6175 __gen_field(values->Pipeline, 27, 28) |
6176 __gen_field(values->MediaCommandOpcode, 24, 26) |
6177 __gen_field(values->SubOpcode, 16, 23) |
6178 __gen_field(values->DwordLength, 0, 15) |
6179 0;
6180
6181 dw[1] =
6182 __gen_field(values->InterfaceDescriptorOffset, 0, 5) |
6183 0;
6184
6185 dw[2] =
6186 __gen_field(values->ChildrenPresent, 31, 31) |
6187 __gen_field(values->ThreadSynchronization, 24, 24) |
6188 __gen_field(values->UseScoreboard, 21, 21) |
6189 __gen_field(values->IndirectDataLength, 0, 16) |
6190 0;
6191
6192 dw[3] =
6193 __gen_offset(values->IndirectDataStartAddress, 0, 31) |
6194 0;
6195
6196 dw[4] =
6197 0;
6198
6199 dw[5] =
6200 __gen_field(values->GroupIDLoopSelect, 8, 31) |
6201 __gen_field(values->ScoreboardMask, 0, 7) |
6202 0;
6203
6204 dw[6] =
6205 __gen_field(values->ColorCountMinusOne, 24, 27) |
6206 __gen_field(values->MiddleLoopExtraSteps, 16, 20) |
6207 __gen_field(values->LocalMidLoopUnitY, 12, 13) |
6208 __gen_field(values->MidLoopUnitX, 8, 9) |
6209 0;
6210
6211 dw[7] =
6212 __gen_field(values->GlobalLoopExecCount, 16, 25) |
6213 __gen_field(values->LocalLoopExecCount, 0, 9) |
6214 0;
6215
6216 dw[8] =
6217 __gen_field(values->BlockResolutionY, 16, 24) |
6218 __gen_field(values->BlockResolutionX, 0, 8) |
6219 0;
6220
6221 dw[9] =
6222 __gen_field(values->LocalStartY, 16, 24) |
6223 __gen_field(values->LocalStartX, 0, 8) |
6224 0;
6225
6226 dw[10] =
6227 0;
6228
6229 dw[11] =
6230 __gen_field(values->LocalOuterLoopStrideY, 16, 25) |
6231 __gen_field(values->LocalOuterLoopStrideX, 0, 9) |
6232 0;
6233
6234 dw[12] =
6235 __gen_field(values->LocalInnerLoopUnitY, 16, 25) |
6236 __gen_field(values->LocalInnerLoopUnitX, 0, 9) |
6237 0;
6238
6239 dw[13] =
6240 __gen_field(values->GlobalResolutionY, 16, 24) |
6241 __gen_field(values->GlobalResolutionX, 0, 8) |
6242 0;
6243
6244 dw[14] =
6245 __gen_field(values->GlobalStartY, 16, 25) |
6246 __gen_field(values->GlobalStartX, 0, 9) |
6247 0;
6248
6249 dw[15] =
6250 __gen_field(values->GlobalOuterLoopStrideY, 16, 25) |
6251 __gen_field(values->GlobalOuterLoopStrideX, 0, 9) |
6252 0;
6253
6254 dw[16] =
6255 __gen_field(values->GlobalInnerLoopUnitY, 16, 25) |
6256 __gen_field(values->GlobalInnerLoopUnitX, 0, 9) |
6257 0;
6258
6259 /* variable length fields follow */
6260 }
6261
6262 #define GEN8_MEDIA_STATE_FLUSH_length 0x00000002
6263 #define GEN8_MEDIA_STATE_FLUSH_length_bias 0x00000002
6264 #define GEN8_MEDIA_STATE_FLUSH_header \
6265 .CommandType = 3, \
6266 .Pipeline = 2, \
6267 .MediaCommandOpcode = 0, \
6268 .SubOpcode = 4, \
6269 .DwordLength = 0
6270
6271 struct GEN8_MEDIA_STATE_FLUSH {
6272 uint32_t CommandType;
6273 uint32_t Pipeline;
6274 uint32_t MediaCommandOpcode;
6275 uint32_t SubOpcode;
6276 uint32_t DwordLength;
6277 uint32_t FlushtoGO;
6278 uint32_t WatermarkRequired;
6279 uint32_t InterfaceDescriptorOffset;
6280 };
6281
6282 static inline void
6283 GEN8_MEDIA_STATE_FLUSH_pack(__gen_user_data *data, void * restrict dst,
6284 const struct GEN8_MEDIA_STATE_FLUSH * restrict values)
6285 {
6286 uint32_t *dw = (uint32_t * restrict) dst;
6287
6288 dw[0] =
6289 __gen_field(values->CommandType, 29, 31) |
6290 __gen_field(values->Pipeline, 27, 28) |
6291 __gen_field(values->MediaCommandOpcode, 24, 26) |
6292 __gen_field(values->SubOpcode, 16, 23) |
6293 __gen_field(values->DwordLength, 0, 15) |
6294 0;
6295
6296 dw[1] =
6297 __gen_field(values->FlushtoGO, 7, 7) |
6298 __gen_field(values->WatermarkRequired, 6, 6) |
6299 __gen_field(values->InterfaceDescriptorOffset, 0, 5) |
6300 0;
6301
6302 }
6303
6304 #define GEN8_MEDIA_VFE_STATE_length 0x00000009
6305 #define GEN8_MEDIA_VFE_STATE_length_bias 0x00000002
6306 #define GEN8_MEDIA_VFE_STATE_header \
6307 .CommandType = 3, \
6308 .Pipeline = 2, \
6309 .MediaCommandOpcode = 0, \
6310 .SubOpcode = 0, \
6311 .DwordLength = 7
6312
6313 struct GEN8_MEDIA_VFE_STATE {
6314 uint32_t CommandType;
6315 uint32_t Pipeline;
6316 uint32_t MediaCommandOpcode;
6317 uint32_t SubOpcode;
6318 uint32_t DwordLength;
6319 uint32_t ScratchSpaceBasePointer;
6320 uint32_t StackSize;
6321 uint32_t PerThreadScratchSpace;
6322 uint32_t ScratchSpaceBasePointerHigh;
6323 uint32_t MaximumNumberofThreads;
6324 uint32_t NumberofURBEntries;
6325 #define Maintainingtheexistingtimestampstate 0
6326 #define Resettingrelativetimerandlatchingtheglobaltimestamp 1
6327 uint32_t ResetGatewayTimer;
6328 #define MaintainingOpenGatewayForwardMsgCloseGatewayprotocollegacymode 0
6329 #define BypassingOpenGatewayCloseGatewayprotocol 1
6330 uint32_t BypassGatewayControl;
6331 uint32_t SliceDisable;
6332 uint32_t URBEntryAllocationSize;
6333 uint32_t CURBEAllocationSize;
6334 #define Scoreboarddisabled 0
6335 #define Scoreboardenabled 1
6336 uint32_t ScoreboardEnable;
6337 #define StallingScoreboard 0
6338 #define NonStallingScoreboard 1
6339 uint32_t ScoreboardType;
6340 uint32_t ScoreboardMask;
6341 uint32_t Scoreboard3DeltaY;
6342 uint32_t Scoreboard3DeltaX;
6343 uint32_t Scoreboard2DeltaY;
6344 uint32_t Scoreboard2DeltaX;
6345 uint32_t Scoreboard1DeltaY;
6346 uint32_t Scoreboard1DeltaX;
6347 uint32_t Scoreboard0DeltaY;
6348 uint32_t Scoreboard0DeltaX;
6349 uint32_t Scoreboard7DeltaY;
6350 uint32_t Scoreboard7DeltaX;
6351 uint32_t Scoreboard6DeltaY;
6352 uint32_t Scoreboard6DeltaX;
6353 uint32_t Scoreboard5DeltaY;
6354 uint32_t Scoreboard5DeltaX;
6355 uint32_t Scoreboard4DeltaY;
6356 uint32_t Scoreboard4DeltaX;
6357 };
6358
6359 static inline void
6360 GEN8_MEDIA_VFE_STATE_pack(__gen_user_data *data, void * restrict dst,
6361 const struct GEN8_MEDIA_VFE_STATE * restrict values)
6362 {
6363 uint32_t *dw = (uint32_t * restrict) dst;
6364
6365 dw[0] =
6366 __gen_field(values->CommandType, 29, 31) |
6367 __gen_field(values->Pipeline, 27, 28) |
6368 __gen_field(values->MediaCommandOpcode, 24, 26) |
6369 __gen_field(values->SubOpcode, 16, 23) |
6370 __gen_field(values->DwordLength, 0, 15) |
6371 0;
6372
6373 dw[1] =
6374 __gen_offset(values->ScratchSpaceBasePointer, 10, 31) |
6375 __gen_field(values->StackSize, 4, 7) |
6376 __gen_field(values->PerThreadScratchSpace, 0, 3) |
6377 0;
6378
6379 dw[2] =
6380 __gen_offset(values->ScratchSpaceBasePointerHigh, 0, 15) |
6381 0;
6382
6383 dw[3] =
6384 __gen_field(values->MaximumNumberofThreads, 16, 31) |
6385 __gen_field(values->NumberofURBEntries, 8, 15) |
6386 __gen_field(values->ResetGatewayTimer, 7, 7) |
6387 __gen_field(values->BypassGatewayControl, 6, 6) |
6388 0;
6389
6390 dw[4] =
6391 __gen_field(values->SliceDisable, 0, 1) |
6392 0;
6393
6394 dw[5] =
6395 __gen_field(values->URBEntryAllocationSize, 16, 31) |
6396 __gen_field(values->CURBEAllocationSize, 0, 15) |
6397 0;
6398
6399 dw[6] =
6400 __gen_field(values->ScoreboardEnable, 31, 31) |
6401 __gen_field(values->ScoreboardType, 30, 30) |
6402 __gen_field(values->ScoreboardMask, 0, 7) |
6403 0;
6404
6405 dw[7] =
6406 __gen_field(values->Scoreboard3DeltaY, 28, 31) |
6407 __gen_field(values->Scoreboard3DeltaX, 24, 27) |
6408 __gen_field(values->Scoreboard2DeltaY, 20, 23) |
6409 __gen_field(values->Scoreboard2DeltaX, 16, 19) |
6410 __gen_field(values->Scoreboard1DeltaY, 12, 15) |
6411 __gen_field(values->Scoreboard1DeltaX, 8, 11) |
6412 __gen_field(values->Scoreboard0DeltaY, 4, 7) |
6413 __gen_field(values->Scoreboard0DeltaX, 0, 3) |
6414 0;
6415
6416 dw[8] =
6417 __gen_field(values->Scoreboard7DeltaY, 28, 31) |
6418 __gen_field(values->Scoreboard7DeltaX, 24, 27) |
6419 __gen_field(values->Scoreboard6DeltaY, 20, 23) |
6420 __gen_field(values->Scoreboard6DeltaX, 16, 19) |
6421 __gen_field(values->Scoreboard5DeltaY, 12, 15) |
6422 __gen_field(values->Scoreboard5DeltaX, 8, 11) |
6423 __gen_field(values->Scoreboard4DeltaY, 4, 7) |
6424 __gen_field(values->Scoreboard4DeltaX, 0, 3) |
6425 0;
6426
6427 }
6428
6429 #define GEN8_MI_ARB_CHECK_length 0x00000001
6430 #define GEN8_MI_ARB_CHECK_length_bias 0x00000001
6431 #define GEN8_MI_ARB_CHECK_header \
6432 .CommandType = 0, \
6433 .MICommandOpcode = 5
6434
6435 struct GEN8_MI_ARB_CHECK {
6436 uint32_t CommandType;
6437 uint32_t MICommandOpcode;
6438 };
6439
6440 static inline void
6441 GEN8_MI_ARB_CHECK_pack(__gen_user_data *data, void * restrict dst,
6442 const struct GEN8_MI_ARB_CHECK * restrict values)
6443 {
6444 uint32_t *dw = (uint32_t * restrict) dst;
6445
6446 dw[0] =
6447 __gen_field(values->CommandType, 29, 31) |
6448 __gen_field(values->MICommandOpcode, 23, 28) |
6449 0;
6450
6451 }
6452
6453 #define GEN8_MI_BATCH_BUFFER_END_length 0x00000001
6454 #define GEN8_MI_BATCH_BUFFER_END_length_bias 0x00000001
6455 #define GEN8_MI_BATCH_BUFFER_END_header \
6456 .CommandType = 0, \
6457 .MICommandOpcode = 10
6458
6459 struct GEN8_MI_BATCH_BUFFER_END {
6460 uint32_t CommandType;
6461 uint32_t MICommandOpcode;
6462 };
6463
6464 static inline void
6465 GEN8_MI_BATCH_BUFFER_END_pack(__gen_user_data *data, void * restrict dst,
6466 const struct GEN8_MI_BATCH_BUFFER_END * restrict values)
6467 {
6468 uint32_t *dw = (uint32_t * restrict) dst;
6469
6470 dw[0] =
6471 __gen_field(values->CommandType, 29, 31) |
6472 __gen_field(values->MICommandOpcode, 23, 28) |
6473 0;
6474
6475 }
6476
6477 #define GEN8_MI_BATCH_BUFFER_START_length 0x00000003
6478 #define GEN8_MI_BATCH_BUFFER_START_length_bias 0x00000002
6479 #define GEN8_MI_BATCH_BUFFER_START_header \
6480 .CommandType = 0, \
6481 .MICommandOpcode = 49, \
6482 .DwordLength = 1
6483
6484 struct GEN8_MI_BATCH_BUFFER_START {
6485 uint32_t CommandType;
6486 uint32_t MICommandOpcode;
6487 #define _1stlevelbatch 0
6488 #define _2ndlevelbatch 1
6489 uint32_t _2ndLevelBatchBuffer;
6490 uint32_t AddOffsetEnable;
6491 uint32_t PredicationEnable;
6492 uint32_t ResourceStreamerEnable;
6493 #define ASI_GGTT 0
6494 #define ASI_PPGTT 1
6495 uint32_t AddressSpaceIndicator;
6496 uint32_t DwordLength;
6497 __gen_address_type BatchBufferStartAddress;
6498 __gen_address_type BatchBufferStartAddressHigh;
6499 };
6500
6501 static inline void
6502 GEN8_MI_BATCH_BUFFER_START_pack(__gen_user_data *data, void * restrict dst,
6503 const struct GEN8_MI_BATCH_BUFFER_START * restrict values)
6504 {
6505 uint32_t *dw = (uint32_t * restrict) dst;
6506
6507 dw[0] =
6508 __gen_field(values->CommandType, 29, 31) |
6509 __gen_field(values->MICommandOpcode, 23, 28) |
6510 __gen_field(values->_2ndLevelBatchBuffer, 22, 22) |
6511 __gen_field(values->AddOffsetEnable, 16, 16) |
6512 __gen_field(values->PredicationEnable, 15, 15) |
6513 __gen_field(values->ResourceStreamerEnable, 10, 10) |
6514 __gen_field(values->AddressSpaceIndicator, 8, 8) |
6515 __gen_field(values->DwordLength, 0, 7) |
6516 0;
6517
6518 uint32_t dw1 =
6519 0;
6520
6521 dw[1] =
6522 __gen_combine_address(data, &dw[1], values->BatchBufferStartAddress, dw1);
6523
6524 uint32_t dw2 =
6525 0;
6526
6527 dw[2] =
6528 __gen_combine_address(data, &dw[2], values->BatchBufferStartAddressHigh, dw2);
6529
6530 }
6531
6532 #define GEN8_MI_CLFLUSH_length_bias 0x00000002
6533 #define GEN8_MI_CLFLUSH_header \
6534 .CommandType = 0, \
6535 .MICommandOpcode = 39
6536
6537 struct GEN8_MI_CLFLUSH {
6538 uint32_t CommandType;
6539 uint32_t MICommandOpcode;
6540 #define PerProcessGraphicsAddress 0
6541 #define GlobalGraphicsAddress 1
6542 uint32_t UseGlobalGTT;
6543 uint32_t DwordLength;
6544 __gen_address_type PageBaseAddress;
6545 uint32_t StartingCachelineOffset;
6546 __gen_address_type PageBaseAddressHigh;
6547 /* variable length fields follow */
6548 };
6549
6550 static inline void
6551 GEN8_MI_CLFLUSH_pack(__gen_user_data *data, void * restrict dst,
6552 const struct GEN8_MI_CLFLUSH * restrict values)
6553 {
6554 uint32_t *dw = (uint32_t * restrict) dst;
6555
6556 dw[0] =
6557 __gen_field(values->CommandType, 29, 31) |
6558 __gen_field(values->MICommandOpcode, 23, 28) |
6559 __gen_field(values->UseGlobalGTT, 22, 22) |
6560 __gen_field(values->DwordLength, 0, 9) |
6561 0;
6562
6563 uint32_t dw1 =
6564 __gen_field(values->StartingCachelineOffset, 6, 11) |
6565 0;
6566
6567 dw[1] =
6568 __gen_combine_address(data, &dw[1], values->PageBaseAddress, dw1);
6569
6570 uint32_t dw2 =
6571 0;
6572
6573 dw[2] =
6574 __gen_combine_address(data, &dw[2], values->PageBaseAddressHigh, dw2);
6575
6576 /* variable length fields follow */
6577 }
6578
6579 #define GEN8_MI_CONDITIONAL_BATCH_BUFFER_END_length 0x00000003
6580 #define GEN8_MI_CONDITIONAL_BATCH_BUFFER_END_length_bias 0x00000002
6581 #define GEN8_MI_CONDITIONAL_BATCH_BUFFER_END_header\
6582 .CommandType = 0, \
6583 .MICommandOpcode = 54, \
6584 .UseGlobalGTT = 0, \
6585 .CompareSemaphore = 0, \
6586 .DwordLength = 1
6587
6588 struct GEN8_MI_CONDITIONAL_BATCH_BUFFER_END {
6589 uint32_t CommandType;
6590 uint32_t MICommandOpcode;
6591 uint32_t UseGlobalGTT;
6592 uint32_t CompareSemaphore;
6593 uint32_t DwordLength;
6594 uint32_t CompareDataDword;
6595 __gen_address_type CompareAddress;
6596 __gen_address_type CompareAddressHigh;
6597 };
6598
6599 static inline void
6600 GEN8_MI_CONDITIONAL_BATCH_BUFFER_END_pack(__gen_user_data *data, void * restrict dst,
6601 const struct GEN8_MI_CONDITIONAL_BATCH_BUFFER_END * restrict values)
6602 {
6603 uint32_t *dw = (uint32_t * restrict) dst;
6604
6605 dw[0] =
6606 __gen_field(values->CommandType, 29, 31) |
6607 __gen_field(values->MICommandOpcode, 23, 28) |
6608 __gen_field(values->UseGlobalGTT, 22, 22) |
6609 __gen_field(values->CompareSemaphore, 21, 21) |
6610 __gen_field(values->DwordLength, 0, 7) |
6611 0;
6612
6613 dw[1] =
6614 __gen_field(values->CompareDataDword, 0, 31) |
6615 0;
6616
6617 uint32_t dw2 =
6618 0;
6619
6620 dw[2] =
6621 __gen_combine_address(data, &dw[2], values->CompareAddress, dw2);
6622
6623 uint32_t dw3 =
6624 0;
6625
6626 dw[3] =
6627 __gen_combine_address(data, &dw[3], values->CompareAddressHigh, dw3);
6628
6629 }
6630
6631 #define GEN8_MI_COPY_MEM_MEM_length 0x00000005
6632 #define GEN8_MI_COPY_MEM_MEM_length_bias 0x00000002
6633 #define GEN8_MI_COPY_MEM_MEM_header \
6634 .CommandType = 0, \
6635 .MICommandOpcode = 46, \
6636 .DwordLength = 3
6637
6638 struct GEN8_MI_COPY_MEM_MEM {
6639 uint32_t CommandType;
6640 uint32_t MICommandOpcode;
6641 #define PerProcessGraphicsAddress 0
6642 #define GlobalGraphicsAddress 1
6643 uint32_t UseGlobalGTTSource;
6644 #define PerProcessGraphicsAddress 0
6645 #define GlobalGraphicsAddress 1
6646 uint32_t UseGlobalGTTDestination;
6647 uint32_t DwordLength;
6648 __gen_address_type DestinationMemoryAddress;
6649 __gen_address_type SourceMemoryAddress;
6650 };
6651
6652 static inline void
6653 GEN8_MI_COPY_MEM_MEM_pack(__gen_user_data *data, void * restrict dst,
6654 const struct GEN8_MI_COPY_MEM_MEM * restrict values)
6655 {
6656 uint32_t *dw = (uint32_t * restrict) dst;
6657
6658 dw[0] =
6659 __gen_field(values->CommandType, 29, 31) |
6660 __gen_field(values->MICommandOpcode, 23, 28) |
6661 __gen_field(values->UseGlobalGTTSource, 22, 22) |
6662 __gen_field(values->UseGlobalGTTDestination, 21, 21) |
6663 __gen_field(values->DwordLength, 0, 7) |
6664 0;
6665
6666 uint32_t dw1 =
6667 0;
6668
6669 dw[1] =
6670 __gen_combine_address(data, &dw[1], values->DestinationMemoryAddress, dw1);
6671
6672 uint32_t dw3 =
6673 0;
6674
6675 dw[3] =
6676 __gen_combine_address(data, &dw[3], values->SourceMemoryAddress, dw3);
6677
6678 }
6679
6680 #define GEN8_MI_LOAD_REGISTER_IMM_length 0x00000003
6681 #define GEN8_MI_LOAD_REGISTER_IMM_length_bias 0x00000002
6682 #define GEN8_MI_LOAD_REGISTER_IMM_header \
6683 .CommandType = 0, \
6684 .MICommandOpcode = 34, \
6685 .DwordLength = 1
6686
6687 struct GEN8_MI_LOAD_REGISTER_IMM {
6688 uint32_t CommandType;
6689 uint32_t MICommandOpcode;
6690 uint32_t ByteWriteDisables;
6691 uint32_t DwordLength;
6692 uint32_t RegisterOffset;
6693 uint32_t DataDWord;
6694 };
6695
6696 static inline void
6697 GEN8_MI_LOAD_REGISTER_IMM_pack(__gen_user_data *data, void * restrict dst,
6698 const struct GEN8_MI_LOAD_REGISTER_IMM * restrict values)
6699 {
6700 uint32_t *dw = (uint32_t * restrict) dst;
6701
6702 dw[0] =
6703 __gen_field(values->CommandType, 29, 31) |
6704 __gen_field(values->MICommandOpcode, 23, 28) |
6705 __gen_field(values->ByteWriteDisables, 8, 11) |
6706 __gen_field(values->DwordLength, 0, 7) |
6707 0;
6708
6709 dw[1] =
6710 __gen_offset(values->RegisterOffset, 2, 22) |
6711 0;
6712
6713 dw[2] =
6714 __gen_field(values->DataDWord, 0, 31) |
6715 0;
6716
6717 }
6718
6719 #define GEN8_MI_LOAD_REGISTER_MEM_length 0x00000004
6720 #define GEN8_MI_LOAD_REGISTER_MEM_length_bias 0x00000002
6721 #define GEN8_MI_LOAD_REGISTER_MEM_header \
6722 .CommandType = 0, \
6723 .MICommandOpcode = 41, \
6724 .DwordLength = 2
6725
6726 struct GEN8_MI_LOAD_REGISTER_MEM {
6727 uint32_t CommandType;
6728 uint32_t MICommandOpcode;
6729 uint32_t UseGlobalGTT;
6730 uint32_t AsyncModeEnable;
6731 uint32_t DwordLength;
6732 uint32_t RegisterAddress;
6733 __gen_address_type MemoryAddress;
6734 };
6735
6736 static inline void
6737 GEN8_MI_LOAD_REGISTER_MEM_pack(__gen_user_data *data, void * restrict dst,
6738 const struct GEN8_MI_LOAD_REGISTER_MEM * restrict values)
6739 {
6740 uint32_t *dw = (uint32_t * restrict) dst;
6741
6742 dw[0] =
6743 __gen_field(values->CommandType, 29, 31) |
6744 __gen_field(values->MICommandOpcode, 23, 28) |
6745 __gen_field(values->UseGlobalGTT, 22, 22) |
6746 __gen_field(values->AsyncModeEnable, 21, 21) |
6747 __gen_field(values->DwordLength, 0, 7) |
6748 0;
6749
6750 dw[1] =
6751 __gen_offset(values->RegisterAddress, 2, 22) |
6752 0;
6753
6754 uint32_t dw2 =
6755 0;
6756
6757 dw[2] =
6758 __gen_combine_address(data, &dw[2], values->MemoryAddress, dw2);
6759
6760 }
6761
6762 #define GEN8_MI_LOAD_SCAN_LINES_EXCL_length 0x00000002
6763 #define GEN8_MI_LOAD_SCAN_LINES_EXCL_length_bias 0x00000002
6764 #define GEN8_MI_LOAD_SCAN_LINES_EXCL_header \
6765 .CommandType = 0, \
6766 .MICommandOpcode = 19, \
6767 .DwordLength = 0
6768
6769 struct GEN8_MI_LOAD_SCAN_LINES_EXCL {
6770 uint32_t CommandType;
6771 uint32_t MICommandOpcode;
6772 #define DisplayPlaneA 0
6773 #define DisplayPlaneB 1
6774 #define DisplayPlaneC 4
6775 uint32_t DisplayPlaneSelect;
6776 uint32_t DwordLength;
6777 uint32_t StartScanLineNumber;
6778 uint32_t EndScanLineNumber;
6779 };
6780
6781 static inline void
6782 GEN8_MI_LOAD_SCAN_LINES_EXCL_pack(__gen_user_data *data, void * restrict dst,
6783 const struct GEN8_MI_LOAD_SCAN_LINES_EXCL * restrict values)
6784 {
6785 uint32_t *dw = (uint32_t * restrict) dst;
6786
6787 dw[0] =
6788 __gen_field(values->CommandType, 29, 31) |
6789 __gen_field(values->MICommandOpcode, 23, 28) |
6790 __gen_field(values->DisplayPlaneSelect, 19, 21) |
6791 __gen_field(values->DwordLength, 0, 5) |
6792 0;
6793
6794 dw[1] =
6795 __gen_field(values->StartScanLineNumber, 16, 28) |
6796 __gen_field(values->EndScanLineNumber, 0, 12) |
6797 0;
6798
6799 }
6800
6801 #define GEN8_MI_LOAD_SCAN_LINES_INCL_length 0x00000002
6802 #define GEN8_MI_LOAD_SCAN_LINES_INCL_length_bias 0x00000002
6803 #define GEN8_MI_LOAD_SCAN_LINES_INCL_header \
6804 .CommandType = 0, \
6805 .MICommandOpcode = 18, \
6806 .DwordLength = 0
6807
6808 struct GEN8_MI_LOAD_SCAN_LINES_INCL {
6809 uint32_t CommandType;
6810 uint32_t MICommandOpcode;
6811 #define DisplayPlaneA 0
6812 #define DisplayPlaneB 1
6813 #define DisplayPlaneC 4
6814 uint32_t DisplayPlaneSelect;
6815 #define NeverForward 0
6816 #define AlwaysForward 1
6817 #define ConditionallyForward 2
6818 uint32_t ScanLineEventDoneForward;
6819 uint32_t DwordLength;
6820 uint32_t StartScanLineNumber;
6821 uint32_t EndScanLineNumber;
6822 };
6823
6824 static inline void
6825 GEN8_MI_LOAD_SCAN_LINES_INCL_pack(__gen_user_data *data, void * restrict dst,
6826 const struct GEN8_MI_LOAD_SCAN_LINES_INCL * restrict values)
6827 {
6828 uint32_t *dw = (uint32_t * restrict) dst;
6829
6830 dw[0] =
6831 __gen_field(values->CommandType, 29, 31) |
6832 __gen_field(values->MICommandOpcode, 23, 28) |
6833 __gen_field(values->DisplayPlaneSelect, 19, 21) |
6834 __gen_field(values->ScanLineEventDoneForward, 17, 18) |
6835 __gen_field(values->DwordLength, 0, 5) |
6836 0;
6837
6838 dw[1] =
6839 __gen_field(values->StartScanLineNumber, 16, 28) |
6840 __gen_field(values->EndScanLineNumber, 0, 12) |
6841 0;
6842
6843 }
6844
6845 #define GEN8_MI_LOAD_URB_MEM_length 0x00000004
6846 #define GEN8_MI_LOAD_URB_MEM_length_bias 0x00000002
6847 #define GEN8_MI_LOAD_URB_MEM_header \
6848 .CommandType = 0, \
6849 .MICommandOpcode = 44, \
6850 .DwordLength = 2
6851
6852 struct GEN8_MI_LOAD_URB_MEM {
6853 uint32_t CommandType;
6854 uint32_t MICommandOpcode;
6855 uint32_t DwordLength;
6856 uint32_t URBAddress;
6857 __gen_address_type MemoryAddress;
6858 };
6859
6860 static inline void
6861 GEN8_MI_LOAD_URB_MEM_pack(__gen_user_data *data, void * restrict dst,
6862 const struct GEN8_MI_LOAD_URB_MEM * restrict values)
6863 {
6864 uint32_t *dw = (uint32_t * restrict) dst;
6865
6866 dw[0] =
6867 __gen_field(values->CommandType, 29, 31) |
6868 __gen_field(values->MICommandOpcode, 23, 28) |
6869 __gen_field(values->DwordLength, 0, 7) |
6870 0;
6871
6872 dw[1] =
6873 __gen_field(values->URBAddress, 2, 14) |
6874 0;
6875
6876 uint32_t dw2 =
6877 0;
6878
6879 dw[2] =
6880 __gen_combine_address(data, &dw[2], values->MemoryAddress, dw2);
6881
6882 }
6883
6884 #define GEN8_MI_MATH_length_bias 0x00000002
6885 #define GEN8_MI_MATH_header \
6886 .CommandType = 0, \
6887 .MICommandOpcode = 26
6888
6889 struct GEN8_MI_MATH {
6890 uint32_t CommandType;
6891 uint32_t MICommandOpcode;
6892 uint32_t DwordLength;
6893 uint32_t ALUINSTRUCTION1;
6894 uint32_t ALUINSTRUCTION2;
6895 /* variable length fields follow */
6896 };
6897
6898 static inline void
6899 GEN8_MI_MATH_pack(__gen_user_data *data, void * restrict dst,
6900 const struct GEN8_MI_MATH * restrict values)
6901 {
6902 uint32_t *dw = (uint32_t * restrict) dst;
6903
6904 dw[0] =
6905 __gen_field(values->CommandType, 29, 31) |
6906 __gen_field(values->MICommandOpcode, 23, 28) |
6907 __gen_field(values->DwordLength, 0, 5) |
6908 0;
6909
6910 dw[1] =
6911 __gen_field(values->ALUINSTRUCTION1, 0, 31) |
6912 0;
6913
6914 dw[2] =
6915 __gen_field(values->ALUINSTRUCTION2, 0, 31) |
6916 0;
6917
6918 /* variable length fields follow */
6919 }
6920
6921 #define GEN8_MI_NOOP_length 0x00000001
6922 #define GEN8_MI_NOOP_length_bias 0x00000001
6923 #define GEN8_MI_NOOP_header \
6924 .CommandType = 0, \
6925 .MICommandOpcode = 0
6926
6927 struct GEN8_MI_NOOP {
6928 uint32_t CommandType;
6929 uint32_t MICommandOpcode;
6930 uint32_t IdentificationNumberRegisterWriteEnable;
6931 uint32_t IdentificationNumber;
6932 };
6933
6934 static inline void
6935 GEN8_MI_NOOP_pack(__gen_user_data *data, void * restrict dst,
6936 const struct GEN8_MI_NOOP * restrict values)
6937 {
6938 uint32_t *dw = (uint32_t * restrict) dst;
6939
6940 dw[0] =
6941 __gen_field(values->CommandType, 29, 31) |
6942 __gen_field(values->MICommandOpcode, 23, 28) |
6943 __gen_field(values->IdentificationNumberRegisterWriteEnable, 22, 22) |
6944 __gen_field(values->IdentificationNumber, 0, 21) |
6945 0;
6946
6947 }
6948
6949 #define GEN8_MI_PREDICATE_length 0x00000001
6950 #define GEN8_MI_PREDICATE_length_bias 0x00000001
6951 #define GEN8_MI_PREDICATE_header \
6952 .CommandType = 0, \
6953 .MICommandOpcode = 12
6954
6955 struct GEN8_MI_PREDICATE {
6956 uint32_t CommandType;
6957 uint32_t MICommandOpcode;
6958 #define KEEP 0
6959 #define LOAD 2
6960 #define LOADINV 3
6961 uint32_t LoadOperation;
6962 #define COMBINE_SET 0
6963 #define COMBINE_AND 1
6964 #define COMBINE_OR 2
6965 #define COMBINE_XOR 3
6966 uint32_t CombineOperation;
6967 #define COMPARE_SRCS_EQUAL 2
6968 #define COMPARE_DELTAS_EQUAL 3
6969 uint32_t CompareOperation;
6970 };
6971
6972 static inline void
6973 GEN8_MI_PREDICATE_pack(__gen_user_data *data, void * restrict dst,
6974 const struct GEN8_MI_PREDICATE * restrict values)
6975 {
6976 uint32_t *dw = (uint32_t * restrict) dst;
6977
6978 dw[0] =
6979 __gen_field(values->CommandType, 29, 31) |
6980 __gen_field(values->MICommandOpcode, 23, 28) |
6981 __gen_field(values->LoadOperation, 6, 7) |
6982 __gen_field(values->CombineOperation, 3, 4) |
6983 __gen_field(values->CompareOperation, 0, 1) |
6984 0;
6985
6986 }
6987
6988 #define GEN8_MI_REPORT_HEAD_length 0x00000001
6989 #define GEN8_MI_REPORT_HEAD_length_bias 0x00000001
6990 #define GEN8_MI_REPORT_HEAD_header \
6991 .CommandType = 0, \
6992 .MICommandOpcode = 7
6993
6994 struct GEN8_MI_REPORT_HEAD {
6995 uint32_t CommandType;
6996 uint32_t MICommandOpcode;
6997 };
6998
6999 static inline void
7000 GEN8_MI_REPORT_HEAD_pack(__gen_user_data *data, void * restrict dst,
7001 const struct GEN8_MI_REPORT_HEAD * restrict values)
7002 {
7003 uint32_t *dw = (uint32_t * restrict) dst;
7004
7005 dw[0] =
7006 __gen_field(values->CommandType, 29, 31) |
7007 __gen_field(values->MICommandOpcode, 23, 28) |
7008 0;
7009
7010 }
7011
7012 #define GEN8_MI_RS_CONTEXT_length 0x00000001
7013 #define GEN8_MI_RS_CONTEXT_length_bias 0x00000001
7014 #define GEN8_MI_RS_CONTEXT_header \
7015 .CommandType = 0, \
7016 .MICommandOpcode = 15
7017
7018 struct GEN8_MI_RS_CONTEXT {
7019 uint32_t CommandType;
7020 uint32_t MICommandOpcode;
7021 #define Restore 0
7022 #define Save 1
7023 uint32_t ResourceStreamerSave;
7024 };
7025
7026 static inline void
7027 GEN8_MI_RS_CONTEXT_pack(__gen_user_data *data, void * restrict dst,
7028 const struct GEN8_MI_RS_CONTEXT * restrict values)
7029 {
7030 uint32_t *dw = (uint32_t * restrict) dst;
7031
7032 dw[0] =
7033 __gen_field(values->CommandType, 29, 31) |
7034 __gen_field(values->MICommandOpcode, 23, 28) |
7035 __gen_field(values->ResourceStreamerSave, 0, 0) |
7036 0;
7037
7038 }
7039
7040 #define GEN8_MI_RS_CONTROL_length 0x00000001
7041 #define GEN8_MI_RS_CONTROL_length_bias 0x00000001
7042 #define GEN8_MI_RS_CONTROL_header \
7043 .CommandType = 0, \
7044 .MICommandOpcode = 6
7045
7046 struct GEN8_MI_RS_CONTROL {
7047 uint32_t CommandType;
7048 uint32_t MICommandOpcode;
7049 #define Stop 0
7050 #define Start 1
7051 uint32_t ResourceStreamerControl;
7052 };
7053
7054 static inline void
7055 GEN8_MI_RS_CONTROL_pack(__gen_user_data *data, void * restrict dst,
7056 const struct GEN8_MI_RS_CONTROL * restrict values)
7057 {
7058 uint32_t *dw = (uint32_t * restrict) dst;
7059
7060 dw[0] =
7061 __gen_field(values->CommandType, 29, 31) |
7062 __gen_field(values->MICommandOpcode, 23, 28) |
7063 __gen_field(values->ResourceStreamerControl, 0, 0) |
7064 0;
7065
7066 }
7067
7068 #define GEN8_MI_RS_STORE_DATA_IMM_length 0x00000004
7069 #define GEN8_MI_RS_STORE_DATA_IMM_length_bias 0x00000002
7070 #define GEN8_MI_RS_STORE_DATA_IMM_header \
7071 .CommandType = 0, \
7072 .MICommandOpcode = 43, \
7073 .DwordLength = 2
7074
7075 struct GEN8_MI_RS_STORE_DATA_IMM {
7076 uint32_t CommandType;
7077 uint32_t MICommandOpcode;
7078 uint32_t DwordLength;
7079 __gen_address_type DestinationAddress;
7080 uint32_t CoreModeEnable;
7081 uint32_t DataDWord0;
7082 };
7083
7084 static inline void
7085 GEN8_MI_RS_STORE_DATA_IMM_pack(__gen_user_data *data, void * restrict dst,
7086 const struct GEN8_MI_RS_STORE_DATA_IMM * restrict values)
7087 {
7088 uint32_t *dw = (uint32_t * restrict) dst;
7089
7090 dw[0] =
7091 __gen_field(values->CommandType, 29, 31) |
7092 __gen_field(values->MICommandOpcode, 23, 28) |
7093 __gen_field(values->DwordLength, 0, 7) |
7094 0;
7095
7096 uint32_t dw1 =
7097 __gen_field(values->CoreModeEnable, 0, 0) |
7098 0;
7099
7100 dw[1] =
7101 __gen_combine_address(data, &dw[1], values->DestinationAddress, dw1);
7102
7103 dw[3] =
7104 __gen_field(values->DataDWord0, 0, 31) |
7105 0;
7106
7107 }
7108
7109 #define GEN8_MI_SET_CONTEXT_length 0x00000002
7110 #define GEN8_MI_SET_CONTEXT_length_bias 0x00000002
7111 #define GEN8_MI_SET_CONTEXT_header \
7112 .CommandType = 0, \
7113 .MICommandOpcode = 24, \
7114 .DwordLength = 0
7115
7116 struct GEN8_MI_SET_CONTEXT {
7117 uint32_t CommandType;
7118 uint32_t MICommandOpcode;
7119 uint32_t DwordLength;
7120 __gen_address_type LogicalContextAddress;
7121 uint32_t ReservedMustbe1;
7122 uint32_t CoreModeEnable;
7123 uint32_t ResourceStreamerStateSaveEnable;
7124 uint32_t ResourceStreamerStateRestoreEnable;
7125 uint32_t ForceRestore;
7126 uint32_t RestoreInhibit;
7127 };
7128
7129 static inline void
7130 GEN8_MI_SET_CONTEXT_pack(__gen_user_data *data, void * restrict dst,
7131 const struct GEN8_MI_SET_CONTEXT * restrict values)
7132 {
7133 uint32_t *dw = (uint32_t * restrict) dst;
7134
7135 dw[0] =
7136 __gen_field(values->CommandType, 29, 31) |
7137 __gen_field(values->MICommandOpcode, 23, 28) |
7138 __gen_field(values->DwordLength, 0, 7) |
7139 0;
7140
7141 uint32_t dw1 =
7142 __gen_field(values->ReservedMustbe1, 8, 8) |
7143 __gen_field(values->CoreModeEnable, 4, 4) |
7144 __gen_field(values->ResourceStreamerStateSaveEnable, 3, 3) |
7145 __gen_field(values->ResourceStreamerStateRestoreEnable, 2, 2) |
7146 __gen_field(values->ForceRestore, 1, 1) |
7147 __gen_field(values->RestoreInhibit, 0, 0) |
7148 0;
7149
7150 dw[1] =
7151 __gen_combine_address(data, &dw[1], values->LogicalContextAddress, dw1);
7152
7153 }
7154
7155 #define GEN8_MI_SET_PREDICATE_length 0x00000001
7156 #define GEN8_MI_SET_PREDICATE_length_bias 0x00000001
7157 #define GEN8_MI_SET_PREDICATE_header \
7158 .CommandType = 0, \
7159 .MICommandOpcode = 1
7160
7161 struct GEN8_MI_SET_PREDICATE {
7162 uint32_t CommandType;
7163 uint32_t MICommandOpcode;
7164 #define NOOPNever 0
7165 #define NOOPonResult2clear 1
7166 #define NOOPonResult2set 2
7167 #define NOOPonResultclear 3
7168 #define NOOPonResultset 4
7169 #define Executewhenonesliceenabled 5
7170 #define Executewhentwoslicesareenabled 6
7171 #define Executewhenthreeslicesareenabled 7
7172 #define NOOPAlways 15
7173 uint32_t PREDICATEENABLE;
7174 };
7175
7176 static inline void
7177 GEN8_MI_SET_PREDICATE_pack(__gen_user_data *data, void * restrict dst,
7178 const struct GEN8_MI_SET_PREDICATE * restrict values)
7179 {
7180 uint32_t *dw = (uint32_t * restrict) dst;
7181
7182 dw[0] =
7183 __gen_field(values->CommandType, 29, 31) |
7184 __gen_field(values->MICommandOpcode, 23, 28) |
7185 __gen_field(values->PREDICATEENABLE, 0, 3) |
7186 0;
7187
7188 }
7189
7190 #define GEN8_MI_STORE_DATA_IMM_length 0x00000004
7191 #define GEN8_MI_STORE_DATA_IMM_length_bias 0x00000002
7192 #define GEN8_MI_STORE_DATA_IMM_header \
7193 .CommandType = 0, \
7194 .MICommandOpcode = 32, \
7195 .DwordLength = 2
7196
7197 struct GEN8_MI_STORE_DATA_IMM {
7198 uint32_t CommandType;
7199 uint32_t MICommandOpcode;
7200 uint32_t UseGlobalGTT;
7201 uint32_t StoreQword;
7202 uint32_t DwordLength;
7203 __gen_address_type Address;
7204 uint32_t CoreModeEnable;
7205 uint32_t DataDWord0;
7206 uint32_t DataDWord1;
7207 };
7208
7209 static inline void
7210 GEN8_MI_STORE_DATA_IMM_pack(__gen_user_data *data, void * restrict dst,
7211 const struct GEN8_MI_STORE_DATA_IMM * restrict values)
7212 {
7213 uint32_t *dw = (uint32_t * restrict) dst;
7214
7215 dw[0] =
7216 __gen_field(values->CommandType, 29, 31) |
7217 __gen_field(values->MICommandOpcode, 23, 28) |
7218 __gen_field(values->UseGlobalGTT, 22, 22) |
7219 __gen_field(values->StoreQword, 21, 21) |
7220 __gen_field(values->DwordLength, 0, 9) |
7221 0;
7222
7223 uint32_t dw1 =
7224 __gen_field(values->CoreModeEnable, 0, 0) |
7225 0;
7226
7227 dw[1] =
7228 __gen_combine_address(data, &dw[1], values->Address, dw1);
7229
7230 dw[3] =
7231 __gen_field(values->DataDWord0, 0, 31) |
7232 0;
7233
7234 dw[4] =
7235 __gen_field(values->DataDWord1, 0, 31) |
7236 0;
7237
7238 }
7239
7240 #define GEN8_MI_STORE_DATA_INDEX_length 0x00000003
7241 #define GEN8_MI_STORE_DATA_INDEX_length_bias 0x00000002
7242 #define GEN8_MI_STORE_DATA_INDEX_header \
7243 .CommandType = 0, \
7244 .MICommandOpcode = 33, \
7245 .DwordLength = 1
7246
7247 struct GEN8_MI_STORE_DATA_INDEX {
7248 uint32_t CommandType;
7249 uint32_t MICommandOpcode;
7250 uint32_t UsePerProcessHardwareStatusPage;
7251 uint32_t DwordLength;
7252 uint32_t Offset;
7253 uint32_t DataDWord0;
7254 uint32_t DataDWord1;
7255 };
7256
7257 static inline void
7258 GEN8_MI_STORE_DATA_INDEX_pack(__gen_user_data *data, void * restrict dst,
7259 const struct GEN8_MI_STORE_DATA_INDEX * restrict values)
7260 {
7261 uint32_t *dw = (uint32_t * restrict) dst;
7262
7263 dw[0] =
7264 __gen_field(values->CommandType, 29, 31) |
7265 __gen_field(values->MICommandOpcode, 23, 28) |
7266 __gen_field(values->UsePerProcessHardwareStatusPage, 21, 21) |
7267 __gen_field(values->DwordLength, 0, 7) |
7268 0;
7269
7270 dw[1] =
7271 __gen_field(values->Offset, 2, 11) |
7272 0;
7273
7274 dw[2] =
7275 __gen_field(values->DataDWord0, 0, 31) |
7276 0;
7277
7278 dw[3] =
7279 __gen_field(values->DataDWord1, 0, 31) |
7280 0;
7281
7282 }
7283
7284 #define GEN8_MI_STORE_URB_MEM_length 0x00000004
7285 #define GEN8_MI_STORE_URB_MEM_length_bias 0x00000002
7286 #define GEN8_MI_STORE_URB_MEM_header \
7287 .CommandType = 0, \
7288 .MICommandOpcode = 45, \
7289 .DwordLength = 2
7290
7291 struct GEN8_MI_STORE_URB_MEM {
7292 uint32_t CommandType;
7293 uint32_t MICommandOpcode;
7294 uint32_t DwordLength;
7295 uint32_t URBAddress;
7296 __gen_address_type MemoryAddress;
7297 };
7298
7299 static inline void
7300 GEN8_MI_STORE_URB_MEM_pack(__gen_user_data *data, void * restrict dst,
7301 const struct GEN8_MI_STORE_URB_MEM * restrict values)
7302 {
7303 uint32_t *dw = (uint32_t * restrict) dst;
7304
7305 dw[0] =
7306 __gen_field(values->CommandType, 29, 31) |
7307 __gen_field(values->MICommandOpcode, 23, 28) |
7308 __gen_field(values->DwordLength, 0, 7) |
7309 0;
7310
7311 dw[1] =
7312 __gen_field(values->URBAddress, 2, 14) |
7313 0;
7314
7315 uint32_t dw2 =
7316 0;
7317
7318 dw[2] =
7319 __gen_combine_address(data, &dw[2], values->MemoryAddress, dw2);
7320
7321 }
7322
7323 #define GEN8_MI_SUSPEND_FLUSH_length 0x00000001
7324 #define GEN8_MI_SUSPEND_FLUSH_length_bias 0x00000001
7325 #define GEN8_MI_SUSPEND_FLUSH_header \
7326 .CommandType = 0, \
7327 .MICommandOpcode = 11
7328
7329 struct GEN8_MI_SUSPEND_FLUSH {
7330 uint32_t CommandType;
7331 uint32_t MICommandOpcode;
7332 uint32_t SuspendFlush;
7333 };
7334
7335 static inline void
7336 GEN8_MI_SUSPEND_FLUSH_pack(__gen_user_data *data, void * restrict dst,
7337 const struct GEN8_MI_SUSPEND_FLUSH * restrict values)
7338 {
7339 uint32_t *dw = (uint32_t * restrict) dst;
7340
7341 dw[0] =
7342 __gen_field(values->CommandType, 29, 31) |
7343 __gen_field(values->MICommandOpcode, 23, 28) |
7344 __gen_field(values->SuspendFlush, 0, 0) |
7345 0;
7346
7347 }
7348
7349 #define GEN8_MI_TOPOLOGY_FILTER_length 0x00000001
7350 #define GEN8_MI_TOPOLOGY_FILTER_length_bias 0x00000001
7351 #define GEN8_MI_TOPOLOGY_FILTER_header \
7352 .CommandType = 0, \
7353 .MICommandOpcode = 13
7354
7355 struct GEN8_MI_TOPOLOGY_FILTER {
7356 uint32_t CommandType;
7357 uint32_t MICommandOpcode;
7358 uint32_t TopologyFilterValue;
7359 };
7360
7361 static inline void
7362 GEN8_MI_TOPOLOGY_FILTER_pack(__gen_user_data *data, void * restrict dst,
7363 const struct GEN8_MI_TOPOLOGY_FILTER * restrict values)
7364 {
7365 uint32_t *dw = (uint32_t * restrict) dst;
7366
7367 dw[0] =
7368 __gen_field(values->CommandType, 29, 31) |
7369 __gen_field(values->MICommandOpcode, 23, 28) |
7370 __gen_field(values->TopologyFilterValue, 0, 5) |
7371 0;
7372
7373 }
7374
7375 #define GEN8_MI_UPDATE_GTT_length_bias 0x00000002
7376 #define GEN8_MI_UPDATE_GTT_header \
7377 .CommandType = 0, \
7378 .MICommandOpcode = 35
7379
7380 struct GEN8_MI_UPDATE_GTT {
7381 uint32_t CommandType;
7382 uint32_t MICommandOpcode;
7383 uint32_t DwordLength;
7384 __gen_address_type EntryAddress;
7385 /* variable length fields follow */
7386 };
7387
7388 static inline void
7389 GEN8_MI_UPDATE_GTT_pack(__gen_user_data *data, void * restrict dst,
7390 const struct GEN8_MI_UPDATE_GTT * restrict values)
7391 {
7392 uint32_t *dw = (uint32_t * restrict) dst;
7393
7394 dw[0] =
7395 __gen_field(values->CommandType, 29, 31) |
7396 __gen_field(values->MICommandOpcode, 23, 28) |
7397 __gen_field(values->DwordLength, 0, 9) |
7398 0;
7399
7400 uint32_t dw1 =
7401 0;
7402
7403 dw[1] =
7404 __gen_combine_address(data, &dw[1], values->EntryAddress, dw1);
7405
7406 /* variable length fields follow */
7407 }
7408
7409 #define GEN8_MI_URB_ATOMIC_ALLOC_length 0x00000001
7410 #define GEN8_MI_URB_ATOMIC_ALLOC_length_bias 0x00000001
7411 #define GEN8_MI_URB_ATOMIC_ALLOC_header \
7412 .CommandType = 0, \
7413 .MICommandOpcode = 9
7414
7415 struct GEN8_MI_URB_ATOMIC_ALLOC {
7416 uint32_t CommandType;
7417 uint32_t MICommandOpcode;
7418 uint32_t URBAtomicStorageOffset;
7419 uint32_t URBAtomicStorageSize;
7420 };
7421
7422 static inline void
7423 GEN8_MI_URB_ATOMIC_ALLOC_pack(__gen_user_data *data, void * restrict dst,
7424 const struct GEN8_MI_URB_ATOMIC_ALLOC * restrict values)
7425 {
7426 uint32_t *dw = (uint32_t * restrict) dst;
7427
7428 dw[0] =
7429 __gen_field(values->CommandType, 29, 31) |
7430 __gen_field(values->MICommandOpcode, 23, 28) |
7431 __gen_field(values->URBAtomicStorageOffset, 12, 19) |
7432 __gen_field(values->URBAtomicStorageSize, 0, 8) |
7433 0;
7434
7435 }
7436
7437 #define GEN8_MI_URB_CLEAR_length 0x00000002
7438 #define GEN8_MI_URB_CLEAR_length_bias 0x00000002
7439 #define GEN8_MI_URB_CLEAR_header \
7440 .CommandType = 0, \
7441 .MICommandOpcode = 25, \
7442 .DwordLength = 0
7443
7444 struct GEN8_MI_URB_CLEAR {
7445 uint32_t CommandType;
7446 uint32_t MICommandOpcode;
7447 uint32_t DwordLength;
7448 uint32_t URBClearLength;
7449 uint32_t URBAddress;
7450 };
7451
7452 static inline void
7453 GEN8_MI_URB_CLEAR_pack(__gen_user_data *data, void * restrict dst,
7454 const struct GEN8_MI_URB_CLEAR * restrict values)
7455 {
7456 uint32_t *dw = (uint32_t * restrict) dst;
7457
7458 dw[0] =
7459 __gen_field(values->CommandType, 29, 31) |
7460 __gen_field(values->MICommandOpcode, 23, 28) |
7461 __gen_field(values->DwordLength, 0, 7) |
7462 0;
7463
7464 dw[1] =
7465 __gen_field(values->URBClearLength, 16, 29) |
7466 __gen_offset(values->URBAddress, 0, 14) |
7467 0;
7468
7469 }
7470
7471 #define GEN8_MI_USER_INTERRUPT_length 0x00000001
7472 #define GEN8_MI_USER_INTERRUPT_length_bias 0x00000001
7473 #define GEN8_MI_USER_INTERRUPT_header \
7474 .CommandType = 0, \
7475 .MICommandOpcode = 2
7476
7477 struct GEN8_MI_USER_INTERRUPT {
7478 uint32_t CommandType;
7479 uint32_t MICommandOpcode;
7480 };
7481
7482 static inline void
7483 GEN8_MI_USER_INTERRUPT_pack(__gen_user_data *data, void * restrict dst,
7484 const struct GEN8_MI_USER_INTERRUPT * restrict values)
7485 {
7486 uint32_t *dw = (uint32_t * restrict) dst;
7487
7488 dw[0] =
7489 __gen_field(values->CommandType, 29, 31) |
7490 __gen_field(values->MICommandOpcode, 23, 28) |
7491 0;
7492
7493 }
7494
7495 #define GEN8_MI_WAIT_FOR_EVENT_length 0x00000001
7496 #define GEN8_MI_WAIT_FOR_EVENT_length_bias 0x00000001
7497 #define GEN8_MI_WAIT_FOR_EVENT_header \
7498 .CommandType = 0, \
7499 .MICommandOpcode = 3
7500
7501 struct GEN8_MI_WAIT_FOR_EVENT {
7502 uint32_t CommandType;
7503 uint32_t MICommandOpcode;
7504 uint32_t DisplayPipeCVerticalBlankWaitEnable;
7505 uint32_t DisplaySpriteCFlipPendingWaitEnable;
7506 uint32_t DisplayPlaneCFlipPendingWaitEnable;
7507 uint32_t DisplayPipeCScanLineWaitEnable;
7508 uint32_t DisplayPipeBVerticalBlankWaitEnable;
7509 uint32_t DisplaySpriteBFlipPendingWaitEnable;
7510 uint32_t DisplayPlaneBFlipPendingWaitEnable;
7511 uint32_t DisplayPipeBScanLineWaitEnable;
7512 uint32_t DisplayPipeAVerticalBlankWaitEnable;
7513 uint32_t DisplaySpriteAFlipPendingWaitEnable;
7514 uint32_t DisplayPlaneAFlipPendingWaitEnable;
7515 uint32_t DisplayPipeAScanLineWaitEnable;
7516 };
7517
7518 static inline void
7519 GEN8_MI_WAIT_FOR_EVENT_pack(__gen_user_data *data, void * restrict dst,
7520 const struct GEN8_MI_WAIT_FOR_EVENT * restrict values)
7521 {
7522 uint32_t *dw = (uint32_t * restrict) dst;
7523
7524 dw[0] =
7525 __gen_field(values->CommandType, 29, 31) |
7526 __gen_field(values->MICommandOpcode, 23, 28) |
7527 __gen_field(values->DisplayPipeCVerticalBlankWaitEnable, 21, 21) |
7528 __gen_field(values->DisplaySpriteCFlipPendingWaitEnable, 20, 20) |
7529 __gen_field(values->DisplayPlaneCFlipPendingWaitEnable, 15, 15) |
7530 __gen_field(values->DisplayPipeCScanLineWaitEnable, 14, 14) |
7531 __gen_field(values->DisplayPipeBVerticalBlankWaitEnable, 11, 11) |
7532 __gen_field(values->DisplaySpriteBFlipPendingWaitEnable, 10, 10) |
7533 __gen_field(values->DisplayPlaneBFlipPendingWaitEnable, 9, 9) |
7534 __gen_field(values->DisplayPipeBScanLineWaitEnable, 8, 8) |
7535 __gen_field(values->DisplayPipeAVerticalBlankWaitEnable, 3, 3) |
7536 __gen_field(values->DisplaySpriteAFlipPendingWaitEnable, 2, 2) |
7537 __gen_field(values->DisplayPlaneAFlipPendingWaitEnable, 1, 1) |
7538 __gen_field(values->DisplayPipeAScanLineWaitEnable, 0, 0) |
7539 0;
7540
7541 }
7542
7543 #define GEN8_PIPE_CONTROL_length 0x00000006
7544 #define GEN8_PIPE_CONTROL_length_bias 0x00000002
7545 #define GEN8_PIPE_CONTROL_header \
7546 .CommandType = 3, \
7547 .CommandSubType = 3, \
7548 ._3DCommandOpcode = 2, \
7549 ._3DCommandSubOpcode = 0, \
7550 .DwordLength = 4
7551
7552 struct GEN8_PIPE_CONTROL {
7553 uint32_t CommandType;
7554 uint32_t CommandSubType;
7555 uint32_t _3DCommandOpcode;
7556 uint32_t _3DCommandSubOpcode;
7557 uint32_t DwordLength;
7558 #define DAT_PPGTT 0
7559 #define DAT_GGTT 1
7560 uint32_t DestinationAddressType;
7561 #define NoLRIOperation 0
7562 #define MMIOWriteImmediateData 1
7563 uint32_t LRIPostSyncOperation;
7564 uint32_t StoreDataIndex;
7565 uint32_t CommandStreamerStallEnable;
7566 #define DontReset 0
7567 #define Reset 1
7568 uint32_t GlobalSnapshotCountReset;
7569 uint32_t TLBInvalidate;
7570 uint32_t GenericMediaStateClear;
7571 #define NoWrite 0
7572 #define WriteImmediateData 1
7573 #define WritePSDepthCount 2
7574 #define WriteTimestamp 3
7575 uint32_t PostSyncOperation;
7576 uint32_t DepthStallEnable;
7577 #define DisableFlush 0
7578 #define EnableFlush 1
7579 uint32_t RenderTargetCacheFlushEnable;
7580 uint32_t InstructionCacheInvalidateEnable;
7581 uint32_t TextureCacheInvalidationEnable;
7582 uint32_t IndirectStatePointersDisable;
7583 uint32_t NotifyEnable;
7584 uint32_t PipeControlFlushEnable;
7585 uint32_t DCFlushEnable;
7586 uint32_t VFCacheInvalidationEnable;
7587 uint32_t ConstantCacheInvalidationEnable;
7588 uint32_t StateCacheInvalidationEnable;
7589 uint32_t StallAtPixelScoreboard;
7590 #define FlushDisabled 0
7591 #define FlushEnabled 1
7592 uint32_t DepthCacheFlushEnable;
7593 __gen_address_type Address;
7594 __gen_address_type AddressHigh;
7595 uint32_t ImmediateData;
7596 };
7597
7598 static inline void
7599 GEN8_PIPE_CONTROL_pack(__gen_user_data *data, void * restrict dst,
7600 const struct GEN8_PIPE_CONTROL * restrict values)
7601 {
7602 uint32_t *dw = (uint32_t * restrict) dst;
7603
7604 dw[0] =
7605 __gen_field(values->CommandType, 29, 31) |
7606 __gen_field(values->CommandSubType, 27, 28) |
7607 __gen_field(values->_3DCommandOpcode, 24, 26) |
7608 __gen_field(values->_3DCommandSubOpcode, 16, 23) |
7609 __gen_field(values->DwordLength, 0, 7) |
7610 0;
7611
7612 dw[1] =
7613 __gen_field(values->DestinationAddressType, 24, 24) |
7614 __gen_field(values->LRIPostSyncOperation, 23, 23) |
7615 __gen_field(values->StoreDataIndex, 21, 21) |
7616 __gen_field(values->CommandStreamerStallEnable, 20, 20) |
7617 __gen_field(values->GlobalSnapshotCountReset, 19, 19) |
7618 __gen_field(values->TLBInvalidate, 18, 18) |
7619 __gen_field(values->GenericMediaStateClear, 16, 16) |
7620 __gen_field(values->PostSyncOperation, 14, 15) |
7621 __gen_field(values->DepthStallEnable, 13, 13) |
7622 __gen_field(values->RenderTargetCacheFlushEnable, 12, 12) |
7623 __gen_field(values->InstructionCacheInvalidateEnable, 11, 11) |
7624 __gen_field(values->TextureCacheInvalidationEnable, 10, 10) |
7625 __gen_field(values->IndirectStatePointersDisable, 9, 9) |
7626 __gen_field(values->NotifyEnable, 8, 8) |
7627 __gen_field(values->PipeControlFlushEnable, 7, 7) |
7628 __gen_field(values->DCFlushEnable, 5, 5) |
7629 __gen_field(values->VFCacheInvalidationEnable, 4, 4) |
7630 __gen_field(values->ConstantCacheInvalidationEnable, 3, 3) |
7631 __gen_field(values->StateCacheInvalidationEnable, 2, 2) |
7632 __gen_field(values->StallAtPixelScoreboard, 1, 1) |
7633 __gen_field(values->DepthCacheFlushEnable, 0, 0) |
7634 0;
7635
7636 uint32_t dw2 =
7637 0;
7638
7639 dw[2] =
7640 __gen_combine_address(data, &dw[2], values->Address, dw2);
7641
7642 uint32_t dw3 =
7643 0;
7644
7645 dw[3] =
7646 __gen_combine_address(data, &dw[3], values->AddressHigh, dw3);
7647
7648 dw[4] =
7649 __gen_field(values->ImmediateData, 0, 63) |
7650 0;
7651
7652 }
7653
7654 #define GEN8_3DSTATE_CONSTANT_BODY_length 0x0000000a
7655
7656 #define GEN8_BINDING_TABLE_EDIT_ENTRY_length 0x00000001
7657
7658 #define GEN8_GATHER_CONSTANT_ENTRY_length 0x00000001
7659
7660 #define GEN8_VERTEX_BUFFER_STATE_length 0x00000004
7661
7662 #define GEN8_VERTEX_ELEMENT_STATE_length 0x00000002
7663
7664 #define GEN8_SO_DECL_ENTRY_length 0x00000002
7665
7666 #define GEN8_SO_DECL_length 0x00000001
7667
7668 #define GEN8_SF_OUTPUT_ATTRIBUTE_DETAIL_length 0x00000001
7669
7670 #define GEN8_SCISSOR_RECT_length 0x00000002
7671
7672 struct GEN8_SCISSOR_RECT {
7673 uint32_t ScissorRectangleYMin;
7674 uint32_t ScissorRectangleXMin;
7675 uint32_t ScissorRectangleYMax;
7676 uint32_t ScissorRectangleXMax;
7677 };
7678
7679 static inline void
7680 GEN8_SCISSOR_RECT_pack(__gen_user_data *data, void * restrict dst,
7681 const struct GEN8_SCISSOR_RECT * restrict values)
7682 {
7683 uint32_t *dw = (uint32_t * restrict) dst;
7684
7685 dw[0] =
7686 __gen_field(values->ScissorRectangleYMin, 16, 31) |
7687 __gen_field(values->ScissorRectangleXMin, 0, 15) |
7688 0;
7689
7690 dw[1] =
7691 __gen_field(values->ScissorRectangleYMax, 16, 31) |
7692 __gen_field(values->ScissorRectangleXMax, 0, 15) |
7693 0;
7694
7695 }
7696
7697 #define GEN8_SF_CLIP_VIEWPORT_length 0x00000010
7698
7699 struct GEN8_SF_CLIP_VIEWPORT {
7700 float ViewportMatrixElementm00;
7701 float ViewportMatrixElementm11;
7702 float ViewportMatrixElementm22;
7703 float ViewportMatrixElementm30;
7704 float ViewportMatrixElementm31;
7705 float ViewportMatrixElementm32;
7706 float XMinClipGuardband;
7707 float XMaxClipGuardband;
7708 float YMinClipGuardband;
7709 float YMaxClipGuardband;
7710 float XMinViewPort;
7711 float XMaxViewPort;
7712 float YMinViewPort;
7713 float YMaxViewPort;
7714 };
7715
7716 static inline void
7717 GEN8_SF_CLIP_VIEWPORT_pack(__gen_user_data *data, void * restrict dst,
7718 const struct GEN8_SF_CLIP_VIEWPORT * restrict values)
7719 {
7720 uint32_t *dw = (uint32_t * restrict) dst;
7721
7722 dw[0] =
7723 __gen_float(values->ViewportMatrixElementm00) |
7724 0;
7725
7726 dw[1] =
7727 __gen_float(values->ViewportMatrixElementm11) |
7728 0;
7729
7730 dw[2] =
7731 __gen_float(values->ViewportMatrixElementm22) |
7732 0;
7733
7734 dw[3] =
7735 __gen_float(values->ViewportMatrixElementm30) |
7736 0;
7737
7738 dw[4] =
7739 __gen_float(values->ViewportMatrixElementm31) |
7740 0;
7741
7742 dw[5] =
7743 __gen_float(values->ViewportMatrixElementm32) |
7744 0;
7745
7746 dw[6] =
7747 0;
7748
7749 dw[7] =
7750 0;
7751
7752 dw[8] =
7753 __gen_float(values->XMinClipGuardband) |
7754 0;
7755
7756 dw[9] =
7757 __gen_float(values->XMaxClipGuardband) |
7758 0;
7759
7760 dw[10] =
7761 __gen_float(values->YMinClipGuardband) |
7762 0;
7763
7764 dw[11] =
7765 __gen_float(values->YMaxClipGuardband) |
7766 0;
7767
7768 dw[12] =
7769 __gen_float(values->XMinViewPort) |
7770 0;
7771
7772 dw[13] =
7773 __gen_float(values->XMaxViewPort) |
7774 0;
7775
7776 dw[14] =
7777 __gen_float(values->YMinViewPort) |
7778 0;
7779
7780 dw[15] =
7781 __gen_float(values->YMaxViewPort) |
7782 0;
7783
7784 }
7785
7786 #define GEN8_BLEND_STATE_length 0x00000011
7787
7788 struct GEN8_BLEND_STATE_ENTRY {
7789 uint32_t LogicOpEnable;
7790 uint32_t LogicOpFunction;
7791 uint32_t PreBlendSourceOnlyClampEnable;
7792 #define COLORCLAMP_UNORM 0
7793 #define COLORCLAMP_SNORM 1
7794 #define COLORCLAMP_RTFORMAT 2
7795 uint32_t ColorClampRange;
7796 uint32_t PreBlendColorClampEnable;
7797 uint32_t PostBlendColorClampEnable;
7798 uint32_t ColorBufferBlendEnable;
7799 uint32_t SourceBlendFactor;
7800 uint32_t DestinationBlendFactor;
7801 uint32_t ColorBlendFunction;
7802 uint32_t SourceAlphaBlendFactor;
7803 uint32_t DestinationAlphaBlendFactor;
7804 uint32_t AlphaBlendFunction;
7805 uint32_t WriteDisableAlpha;
7806 uint32_t WriteDisableRed;
7807 uint32_t WriteDisableGreen;
7808 uint32_t WriteDisableBlue;
7809 };
7810
7811 static inline void
7812 GEN8_BLEND_STATE_ENTRY_pack(__gen_user_data *data, void * restrict dst,
7813 const struct GEN8_BLEND_STATE_ENTRY * restrict values)
7814 {
7815 uint32_t *dw = (uint32_t * restrict) dst;
7816
7817 dw[0] =
7818 __gen_field(values->LogicOpEnable, 63, 63) |
7819 __gen_field(values->LogicOpFunction, 59, 62) |
7820 __gen_field(values->PreBlendSourceOnlyClampEnable, 36, 36) |
7821 __gen_field(values->ColorClampRange, 34, 35) |
7822 __gen_field(values->PreBlendColorClampEnable, 33, 33) |
7823 __gen_field(values->PostBlendColorClampEnable, 32, 32) |
7824 __gen_field(values->ColorBufferBlendEnable, 31, 31) |
7825 __gen_field(values->SourceBlendFactor, 26, 30) |
7826 __gen_field(values->DestinationBlendFactor, 21, 25) |
7827 __gen_field(values->ColorBlendFunction, 18, 20) |
7828 __gen_field(values->SourceAlphaBlendFactor, 13, 17) |
7829 __gen_field(values->DestinationAlphaBlendFactor, 8, 12) |
7830 __gen_field(values->AlphaBlendFunction, 5, 7) |
7831 __gen_field(values->WriteDisableAlpha, 3, 3) |
7832 __gen_field(values->WriteDisableRed, 2, 2) |
7833 __gen_field(values->WriteDisableGreen, 1, 1) |
7834 __gen_field(values->WriteDisableBlue, 0, 0) |
7835 0;
7836
7837 }
7838
7839 struct GEN8_BLEND_STATE {
7840 uint32_t AlphaToCoverageEnable;
7841 uint32_t IndependentAlphaBlendEnable;
7842 uint32_t AlphaToOneEnable;
7843 uint32_t AlphaToCoverageDitherEnable;
7844 uint32_t AlphaTestEnable;
7845 uint32_t AlphaTestFunction;
7846 uint32_t ColorDitherEnable;
7847 uint32_t XDitherOffset;
7848 uint32_t YDitherOffset;
7849 struct GEN8_BLEND_STATE_ENTRY Entry;
7850 };
7851
7852 static inline void
7853 GEN8_BLEND_STATE_pack(__gen_user_data *data, void * restrict dst,
7854 const struct GEN8_BLEND_STATE * restrict values)
7855 {
7856 uint32_t *dw = (uint32_t * restrict) dst;
7857
7858 dw[0] =
7859 __gen_field(values->AlphaToCoverageEnable, 31, 31) |
7860 __gen_field(values->IndependentAlphaBlendEnable, 30, 30) |
7861 __gen_field(values->AlphaToOneEnable, 29, 29) |
7862 __gen_field(values->AlphaToCoverageDitherEnable, 28, 28) |
7863 __gen_field(values->AlphaTestEnable, 27, 27) |
7864 __gen_field(values->AlphaTestFunction, 24, 26) |
7865 __gen_field(values->ColorDitherEnable, 23, 23) |
7866 __gen_field(values->XDitherOffset, 21, 22) |
7867 __gen_field(values->YDitherOffset, 19, 20) |
7868 0;
7869
7870 GEN8_BLEND_STATE_ENTRY_pack(data, &dw[1], &values->Entry);
7871 }
7872
7873 #define GEN8_BLEND_STATE_ENTRY_length 0x00000001
7874
7875 #define GEN8_CC_VIEWPORT_length 0x00000002
7876
7877 struct GEN8_CC_VIEWPORT {
7878 float MinimumDepth;
7879 float MaximumDepth;
7880 };
7881
7882 static inline void
7883 GEN8_CC_VIEWPORT_pack(__gen_user_data *data, void * restrict dst,
7884 const struct GEN8_CC_VIEWPORT * restrict values)
7885 {
7886 uint32_t *dw = (uint32_t * restrict) dst;
7887
7888 dw[0] =
7889 __gen_float(values->MinimumDepth) |
7890 0;
7891
7892 dw[1] =
7893 __gen_float(values->MaximumDepth) |
7894 0;
7895
7896 }
7897
7898 #define GEN8_COLOR_CALC_STATE_length 0x00000006
7899
7900 struct GEN8_COLOR_CALC_STATE {
7901 uint32_t StencilReferenceValue;
7902 uint32_t BackFaceStencilReferenceValue;
7903 #define Cancelled 0
7904 #define NotCancelled 1
7905 uint32_t RoundDisableFunctionDisable;
7906 #define ALPHATEST_UNORM8 0
7907 #define ALPHATEST_FLOAT32 1
7908 uint32_t AlphaTestFormat;
7909 uint32_t AlphaReferenceValueAsUNORM8;
7910 float AlphaReferenceValueAsFLOAT32;
7911 float BlendConstantColorRed;
7912 float BlendConstantColorGreen;
7913 float BlendConstantColorBlue;
7914 float BlendConstantColorAlpha;
7915 };
7916
7917 static inline void
7918 GEN8_COLOR_CALC_STATE_pack(__gen_user_data *data, void * restrict dst,
7919 const struct GEN8_COLOR_CALC_STATE * restrict values)
7920 {
7921 uint32_t *dw = (uint32_t * restrict) dst;
7922
7923 dw[0] =
7924 __gen_field(values->StencilReferenceValue, 24, 31) |
7925 __gen_field(values->BackFaceStencilReferenceValue, 16, 23) |
7926 __gen_field(values->RoundDisableFunctionDisable, 15, 15) |
7927 __gen_field(values->AlphaTestFormat, 0, 0) |
7928 0;
7929
7930 dw[1] =
7931 __gen_field(values->AlphaReferenceValueAsUNORM8, 0, 31) |
7932 __gen_float(values->AlphaReferenceValueAsFLOAT32) |
7933 0;
7934
7935 dw[2] =
7936 __gen_float(values->BlendConstantColorRed) |
7937 0;
7938
7939 dw[3] =
7940 __gen_float(values->BlendConstantColorGreen) |
7941 0;
7942
7943 dw[4] =
7944 __gen_float(values->BlendConstantColorBlue) |
7945 0;
7946
7947 dw[5] =
7948 __gen_float(values->BlendConstantColorAlpha) |
7949 0;
7950
7951 }
7952
7953 #define GEN8_MEMORY_OBJECT_CONTROL_STATE_length 0x00000001
7954
7955 #define GEN8_VEB_DI_IECP_COMMAND_SURFACE_CONTROL_BITS_length 0x00000001
7956
7957 struct GEN8_VEB_DI_IECP_COMMAND_SURFACE_CONTROL_BITS {
7958 #define UseCacheabilityControlsfrompagetableUCwithFenceifcoherentcycle 0
7959 #define UncacheableUCnoncacheable 1
7960 #define WritethroughWT 2
7961 #define WritebackWB 3
7962 uint32_t MemoryTypeLLCeLLCCacheabilityControlLeLLCCC;
7963 #define eLLCOnly 0
7964 #define LLCOnly 1
7965 #define LLCeLLCAllowed 2
7966 #define L3LLCeLLCAllowed 3
7967 uint32_t TargetCacheTC;
7968 uint32_t EncryptedData;
7969 #define PoorChance 3
7970 #define NormalChance 2
7971 #define BetterChance 1
7972 #define BestChance 0
7973 uint32_t AgeforQUADLRUAGE;
7974 };
7975
7976 static inline void
7977 GEN8_VEB_DI_IECP_COMMAND_SURFACE_CONTROL_BITS_pack(__gen_user_data *data, void * restrict dst,
7978 const struct GEN8_VEB_DI_IECP_COMMAND_SURFACE_CONTROL_BITS * restrict values)
7979 {
7980 uint32_t *dw = (uint32_t * restrict) dst;
7981
7982 dw[0] =
7983 __gen_field(values->MemoryTypeLLCeLLCCacheabilityControlLeLLCCC, 5, 6) |
7984 __gen_field(values->TargetCacheTC, 3, 4) |
7985 __gen_field(values->EncryptedData, 2, 2) |
7986 __gen_field(values->AgeforQUADLRUAGE, 0, 1) |
7987 0;
7988
7989 }
7990
7991 #define GEN8_INTERFACE_DESCRIPTOR_DATA_length 0x00000008
7992
7993 struct GEN8_INTERFACE_DESCRIPTOR_DATA {
7994 uint32_t KernelStartPointer;
7995 uint32_t KernelStartPointerHigh;
7996 #define Ftz 0
7997 #define SetByKernel 1
7998 uint32_t DenormMode;
7999 #define Multiple 0
8000 #define Single 1
8001 uint32_t SingleProgramFlow;
8002 #define NormalPriority 0
8003 #define HighPriority 1
8004 uint32_t ThreadPriority;
8005 #define IEEE754 0
8006 #define Alternate 1
8007 uint32_t FloatingPointMode;
8008 uint32_t IllegalOpcodeExceptionEnable;
8009 uint32_t MaskStackExceptionEnable;
8010 uint32_t SoftwareExceptionEnable;
8011 uint32_t SamplerStatePointer;
8012 #define Nosamplersused 0
8013 #define Between1and4samplersused 1
8014 #define Between5and8samplersused 2
8015 #define Between9and12samplersused 3
8016 #define Between13and16samplersused 4
8017 uint32_t SamplerCount;
8018 uint32_t BindingTablePointer;
8019 uint32_t BindingTableEntryCount;
8020 uint32_t ConstantIndirectURBEntryReadLength;
8021 uint32_t ConstantURBEntryReadOffset;
8022 #define RTNE 0
8023 #define RU 1
8024 #define RD 2
8025 #define RTZ 3
8026 uint32_t RoundingMode;
8027 uint32_t BarrierEnable;
8028 #define Encodes0k 0
8029 #define Encodes4k 1
8030 #define Encodes8k 2
8031 #define Encodes16k 4
8032 #define Encodes32k 8
8033 #define Encodes64k 16
8034 uint32_t SharedLocalMemorySize;
8035 uint32_t NumberofThreadsinGPGPUThreadGroup;
8036 uint32_t CrossThreadConstantDataReadLength;
8037 };
8038
8039 static inline void
8040 GEN8_INTERFACE_DESCRIPTOR_DATA_pack(__gen_user_data *data, void * restrict dst,
8041 const struct GEN8_INTERFACE_DESCRIPTOR_DATA * restrict values)
8042 {
8043 uint32_t *dw = (uint32_t * restrict) dst;
8044
8045 dw[0] =
8046 __gen_offset(values->KernelStartPointer, 6, 31) |
8047 0;
8048
8049 dw[1] =
8050 __gen_offset(values->KernelStartPointerHigh, 0, 15) |
8051 0;
8052
8053 dw[2] =
8054 __gen_field(values->DenormMode, 19, 19) |
8055 __gen_field(values->SingleProgramFlow, 18, 18) |
8056 __gen_field(values->ThreadPriority, 17, 17) |
8057 __gen_field(values->FloatingPointMode, 16, 16) |
8058 __gen_field(values->IllegalOpcodeExceptionEnable, 13, 13) |
8059 __gen_field(values->MaskStackExceptionEnable, 11, 11) |
8060 __gen_field(values->SoftwareExceptionEnable, 7, 7) |
8061 0;
8062
8063 dw[3] =
8064 __gen_offset(values->SamplerStatePointer, 5, 31) |
8065 __gen_field(values->SamplerCount, 2, 4) |
8066 0;
8067
8068 dw[4] =
8069 __gen_offset(values->BindingTablePointer, 5, 15) |
8070 __gen_field(values->BindingTableEntryCount, 0, 4) |
8071 0;
8072
8073 dw[5] =
8074 __gen_field(values->ConstantIndirectURBEntryReadLength, 16, 31) |
8075 __gen_field(values->ConstantURBEntryReadOffset, 0, 15) |
8076 0;
8077
8078 dw[6] =
8079 __gen_field(values->RoundingMode, 22, 23) |
8080 __gen_field(values->BarrierEnable, 21, 21) |
8081 __gen_field(values->SharedLocalMemorySize, 16, 20) |
8082 __gen_field(values->NumberofThreadsinGPGPUThreadGroup, 0, 9) |
8083 0;
8084
8085 dw[7] =
8086 __gen_field(values->CrossThreadConstantDataReadLength, 0, 7) |
8087 0;
8088
8089 }
8090
8091 #define GEN8_PALETTE_ENTRY_length 0x00000001
8092
8093 #define GEN8_RENDER_SURFACE_STATE_length 0x00000010
8094
8095 struct GEN8_RENDER_SURFACE_STATE {
8096 #define SURFTYPE_1D 0
8097 #define SURFTYPE_2D 1
8098 #define SURFTYPE_3D 2
8099 #define SURFTYPE_CUBE 3
8100 #define SURFTYPE_BUFFER 4
8101 #define SURFTYPE_STRBUF 5
8102 #define SURFTYPE_NULL 7
8103 uint32_t SurfaceType;
8104 uint32_t SurfaceArray;
8105 uint32_t SurfaceFormat;
8106 #define VALIGN4 1
8107 #define VALIGN8 2
8108 #define VALIGN16 3
8109 uint32_t SurfaceVerticalAlignment;
8110 #define HALIGN4 1
8111 #define HALIGN8 2
8112 #define HALIGN16 3
8113 uint32_t SurfaceHorizontalAlignment;
8114 #define LINEAR 0
8115 #define WMAJOR 1
8116 #define XMAJOR 2
8117 #define YMAJOR 3
8118 uint32_t TileMode;
8119 uint32_t VerticalLineStride;
8120 uint32_t VerticalLineStrideOffset;
8121 uint32_t SamplerL2BypassModeDisable;
8122 #define WriteOnlyCache 0
8123 #define ReadWriteCache 1
8124 uint32_t RenderCacheReadWriteMode;
8125 #define NORMAL_MODE 0
8126 #define PROGRESSIVE_FRAME 2
8127 #define INTERLACED_FRAME 3
8128 uint32_t MediaBoundaryPixelMode;
8129 uint32_t CubeFaceEnablePositiveZ;
8130 uint32_t CubeFaceEnableNegativeZ;
8131 uint32_t CubeFaceEnablePositiveY;
8132 uint32_t CubeFaceEnableNegativeY;
8133 uint32_t CubeFaceEnablePositiveX;
8134 uint32_t CubeFaceEnableNegativeX;
8135 struct GEN8_MEMORY_OBJECT_CONTROL_STATE MemoryObjectControlState;
8136 uint32_t BaseMipLevel;
8137 uint32_t SurfaceQPitch;
8138 uint32_t Height;
8139 uint32_t Width;
8140 uint32_t Depth;
8141 uint32_t SurfacePitch;
8142 #define _0DEG 0
8143 #define _90DEG 1
8144 #define _270DEG 3
8145 uint32_t RenderTargetAndSampleUnormRotation;
8146 uint32_t MinimumArrayElement;
8147 uint32_t RenderTargetViewExtent;
8148 #define MSS 0
8149 #define DEPTH_STENCIL 1
8150 uint32_t MultisampledSurfaceStorageFormat;
8151 #define MULTISAMPLECOUNT_1 0
8152 #define MULTISAMPLECOUNT_2 1
8153 #define MULTISAMPLECOUNT_4 2
8154 #define MULTISAMPLECOUNT_8 3
8155 uint32_t NumberofMultisamples;
8156 uint32_t MultisamplePositionPaletteIndex;
8157 uint32_t XOffset;
8158 uint32_t YOffset;
8159 uint32_t EWADisableForCube;
8160 #define GPUcoherent 0
8161 #define IAcoherent 1
8162 uint32_t CoherencyType;
8163 uint32_t SurfaceMinLOD;
8164 uint32_t MIPCountLOD;
8165 uint32_t AuxiliarySurfaceQPitch;
8166 uint32_t AuxiliarySurfacePitch;
8167 #define AUX_NONE 0
8168 #define AUX_MCS 1
8169 #define AUX_APPEND 2
8170 #define AUX_HIZ 3
8171 uint32_t AuxiliarySurfaceMode;
8172 uint32_t SeparateUVPlaneEnable;
8173 uint32_t XOffsetforUorUVPlane;
8174 uint32_t YOffsetforUorUVPlane;
8175 uint32_t RedClearColor;
8176 uint32_t GreenClearColor;
8177 uint32_t BlueClearColor;
8178 uint32_t AlphaClearColor;
8179 uint32_t ShaderChannelSelectRed;
8180 uint32_t ShaderChannelSelectGreen;
8181 uint32_t ShaderChannelSelectBlue;
8182 uint32_t ShaderChannelSelectAlpha;
8183 uint32_t ResourceMinLOD;
8184 __gen_address_type SurfaceBaseAddress;
8185 uint32_t XOffsetforVPlane;
8186 uint32_t YOffsetforVPlane;
8187 uint32_t AuxiliaryTableIndexforMediaCompressedSurface;
8188 __gen_address_type AuxiliarySurfaceBaseAddress;
8189 };
8190
8191 static inline void
8192 GEN8_RENDER_SURFACE_STATE_pack(__gen_user_data *data, void * restrict dst,
8193 const struct GEN8_RENDER_SURFACE_STATE * restrict values)
8194 {
8195 uint32_t *dw = (uint32_t * restrict) dst;
8196
8197 dw[0] =
8198 __gen_field(values->SurfaceType, 29, 31) |
8199 __gen_field(values->SurfaceArray, 28, 28) |
8200 __gen_field(values->SurfaceFormat, 18, 26) |
8201 __gen_field(values->SurfaceVerticalAlignment, 16, 17) |
8202 __gen_field(values->SurfaceHorizontalAlignment, 14, 15) |
8203 __gen_field(values->TileMode, 12, 13) |
8204 __gen_field(values->VerticalLineStride, 11, 11) |
8205 __gen_field(values->VerticalLineStrideOffset, 10, 10) |
8206 __gen_field(values->SamplerL2BypassModeDisable, 9, 9) |
8207 __gen_field(values->RenderCacheReadWriteMode, 8, 8) |
8208 __gen_field(values->MediaBoundaryPixelMode, 6, 7) |
8209 __gen_field(values->CubeFaceEnablePositiveZ, 0, 0) |
8210 __gen_field(values->CubeFaceEnableNegativeZ, 1, 1) |
8211 __gen_field(values->CubeFaceEnablePositiveY, 2, 2) |
8212 __gen_field(values->CubeFaceEnableNegativeY, 3, 3) |
8213 __gen_field(values->CubeFaceEnablePositiveX, 4, 4) |
8214 __gen_field(values->CubeFaceEnableNegativeX, 5, 5) |
8215 0;
8216
8217 uint32_t dw_MemoryObjectControlState;
8218 GEN8_MEMORY_OBJECT_CONTROL_STATE_pack(data, &dw_MemoryObjectControlState, &values->MemoryObjectControlState);
8219 dw[1] =
8220 /* Struct MemoryObjectControlState (24..30): */
8221 __gen_field(dw_MemoryObjectControlState, 24, 30) |
8222 __gen_field(values->BaseMipLevel, 19, 23) |
8223 __gen_field(values->SurfaceQPitch, 0, 14) |
8224 0;
8225
8226 dw[2] =
8227 __gen_field(values->Height, 16, 29) |
8228 __gen_field(values->Width, 0, 13) |
8229 0;
8230
8231 dw[3] =
8232 __gen_field(values->Depth, 21, 31) |
8233 __gen_field(values->SurfacePitch, 0, 17) |
8234 0;
8235
8236 dw[4] =
8237 __gen_field(values->RenderTargetAndSampleUnormRotation, 29, 30) |
8238 __gen_field(values->MinimumArrayElement, 18, 28) |
8239 __gen_field(values->RenderTargetViewExtent, 7, 17) |
8240 __gen_field(values->MultisampledSurfaceStorageFormat, 6, 6) |
8241 __gen_field(values->NumberofMultisamples, 3, 5) |
8242 __gen_field(values->MultisamplePositionPaletteIndex, 0, 2) |
8243 0;
8244
8245 dw[5] =
8246 __gen_offset(values->XOffset, 25, 31) |
8247 __gen_offset(values->YOffset, 21, 23) |
8248 __gen_field(values->EWADisableForCube, 20, 20) |
8249 __gen_field(values->CoherencyType, 14, 14) |
8250 __gen_field(values->SurfaceMinLOD, 4, 7) |
8251 __gen_field(values->MIPCountLOD, 0, 3) |
8252 0;
8253
8254 dw[6] =
8255 __gen_field(values->AuxiliarySurfaceQPitch, 16, 30) |
8256 __gen_field(values->AuxiliarySurfacePitch, 3, 11) |
8257 __gen_field(values->AuxiliarySurfaceMode, 0, 2) |
8258 __gen_field(values->SeparateUVPlaneEnable, 31, 31) |
8259 __gen_field(values->XOffsetforUorUVPlane, 16, 29) |
8260 __gen_field(values->YOffsetforUorUVPlane, 0, 13) |
8261 0;
8262
8263 dw[7] =
8264 __gen_field(values->RedClearColor, 31, 31) |
8265 __gen_field(values->GreenClearColor, 30, 30) |
8266 __gen_field(values->BlueClearColor, 29, 29) |
8267 __gen_field(values->AlphaClearColor, 28, 28) |
8268 __gen_field(values->ShaderChannelSelectRed, 25, 27) |
8269 __gen_field(values->ShaderChannelSelectGreen, 22, 24) |
8270 __gen_field(values->ShaderChannelSelectBlue, 19, 21) |
8271 __gen_field(values->ShaderChannelSelectAlpha, 16, 18) |
8272 __gen_field(values->ResourceMinLOD, 0, 11) |
8273 0;
8274
8275 uint32_t dw8 =
8276 0;
8277
8278 dw[8] =
8279 __gen_combine_address(data, &dw[8], values->SurfaceBaseAddress, dw8);
8280
8281 uint32_t dw10 =
8282 __gen_field(values->XOffsetforVPlane, 48, 61) |
8283 __gen_field(values->YOffsetforVPlane, 32, 45) |
8284 __gen_field(values->AuxiliaryTableIndexforMediaCompressedSurface, 21, 31) |
8285 0;
8286
8287 dw[10] =
8288 __gen_combine_address(data, &dw[10], values->AuxiliarySurfaceBaseAddress, dw10);
8289
8290 dw[12] =
8291 0;
8292
8293 dw[13] =
8294 0;
8295
8296 dw[14] =
8297 0;
8298
8299 dw[15] =
8300 0;
8301
8302 }
8303
8304 #define GEN8_SAMPLER_STATE_length 0x00000004
8305
8306 struct GEN8_SAMPLER_STATE {
8307 uint32_t SamplerDisable;
8308 #define DX10OGL 0
8309 #define DX9 1
8310 uint32_t TextureBorderColorMode;
8311 #define CLAMP_NONE 0
8312 #define CLAMP_OGL 2
8313 uint32_t LODPreClampMode;
8314 uint32_t BaseMipLevel;
8315 #define MIPFILTER_NONE 0
8316 #define MIPFILTER_NEAREST 1
8317 #define MIPFILTER_LINEAR 3
8318 uint32_t MipModeFilter;
8319 #define MAPFILTER_NEAREST 0
8320 #define MAPFILTER_LINEAR 1
8321 #define MAPFILTER_ANISOTROPIC 2
8322 #define MAPFILTER_MONO 6
8323 uint32_t MagModeFilter;
8324 #define MAPFILTER_NEAREST 0
8325 #define MAPFILTER_LINEAR 1
8326 #define MAPFILTER_ANISOTROPIC 2
8327 #define MAPFILTER_MONO 6
8328 uint32_t MinModeFilter;
8329 uint32_t TextureLODBias;
8330 #define LEGACY 0
8331 #define EWAApproximation 1
8332 uint32_t AnisotropicAlgorithm;
8333 uint32_t MinLOD;
8334 uint32_t MaxLOD;
8335 uint32_t ChromaKeyEnable;
8336 uint32_t ChromaKeyIndex;
8337 #define KEYFILTER_KILL_ON_ANY_MATCH 0
8338 #define KEYFILTER_REPLACE_BLACK 1
8339 uint32_t ChromaKeyMode;
8340 #define PREFILTEROPALWAYS 0
8341 #define PREFILTEROPNEVER 1
8342 #define PREFILTEROPLESS 2
8343 #define PREFILTEROPEQUAL 3
8344 #define PREFILTEROPLEQUAL 4
8345 #define PREFILTEROPGREATER 5
8346 #define PREFILTEROPNOTEQUAL 6
8347 #define PREFILTEROPGEQUAL 7
8348 uint32_t ShadowFunction;
8349 #define PROGRAMMED 0
8350 #define OVERRIDE 1
8351 uint32_t CubeSurfaceControlMode;
8352 uint32_t IndirectStatePointer;
8353 #define MIPNONE 0
8354 #define MIPFILTER 1
8355 uint32_t LODClampMagnificationMode;
8356 #define RATIO21 0
8357 #define RATIO41 1
8358 #define RATIO61 2
8359 #define RATIO81 3
8360 #define RATIO101 4
8361 #define RATIO121 5
8362 #define RATIO141 6
8363 #define RATIO161 7
8364 uint32_t MaximumAnisotropy;
8365 uint32_t RAddressMinFilterRoundingEnable;
8366 uint32_t RAddressMagFilterRoundingEnable;
8367 uint32_t VAddressMinFilterRoundingEnable;
8368 uint32_t VAddressMagFilterRoundingEnable;
8369 uint32_t UAddressMinFilterRoundingEnable;
8370 uint32_t UAddressMagFilterRoundingEnable;
8371 #define FULL 0
8372 #define HIGH 1
8373 #define MED 2
8374 #define LOW 3
8375 uint32_t TrilinearFilterQuality;
8376 uint32_t NonnormalizedCoordinateEnable;
8377 uint32_t TCXAddressControlMode;
8378 uint32_t TCYAddressControlMode;
8379 uint32_t TCZAddressControlMode;
8380 };
8381
8382 static inline void
8383 GEN8_SAMPLER_STATE_pack(__gen_user_data *data, void * restrict dst,
8384 const struct GEN8_SAMPLER_STATE * restrict values)
8385 {
8386 uint32_t *dw = (uint32_t * restrict) dst;
8387
8388 dw[0] =
8389 __gen_field(values->SamplerDisable, 31, 31) |
8390 __gen_field(values->TextureBorderColorMode, 29, 29) |
8391 __gen_field(values->LODPreClampMode, 27, 28) |
8392 __gen_field(values->BaseMipLevel, 22, 26) |
8393 __gen_field(values->MipModeFilter, 20, 21) |
8394 __gen_field(values->MagModeFilter, 17, 19) |
8395 __gen_field(values->MinModeFilter, 14, 16) |
8396 __gen_field(values->TextureLODBias, 1, 13) |
8397 __gen_field(values->AnisotropicAlgorithm, 0, 0) |
8398 0;
8399
8400 dw[1] =
8401 __gen_field(values->MinLOD, 20, 31) |
8402 __gen_field(values->MaxLOD, 8, 19) |
8403 __gen_field(values->ChromaKeyEnable, 7, 7) |
8404 __gen_field(values->ChromaKeyIndex, 5, 6) |
8405 __gen_field(values->ChromaKeyMode, 4, 4) |
8406 __gen_field(values->ShadowFunction, 1, 3) |
8407 __gen_field(values->CubeSurfaceControlMode, 0, 0) |
8408 0;
8409
8410 dw[2] =
8411 __gen_field(values->IndirectStatePointer, 6, 23) |
8412 __gen_field(values->LODClampMagnificationMode, 0, 0) |
8413 0;
8414
8415 dw[3] =
8416 __gen_field(values->MaximumAnisotropy, 19, 21) |
8417 __gen_field(values->RAddressMinFilterRoundingEnable, 13, 13) |
8418 __gen_field(values->RAddressMagFilterRoundingEnable, 14, 14) |
8419 __gen_field(values->VAddressMinFilterRoundingEnable, 15, 15) |
8420 __gen_field(values->VAddressMagFilterRoundingEnable, 16, 16) |
8421 __gen_field(values->UAddressMinFilterRoundingEnable, 17, 17) |
8422 __gen_field(values->UAddressMagFilterRoundingEnable, 18, 18) |
8423 __gen_field(values->TrilinearFilterQuality, 11, 12) |
8424 __gen_field(values->NonnormalizedCoordinateEnable, 10, 10) |
8425 __gen_field(values->TCXAddressControlMode, 6, 8) |
8426 __gen_field(values->TCYAddressControlMode, 3, 5) |
8427 __gen_field(values->TCZAddressControlMode, 0, 2) |
8428 0;
8429
8430 }
8431
8432 /* Enum 3D_Prim_Topo_Type */
8433 #define _3DPRIM_POINTLIST 1
8434 #define _3DPRIM_LINELIST 2
8435 #define _3DPRIM_LINESTRIP 3
8436 #define _3DPRIM_TRILIST 4
8437 #define _3DPRIM_TRISTRIP 5
8438 #define _3DPRIM_TRIFAN 6
8439 #define _3DPRIM_QUADLIST 7
8440 #define _3DPRIM_QUADSTRIP 8
8441 #define _3DPRIM_LINELIST_ADJ 9
8442 #define _3DPRIM_LISTSTRIP_ADJ 10
8443 #define _3DPRIM_TRILIST_ADJ 11
8444 #define _3DPRIM_TRISTRIP_ADJ 12
8445 #define _3DPRIM_TRISTRIP_REVERSE 13
8446 #define _3DPRIM_POLYGON 14
8447 #define _3DPRIM_RECTLIST 15
8448 #define _3DPRIM_LINELOOP 16
8449 #define _3DPRIM_POINTLIST_BF 17
8450 #define _3DPRIM_LINESTRIP_CONT 18
8451 #define _3DPRIM_LINESTRIP_BF 19
8452 #define _3DPRIM_LINESTRIP_CONT_BF 20
8453 #define _3DPRIM_TRIFAN_NOSTIPPLE 22
8454 #define _3DPRIM_PATCHLIST_1 32
8455 #define _3DPRIM_PATCHLIST_2 33
8456 #define _3DPRIM_PATCHLIST_3 34
8457 #define _3DPRIM_PATCHLIST_4 35
8458 #define _3DPRIM_PATCHLIST_5 36
8459 #define _3DPRIM_PATCHLIST_6 37
8460 #define _3DPRIM_PATCHLIST_7 38
8461 #define _3DPRIM_PATCHLIST_8 39
8462 #define _3DPRIM_PATCHLIST_9 40
8463 #define _3DPRIM_PATCHLIST_10 41
8464 #define _3DPRIM_PATCHLIST_11 42
8465 #define _3DPRIM_PATCHLIST_12 43
8466 #define _3DPRIM_PATCHLIST_13 44
8467 #define _3DPRIM_PATCHLIST_14 45
8468 #define _3DPRIM_PATCHLIST_15 46
8469 #define _3DPRIM_PATCHLIST_16 47
8470 #define _3DPRIM_PATCHLIST_17 48
8471 #define _3DPRIM_PATCHLIST_18 49
8472 #define _3DPRIM_PATCHLIST_19 50
8473 #define _3DPRIM_PATCHLIST_20 51
8474 #define _3DPRIM_PATCHLIST_21 52
8475 #define _3DPRIM_PATCHLIST_22 53
8476 #define _3DPRIM_PATCHLIST_23 54
8477 #define _3DPRIM_PATCHLIST_24 55
8478 #define _3DPRIM_PATCHLIST_25 56
8479 #define _3DPRIM_PATCHLIST_26 57
8480 #define _3DPRIM_PATCHLIST_27 58
8481 #define _3DPRIM_PATCHLIST_28 59
8482 #define _3DPRIM_PATCHLIST_29 60
8483 #define _3DPRIM_PATCHLIST_30 61
8484 #define _3DPRIM_PATCHLIST_31 62
8485 #define _3DPRIM_PATCHLIST_32 63
8486
8487 /* Enum 3D_Vertex_Component_Control */
8488 #define VFCOMP_NOSTORE 0
8489 #define VFCOMP_STORE_SRC 1
8490 #define VFCOMP_STORE_0 2
8491 #define VFCOMP_STORE_1_FP 3
8492 #define VFCOMP_STORE_1_INT 4
8493 #define VFCOMP_STORE_PID 7
8494
8495 /* Enum WRAP_SHORTEST_ENABLE */
8496 #define X 1
8497 #define Y 2
8498 #define XY 3
8499 #define Z 4
8500 #define XZ 5
8501 #define YZ 6
8502 #define XYZ 7
8503 #define W 8
8504 #define XW 9
8505 #define YW 10
8506 #define XYW 11
8507 #define ZW 12
8508 #define XZW 13
8509 #define YZW 14
8510 #define XYZW 15
8511
8512 /* Enum 3D_Stencil_Operation */
8513 #define STENCILOP_KEEP 0
8514 #define STENCILOP_ZERO 1
8515 #define STENCILOP_REPLACE 2
8516 #define STENCILOP_INCRSAT 3
8517 #define STENCILOP_DECRSAT 4
8518 #define STENCILOP_INCR 5
8519 #define STENCILOP_DECR 6
8520 #define STENCILOP_INVERT 7
8521
8522 /* Enum 3D_Color_Buffer_Blend_Factor */
8523 #define BLENDFACTOR_ONE 1
8524 #define BLENDFACTOR_SRC_COLOR 2
8525 #define BLENDFACTOR_SRC_ALPHA 3
8526 #define BLENDFACTOR_DST_ALPHA 4
8527 #define BLENDFACTOR_DST_COLOR 5
8528 #define BLENDFACTOR_SRC_ALPHA_SATURATE 6
8529 #define BLENDFACTOR_CONST_COLOR 7
8530 #define BLENDFACTOR_CONST_ALPHA 8
8531 #define BLENDFACTOR_SRC1_COLOR 9
8532 #define BLENDFACTOR_SRC1_ALPHA 10
8533 #define BLENDFACTOR_ZERO 17
8534 #define BLENDFACTOR_INV_SRC_COLOR 18
8535 #define BLENDFACTOR_INV_SRC_ALPHA 19
8536 #define BLENDFACTOR_INV_DST_ALPHA 20
8537 #define BLENDFACTOR_INV_DST_COLOR 21
8538 #define BLENDFACTOR_INV_CONST_COLOR 23
8539 #define BLENDFACTOR_INV_CONST_ALPHA 24
8540 #define BLENDFACTOR_INV_SRC1_COLOR 25
8541 #define BLENDFACTOR_INV_SRC1_ALPHA 26
8542
8543 /* Enum 3D_Color_Buffer_Blend_Function */
8544 #define BLENDFUNCTION_ADD 0
8545 #define BLENDFUNCTION_SUBTRACT 1
8546 #define BLENDFUNCTION_REVERSE_SUBTRACT 2
8547 #define BLENDFUNCTION_MIN 3
8548 #define BLENDFUNCTION_MAX 4
8549
8550 /* Enum 3D_Compare_Function */
8551 #define COMPAREFUNCTION_ALWAYS 0
8552 #define COMPAREFUNCTION_NEVER 1
8553 #define COMPAREFUNCTION_LESS 2
8554 #define COMPAREFUNCTION_EQUAL 3
8555 #define COMPAREFUNCTION_LEQUAL 4
8556 #define COMPAREFUNCTION_GREATER 5
8557 #define COMPAREFUNCTION_NOTEQUAL 6
8558 #define COMPAREFUNCTION_GEQUAL 7
8559
8560 /* Enum 3D_Logic_Op_Function */
8561 #define LOGICOP_CLEAR 0
8562 #define LOGICOP_NOR 1
8563 #define LOGICOP_AND_INVERTED 2
8564 #define LOGICOP_COPY_INVERTED 3
8565 #define LOGICOP_AND_REVERSE 4
8566 #define LOGICOP_INVERT 5
8567 #define LOGICOP_XOR 6
8568 #define LOGICOP_NAND 7
8569 #define LOGICOP_AND 8
8570 #define LOGICOP_EQUIV 9
8571 #define LOGICOP_NOOP 10
8572 #define LOGICOP_OR_INVERTED 11
8573 #define LOGICOP_COPY 12
8574 #define LOGICOP_OR_REVERSE 13
8575 #define LOGICOP_OR 14
8576 #define LOGICOP_SET 15
8577
8578 /* Enum SURFACE_FORMAT */
8579 #define R32G32B32A32_FLOAT 0
8580 #define R32G32B32A32_SINT 1
8581 #define R32G32B32A32_UINT 2
8582 #define R32G32B32A32_UNORM 3
8583 #define R32G32B32A32_SNORM 4
8584 #define R64G64_FLOAT 5
8585 #define R32G32B32X32_FLOAT 6
8586 #define R32G32B32A32_SSCALED 7
8587 #define R32G32B32A32_USCALED 8
8588 #define R32G32B32A32_SFIXED 32
8589 #define R64G64_PASSTHRU 33
8590 #define R32G32B32_FLOAT 64
8591 #define R32G32B32_SINT 65
8592 #define R32G32B32_UINT 66
8593 #define R32G32B32_UNORM 67
8594 #define R32G32B32_SNORM 68
8595 #define R32G32B32_SSCALED 69
8596 #define R32G32B32_USCALED 70
8597 #define R32G32B32_SFIXED 80
8598 #define R16G16B16A16_UNORM 128
8599 #define R16G16B16A16_SNORM 129
8600 #define R16G16B16A16_SINT 130
8601 #define R16G16B16A16_UINT 131
8602 #define R16G16B16A16_FLOAT 132
8603 #define R32G32_FLOAT 133
8604 #define R32G32_SINT 134
8605 #define R32G32_UINT 135
8606 #define R32_FLOAT_X8X24_TYPELESS 136
8607 #define X32_TYPELESS_G8X24_UINT 137
8608 #define L32A32_FLOAT 138
8609 #define R32G32_UNORM 139
8610 #define R32G32_SNORM 140
8611 #define R64_FLOAT 141
8612 #define R16G16B16X16_UNORM 142
8613 #define R16G16B16X16_FLOAT 143
8614 #define A32X32_FLOAT 144
8615 #define L32X32_FLOAT 145
8616 #define I32X32_FLOAT 146
8617 #define R16G16B16A16_SSCALED 147
8618 #define R16G16B16A16_USCALED 148
8619 #define R32G32_SSCALED 149
8620 #define R32G32_USCALED 150
8621 #define R32G32_SFIXED 160
8622 #define R64_PASSTHRU 161
8623 #define B8G8R8A8_UNORM 192
8624 #define B8G8R8A8_UNORM_SRGB 193
8625 #define R10G10B10A2_UNORM 194
8626 #define R10G10B10A2_UNORM_SRGB 195
8627 #define R10G10B10A2_UINT 196
8628 #define R10G10B10_SNORM_A2_UNORM 197
8629 #define R8G8B8A8_UNORM 199
8630 #define R8G8B8A8_UNORM_SRGB 200
8631 #define R8G8B8A8_SNORM 201
8632 #define R8G8B8A8_SINT 202
8633 #define R8G8B8A8_UINT 203
8634 #define R16G16_UNORM 204
8635 #define R16G16_SNORM 205
8636 #define R16G16_SINT 206
8637 #define R16G16_UINT 207
8638 #define R16G16_FLOAT 208
8639 #define B10G10R10A2_UNORM 209
8640 #define B10G10R10A2_UNORM_SRGB 210
8641 #define R11G11B10_FLOAT 211
8642 #define R32_SINT 214
8643 #define R32_UINT 215
8644 #define R32_FLOAT 216
8645 #define R24_UNORM_X8_TYPELESS 217
8646 #define X24_TYPELESS_G8_UINT 218
8647 #define L32_UNORM 221
8648 #define A32_UNORM 222
8649 #define L16A16_UNORM 223
8650 #define I24X8_UNORM 224
8651 #define L24X8_UNORM 225
8652 #define A24X8_UNORM 226
8653 #define I32_FLOAT 227
8654 #define L32_FLOAT 228
8655 #define A32_FLOAT 229
8656 #define X8B8_UNORM_G8R8_SNORM 230
8657 #define A8X8_UNORM_G8R8_SNORM 231
8658 #define B8X8_UNORM_G8R8_SNORM 232
8659 #define B8G8R8X8_UNORM 233
8660 #define B8G8R8X8_UNORM_SRGB 234
8661 #define R8G8B8X8_UNORM 235
8662 #define R8G8B8X8_UNORM_SRGB 236
8663 #define R9G9B9E5_SHAREDEXP 237
8664 #define B10G10R10X2_UNORM 238
8665 #define L16A16_FLOAT 240
8666 #define R32_UNORM 241
8667 #define R32_SNORM 242
8668 #define R10G10B10X2_USCALED 243
8669 #define R8G8B8A8_SSCALED 244
8670 #define R8G8B8A8_USCALED 245
8671 #define R16G16_SSCALED 246
8672 #define R16G16_USCALED 247
8673 #define R32_SSCALED 248
8674 #define R32_USCALED 249
8675 #define B5G6R5_UNORM 256
8676 #define B5G6R5_UNORM_SRGB 257
8677 #define B5G5R5A1_UNORM 258
8678 #define B5G5R5A1_UNORM_SRGB 259
8679 #define B4G4R4A4_UNORM 260
8680 #define B4G4R4A4_UNORM_SRGB 261
8681 #define R8G8_UNORM 262
8682 #define R8G8_SNORM 263
8683 #define R8G8_SINT 264
8684 #define R8G8_UINT 265
8685 #define R16_UNORM 266
8686 #define R16_SNORM 267
8687 #define R16_SINT 268
8688 #define R16_UINT 269
8689 #define R16_FLOAT 270
8690 #define A8P8_UNORM_PALETTE0 271
8691 #define A8P8_UNORM_PALETTE1 272
8692 #define I16_UNORM 273
8693 #define L16_UNORM 274
8694 #define A16_UNORM 275
8695 #define L8A8_UNORM 276
8696 #define I16_FLOAT 277
8697 #define L16_FLOAT 278
8698 #define A16_FLOAT 279
8699 #define L8A8_UNORM_SRGB 280
8700 #define R5G5_SNORM_B6_UNORM 281
8701 #define B5G5R5X1_UNORM 282
8702 #define B5G5R5X1_UNORM_SRGB 283
8703 #define R8G8_SSCALED 284
8704 #define R8G8_USCALED 285
8705 #define R16_SSCALED 286
8706 #define R16_USCALED 287
8707 #define P8A8_UNORM_PALETTE0 290
8708 #define P8A8_UNORM_PALETTE1 291
8709 #define A1B5G5R5_UNORM 292
8710 #define A4B4G4R4_UNORM 293
8711 #define L8A8_UINT 294
8712 #define L8A8_SINT 295
8713 #define R8_UNORM 320
8714 #define R8_SNORM 321
8715 #define R8_SINT 322
8716 #define R8_UINT 323
8717 #define A8_UNORM 324
8718 #define I8_UNORM 325
8719 #define L8_UNORM 326
8720 #define P4A4_UNORM_PALETTE0 327
8721 #define A4P4_UNORM_PALETTE0 328
8722 #define R8_SSCALED 329
8723 #define R8_USCALED 330
8724 #define P8_UNORM_PALETTE0 331
8725 #define L8_UNORM_SRGB 332
8726 #define P8_UNORM_PALETTE1 333
8727 #define P4A4_UNORM_PALETTE1 334
8728 #define A4P4_UNORM_PALETTE1 335
8729 #define Y8_UNORM 336
8730 #define L8_UINT 338
8731 #define L8_SINT 339
8732 #define I8_UINT 340
8733 #define I8_SINT 341
8734 #define DXT1_RGB_SRGB 384
8735 #define R1_UNORM 385
8736 #define YCRCB_NORMAL 386
8737 #define YCRCB_SWAPUVY 387
8738 #define P2_UNORM_PALETTE0 388
8739 #define P2_UNORM_PALETTE1 389
8740 #define BC1_UNORM 390
8741 #define BC2_UNORM 391
8742 #define BC3_UNORM 392
8743 #define BC4_UNORM 393
8744 #define BC5_UNORM 394
8745 #define BC1_UNORM_SRGB 395
8746 #define BC2_UNORM_SRGB 396
8747 #define BC3_UNORM_SRGB 397
8748 #define MONO8 398
8749 #define YCRCB_SWAPUV 399
8750 #define YCRCB_SWAPY 400
8751 #define DXT1_RGB 401
8752 #define FXT1 402
8753 #define R8G8B8_UNORM 403
8754 #define R8G8B8_SNORM 404
8755 #define R8G8B8_SSCALED 405
8756 #define R8G8B8_USCALED 406
8757 #define R64G64B64A64_FLOAT 407
8758 #define R64G64B64_FLOAT 408
8759 #define BC4_SNORM 409
8760 #define BC5_SNORM 410
8761 #define R16G16B16_FLOAT 411
8762 #define R16G16B16_UNORM 412
8763 #define R16G16B16_SNORM 413
8764 #define R16G16B16_SSCALED 414
8765 #define R16G16B16_USCALED 415
8766 #define BC6H_SF16 417
8767 #define BC7_UNORM 418
8768 #define BC7_UNORM_SRGB 419
8769 #define BC6H_UF16 420
8770 #define PLANAR_420_8 421
8771 #define R8G8B8_UNORM_SRGB 424
8772 #define ETC1_RGB8 425
8773 #define ETC2_RGB8 426
8774 #define EAC_R11 427
8775 #define EAC_RG11 428
8776 #define EAC_SIGNED_R11 429
8777 #define EAC_SIGNED_RG11 430
8778 #define ETC2_SRGB8 431
8779 #define R16G16B16_UINT 432
8780 #define R16G16B16_SINT 433
8781 #define R32_SFIXED 434
8782 #define R10G10B10A2_SNORM 435
8783 #define R10G10B10A2_USCALED 436
8784 #define R10G10B10A2_SSCALED 437
8785 #define R10G10B10A2_SINT 438
8786 #define B10G10R10A2_SNORM 439
8787 #define B10G10R10A2_USCALED 440
8788 #define B10G10R10A2_SSCALED 441
8789 #define B10G10R10A2_UINT 442
8790 #define B10G10R10A2_SINT 443
8791 #define R64G64B64A64_PASSTHRU 444
8792 #define R64G64B64_PASSTHRU 445
8793 #define ETC2_RGB8_PTA 448
8794 #define ETC2_SRGB8_PTA 449
8795 #define ETC2_EAC_RGBA8 450
8796 #define ETC2_EAC_SRGB8_A8 451
8797 #define R8G8B8_UINT 456
8798 #define R8G8B8_SINT 457
8799 #define RAW 511
8800
8801 /* Enum Shader Channel Select */
8802 #define SCS_ZERO 0
8803 #define SCS_ONE 1
8804 #define SCS_RED 4
8805 #define SCS_GREEN 5
8806 #define SCS_BLUE 6
8807 #define SCS_ALPHA 7
8808
8809 /* Enum Clear Color */
8810 #define CC_ZERO 0
8811 #define CC_ONE 1
8812
8813 /* Enum Texture Coordinate Mode */
8814 #define TCM_WRAP 0
8815 #define TCM_MIRROR 1
8816 #define TCM_CLAMP 2
8817 #define TCM_CUBE 3
8818 #define TCM_CLAMP_BORDER 4
8819 #define TCM_MIRROR_ONCE 5
8820 #define TCM_HALF_BORDER 6
8821