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