1/* 2 * Copyright (C) 2016 Intel Corporation 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 * IN THE SOFTWARE. 22 */ 23 24 25/* Instructions, enums and structures for SKL. 26 * 27 * This file has been generated, do not hand edit. 28 */ 29 30#ifndef GFX9_PACK_H 31#define GFX9_PACK_H 32 33#include <stdio.h> 34#include <stdint.h> 35#include <stdbool.h> 36#include <assert.h> 37#include <math.h> 38 39#ifndef __gen_validate_value 40#define __gen_validate_value(x) 41#endif 42 43#ifndef __intel_field_functions 44#define __intel_field_functions 45 46#ifdef NDEBUG 47#define NDEBUG_UNUSED __attribute__((unused)) 48#else 49#define NDEBUG_UNUSED 50#endif 51 52union __intel_value { 53 float f; 54 uint32_t dw; 55}; 56 57static inline __attribute__((always_inline)) uint64_t 58__gen_mbo(uint32_t start, uint32_t end) 59{ 60 return (~0ull >> (64 - (end - start + 1))) << start; 61} 62 63static inline __attribute__((always_inline)) uint64_t 64__gen_uint(uint64_t v, uint32_t start, NDEBUG_UNUSED uint32_t end) 65{ 66 __gen_validate_value(v); 67 68#ifndef NDEBUG 69 const int width = end - start + 1; 70 if (width < 64) { 71 const uint64_t max = (1ull << width) - 1; 72 assert(v <= max); 73 } 74#endif 75 76 return v << start; 77} 78 79static inline __attribute__((always_inline)) uint64_t 80__gen_sint(int64_t v, uint32_t start, uint32_t end) 81{ 82 const int width = end - start + 1; 83 84 __gen_validate_value(v); 85 86#ifndef NDEBUG 87 if (width < 64) { 88 const int64_t max = (1ll << (width - 1)) - 1; 89 const int64_t min = -(1ll << (width - 1)); 90 assert(min <= v && v <= max); 91 } 92#endif 93 94 const uint64_t mask = ~0ull >> (64 - width); 95 96 return (v & mask) << start; 97} 98 99static inline __attribute__((always_inline)) uint64_t 100__gen_offset(uint64_t v, NDEBUG_UNUSED uint32_t start, NDEBUG_UNUSED uint32_t end) 101{ 102 __gen_validate_value(v); 103#ifndef NDEBUG 104 uint64_t mask = (~0ull >> (64 - (end - start + 1))) << start; 105 106 assert((v & ~mask) == 0); 107#endif 108 109 return v; 110} 111 112static inline __attribute__((always_inline)) uint64_t 113__gen_address(__gen_user_data *data, void *location, 114 __gen_address_type address, uint32_t delta, 115 __attribute__((unused)) uint32_t start, uint32_t end) 116{ 117 uint64_t addr_u64 = __gen_combine_address(data, location, address, delta); 118 if (end == 31) { 119 return addr_u64; 120 } else if (end < 63) { 121 const unsigned shift = 63 - end; 122 return (addr_u64 << shift) >> shift; 123 } else { 124 return addr_u64; 125 } 126} 127 128static inline __attribute__((always_inline)) uint32_t 129__gen_float(float v) 130{ 131 __gen_validate_value(v); 132 return ((union __intel_value) { .f = (v) }).dw; 133} 134 135static inline __attribute__((always_inline)) uint64_t 136__gen_sfixed(float v, uint32_t start, uint32_t end, uint32_t fract_bits) 137{ 138 __gen_validate_value(v); 139 140 const float factor = (1 << fract_bits); 141 142#ifndef NDEBUG 143 const float max = ((1 << (end - start)) - 1) / factor; 144 const float min = -(1 << (end - start)) / factor; 145 assert(min <= v && v <= max); 146#endif 147 148 const int64_t int_val = llroundf(v * factor); 149 const uint64_t mask = ~0ull >> (64 - (end - start + 1)); 150 151 return (int_val & mask) << start; 152} 153 154static inline __attribute__((always_inline)) uint64_t 155__gen_ufixed(float v, uint32_t start, NDEBUG_UNUSED uint32_t end, uint32_t fract_bits) 156{ 157 __gen_validate_value(v); 158 159 const float factor = (1 << fract_bits); 160 161#ifndef NDEBUG 162 const float max = ((1 << (end - start + 1)) - 1) / factor; 163 const float min = 0.0f; 164 assert(min <= v && v <= max); 165#endif 166 167 const uint64_t uint_val = llroundf(v * factor); 168 169 return uint_val << start; 170} 171 172#ifndef __gen_address_type 173#error #define __gen_address_type before including this file 174#endif 175 176#ifndef __gen_user_data 177#error #define __gen_combine_address before including this file 178#endif 179 180#undef NDEBUG_UNUSED 181 182#endif 183 184 185enum GFX9_3D_Color_Buffer_Blend_Factor { 186 BLENDFACTOR_ONE = 1, 187 BLENDFACTOR_SRC_COLOR = 2, 188 BLENDFACTOR_SRC_ALPHA = 3, 189 BLENDFACTOR_DST_ALPHA = 4, 190 BLENDFACTOR_DST_COLOR = 5, 191 BLENDFACTOR_SRC_ALPHA_SATURATE = 6, 192 BLENDFACTOR_CONST_COLOR = 7, 193 BLENDFACTOR_CONST_ALPHA = 8, 194 BLENDFACTOR_SRC1_COLOR = 9, 195 BLENDFACTOR_SRC1_ALPHA = 10, 196 BLENDFACTOR_ZERO = 17, 197 BLENDFACTOR_INV_SRC_COLOR = 18, 198 BLENDFACTOR_INV_SRC_ALPHA = 19, 199 BLENDFACTOR_INV_DST_ALPHA = 20, 200 BLENDFACTOR_INV_DST_COLOR = 21, 201 BLENDFACTOR_INV_CONST_COLOR = 23, 202 BLENDFACTOR_INV_CONST_ALPHA = 24, 203 BLENDFACTOR_INV_SRC1_COLOR = 25, 204 BLENDFACTOR_INV_SRC1_ALPHA = 26, 205}; 206 207enum GFX9_3D_Color_Buffer_Blend_Function { 208 BLENDFUNCTION_ADD = 0, 209 BLENDFUNCTION_SUBTRACT = 1, 210 BLENDFUNCTION_REVERSE_SUBTRACT = 2, 211 BLENDFUNCTION_MIN = 3, 212 BLENDFUNCTION_MAX = 4, 213}; 214 215enum GFX9_3D_Compare_Function { 216 COMPAREFUNCTION_ALWAYS = 0, 217 COMPAREFUNCTION_NEVER = 1, 218 COMPAREFUNCTION_LESS = 2, 219 COMPAREFUNCTION_EQUAL = 3, 220 COMPAREFUNCTION_LEQUAL = 4, 221 COMPAREFUNCTION_GREATER = 5, 222 COMPAREFUNCTION_NOTEQUAL = 6, 223 COMPAREFUNCTION_GEQUAL = 7, 224}; 225 226enum GFX9_3D_Logic_Op_Function { 227 LOGICOP_CLEAR = 0, 228 LOGICOP_NOR = 1, 229 LOGICOP_AND_INVERTED = 2, 230 LOGICOP_COPY_INVERTED = 3, 231 LOGICOP_AND_REVERSE = 4, 232 LOGICOP_INVERT = 5, 233 LOGICOP_XOR = 6, 234 LOGICOP_NAND = 7, 235 LOGICOP_AND = 8, 236 LOGICOP_EQUIV = 9, 237 LOGICOP_NOOP = 10, 238 LOGICOP_OR_INVERTED = 11, 239 LOGICOP_COPY = 12, 240 LOGICOP_OR_REVERSE = 13, 241 LOGICOP_OR = 14, 242 LOGICOP_SET = 15, 243}; 244 245enum GFX9_3D_Prim_Topo_Type { 246 _3DPRIM_POINTLIST = 1, 247 _3DPRIM_LINELIST = 2, 248 _3DPRIM_LINESTRIP = 3, 249 _3DPRIM_TRILIST = 4, 250 _3DPRIM_TRISTRIP = 5, 251 _3DPRIM_TRIFAN = 6, 252 _3DPRIM_QUADLIST = 7, 253 _3DPRIM_QUADSTRIP = 8, 254 _3DPRIM_LINELIST_ADJ = 9, 255 _3DPRIM_LINESTRIP_ADJ = 10, 256 _3DPRIM_TRILIST_ADJ = 11, 257 _3DPRIM_TRISTRIP_ADJ = 12, 258 _3DPRIM_TRISTRIP_REVERSE = 13, 259 _3DPRIM_POLYGON = 14, 260 _3DPRIM_RECTLIST = 15, 261 _3DPRIM_LINELOOP = 16, 262 _3DPRIM_POINTLIST_BF = 17, 263 _3DPRIM_LINESTRIP_CONT = 18, 264 _3DPRIM_LINESTRIP_BF = 19, 265 _3DPRIM_LINESTRIP_CONT_BF = 20, 266 _3DPRIM_TRIFAN_NOSTIPPLE = 22, 267 _3DPRIM_PATCHLIST_1 = 32, 268 _3DPRIM_PATCHLIST_2 = 33, 269 _3DPRIM_PATCHLIST_3 = 34, 270 _3DPRIM_PATCHLIST_4 = 35, 271 _3DPRIM_PATCHLIST_5 = 36, 272 _3DPRIM_PATCHLIST_6 = 37, 273 _3DPRIM_PATCHLIST_7 = 38, 274 _3DPRIM_PATCHLIST_8 = 39, 275 _3DPRIM_PATCHLIST_9 = 40, 276 _3DPRIM_PATCHLIST_10 = 41, 277 _3DPRIM_PATCHLIST_11 = 42, 278 _3DPRIM_PATCHLIST_12 = 43, 279 _3DPRIM_PATCHLIST_13 = 44, 280 _3DPRIM_PATCHLIST_14 = 45, 281 _3DPRIM_PATCHLIST_15 = 46, 282 _3DPRIM_PATCHLIST_16 = 47, 283 _3DPRIM_PATCHLIST_17 = 48, 284 _3DPRIM_PATCHLIST_18 = 49, 285 _3DPRIM_PATCHLIST_19 = 50, 286 _3DPRIM_PATCHLIST_20 = 51, 287 _3DPRIM_PATCHLIST_21 = 52, 288 _3DPRIM_PATCHLIST_22 = 53, 289 _3DPRIM_PATCHLIST_23 = 54, 290 _3DPRIM_PATCHLIST_24 = 55, 291 _3DPRIM_PATCHLIST_25 = 56, 292 _3DPRIM_PATCHLIST_26 = 57, 293 _3DPRIM_PATCHLIST_27 = 58, 294 _3DPRIM_PATCHLIST_28 = 59, 295 _3DPRIM_PATCHLIST_29 = 60, 296 _3DPRIM_PATCHLIST_30 = 61, 297 _3DPRIM_PATCHLIST_31 = 62, 298 _3DPRIM_PATCHLIST_32 = 63, 299}; 300 301enum GFX9_3D_Stencil_Operation { 302 STENCILOP_KEEP = 0, 303 STENCILOP_ZERO = 1, 304 STENCILOP_REPLACE = 2, 305 STENCILOP_INCRSAT = 3, 306 STENCILOP_DECRSAT = 4, 307 STENCILOP_INCR = 5, 308 STENCILOP_DECR = 6, 309 STENCILOP_INVERT = 7, 310}; 311 312enum GFX9_3D_Vertex_Component_Control { 313 VFCOMP_NOSTORE = 0, 314 VFCOMP_STORE_SRC = 1, 315 VFCOMP_STORE_0 = 2, 316 VFCOMP_STORE_1_FP = 3, 317 VFCOMP_STORE_1_INT = 4, 318 VFCOMP_STORE_PID = 7, 319}; 320 321enum GFX9_Atomic_OPCODE { 322 MI_ATOMIC_OP_AND = 1, 323 MI_ATOMIC_OP_OR = 2, 324 MI_ATOMIC_OP_XOR = 3, 325 MI_ATOMIC_OP_MOVE = 4, 326 MI_ATOMIC_OP_INC = 5, 327 MI_ATOMIC_OP_DEC = 6, 328 MI_ATOMIC_OP_ADD = 7, 329 MI_ATOMIC_OP_SUB = 8, 330 MI_ATOMIC_OP_RSUB = 9, 331 MI_ATOMIC_OP_IMAX = 10, 332 MI_ATOMIC_OP_IMIN = 11, 333 MI_ATOMIC_OP_UMAX = 12, 334 MI_ATOMIC_OP_UMIN = 13, 335 MI_ATOMIC_OP_CMP_WR = 14, 336 MI_ATOMIC_OP_PREDEC = 15, 337 MI_ATOMIC_OP_AND8B = 33, 338 MI_ATOMIC_OP_OR8B = 34, 339 MI_ATOMIC_OP_XOR8B = 35, 340 MI_ATOMIC_OP_MOVE8B = 36, 341 MI_ATOMIC_OP_INC8B = 37, 342 MI_ATOMIC_OP_DEC8B = 38, 343 MI_ATOMIC_OP_ADD8B = 39, 344 MI_ATOMIC_OP_SUB8B = 40, 345 MI_ATOMIC_OP_RSUB8B = 41, 346 MI_ATOMIC_OP_IMAX8B = 42, 347 MI_ATOMIC_OP_IMIN8B = 43, 348 MI_ATOMIC_OP_UMAX8B = 44, 349 MI_ATOMIC_OP_UMIN8B = 45, 350 MI_ATOMIC_OP_CMP_WR8B = 46, 351 MI_ATOMIC_OP_PREDEC8B = 47, 352 MI_ATOMIC_OP_CMP_WR16B = 78, 353}; 354 355enum GFX9_Attribute_Component_Format { 356 ACF_DISABLED = 0, 357 ACF_XY = 1, 358 ACF_XYZ = 2, 359 ACF_XYZW = 3, 360}; 361 362enum GFX9_COMPONENT_ENABLES { 363 CE_NONE = 0, 364 CE_X = 1, 365 CE_Y = 2, 366 CE_XY = 3, 367 CE_Z = 4, 368 CE_XZ = 5, 369 CE_YZ = 6, 370 CE_XYZ = 7, 371 CE_W = 8, 372 CE_XW = 9, 373 CE_YW = 10, 374 CE_XYW = 11, 375 CE_ZW = 12, 376 CE_XZW = 13, 377 CE_YZW = 14, 378 CE_XYZW = 15, 379}; 380 381enum GFX9_ShaderChannelSelect { 382 SCS_ZERO = 0, 383 SCS_ONE = 1, 384 SCS_RED = 4, 385 SCS_GREEN = 5, 386 SCS_BLUE = 6, 387 SCS_ALPHA = 7, 388}; 389 390enum GFX9_TextureCoordinateMode { 391 TCM_WRAP = 0, 392 TCM_MIRROR = 1, 393 TCM_CLAMP = 2, 394 TCM_CUBE = 3, 395 TCM_CLAMP_BORDER = 4, 396 TCM_MIRROR_ONCE = 5, 397 TCM_HALF_BORDER = 6, 398}; 399 400enum GFX9_WRAP_SHORTEST_ENABLE { 401 WSE_X = 1, 402 WSE_Y = 2, 403 WSE_XY = 3, 404 WSE_Z = 4, 405 WSE_XZ = 5, 406 WSE_YZ = 6, 407 WSE_XYZ = 7, 408 WSE_W = 8, 409 WSE_XW = 9, 410 WSE_YW = 10, 411 WSE_XYW = 11, 412 WSE_ZW = 12, 413 WSE_XZW = 13, 414 WSE_YZW = 14, 415 WSE_XYZW = 15, 416}; 417 418#define GFX9_3DSTATE_CONSTANT_BODY_length 10 419struct GFX9_3DSTATE_CONSTANT_BODY { 420 uint32_t ReadLength[4]; 421 __gen_address_type Buffer[4]; 422}; 423 424static inline __attribute__((always_inline)) void 425GFX9_3DSTATE_CONSTANT_BODY_pack(__attribute__((unused)) __gen_user_data *data, 426 __attribute__((unused)) void * restrict dst, 427 __attribute__((unused)) const struct GFX9_3DSTATE_CONSTANT_BODY * restrict values) 428{ 429 uint32_t * restrict dw = (uint32_t * restrict) dst; 430 431 dw[0] = 432 __gen_uint(values->ReadLength[0], 0, 15) | 433 __gen_uint(values->ReadLength[1], 16, 31); 434 435 dw[1] = 436 __gen_uint(values->ReadLength[2], 0, 15) | 437 __gen_uint(values->ReadLength[3], 16, 31); 438 439 const uint64_t v2_address = 440 __gen_address(data, &dw[2], values->Buffer[0], 0, 5, 63); 441 dw[2] = v2_address; 442 dw[3] = v2_address >> 32; 443 444 const uint64_t v4_address = 445 __gen_address(data, &dw[4], values->Buffer[1], 0, 5, 63); 446 dw[4] = v4_address; 447 dw[5] = v4_address >> 32; 448 449 const uint64_t v6_address = 450 __gen_address(data, &dw[6], values->Buffer[2], 0, 5, 63); 451 dw[6] = v6_address; 452 dw[7] = v6_address >> 32; 453 454 const uint64_t v8_address = 455 __gen_address(data, &dw[8], values->Buffer[3], 0, 5, 63); 456 dw[8] = v8_address; 457 dw[9] = v8_address >> 32; 458} 459 460#define GFX9_BINDING_TABLE_EDIT_ENTRY_length 1 461struct GFX9_BINDING_TABLE_EDIT_ENTRY { 462 uint64_t SurfaceStatePointer; 463 uint32_t BindingTableIndex; 464}; 465 466static inline __attribute__((always_inline)) void 467GFX9_BINDING_TABLE_EDIT_ENTRY_pack(__attribute__((unused)) __gen_user_data *data, 468 __attribute__((unused)) void * restrict dst, 469 __attribute__((unused)) const struct GFX9_BINDING_TABLE_EDIT_ENTRY * restrict values) 470{ 471 uint32_t * restrict dw = (uint32_t * restrict) dst; 472 473 dw[0] = 474 __gen_offset(values->SurfaceStatePointer, 0, 15) | 475 __gen_uint(values->BindingTableIndex, 16, 23); 476} 477 478#define GFX9_BINDING_TABLE_STATE_length 1 479struct GFX9_BINDING_TABLE_STATE { 480 uint64_t SurfaceStatePointer; 481}; 482 483static inline __attribute__((always_inline)) void 484GFX9_BINDING_TABLE_STATE_pack(__attribute__((unused)) __gen_user_data *data, 485 __attribute__((unused)) void * restrict dst, 486 __attribute__((unused)) const struct GFX9_BINDING_TABLE_STATE * restrict values) 487{ 488 uint32_t * restrict dw = (uint32_t * restrict) dst; 489 490 dw[0] = 491 __gen_offset(values->SurfaceStatePointer, 6, 31); 492} 493 494#define GFX9_BLEND_STATE_ENTRY_length 2 495struct GFX9_BLEND_STATE_ENTRY { 496 bool WriteDisableBlue; 497 bool WriteDisableGreen; 498 bool WriteDisableRed; 499 bool WriteDisableAlpha; 500 enum GFX9_3D_Color_Buffer_Blend_Function AlphaBlendFunction; 501 enum GFX9_3D_Color_Buffer_Blend_Factor DestinationAlphaBlendFactor; 502 enum GFX9_3D_Color_Buffer_Blend_Factor SourceAlphaBlendFactor; 503 enum GFX9_3D_Color_Buffer_Blend_Function ColorBlendFunction; 504 enum GFX9_3D_Color_Buffer_Blend_Factor DestinationBlendFactor; 505 enum GFX9_3D_Color_Buffer_Blend_Factor SourceBlendFactor; 506 bool ColorBufferBlendEnable; 507 bool PostBlendColorClampEnable; 508 bool PreBlendColorClampEnable; 509 uint32_t ColorClampRange; 510#define COLORCLAMP_UNORM 0 511#define COLORCLAMP_SNORM 1 512#define COLORCLAMP_RTFORMAT 2 513 bool PreBlendSourceOnlyClampEnable; 514 enum GFX9_3D_Logic_Op_Function LogicOpFunction; 515 bool LogicOpEnable; 516}; 517 518static inline __attribute__((always_inline)) void 519GFX9_BLEND_STATE_ENTRY_pack(__attribute__((unused)) __gen_user_data *data, 520 __attribute__((unused)) void * restrict dst, 521 __attribute__((unused)) const struct GFX9_BLEND_STATE_ENTRY * restrict values) 522{ 523 uint32_t * restrict dw = (uint32_t * restrict) dst; 524 525 dw[0] = 526 __gen_uint(values->WriteDisableBlue, 0, 0) | 527 __gen_uint(values->WriteDisableGreen, 1, 1) | 528 __gen_uint(values->WriteDisableRed, 2, 2) | 529 __gen_uint(values->WriteDisableAlpha, 3, 3) | 530 __gen_uint(values->AlphaBlendFunction, 5, 7) | 531 __gen_uint(values->DestinationAlphaBlendFactor, 8, 12) | 532 __gen_uint(values->SourceAlphaBlendFactor, 13, 17) | 533 __gen_uint(values->ColorBlendFunction, 18, 20) | 534 __gen_uint(values->DestinationBlendFactor, 21, 25) | 535 __gen_uint(values->SourceBlendFactor, 26, 30) | 536 __gen_uint(values->ColorBufferBlendEnable, 31, 31); 537 538 dw[1] = 539 __gen_uint(values->PostBlendColorClampEnable, 0, 0) | 540 __gen_uint(values->PreBlendColorClampEnable, 1, 1) | 541 __gen_uint(values->ColorClampRange, 2, 3) | 542 __gen_uint(values->PreBlendSourceOnlyClampEnable, 4, 4) | 543 __gen_uint(values->LogicOpFunction, 27, 30) | 544 __gen_uint(values->LogicOpEnable, 31, 31); 545} 546 547#define GFX9_BLEND_STATE_length 1 548struct GFX9_BLEND_STATE { 549 uint32_t YDitherOffset; 550 uint32_t XDitherOffset; 551 bool ColorDitherEnable; 552 enum GFX9_3D_Compare_Function AlphaTestFunction; 553 bool AlphaTestEnable; 554 bool AlphaToCoverageDitherEnable; 555 bool AlphaToOneEnable; 556 bool IndependentAlphaBlendEnable; 557 bool AlphaToCoverageEnable; 558 /* variable length fields follow */ 559}; 560 561static inline __attribute__((always_inline)) void 562GFX9_BLEND_STATE_pack(__attribute__((unused)) __gen_user_data *data, 563 __attribute__((unused)) void * restrict dst, 564 __attribute__((unused)) const struct GFX9_BLEND_STATE * restrict values) 565{ 566 uint32_t * restrict dw = (uint32_t * restrict) dst; 567 568 dw[0] = 569 __gen_uint(values->YDitherOffset, 19, 20) | 570 __gen_uint(values->XDitherOffset, 21, 22) | 571 __gen_uint(values->ColorDitherEnable, 23, 23) | 572 __gen_uint(values->AlphaTestFunction, 24, 26) | 573 __gen_uint(values->AlphaTestEnable, 27, 27) | 574 __gen_uint(values->AlphaToCoverageDitherEnable, 28, 28) | 575 __gen_uint(values->AlphaToOneEnable, 29, 29) | 576 __gen_uint(values->IndependentAlphaBlendEnable, 30, 30) | 577 __gen_uint(values->AlphaToCoverageEnable, 31, 31); 578} 579 580#define GFX9_CC_VIEWPORT_length 2 581struct GFX9_CC_VIEWPORT { 582 float MinimumDepth; 583 float MaximumDepth; 584}; 585 586static inline __attribute__((always_inline)) void 587GFX9_CC_VIEWPORT_pack(__attribute__((unused)) __gen_user_data *data, 588 __attribute__((unused)) void * restrict dst, 589 __attribute__((unused)) const struct GFX9_CC_VIEWPORT * restrict values) 590{ 591 uint32_t * restrict dw = (uint32_t * restrict) dst; 592 593 dw[0] = 594 __gen_float(values->MinimumDepth); 595 596 dw[1] = 597 __gen_float(values->MaximumDepth); 598} 599 600#define GFX9_COLOR_CALC_STATE_length 6 601struct GFX9_COLOR_CALC_STATE { 602 uint32_t AlphaTestFormat; 603#define ALPHATEST_UNORM8 0 604#define ALPHATEST_FLOAT32 1 605 bool RoundDisableFunctionDisable; 606 uint32_t AlphaReferenceValueAsUNORM8; 607 float AlphaReferenceValueAsFLOAT32; 608 float BlendConstantColorRed; 609 float BlendConstantColorGreen; 610 float BlendConstantColorBlue; 611 float BlendConstantColorAlpha; 612}; 613 614static inline __attribute__((always_inline)) void 615GFX9_COLOR_CALC_STATE_pack(__attribute__((unused)) __gen_user_data *data, 616 __attribute__((unused)) void * restrict dst, 617 __attribute__((unused)) const struct GFX9_COLOR_CALC_STATE * restrict values) 618{ 619 uint32_t * restrict dw = (uint32_t * restrict) dst; 620 621 dw[0] = 622 __gen_uint(values->AlphaTestFormat, 0, 0) | 623 __gen_uint(values->RoundDisableFunctionDisable, 15, 15); 624 625 dw[1] = 626 __gen_uint(values->AlphaReferenceValueAsUNORM8, 0, 31) | 627 __gen_float(values->AlphaReferenceValueAsFLOAT32); 628 629 dw[2] = 630 __gen_float(values->BlendConstantColorRed); 631 632 dw[3] = 633 __gen_float(values->BlendConstantColorGreen); 634 635 dw[4] = 636 __gen_float(values->BlendConstantColorBlue); 637 638 dw[5] = 639 __gen_float(values->BlendConstantColorAlpha); 640} 641 642#define GFX9_EXECUTION_UNIT_EXTENDED_MESSAGE_DESCRIPTOR_length 1 643struct GFX9_EXECUTION_UNIT_EXTENDED_MESSAGE_DESCRIPTOR { 644 uint32_t TargetFunctionID; 645 uint32_t EndOfThread; 646#define NoTermination 0 647#define EOT 1 648 uint32_t ExtendedMessageLength; 649}; 650 651static inline __attribute__((always_inline)) void 652GFX9_EXECUTION_UNIT_EXTENDED_MESSAGE_DESCRIPTOR_pack(__attribute__((unused)) __gen_user_data *data, 653 __attribute__((unused)) void * restrict dst, 654 __attribute__((unused)) const struct GFX9_EXECUTION_UNIT_EXTENDED_MESSAGE_DESCRIPTOR * restrict values) 655{ 656 uint32_t * restrict dw = (uint32_t * restrict) dst; 657 658 dw[0] = 659 __gen_uint(values->TargetFunctionID, 0, 3) | 660 __gen_uint(values->EndOfThread, 5, 5) | 661 __gen_uint(values->ExtendedMessageLength, 6, 9); 662} 663 664#define GFX9_FILTER_COEFFICIENT_length 1 665struct GFX9_FILTER_COEFFICIENT { 666 float FilterCoefficient; 667}; 668 669static inline __attribute__((always_inline)) void 670GFX9_FILTER_COEFFICIENT_pack(__attribute__((unused)) __gen_user_data *data, 671 __attribute__((unused)) void * restrict dst, 672 __attribute__((unused)) const struct GFX9_FILTER_COEFFICIENT * restrict values) 673{ 674 uint32_t * restrict dw = (uint32_t * restrict) dst; 675 676 dw[0] = 677 __gen_sfixed(values->FilterCoefficient, 0, 7, 6); 678} 679 680#define GFX9_FRAMEDELTAQP_length 2 681struct GFX9_FRAMEDELTAQP { 682 int32_t FrameDeltaQP[8]; 683}; 684 685static inline __attribute__((always_inline)) void 686GFX9_FRAMEDELTAQP_pack(__attribute__((unused)) __gen_user_data *data, 687 __attribute__((unused)) void * restrict dst, 688 __attribute__((unused)) const struct GFX9_FRAMEDELTAQP * restrict values) 689{ 690 uint32_t * restrict dw = (uint32_t * restrict) dst; 691 692 dw[0] = 693 __gen_sint(values->FrameDeltaQP[0], 0, 7) | 694 __gen_sint(values->FrameDeltaQP[1], 8, 15) | 695 __gen_sint(values->FrameDeltaQP[2], 16, 23) | 696 __gen_sint(values->FrameDeltaQP[3], 24, 31); 697 698 dw[1] = 699 __gen_sint(values->FrameDeltaQP[4], 0, 7) | 700 __gen_sint(values->FrameDeltaQP[5], 8, 15) | 701 __gen_sint(values->FrameDeltaQP[6], 16, 23) | 702 __gen_sint(values->FrameDeltaQP[7], 24, 31); 703} 704 705#define GFX9_FRAMEDELTAQPRANGE_length 2 706struct GFX9_FRAMEDELTAQPRANGE { 707 uint32_t FrameDeltaQPRange[8]; 708}; 709 710static inline __attribute__((always_inline)) void 711GFX9_FRAMEDELTAQPRANGE_pack(__attribute__((unused)) __gen_user_data *data, 712 __attribute__((unused)) void * restrict dst, 713 __attribute__((unused)) const struct GFX9_FRAMEDELTAQPRANGE * restrict values) 714{ 715 uint32_t * restrict dw = (uint32_t * restrict) dst; 716 717 dw[0] = 718 __gen_uint(values->FrameDeltaQPRange[0], 0, 7) | 719 __gen_uint(values->FrameDeltaQPRange[1], 8, 15) | 720 __gen_uint(values->FrameDeltaQPRange[2], 16, 23) | 721 __gen_uint(values->FrameDeltaQPRange[3], 24, 31); 722 723 dw[1] = 724 __gen_uint(values->FrameDeltaQPRange[4], 0, 7) | 725 __gen_uint(values->FrameDeltaQPRange[5], 8, 15) | 726 __gen_uint(values->FrameDeltaQPRange[6], 16, 23) | 727 __gen_uint(values->FrameDeltaQPRange[7], 24, 31); 728} 729 730#define GFX9_GATHER_CONSTANT_ENTRY_length 1 731struct GFX9_GATHER_CONSTANT_ENTRY { 732 uint32_t BindingTableIndexOffset; 733 uint32_t ChannelMask; 734 uint64_t ConstantBufferOffset; 735}; 736 737static inline __attribute__((always_inline)) void 738GFX9_GATHER_CONSTANT_ENTRY_pack(__attribute__((unused)) __gen_user_data *data, 739 __attribute__((unused)) void * restrict dst, 740 __attribute__((unused)) const struct GFX9_GATHER_CONSTANT_ENTRY * restrict values) 741{ 742 uint32_t * restrict dw = (uint32_t * restrict) dst; 743 744 dw[0] = 745 __gen_uint(values->BindingTableIndexOffset, 0, 3) | 746 __gen_uint(values->ChannelMask, 4, 7) | 747 __gen_offset(values->ConstantBufferOffset, 8, 15); 748} 749 750#define GFX9_MEMORYADDRESSATTRIBUTES_length 1 751struct GFX9_MEMORYADDRESSATTRIBUTES { 752 uint32_t MOCS; 753 uint32_t ArbitrationPriorityControl; 754#define Highestpriority 0 755#define Secondhighestpriority 1 756#define Thirdhighestpriority 2 757#define Lowestpriority 3 758 bool MemoryCompressionEnable; 759 uint32_t RowStoreScratchBufferCacheSelect; 760#define LLC 0 761#define InternalMediaStorage 1 762 uint32_t TiledResourceMode; 763#define TRMODE_NONE 0 764#define TRMODE_TILEYF 1 765#define TRMODE_TILEYS 2 766}; 767 768static inline __attribute__((always_inline)) void 769GFX9_MEMORYADDRESSATTRIBUTES_pack(__attribute__((unused)) __gen_user_data *data, 770 __attribute__((unused)) void * restrict dst, 771 __attribute__((unused)) const struct GFX9_MEMORYADDRESSATTRIBUTES * restrict values) 772{ 773 uint32_t * restrict dw = (uint32_t * restrict) dst; 774 775 dw[0] = 776 __gen_uint(values->MOCS, 1, 6) | 777 __gen_uint(values->ArbitrationPriorityControl, 7, 8) | 778 __gen_uint(values->MemoryCompressionEnable, 9, 9) | 779 __gen_uint(values->RowStoreScratchBufferCacheSelect, 12, 12) | 780 __gen_uint(values->TiledResourceMode, 13, 14); 781} 782 783#define GFX9_HCP_PAK_INSERT_OBJECT_INDIRECT_PAYLOAD_length 4 784struct GFX9_HCP_PAK_INSERT_OBJECT_INDIRECT_PAYLOAD { 785 uint32_t IndirectPayloadDataSizeinbits; 786 __gen_address_type IndirectPayloadBaseAddress; 787 struct GFX9_MEMORYADDRESSATTRIBUTES IndirectPayloadBaseAddress2; 788}; 789 790static inline __attribute__((always_inline)) void 791GFX9_HCP_PAK_INSERT_OBJECT_INDIRECT_PAYLOAD_pack(__attribute__((unused)) __gen_user_data *data, 792 __attribute__((unused)) void * restrict dst, 793 __attribute__((unused)) const struct GFX9_HCP_PAK_INSERT_OBJECT_INDIRECT_PAYLOAD * restrict values) 794{ 795 uint32_t * restrict dw = (uint32_t * restrict) dst; 796 797 dw[0] = 798 __gen_uint(values->IndirectPayloadDataSizeinbits, 0, 31); 799 800 const uint64_t v1_address = 801 __gen_address(data, &dw[1], values->IndirectPayloadBaseAddress, 0, 0, 63); 802 dw[1] = v1_address; 803 dw[2] = v1_address >> 32; 804 805 GFX9_MEMORYADDRESSATTRIBUTES_pack(data, &dw[3], &values->IndirectPayloadBaseAddress2); 806} 807 808#define GFX9_HCP_REF_LIST_ENTRY_length 1 809struct GFX9_HCP_REF_LIST_ENTRY { 810 uint32_t ReferencePicturetbValue; 811 uint32_t ListEntry; 812 uint32_t ChromaWeightedPrediction; 813#define Default 0 814#define Explicit 1 815 uint32_t LumaWeightedPrediction; 816#define Default 0 817#define Explicit 1 818 bool LongTermReference; 819 bool FieldPic; 820 bool TopField; 821}; 822 823static inline __attribute__((always_inline)) void 824GFX9_HCP_REF_LIST_ENTRY_pack(__attribute__((unused)) __gen_user_data *data, 825 __attribute__((unused)) void * restrict dst, 826 __attribute__((unused)) const struct GFX9_HCP_REF_LIST_ENTRY * restrict values) 827{ 828 uint32_t * restrict dw = (uint32_t * restrict) dst; 829 830 dw[0] = 831 __gen_uint(values->ReferencePicturetbValue, 0, 7) | 832 __gen_uint(values->ListEntry, 8, 10) | 833 __gen_uint(values->ChromaWeightedPrediction, 11, 11) | 834 __gen_uint(values->LumaWeightedPrediction, 12, 12) | 835 __gen_uint(values->LongTermReference, 13, 13) | 836 __gen_uint(values->FieldPic, 14, 14) | 837 __gen_uint(values->TopField, 15, 15); 838} 839 840#define GFX9_HCP_TILE_POSITION_IN_CTB_length 1 841struct GFX9_HCP_TILE_POSITION_IN_CTB { 842 uint32_t CtbPos0i; 843 uint32_t CtbPos1i; 844 uint32_t CtbPos2i; 845 uint32_t CtbPos3i; 846}; 847 848static inline __attribute__((always_inline)) void 849GFX9_HCP_TILE_POSITION_IN_CTB_pack(__attribute__((unused)) __gen_user_data *data, 850 __attribute__((unused)) void * restrict dst, 851 __attribute__((unused)) const struct GFX9_HCP_TILE_POSITION_IN_CTB * restrict values) 852{ 853 uint32_t * restrict dw = (uint32_t * restrict) dst; 854 855 dw[0] = 856 __gen_uint(values->CtbPos0i, 0, 7) | 857 __gen_uint(values->CtbPos1i, 8, 15) | 858 __gen_uint(values->CtbPos2i, 16, 23) | 859 __gen_uint(values->CtbPos3i, 24, 31); 860} 861 862#define GFX9_HCP_WEIGHTOFFSET_CHROMA_ENTRY_length 1 863struct GFX9_HCP_WEIGHTOFFSET_CHROMA_ENTRY { 864 int32_t DeltaChromaWeightLX0; 865 uint32_t ChromaOffsetLX0; 866 int32_t DeltaChromaWeightLX1; 867 uint32_t ChromaOffsetLX1; 868}; 869 870static inline __attribute__((always_inline)) void 871GFX9_HCP_WEIGHTOFFSET_CHROMA_ENTRY_pack(__attribute__((unused)) __gen_user_data *data, 872 __attribute__((unused)) void * restrict dst, 873 __attribute__((unused)) const struct GFX9_HCP_WEIGHTOFFSET_CHROMA_ENTRY * restrict values) 874{ 875 uint32_t * restrict dw = (uint32_t * restrict) dst; 876 877 dw[0] = 878 __gen_sint(values->DeltaChromaWeightLX0, 0, 7) | 879 __gen_uint(values->ChromaOffsetLX0, 8, 15) | 880 __gen_sint(values->DeltaChromaWeightLX1, 16, 23) | 881 __gen_uint(values->ChromaOffsetLX1, 24, 31); 882} 883 884#define GFX9_HCP_WEIGHTOFFSET_LUMA_ENTRY_length 1 885struct GFX9_HCP_WEIGHTOFFSET_LUMA_ENTRY { 886 int32_t DeltaLumaWeightLX; 887 uint32_t LumaOffsetLX; 888}; 889 890static inline __attribute__((always_inline)) void 891GFX9_HCP_WEIGHTOFFSET_LUMA_ENTRY_pack(__attribute__((unused)) __gen_user_data *data, 892 __attribute__((unused)) void * restrict dst, 893 __attribute__((unused)) const struct GFX9_HCP_WEIGHTOFFSET_LUMA_ENTRY * restrict values) 894{ 895 uint32_t * restrict dw = (uint32_t * restrict) dst; 896 897 dw[0] = 898 __gen_sint(values->DeltaLumaWeightLX, 0, 7) | 899 __gen_uint(values->LumaOffsetLX, 8, 15); 900} 901 902#define GFX9_HEVC_ARBITRATION_PRIORITY_length 1 903struct GFX9_HEVC_ARBITRATION_PRIORITY { 904 uint32_t Priority; 905#define Highestpriority 0 906#define Secondhighestpriority 1 907#define Thirdhighestpriority 2 908#define Lowestpriority 3 909}; 910 911static inline __attribute__((always_inline)) void 912GFX9_HEVC_ARBITRATION_PRIORITY_pack(__attribute__((unused)) __gen_user_data *data, 913 __attribute__((unused)) void * restrict dst, 914 __attribute__((unused)) const struct GFX9_HEVC_ARBITRATION_PRIORITY * restrict values) 915{ 916 uint32_t * restrict dw = (uint32_t * restrict) dst; 917 918 dw[0] = 919 __gen_uint(values->Priority, 0, 1); 920} 921 922#define GFX9_HEVC_VP9_RDOQ_LAMBDA_FIELDS_length 1 923struct GFX9_HEVC_VP9_RDOQ_LAMBDA_FIELDS { 924 uint32_t LambdaValue0; 925 uint32_t LambdaValue1; 926}; 927 928static inline __attribute__((always_inline)) void 929GFX9_HEVC_VP9_RDOQ_LAMBDA_FIELDS_pack(__attribute__((unused)) __gen_user_data *data, 930 __attribute__((unused)) void * restrict dst, 931 __attribute__((unused)) const struct GFX9_HEVC_VP9_RDOQ_LAMBDA_FIELDS * restrict values) 932{ 933 uint32_t * restrict dw = (uint32_t * restrict) dst; 934 935 dw[0] = 936 __gen_uint(values->LambdaValue0, 0, 15) | 937 __gen_uint(values->LambdaValue1, 16, 31); 938} 939 940#define GFX9_HUC_VIRTUAL_ADDR_REGION_length 3 941struct GFX9_HUC_VIRTUAL_ADDR_REGION { 942 __gen_address_type Address; 943 struct GFX9_MEMORYADDRESSATTRIBUTES MemoryAddressAttributes; 944}; 945 946static inline __attribute__((always_inline)) void 947GFX9_HUC_VIRTUAL_ADDR_REGION_pack(__attribute__((unused)) __gen_user_data *data, 948 __attribute__((unused)) void * restrict dst, 949 __attribute__((unused)) const struct GFX9_HUC_VIRTUAL_ADDR_REGION * restrict values) 950{ 951 uint32_t * restrict dw = (uint32_t * restrict) dst; 952 953 const uint64_t v0_address = 954 __gen_address(data, &dw[0], values->Address, 0, 0, 63); 955 dw[0] = v0_address; 956 dw[1] = v0_address >> 32; 957 958 GFX9_MEMORYADDRESSATTRIBUTES_pack(data, &dw[2], &values->MemoryAddressAttributes); 959} 960 961#define GFX9_INLINE_DATA_DESCRIPTION_FOR_MFD_AVC_BSD_OBJECT_length 3 962struct GFX9_INLINE_DATA_DESCRIPTION_FOR_MFD_AVC_BSD_OBJECT { 963 bool MBErrorConcealmentPSliceWeightPredictionDisable; 964 bool MBErrorConcealmentPSliceMotionVectorsOverrideDisable; 965 bool MBErrorConcealmentBSpatialWeightPredictionDisable; 966 bool MBErrorConcealmentBSpatialMotionVectorsOverrideDisable; 967 uint32_t MBErrorConcealmentBSpatialPredictionMode; 968 bool MBHeaderErrorHandling; 969 bool EntropyErrorHandling; 970 bool MPRErrorHandling; 971 bool BSDPrematureCompleteErrorHandling; 972 uint32_t ConcealmentPictureID; 973 bool MBErrorConcealmentBTemporalWeightPredictionDisable; 974 bool MBErrorConcealmentBTemporalMotionVectorsOverrideEnable; 975 uint32_t MBErrorConcealmentBTemporalPredictionMode; 976 uint32_t IntraPredMode4x48x8LumaErrorControl; 977 bool InitCurrentMBNumber; 978 uint32_t ConcealmentMethod; 979 uint32_t FirstMBBitOffset; 980 bool LastSlice; 981 bool EmulationPreventionBytePresent; 982 bool FixPrevMBSkipped; 983 uint32_t FirstMBByteOffsetofSliceDataorSliceHeader; 984 bool IntraPredictionErrorControl; 985 bool Intra8x84x4PredictionErrorConcealmentControl; 986 uint32_t BSliceTemporalInterConcealmentMode; 987 uint32_t BSliceSpatialInterConcealmentMode; 988 uint32_t BSliceInterDirectTypeConcealmentMode; 989 uint32_t BSliceConcealmentMode; 990#define IntraConcealment 1 991#define InterConcealment 0 992 uint32_t PSliceInterConcealmentMode; 993 uint32_t PSliceConcealmentMode; 994#define IntraConcealment 1 995#define InterConcealment 0 996 uint32_t ConcealmentReferencePictureFieldBit; 997 uint32_t ISliceConcealmentMode; 998#define IntraConcealment 1 999#define InterConcealment 0 1000}; 1001 1002static inline __attribute__((always_inline)) void 1003GFX9_INLINE_DATA_DESCRIPTION_FOR_MFD_AVC_BSD_OBJECT_pack(__attribute__((unused)) __gen_user_data *data, 1004 __attribute__((unused)) void * restrict dst, 1005 __attribute__((unused)) const struct GFX9_INLINE_DATA_DESCRIPTION_FOR_MFD_AVC_BSD_OBJECT * restrict values) 1006{ 1007 uint32_t * restrict dw = (uint32_t * restrict) dst; 1008 1009 dw[0] = 1010 __gen_uint(values->MBErrorConcealmentPSliceWeightPredictionDisable, 0, 0) | 1011 __gen_uint(values->MBErrorConcealmentPSliceMotionVectorsOverrideDisable, 1, 1) | 1012 __gen_uint(values->MBErrorConcealmentBSpatialWeightPredictionDisable, 3, 3) | 1013 __gen_uint(values->MBErrorConcealmentBSpatialMotionVectorsOverrideDisable, 4, 4) | 1014 __gen_uint(values->MBErrorConcealmentBSpatialPredictionMode, 6, 7) | 1015 __gen_uint(values->MBHeaderErrorHandling, 8, 8) | 1016 __gen_uint(values->EntropyErrorHandling, 10, 10) | 1017 __gen_uint(values->MPRErrorHandling, 12, 12) | 1018 __gen_uint(values->BSDPrematureCompleteErrorHandling, 14, 14) | 1019 __gen_uint(values->ConcealmentPictureID, 16, 21) | 1020 __gen_uint(values->MBErrorConcealmentBTemporalWeightPredictionDisable, 24, 24) | 1021 __gen_uint(values->MBErrorConcealmentBTemporalMotionVectorsOverrideEnable, 25, 25) | 1022 __gen_uint(values->MBErrorConcealmentBTemporalPredictionMode, 27, 28) | 1023 __gen_uint(values->IntraPredMode4x48x8LumaErrorControl, 29, 29) | 1024 __gen_uint(values->InitCurrentMBNumber, 30, 30) | 1025 __gen_uint(values->ConcealmentMethod, 31, 31); 1026 1027 dw[1] = 1028 __gen_uint(values->FirstMBBitOffset, 0, 2) | 1029 __gen_uint(values->LastSlice, 3, 3) | 1030 __gen_uint(values->EmulationPreventionBytePresent, 4, 4) | 1031 __gen_uint(values->FixPrevMBSkipped, 7, 7) | 1032 __gen_uint(values->FirstMBByteOffsetofSliceDataorSliceHeader, 16, 31); 1033 1034 dw[2] = 1035 __gen_uint(values->IntraPredictionErrorControl, 0, 0) | 1036 __gen_uint(values->Intra8x84x4PredictionErrorConcealmentControl, 1, 1) | 1037 __gen_uint(values->BSliceTemporalInterConcealmentMode, 4, 6) | 1038 __gen_uint(values->BSliceSpatialInterConcealmentMode, 8, 10) | 1039 __gen_uint(values->BSliceInterDirectTypeConcealmentMode, 12, 13) | 1040 __gen_uint(values->BSliceConcealmentMode, 15, 15) | 1041 __gen_uint(values->PSliceInterConcealmentMode, 16, 18) | 1042 __gen_uint(values->PSliceConcealmentMode, 23, 23) | 1043 __gen_uint(values->ConcealmentReferencePictureFieldBit, 24, 29) | 1044 __gen_uint(values->ISliceConcealmentMode, 31, 31); 1045} 1046 1047#define GFX9_INTERFACE_DESCRIPTOR_DATA_length 8 1048struct GFX9_INTERFACE_DESCRIPTOR_DATA { 1049 uint64_t KernelStartPointer; 1050 bool SoftwareExceptionEnable; 1051 bool MaskStackExceptionEnable; 1052 bool IllegalOpcodeExceptionEnable; 1053 uint32_t FloatingPointMode; 1054#define IEEE754 0 1055#define Alternate 1 1056 uint32_t ThreadPriority; 1057#define NormalPriority 0 1058#define HighPriority 1 1059 bool SingleProgramFlow; 1060 uint32_t DenormMode; 1061#define Ftz 0 1062#define SetByKernel 1 1063 uint32_t SamplerCount; 1064#define Nosamplersused 0 1065#define Between1and4samplersused 1 1066#define Between5and8samplersused 2 1067#define Between9and12samplersused 3 1068#define Between13and16samplersused 4 1069 uint64_t SamplerStatePointer; 1070 uint32_t BindingTableEntryCount; 1071 uint64_t BindingTablePointer; 1072 uint32_t ConstantURBEntryReadOffset; 1073 uint32_t ConstantURBEntryReadLength; 1074 uint32_t NumberofThreadsinGPGPUThreadGroup; 1075 bool GlobalBarrierEnable; 1076 uint32_t SharedLocalMemorySize; 1077#define Encodes0K 0 1078#define Encodes1K 1 1079#define Encodes2K 2 1080#define Encodes4K 3 1081#define Encodes8K 4 1082#define Encodes16K 5 1083#define Encodes32K 6 1084#define Encodes64K 7 1085 bool BarrierEnable; 1086 uint32_t RoundingMode; 1087#define RTNE 0 1088#define RU 1 1089#define RD 2 1090#define RTZ 3 1091 uint32_t CrossThreadConstantDataReadLength; 1092}; 1093 1094static inline __attribute__((always_inline)) void 1095GFX9_INTERFACE_DESCRIPTOR_DATA_pack(__attribute__((unused)) __gen_user_data *data, 1096 __attribute__((unused)) void * restrict dst, 1097 __attribute__((unused)) const struct GFX9_INTERFACE_DESCRIPTOR_DATA * restrict values) 1098{ 1099 uint32_t * restrict dw = (uint32_t * restrict) dst; 1100 1101 const uint64_t v0 = 1102 __gen_offset(values->KernelStartPointer, 6, 47); 1103 dw[0] = v0; 1104 dw[1] = v0 >> 32; 1105 1106 dw[2] = 1107 __gen_uint(values->SoftwareExceptionEnable, 7, 7) | 1108 __gen_uint(values->MaskStackExceptionEnable, 11, 11) | 1109 __gen_uint(values->IllegalOpcodeExceptionEnable, 13, 13) | 1110 __gen_uint(values->FloatingPointMode, 16, 16) | 1111 __gen_uint(values->ThreadPriority, 17, 17) | 1112 __gen_uint(values->SingleProgramFlow, 18, 18) | 1113 __gen_uint(values->DenormMode, 19, 19); 1114 1115 dw[3] = 1116 __gen_uint(values->SamplerCount, 2, 4) | 1117 __gen_offset(values->SamplerStatePointer, 5, 31); 1118 1119 dw[4] = 1120 __gen_uint(values->BindingTableEntryCount, 0, 4) | 1121 __gen_offset(values->BindingTablePointer, 5, 15); 1122 1123 dw[5] = 1124 __gen_uint(values->ConstantURBEntryReadOffset, 0, 15) | 1125 __gen_uint(values->ConstantURBEntryReadLength, 16, 31); 1126 1127 dw[6] = 1128 __gen_uint(values->NumberofThreadsinGPGPUThreadGroup, 0, 9) | 1129 __gen_uint(values->GlobalBarrierEnable, 15, 15) | 1130 __gen_uint(values->SharedLocalMemorySize, 16, 20) | 1131 __gen_uint(values->BarrierEnable, 21, 21) | 1132 __gen_uint(values->RoundingMode, 22, 23); 1133 1134 dw[7] = 1135 __gen_uint(values->CrossThreadConstantDataReadLength, 0, 7); 1136} 1137 1138#define GFX9_MFD_MPEG2_BSD_OBJECT_INLINE_DATA_DESCRIPTION_length 2 1139struct GFX9_MFD_MPEG2_BSD_OBJECT_INLINE_DATA_DESCRIPTION { 1140 uint32_t FirstMBBitOffset; 1141 bool LastMB; 1142 bool LastPicSlice; 1143 uint32_t SliceConcealmentType; 1144 uint32_t SliceConcealmentOverride; 1145 uint32_t MBCount; 1146 uint32_t SliceVerticalPosition; 1147 uint32_t SliceHorizontalPosition; 1148 uint32_t NextSliceHorizontalPosition; 1149 uint32_t NextSliceVerticalPosition; 1150 uint32_t QuantizerScaleCode; 1151}; 1152 1153static inline __attribute__((always_inline)) void 1154GFX9_MFD_MPEG2_BSD_OBJECT_INLINE_DATA_DESCRIPTION_pack(__attribute__((unused)) __gen_user_data *data, 1155 __attribute__((unused)) void * restrict dst, 1156 __attribute__((unused)) const struct GFX9_MFD_MPEG2_BSD_OBJECT_INLINE_DATA_DESCRIPTION * restrict values) 1157{ 1158 uint32_t * restrict dw = (uint32_t * restrict) dst; 1159 1160 dw[0] = 1161 __gen_uint(values->FirstMBBitOffset, 0, 2) | 1162 __gen_uint(values->LastMB, 3, 3) | 1163 __gen_uint(values->LastPicSlice, 5, 5) | 1164 __gen_uint(values->SliceConcealmentType, 6, 6) | 1165 __gen_uint(values->SliceConcealmentOverride, 7, 7) | 1166 __gen_uint(values->MBCount, 8, 15) | 1167 __gen_uint(values->SliceVerticalPosition, 16, 23) | 1168 __gen_uint(values->SliceHorizontalPosition, 24, 31); 1169 1170 dw[1] = 1171 __gen_uint(values->NextSliceHorizontalPosition, 0, 7) | 1172 __gen_uint(values->NextSliceVerticalPosition, 8, 16) | 1173 __gen_uint(values->QuantizerScaleCode, 24, 28); 1174} 1175 1176#define GFX9_MI_MATH_ALU_INSTRUCTION_length 1 1177struct GFX9_MI_MATH_ALU_INSTRUCTION { 1178 uint32_t Operand2; 1179#define MI_ALU_REG0 0 1180#define MI_ALU_REG1 1 1181#define MI_ALU_REG2 2 1182#define MI_ALU_REG3 3 1183#define MI_ALU_REG4 4 1184#define MI_ALU_REG5 5 1185#define MI_ALU_REG6 6 1186#define MI_ALU_REG7 7 1187#define MI_ALU_REG8 8 1188#define MI_ALU_REG9 9 1189#define MI_ALU_REG10 10 1190#define MI_ALU_REG11 11 1191#define MI_ALU_REG12 12 1192#define MI_ALU_REG13 13 1193#define MI_ALU_REG14 14 1194#define MI_ALU_REG15 15 1195#define MI_ALU_SRCA 32 1196#define MI_ALU_SRCB 33 1197#define MI_ALU_ACCU 49 1198#define MI_ALU_ZF 50 1199#define MI_ALU_CF 51 1200 uint32_t Operand1; 1201#define MI_ALU_REG0 0 1202#define MI_ALU_REG1 1 1203#define MI_ALU_REG2 2 1204#define MI_ALU_REG3 3 1205#define MI_ALU_REG4 4 1206#define MI_ALU_REG5 5 1207#define MI_ALU_REG6 6 1208#define MI_ALU_REG7 7 1209#define MI_ALU_REG8 8 1210#define MI_ALU_REG9 9 1211#define MI_ALU_REG10 10 1212#define MI_ALU_REG11 11 1213#define MI_ALU_REG12 12 1214#define MI_ALU_REG13 13 1215#define MI_ALU_REG14 14 1216#define MI_ALU_REG15 15 1217#define MI_ALU_SRCA 32 1218#define MI_ALU_SRCB 33 1219#define MI_ALU_ACCU 49 1220#define MI_ALU_ZF 50 1221#define MI_ALU_CF 51 1222 uint32_t ALUOpcode; 1223#define MI_ALU_NOOP 0 1224#define MI_ALU_LOAD 128 1225#define MI_ALU_LOADINV 1152 1226#define MI_ALU_LOAD0 129 1227#define MI_ALU_LOAD1 1153 1228#define MI_ALU_ADD 256 1229#define MI_ALU_SUB 257 1230#define MI_ALU_AND 258 1231#define MI_ALU_OR 259 1232#define MI_ALU_XOR 260 1233#define MI_ALU_STORE 384 1234#define MI_ALU_STOREINV 1408 1235}; 1236 1237static inline __attribute__((always_inline)) void 1238GFX9_MI_MATH_ALU_INSTRUCTION_pack(__attribute__((unused)) __gen_user_data *data, 1239 __attribute__((unused)) void * restrict dst, 1240 __attribute__((unused)) const struct GFX9_MI_MATH_ALU_INSTRUCTION * restrict values) 1241{ 1242 uint32_t * restrict dw = (uint32_t * restrict) dst; 1243 1244 dw[0] = 1245 __gen_uint(values->Operand2, 0, 9) | 1246 __gen_uint(values->Operand1, 10, 19) | 1247 __gen_uint(values->ALUOpcode, 20, 31); 1248} 1249 1250#define GFX9_PALETTE_ENTRY_length 1 1251struct GFX9_PALETTE_ENTRY { 1252 uint32_t Blue; 1253 uint32_t Green; 1254 uint32_t Red; 1255 uint32_t Alpha; 1256}; 1257 1258static inline __attribute__((always_inline)) void 1259GFX9_PALETTE_ENTRY_pack(__attribute__((unused)) __gen_user_data *data, 1260 __attribute__((unused)) void * restrict dst, 1261 __attribute__((unused)) const struct GFX9_PALETTE_ENTRY * restrict values) 1262{ 1263 uint32_t * restrict dw = (uint32_t * restrict) dst; 1264 1265 dw[0] = 1266 __gen_uint(values->Blue, 0, 7) | 1267 __gen_uint(values->Green, 8, 15) | 1268 __gen_uint(values->Red, 16, 23) | 1269 __gen_uint(values->Alpha, 24, 31); 1270} 1271 1272#define GFX9_RENDER_SURFACE_STATE_length 16 1273struct GFX9_RENDER_SURFACE_STATE { 1274 bool CubeFaceEnablePositiveZ; 1275 bool CubeFaceEnableNegativeZ; 1276 bool CubeFaceEnablePositiveY; 1277 bool CubeFaceEnableNegativeY; 1278 bool CubeFaceEnablePositiveX; 1279 bool CubeFaceEnableNegativeX; 1280 uint32_t MediaBoundaryPixelMode; 1281#define NORMAL_MODE 0 1282#define PROGRESSIVE_FRAME 2 1283#define INTERLACED_FRAME 3 1284 uint32_t RenderCacheReadWriteMode; 1285#define WriteOnlyCache 0 1286#define ReadWriteCache 1 1287 bool SamplerL2BypassModeDisable; 1288 uint32_t VerticalLineStrideOffset; 1289 uint32_t VerticalLineStride; 1290 uint32_t TileMode; 1291#define LINEAR 0 1292#define WMAJOR 1 1293#define XMAJOR 2 1294#define YMAJOR 3 1295 uint32_t SurfaceHorizontalAlignment; 1296#define HALIGN_4 1 1297#define HALIGN_8 2 1298#define HALIGN_16 3 1299 uint32_t SurfaceVerticalAlignment; 1300#define VALIGN_4 1 1301#define VALIGN_8 2 1302#define VALIGN_16 3 1303 uint32_t SurfaceFormat; 1304 bool SurfaceArray; 1305 uint32_t SurfaceType; 1306#define SURFTYPE_1D 0 1307#define SURFTYPE_2D 1 1308#define SURFTYPE_3D 2 1309#define SURFTYPE_CUBE 3 1310#define SURFTYPE_BUFFER 4 1311#define SURFTYPE_STRBUF 5 1312#define SURFTYPE_NULL 7 1313 uint32_t SurfaceQPitch; 1314 float BaseMipLevel; 1315 uint32_t MOCS; 1316 uint32_t Width; 1317 uint32_t Height; 1318 uint32_t SurfacePitch; 1319 uint32_t Depth; 1320 uint32_t MultisamplePositionPaletteIndex; 1321 uint32_t NumberofMultisamples; 1322#define MULTISAMPLECOUNT_1 0 1323#define MULTISAMPLECOUNT_2 1 1324#define MULTISAMPLECOUNT_4 2 1325#define MULTISAMPLECOUNT_8 3 1326#define MULTISAMPLECOUNT_16 4 1327 uint32_t MultisampledSurfaceStorageFormat; 1328#define MSFMT_MSS 0 1329#define MSFMT_DEPTH_STENCIL 1 1330 uint32_t RenderTargetViewExtent; 1331 uint32_t MinimumArrayElement; 1332 uint32_t RenderTargetAndSampleUnormRotation; 1333#define _0DEG 0 1334#define _90DEG 1 1335#define _180DEG 2 1336#define _270DEG 3 1337 uint32_t MIPCountLOD; 1338 uint32_t SurfaceMinLOD; 1339 uint32_t MipTailStartLOD; 1340 uint32_t CoherencyType; 1341#define GPUcoherent 0 1342#define IAcoherent 1 1343 uint32_t TiledResourceMode; 1344#define NONE 0 1345#define _4KB 1 1346#define _64KB 2 1347#define TILEYF 1 1348#define TILEYS 2 1349 bool EWADisableForCube; 1350 uint32_t YOffset; 1351 uint32_t XOffset; 1352 uint32_t AuxiliarySurfaceMode; 1353#define AUX_NONE 0 1354#define AUX_CCS_D 1 1355#define AUX_APPEND 2 1356#define AUX_HIZ 3 1357#define AUX_CCS_E 5 1358 uint32_t YOffsetforUorUVPlane; 1359 uint32_t AuxiliarySurfacePitch; 1360 uint32_t AuxiliarySurfaceQPitch; 1361 uint32_t XOffsetforUorUVPlane; 1362 bool SeparateUVPlaneEnable; 1363 float ResourceMinLOD; 1364 enum GFX9_ShaderChannelSelect ShaderChannelSelectAlpha; 1365 enum GFX9_ShaderChannelSelect ShaderChannelSelectBlue; 1366 enum GFX9_ShaderChannelSelect ShaderChannelSelectGreen; 1367 enum GFX9_ShaderChannelSelect ShaderChannelSelectRed; 1368 bool MemoryCompressionEnable; 1369 uint32_t MemoryCompressionMode; 1370#define Horizontal 0 1371#define Vertical 1 1372 __gen_address_type SurfaceBaseAddress; 1373 uint32_t QuiltWidth; 1374 uint32_t QuiltHeight; 1375 __gen_address_type AuxiliarySurfaceBaseAddress; 1376 uint32_t AuxiliaryTableIndexforMediaCompressedSurface; 1377 uint32_t YOffsetforVPlane; 1378 uint32_t XOffsetforVPlane; 1379 float HierarchicalDepthClearValue; 1380 int32_t RedClearColor; 1381 int32_t GreenClearColor; 1382 int32_t BlueClearColor; 1383 int32_t AlphaClearColor; 1384}; 1385 1386static inline __attribute__((always_inline)) void 1387GFX9_RENDER_SURFACE_STATE_pack(__attribute__((unused)) __gen_user_data *data, 1388 __attribute__((unused)) void * restrict dst, 1389 __attribute__((unused)) const struct GFX9_RENDER_SURFACE_STATE * restrict values) 1390{ 1391 uint32_t * restrict dw = (uint32_t * restrict) dst; 1392 1393 dw[0] = 1394 __gen_uint(values->CubeFaceEnablePositiveZ, 0, 0) | 1395 __gen_uint(values->CubeFaceEnableNegativeZ, 1, 1) | 1396 __gen_uint(values->CubeFaceEnablePositiveY, 2, 2) | 1397 __gen_uint(values->CubeFaceEnableNegativeY, 3, 3) | 1398 __gen_uint(values->CubeFaceEnablePositiveX, 4, 4) | 1399 __gen_uint(values->CubeFaceEnableNegativeX, 5, 5) | 1400 __gen_uint(values->MediaBoundaryPixelMode, 6, 7) | 1401 __gen_uint(values->RenderCacheReadWriteMode, 8, 8) | 1402 __gen_uint(values->SamplerL2BypassModeDisable, 9, 9) | 1403 __gen_uint(values->VerticalLineStrideOffset, 10, 10) | 1404 __gen_uint(values->VerticalLineStride, 11, 11) | 1405 __gen_uint(values->TileMode, 12, 13) | 1406 __gen_uint(values->SurfaceHorizontalAlignment, 14, 15) | 1407 __gen_uint(values->SurfaceVerticalAlignment, 16, 17) | 1408 __gen_uint(values->SurfaceFormat, 18, 27) | 1409 __gen_uint(values->SurfaceArray, 28, 28) | 1410 __gen_uint(values->SurfaceType, 29, 31); 1411 1412 dw[1] = 1413 __gen_uint(values->SurfaceQPitch, 0, 14) | 1414 __gen_ufixed(values->BaseMipLevel, 19, 23, 1) | 1415 __gen_uint(values->MOCS, 24, 30); 1416 1417 dw[2] = 1418 __gen_uint(values->Width, 0, 13) | 1419 __gen_uint(values->Height, 16, 29); 1420 1421 dw[3] = 1422 __gen_uint(values->SurfacePitch, 0, 17) | 1423 __gen_uint(values->Depth, 21, 31); 1424 1425 dw[4] = 1426 __gen_uint(values->MultisamplePositionPaletteIndex, 0, 2) | 1427 __gen_uint(values->NumberofMultisamples, 3, 5) | 1428 __gen_uint(values->MultisampledSurfaceStorageFormat, 6, 6) | 1429 __gen_uint(values->RenderTargetViewExtent, 7, 17) | 1430 __gen_uint(values->MinimumArrayElement, 18, 28) | 1431 __gen_uint(values->RenderTargetAndSampleUnormRotation, 29, 30); 1432 1433 dw[5] = 1434 __gen_uint(values->MIPCountLOD, 0, 3) | 1435 __gen_uint(values->SurfaceMinLOD, 4, 7) | 1436 __gen_uint(values->MipTailStartLOD, 8, 11) | 1437 __gen_uint(values->CoherencyType, 14, 14) | 1438 __gen_uint(values->TiledResourceMode, 18, 19) | 1439 __gen_uint(values->EWADisableForCube, 20, 20) | 1440 __gen_uint(values->YOffset, 21, 23) | 1441 __gen_uint(values->XOffset, 25, 31); 1442 1443 dw[6] = 1444 __gen_uint(values->AuxiliarySurfaceMode, 0, 2) | 1445 __gen_uint(values->YOffsetforUorUVPlane, 0, 13) | 1446 __gen_uint(values->AuxiliarySurfacePitch, 3, 11) | 1447 __gen_uint(values->AuxiliarySurfaceQPitch, 16, 30) | 1448 __gen_uint(values->XOffsetforUorUVPlane, 16, 29) | 1449 __gen_uint(values->SeparateUVPlaneEnable, 31, 31); 1450 1451 dw[7] = 1452 __gen_ufixed(values->ResourceMinLOD, 0, 11, 8) | 1453 __gen_uint(values->ShaderChannelSelectAlpha, 16, 18) | 1454 __gen_uint(values->ShaderChannelSelectBlue, 19, 21) | 1455 __gen_uint(values->ShaderChannelSelectGreen, 22, 24) | 1456 __gen_uint(values->ShaderChannelSelectRed, 25, 27) | 1457 __gen_uint(values->MemoryCompressionEnable, 30, 30) | 1458 __gen_uint(values->MemoryCompressionMode, 31, 31); 1459 1460 const uint64_t v8_address = 1461 __gen_address(data, &dw[8], values->SurfaceBaseAddress, 0, 0, 63); 1462 dw[8] = v8_address; 1463 dw[9] = v8_address >> 32; 1464 1465 const uint64_t v10 = 1466 __gen_uint(values->QuiltWidth, 0, 4) | 1467 __gen_uint(values->QuiltHeight, 5, 9) | 1468 __gen_uint(values->AuxiliaryTableIndexforMediaCompressedSurface, 21, 31) | 1469 __gen_uint(values->YOffsetforVPlane, 32, 45) | 1470 __gen_uint(values->XOffsetforVPlane, 48, 61); 1471 const uint64_t v10_address = 1472 __gen_address(data, &dw[10], values->AuxiliarySurfaceBaseAddress, v10, 12, 63); 1473 dw[10] = v10_address; 1474 dw[11] = (v10_address >> 32) | (v10 >> 32); 1475 1476 dw[12] = 1477 __gen_float(values->HierarchicalDepthClearValue) | 1478 __gen_sint(values->RedClearColor, 0, 31); 1479 1480 dw[13] = 1481 __gen_sint(values->GreenClearColor, 0, 31); 1482 1483 dw[14] = 1484 __gen_sint(values->BlueClearColor, 0, 31); 1485 1486 dw[15] = 1487 __gen_sint(values->AlphaClearColor, 0, 31); 1488} 1489 1490#define GFX9_ROUNDINGPRECISIONTABLE_3_BITS_length 1 1491struct GFX9_ROUNDINGPRECISIONTABLE_3_BITS { 1492 uint32_t RoundingPrecision; 1493#define _116 0 1494#define _216 1 1495#define _316 2 1496#define _416 3 1497#define _516 4 1498#define _616 5 1499#define _716 6 1500#define _816 7 1501}; 1502 1503static inline __attribute__((always_inline)) void 1504GFX9_ROUNDINGPRECISIONTABLE_3_BITS_pack(__attribute__((unused)) __gen_user_data *data, 1505 __attribute__((unused)) void * restrict dst, 1506 __attribute__((unused)) const struct GFX9_ROUNDINGPRECISIONTABLE_3_BITS * restrict values) 1507{ 1508 uint32_t * restrict dw = (uint32_t * restrict) dst; 1509 1510 dw[0] = 1511 __gen_uint(values->RoundingPrecision, 0, 2); 1512} 1513 1514#define GFX9_SAMPLER_BORDER_COLOR_STATE_length 4 1515struct GFX9_SAMPLER_BORDER_COLOR_STATE { 1516 float BorderColorFloatRed; 1517 uint32_t BorderColor32bitRed; 1518 float BorderColorFloatGreen; 1519 uint32_t BorderColor32bitGreen; 1520 float BorderColorFloatBlue; 1521 uint32_t BorderColor32bitBlue; 1522 float BorderColorFloatAlpha; 1523 uint32_t BorderColor32bitAlpha; 1524}; 1525 1526static inline __attribute__((always_inline)) void 1527GFX9_SAMPLER_BORDER_COLOR_STATE_pack(__attribute__((unused)) __gen_user_data *data, 1528 __attribute__((unused)) void * restrict dst, 1529 __attribute__((unused)) const struct GFX9_SAMPLER_BORDER_COLOR_STATE * restrict values) 1530{ 1531 uint32_t * restrict dw = (uint32_t * restrict) dst; 1532 1533 dw[0] = 1534 __gen_float(values->BorderColorFloatRed) | 1535 __gen_uint(values->BorderColor32bitRed, 0, 31); 1536 1537 dw[1] = 1538 __gen_float(values->BorderColorFloatGreen) | 1539 __gen_uint(values->BorderColor32bitGreen, 0, 31); 1540 1541 dw[2] = 1542 __gen_float(values->BorderColorFloatBlue) | 1543 __gen_uint(values->BorderColor32bitBlue, 0, 31); 1544 1545 dw[3] = 1546 __gen_float(values->BorderColorFloatAlpha) | 1547 __gen_uint(values->BorderColor32bitAlpha, 0, 31); 1548} 1549 1550#define GFX9_SAMPLER_STATE_length 4 1551struct GFX9_SAMPLER_STATE { 1552 uint32_t AnisotropicAlgorithm; 1553#define LEGACY 0 1554#define EWAApproximation 1 1555 float TextureLODBias; 1556 uint32_t MinModeFilter; 1557#define MAPFILTER_NEAREST 0 1558#define MAPFILTER_LINEAR 1 1559#define MAPFILTER_ANISOTROPIC 2 1560#define MAPFILTER_MONO 6 1561 uint32_t MagModeFilter; 1562#define MAPFILTER_NEAREST 0 1563#define MAPFILTER_LINEAR 1 1564#define MAPFILTER_ANISOTROPIC 2 1565#define MAPFILTER_MONO 6 1566 uint32_t MipModeFilter; 1567#define MIPFILTER_NONE 0 1568#define MIPFILTER_NEAREST 1 1569#define MIPFILTER_LINEAR 3 1570 uint32_t CoarseLODQualityMode; 1571 uint32_t LODPreClampMode; 1572#define CLAMP_MODE_NONE 0 1573#define CLAMP_MODE_OGL 2 1574 uint32_t TextureBorderColorMode; 1575#define DX10OGL 0 1576#define DX9 1 1577 bool SamplerDisable; 1578 uint32_t CubeSurfaceControlMode; 1579#define PROGRAMMED 0 1580#define OVERRIDE 1 1581 uint32_t ShadowFunction; 1582#define PREFILTEROP_ALWAYS 0 1583#define PREFILTEROP_NEVER 1 1584#define PREFILTEROP_LESS 2 1585#define PREFILTEROP_EQUAL 3 1586#define PREFILTEROP_LEQUAL 4 1587#define PREFILTEROP_GREATER 5 1588#define PREFILTEROP_NOTEQUAL 6 1589#define PREFILTEROP_GEQUAL 7 1590 uint32_t ChromaKeyMode; 1591#define KEYFILTER_KILL_ON_ANY_MATCH 0 1592#define KEYFILTER_REPLACE_BLACK 1 1593 uint32_t ChromaKeyIndex; 1594 bool ChromaKeyEnable; 1595 float MaxLOD; 1596 float MinLOD; 1597 uint32_t LODClampMagnificationMode; 1598#define MIPNONE 0 1599#define MIPFILTER 1 1600 uint64_t BorderColorPointer; 1601 enum GFX9_TextureCoordinateMode TCZAddressControlMode; 1602 enum GFX9_TextureCoordinateMode TCYAddressControlMode; 1603 enum GFX9_TextureCoordinateMode TCXAddressControlMode; 1604 bool ReductionTypeEnable; 1605 bool NonnormalizedCoordinateEnable; 1606 uint32_t TrilinearFilterQuality; 1607#define FULL 0 1608#define HIGH 1 1609#define MED 2 1610#define LOW 3 1611 bool RAddressMinFilterRoundingEnable; 1612 bool RAddressMagFilterRoundingEnable; 1613 bool VAddressMinFilterRoundingEnable; 1614 bool VAddressMagFilterRoundingEnable; 1615 bool UAddressMinFilterRoundingEnable; 1616 bool UAddressMagFilterRoundingEnable; 1617 uint32_t MaximumAnisotropy; 1618#define RATIO21 0 1619#define RATIO41 1 1620#define RATIO61 2 1621#define RATIO81 3 1622#define RATIO101 4 1623#define RATIO121 5 1624#define RATIO141 6 1625#define RATIO161 7 1626 uint32_t ReductionType; 1627#define STD_FILTER 0 1628#define COMPARISON 1 1629#define MINIMUM 2 1630#define MAXIMUM 3 1631}; 1632 1633static inline __attribute__((always_inline)) void 1634GFX9_SAMPLER_STATE_pack(__attribute__((unused)) __gen_user_data *data, 1635 __attribute__((unused)) void * restrict dst, 1636 __attribute__((unused)) const struct GFX9_SAMPLER_STATE * restrict values) 1637{ 1638 uint32_t * restrict dw = (uint32_t * restrict) dst; 1639 1640 dw[0] = 1641 __gen_uint(values->AnisotropicAlgorithm, 0, 0) | 1642 __gen_sfixed(values->TextureLODBias, 1, 13, 8) | 1643 __gen_uint(values->MinModeFilter, 14, 16) | 1644 __gen_uint(values->MagModeFilter, 17, 19) | 1645 __gen_uint(values->MipModeFilter, 20, 21) | 1646 __gen_uint(values->CoarseLODQualityMode, 22, 26) | 1647 __gen_uint(values->LODPreClampMode, 27, 28) | 1648 __gen_uint(values->TextureBorderColorMode, 29, 29) | 1649 __gen_uint(values->SamplerDisable, 31, 31); 1650 1651 dw[1] = 1652 __gen_uint(values->CubeSurfaceControlMode, 0, 0) | 1653 __gen_uint(values->ShadowFunction, 1, 3) | 1654 __gen_uint(values->ChromaKeyMode, 4, 4) | 1655 __gen_uint(values->ChromaKeyIndex, 5, 6) | 1656 __gen_uint(values->ChromaKeyEnable, 7, 7) | 1657 __gen_ufixed(values->MaxLOD, 8, 19, 8) | 1658 __gen_ufixed(values->MinLOD, 20, 31, 8); 1659 1660 dw[2] = 1661 __gen_uint(values->LODClampMagnificationMode, 0, 0) | 1662 __gen_offset(values->BorderColorPointer, 6, 23); 1663 1664 dw[3] = 1665 __gen_uint(values->TCZAddressControlMode, 0, 2) | 1666 __gen_uint(values->TCYAddressControlMode, 3, 5) | 1667 __gen_uint(values->TCXAddressControlMode, 6, 8) | 1668 __gen_uint(values->ReductionTypeEnable, 9, 9) | 1669 __gen_uint(values->NonnormalizedCoordinateEnable, 10, 10) | 1670 __gen_uint(values->TrilinearFilterQuality, 11, 12) | 1671 __gen_uint(values->RAddressMinFilterRoundingEnable, 13, 13) | 1672 __gen_uint(values->RAddressMagFilterRoundingEnable, 14, 14) | 1673 __gen_uint(values->VAddressMinFilterRoundingEnable, 15, 15) | 1674 __gen_uint(values->VAddressMagFilterRoundingEnable, 16, 16) | 1675 __gen_uint(values->UAddressMinFilterRoundingEnable, 17, 17) | 1676 __gen_uint(values->UAddressMagFilterRoundingEnable, 18, 18) | 1677 __gen_uint(values->MaximumAnisotropy, 19, 21) | 1678 __gen_uint(values->ReductionType, 22, 23); 1679} 1680 1681#define GFX9_SAMPLER_STATE_8X8_AVS_COEFFICIENTS_length 8 1682struct GFX9_SAMPLER_STATE_8X8_AVS_COEFFICIENTS { 1683 float Table0FilterCoefficient[4]; 1684 float Table1FilterCoefficient0[4]; 1685 float Table1FilterCoefficient1[4]; 1686}; 1687 1688static inline __attribute__((always_inline)) void 1689GFX9_SAMPLER_STATE_8X8_AVS_COEFFICIENTS_pack(__attribute__((unused)) __gen_user_data *data, 1690 __attribute__((unused)) void * restrict dst, 1691 __attribute__((unused)) const struct GFX9_SAMPLER_STATE_8X8_AVS_COEFFICIENTS * restrict values) 1692{ 1693 uint32_t * restrict dw = (uint32_t * restrict) dst; 1694 1695 dw[0] = 1696 __gen_sfixed(values->Table0FilterCoefficient[0], 0, 7, 6) | 1697 __gen_sfixed(values->Table0FilterCoefficient[1], 8, 15, 6) | 1698 __gen_sfixed(values->Table0FilterCoefficient[2], 16, 23, 6) | 1699 __gen_sfixed(values->Table0FilterCoefficient[3], 24, 31, 6) | 1700 __gen_sfixed(values->Table1FilterCoefficient0[0], 0, 7, 6) | 1701 __gen_sfixed(values->Table1FilterCoefficient1[0], 8, 15, 6); 1702 1703 dw[1] = 1704 __gen_sfixed(values->Table1FilterCoefficient0[1], 0, 7, 6) | 1705 __gen_sfixed(values->Table1FilterCoefficient1[1], 8, 15, 6); 1706 1707 dw[2] = 1708 __gen_sfixed(values->Table1FilterCoefficient0[2], 0, 7, 6) | 1709 __gen_sfixed(values->Table1FilterCoefficient1[2], 8, 15, 6); 1710 1711 dw[3] = 1712 __gen_sfixed(values->Table1FilterCoefficient0[3], 0, 7, 6) | 1713 __gen_sfixed(values->Table1FilterCoefficient1[3], 8, 15, 6); 1714 1715 dw[4] = 0; 1716 1717 dw[5] = 0; 1718 1719 dw[6] = 0; 1720 1721 dw[7] = 0; 1722} 1723 1724#define GFX9_SCISSOR_RECT_length 2 1725struct GFX9_SCISSOR_RECT { 1726 uint32_t ScissorRectangleXMin; 1727 uint32_t ScissorRectangleYMin; 1728 uint32_t ScissorRectangleXMax; 1729 uint32_t ScissorRectangleYMax; 1730}; 1731 1732static inline __attribute__((always_inline)) void 1733GFX9_SCISSOR_RECT_pack(__attribute__((unused)) __gen_user_data *data, 1734 __attribute__((unused)) void * restrict dst, 1735 __attribute__((unused)) const struct GFX9_SCISSOR_RECT * restrict values) 1736{ 1737 uint32_t * restrict dw = (uint32_t * restrict) dst; 1738 1739 dw[0] = 1740 __gen_uint(values->ScissorRectangleXMin, 0, 15) | 1741 __gen_uint(values->ScissorRectangleYMin, 16, 31); 1742 1743 dw[1] = 1744 __gen_uint(values->ScissorRectangleXMax, 0, 15) | 1745 __gen_uint(values->ScissorRectangleYMax, 16, 31); 1746} 1747 1748#define GFX9_SFC_AVS_CHROMA_COEFF_TABLE_BODY_length 64 1749struct GFX9_SFC_AVS_CHROMA_COEFF_TABLE_BODY { 1750 float Table1XFilterCoefficientn2; 1751 float Table1YFilterCoefficientn2; 1752 float Table1XFilterCoefficientn3; 1753 float Table1YFilterCoefficientn3; 1754 float Table1XFilterCoefficientn4; 1755 float Table1YFilterCoefficientn4; 1756 float Table1XFilterCoefficientn5; 1757 float Table1YFilterCoefficientn5; 1758 uint64_t FilterCoefficients[31]; 1759}; 1760 1761static inline __attribute__((always_inline)) void 1762GFX9_SFC_AVS_CHROMA_COEFF_TABLE_BODY_pack(__attribute__((unused)) __gen_user_data *data, 1763 __attribute__((unused)) void * restrict dst, 1764 __attribute__((unused)) const struct GFX9_SFC_AVS_CHROMA_COEFF_TABLE_BODY * restrict values) 1765{ 1766 uint32_t * restrict dw = (uint32_t * restrict) dst; 1767 1768 dw[0] = 1769 __gen_sfixed(values->Table1XFilterCoefficientn2, 0, 7, 6) | 1770 __gen_sfixed(values->Table1YFilterCoefficientn2, 8, 15, 6) | 1771 __gen_sfixed(values->Table1XFilterCoefficientn3, 16, 23, 6) | 1772 __gen_sfixed(values->Table1YFilterCoefficientn3, 24, 31, 6); 1773 1774 dw[1] = 1775 __gen_sfixed(values->Table1XFilterCoefficientn4, 0, 7, 6) | 1776 __gen_sfixed(values->Table1YFilterCoefficientn4, 8, 15, 6) | 1777 __gen_sfixed(values->Table1XFilterCoefficientn5, 16, 23, 6) | 1778 __gen_sfixed(values->Table1YFilterCoefficientn5, 24, 31, 6); 1779 1780 const uint64_t v2 = 1781 __gen_uint(values->FilterCoefficients[0], 0, 63); 1782 dw[2] = v2; 1783 dw[3] = v2 >> 32; 1784 1785 const uint64_t v4 = 1786 __gen_uint(values->FilterCoefficients[1], 0, 63); 1787 dw[4] = v4; 1788 dw[5] = v4 >> 32; 1789 1790 const uint64_t v6 = 1791 __gen_uint(values->FilterCoefficients[2], 0, 63); 1792 dw[6] = v6; 1793 dw[7] = v6 >> 32; 1794 1795 const uint64_t v8 = 1796 __gen_uint(values->FilterCoefficients[3], 0, 63); 1797 dw[8] = v8; 1798 dw[9] = v8 >> 32; 1799 1800 const uint64_t v10 = 1801 __gen_uint(values->FilterCoefficients[4], 0, 63); 1802 dw[10] = v10; 1803 dw[11] = v10 >> 32; 1804 1805 const uint64_t v12 = 1806 __gen_uint(values->FilterCoefficients[5], 0, 63); 1807 dw[12] = v12; 1808 dw[13] = v12 >> 32; 1809 1810 const uint64_t v14 = 1811 __gen_uint(values->FilterCoefficients[6], 0, 63); 1812 dw[14] = v14; 1813 dw[15] = v14 >> 32; 1814 1815 const uint64_t v16 = 1816 __gen_uint(values->FilterCoefficients[7], 0, 63); 1817 dw[16] = v16; 1818 dw[17] = v16 >> 32; 1819 1820 const uint64_t v18 = 1821 __gen_uint(values->FilterCoefficients[8], 0, 63); 1822 dw[18] = v18; 1823 dw[19] = v18 >> 32; 1824 1825 const uint64_t v20 = 1826 __gen_uint(values->FilterCoefficients[9], 0, 63); 1827 dw[20] = v20; 1828 dw[21] = v20 >> 32; 1829 1830 const uint64_t v22 = 1831 __gen_uint(values->FilterCoefficients[10], 0, 63); 1832 dw[22] = v22; 1833 dw[23] = v22 >> 32; 1834 1835 const uint64_t v24 = 1836 __gen_uint(values->FilterCoefficients[11], 0, 63); 1837 dw[24] = v24; 1838 dw[25] = v24 >> 32; 1839 1840 const uint64_t v26 = 1841 __gen_uint(values->FilterCoefficients[12], 0, 63); 1842 dw[26] = v26; 1843 dw[27] = v26 >> 32; 1844 1845 const uint64_t v28 = 1846 __gen_uint(values->FilterCoefficients[13], 0, 63); 1847 dw[28] = v28; 1848 dw[29] = v28 >> 32; 1849 1850 const uint64_t v30 = 1851 __gen_uint(values->FilterCoefficients[14], 0, 63); 1852 dw[30] = v30; 1853 dw[31] = v30 >> 32; 1854 1855 const uint64_t v32 = 1856 __gen_uint(values->FilterCoefficients[15], 0, 63); 1857 dw[32] = v32; 1858 dw[33] = v32 >> 32; 1859 1860 const uint64_t v34 = 1861 __gen_uint(values->FilterCoefficients[16], 0, 63); 1862 dw[34] = v34; 1863 dw[35] = v34 >> 32; 1864 1865 const uint64_t v36 = 1866 __gen_uint(values->FilterCoefficients[17], 0, 63); 1867 dw[36] = v36; 1868 dw[37] = v36 >> 32; 1869 1870 const uint64_t v38 = 1871 __gen_uint(values->FilterCoefficients[18], 0, 63); 1872 dw[38] = v38; 1873 dw[39] = v38 >> 32; 1874 1875 const uint64_t v40 = 1876 __gen_uint(values->FilterCoefficients[19], 0, 63); 1877 dw[40] = v40; 1878 dw[41] = v40 >> 32; 1879 1880 const uint64_t v42 = 1881 __gen_uint(values->FilterCoefficients[20], 0, 63); 1882 dw[42] = v42; 1883 dw[43] = v42 >> 32; 1884 1885 const uint64_t v44 = 1886 __gen_uint(values->FilterCoefficients[21], 0, 63); 1887 dw[44] = v44; 1888 dw[45] = v44 >> 32; 1889 1890 const uint64_t v46 = 1891 __gen_uint(values->FilterCoefficients[22], 0, 63); 1892 dw[46] = v46; 1893 dw[47] = v46 >> 32; 1894 1895 const uint64_t v48 = 1896 __gen_uint(values->FilterCoefficients[23], 0, 63); 1897 dw[48] = v48; 1898 dw[49] = v48 >> 32; 1899 1900 const uint64_t v50 = 1901 __gen_uint(values->FilterCoefficients[24], 0, 63); 1902 dw[50] = v50; 1903 dw[51] = v50 >> 32; 1904 1905 const uint64_t v52 = 1906 __gen_uint(values->FilterCoefficients[25], 0, 63); 1907 dw[52] = v52; 1908 dw[53] = v52 >> 32; 1909 1910 const uint64_t v54 = 1911 __gen_uint(values->FilterCoefficients[26], 0, 63); 1912 dw[54] = v54; 1913 dw[55] = v54 >> 32; 1914 1915 const uint64_t v56 = 1916 __gen_uint(values->FilterCoefficients[27], 0, 63); 1917 dw[56] = v56; 1918 dw[57] = v56 >> 32; 1919 1920 const uint64_t v58 = 1921 __gen_uint(values->FilterCoefficients[28], 0, 63); 1922 dw[58] = v58; 1923 dw[59] = v58 >> 32; 1924 1925 const uint64_t v60 = 1926 __gen_uint(values->FilterCoefficients[29], 0, 63); 1927 dw[60] = v60; 1928 dw[61] = v60 >> 32; 1929 1930 const uint64_t v62 = 1931 __gen_uint(values->FilterCoefficients[30], 0, 63); 1932 dw[62] = v62; 1933 dw[63] = v62 >> 32; 1934} 1935 1936#define GFX9_SFC_AVS_LUMA_COEFF_TABLE_BODY_length 128 1937struct GFX9_SFC_AVS_LUMA_COEFF_TABLE_BODY { 1938 float Table0XFilterCoefficientn0; 1939 float Table0YFilterCoefficientn0; 1940 float Table0XFilterCoefficientn1; 1941 float Table0YFilterCoefficientn1; 1942 float Table0XFilterCoefficientn2; 1943 float Table0YFilterCoefficientn2; 1944 float Table0XFilterCoefficientn3; 1945 float Table0YFilterCoefficientn3; 1946 float Table0XFilterCoefficientn4; 1947 float Table0YFilterCoefficientn4; 1948 float Table0XFilterCoefficientn5; 1949 float Table0YFilterCoefficientn5; 1950 float Table0XFilterCoefficientn6; 1951 float Table0YFilterCoefficientn6; 1952 float Table0XFilterCoefficientn7; 1953 float Table0YFilterCoefficientn7; 1954 uint64_t FilterCoefficients[31]; 1955}; 1956 1957static inline __attribute__((always_inline)) void 1958GFX9_SFC_AVS_LUMA_COEFF_TABLE_BODY_pack(__attribute__((unused)) __gen_user_data *data, 1959 __attribute__((unused)) void * restrict dst, 1960 __attribute__((unused)) const struct GFX9_SFC_AVS_LUMA_COEFF_TABLE_BODY * restrict values) 1961{ 1962 uint32_t * restrict dw = (uint32_t * restrict) dst; 1963 1964 dw[0] = 1965 __gen_sfixed(values->Table0XFilterCoefficientn0, 0, 7, 6) | 1966 __gen_sfixed(values->Table0YFilterCoefficientn0, 8, 15, 6) | 1967 __gen_sfixed(values->Table0XFilterCoefficientn1, 16, 23, 6) | 1968 __gen_sfixed(values->Table0YFilterCoefficientn1, 24, 31, 6); 1969 1970 dw[1] = 1971 __gen_sfixed(values->Table0XFilterCoefficientn2, 0, 7, 6) | 1972 __gen_sfixed(values->Table0YFilterCoefficientn2, 8, 15, 6) | 1973 __gen_sfixed(values->Table0XFilterCoefficientn3, 16, 23, 6) | 1974 __gen_sfixed(values->Table0YFilterCoefficientn3, 24, 31, 6); 1975 1976 dw[2] = 1977 __gen_sfixed(values->Table0XFilterCoefficientn4, 0, 7, 6) | 1978 __gen_sfixed(values->Table0YFilterCoefficientn4, 8, 15, 6) | 1979 __gen_sfixed(values->Table0XFilterCoefficientn5, 16, 23, 6) | 1980 __gen_sfixed(values->Table0YFilterCoefficientn5, 24, 31, 6); 1981 1982 dw[3] = 1983 __gen_sfixed(values->Table0XFilterCoefficientn6, 0, 7, 6) | 1984 __gen_sfixed(values->Table0YFilterCoefficientn6, 8, 15, 6) | 1985 __gen_sfixed(values->Table0XFilterCoefficientn7, 16, 23, 6) | 1986 __gen_sfixed(values->Table0YFilterCoefficientn7, 24, 31, 6); 1987 1988 const uint64_t v4 = 1989 __gen_uint(values->FilterCoefficients[0], 0, 127); 1990 dw[4] = v4; 1991 dw[5] = v4 >> 32; 1992 1993 const uint64_t v8 = 1994 __gen_uint(values->FilterCoefficients[1], 0, 127); 1995 dw[8] = v8; 1996 dw[9] = v8 >> 32; 1997 1998 const uint64_t v12 = 1999 __gen_uint(values->FilterCoefficients[2], 0, 127); 2000 dw[12] = v12; 2001 dw[13] = v12 >> 32; 2002 2003 const uint64_t v16 = 2004 __gen_uint(values->FilterCoefficients[3], 0, 127); 2005 dw[16] = v16; 2006 dw[17] = v16 >> 32; 2007 2008 const uint64_t v20 = 2009 __gen_uint(values->FilterCoefficients[4], 0, 127); 2010 dw[20] = v20; 2011 dw[21] = v20 >> 32; 2012 2013 const uint64_t v24 = 2014 __gen_uint(values->FilterCoefficients[5], 0, 127); 2015 dw[24] = v24; 2016 dw[25] = v24 >> 32; 2017 2018 const uint64_t v28 = 2019 __gen_uint(values->FilterCoefficients[6], 0, 127); 2020 dw[28] = v28; 2021 dw[29] = v28 >> 32; 2022 2023 const uint64_t v32 = 2024 __gen_uint(values->FilterCoefficients[7], 0, 127); 2025 dw[32] = v32; 2026 dw[33] = v32 >> 32; 2027 2028 const uint64_t v36 = 2029 __gen_uint(values->FilterCoefficients[8], 0, 127); 2030 dw[36] = v36; 2031 dw[37] = v36 >> 32; 2032 2033 const uint64_t v40 = 2034 __gen_uint(values->FilterCoefficients[9], 0, 127); 2035 dw[40] = v40; 2036 dw[41] = v40 >> 32; 2037 2038 const uint64_t v44 = 2039 __gen_uint(values->FilterCoefficients[10], 0, 127); 2040 dw[44] = v44; 2041 dw[45] = v44 >> 32; 2042 2043 const uint64_t v48 = 2044 __gen_uint(values->FilterCoefficients[11], 0, 127); 2045 dw[48] = v48; 2046 dw[49] = v48 >> 32; 2047 2048 const uint64_t v52 = 2049 __gen_uint(values->FilterCoefficients[12], 0, 127); 2050 dw[52] = v52; 2051 dw[53] = v52 >> 32; 2052 2053 const uint64_t v56 = 2054 __gen_uint(values->FilterCoefficients[13], 0, 127); 2055 dw[56] = v56; 2056 dw[57] = v56 >> 32; 2057 2058 const uint64_t v60 = 2059 __gen_uint(values->FilterCoefficients[14], 0, 127); 2060 dw[60] = v60; 2061 dw[61] = v60 >> 32; 2062 2063 const uint64_t v64 = 2064 __gen_uint(values->FilterCoefficients[15], 0, 127); 2065 dw[64] = v64; 2066 dw[65] = v64 >> 32; 2067 2068 const uint64_t v68 = 2069 __gen_uint(values->FilterCoefficients[16], 0, 127); 2070 dw[68] = v68; 2071 dw[69] = v68 >> 32; 2072 2073 const uint64_t v72 = 2074 __gen_uint(values->FilterCoefficients[17], 0, 127); 2075 dw[72] = v72; 2076 dw[73] = v72 >> 32; 2077 2078 const uint64_t v76 = 2079 __gen_uint(values->FilterCoefficients[18], 0, 127); 2080 dw[76] = v76; 2081 dw[77] = v76 >> 32; 2082 2083 const uint64_t v80 = 2084 __gen_uint(values->FilterCoefficients[19], 0, 127); 2085 dw[80] = v80; 2086 dw[81] = v80 >> 32; 2087 2088 const uint64_t v84 = 2089 __gen_uint(values->FilterCoefficients[20], 0, 127); 2090 dw[84] = v84; 2091 dw[85] = v84 >> 32; 2092 2093 const uint64_t v88 = 2094 __gen_uint(values->FilterCoefficients[21], 0, 127); 2095 dw[88] = v88; 2096 dw[89] = v88 >> 32; 2097 2098 const uint64_t v92 = 2099 __gen_uint(values->FilterCoefficients[22], 0, 127); 2100 dw[92] = v92; 2101 dw[93] = v92 >> 32; 2102 2103 const uint64_t v96 = 2104 __gen_uint(values->FilterCoefficients[23], 0, 127); 2105 dw[96] = v96; 2106 dw[97] = v96 >> 32; 2107 2108 const uint64_t v100 = 2109 __gen_uint(values->FilterCoefficients[24], 0, 127); 2110 dw[100] = v100; 2111 dw[101] = v100 >> 32; 2112 2113 const uint64_t v104 = 2114 __gen_uint(values->FilterCoefficients[25], 0, 127); 2115 dw[104] = v104; 2116 dw[105] = v104 >> 32; 2117 2118 const uint64_t v108 = 2119 __gen_uint(values->FilterCoefficients[26], 0, 127); 2120 dw[108] = v108; 2121 dw[109] = v108 >> 32; 2122 2123 const uint64_t v112 = 2124 __gen_uint(values->FilterCoefficients[27], 0, 127); 2125 dw[112] = v112; 2126 dw[113] = v112 >> 32; 2127 2128 const uint64_t v116 = 2129 __gen_uint(values->FilterCoefficients[28], 0, 127); 2130 dw[116] = v116; 2131 dw[117] = v116 >> 32; 2132 2133 const uint64_t v120 = 2134 __gen_uint(values->FilterCoefficients[29], 0, 127); 2135 dw[120] = v120; 2136 dw[121] = v120 >> 32; 2137 2138 const uint64_t v124 = 2139 __gen_uint(values->FilterCoefficients[30], 0, 127); 2140 dw[124] = v124; 2141 dw[125] = v124 >> 32; 2142} 2143 2144#define GFX9_SFC_AVS_STATE_BODY_length 2 2145struct GFX9_SFC_AVS_STATE_BODY { 2146 uint32_t TransitionAreawith8Pixels; 2147 uint32_t TransitionAreawith4Pixels; 2148 uint32_t SharpnessLevel; 2149 uint32_t MaxDerivative8Pixels; 2150 uint32_t MaxDerivative4Pixels; 2151}; 2152 2153static inline __attribute__((always_inline)) void 2154GFX9_SFC_AVS_STATE_BODY_pack(__attribute__((unused)) __gen_user_data *data, 2155 __attribute__((unused)) void * restrict dst, 2156 __attribute__((unused)) const struct GFX9_SFC_AVS_STATE_BODY * restrict values) 2157{ 2158 uint32_t * restrict dw = (uint32_t * restrict) dst; 2159 2160 dw[0] = 2161 __gen_uint(values->TransitionAreawith8Pixels, 0, 2) | 2162 __gen_uint(values->TransitionAreawith4Pixels, 4, 6) | 2163 __gen_uint(values->SharpnessLevel, 24, 31); 2164 2165 dw[1] = 2166 __gen_uint(values->MaxDerivative8Pixels, 0, 7) | 2167 __gen_uint(values->MaxDerivative4Pixels, 16, 23); 2168} 2169 2170#define GFX9_SFC_IEF_STATE_BODY_length 23 2171struct GFX9_SFC_IEF_STATE_BODY { 2172 uint32_t GainFactor; 2173 uint32_t WeakEdgeThreshold; 2174 uint32_t StrongEdgeThreshold; 2175 float R3xCoefficient; 2176 float R3cCoefficient; 2177 uint32_t GlobalNoiseEstimation; 2178 uint32_t NonEdgeWeight; 2179 uint32_t RegularWeight; 2180 uint32_t StrongEdgeWeight; 2181 float R5xCoefficient; 2182 float R5cxCoefficient; 2183 float R5cCoefficient; 2184 float STDSinalpha; 2185 float STDCosalpha; 2186 uint32_t Sat_Max; 2187 uint32_t Hue_Max; 2188 float S3U; 2189 uint32_t DiamondMargin; 2190 bool VY_STD_Enable; 2191 uint32_t U_Mid; 2192 uint32_t V_Mid; 2193 int32_t Diamond_dv; 2194 uint32_t Diamond_Th; 2195 float Diamond_alpha; 2196 uint32_t HS_margin; 2197 int32_t Diamond_du; 2198 uint32_t SkinDetailFactor; 2199#define DetailRevealed 0 2200#define NotDetailRevealed 1 2201 uint32_t Y_point_1; 2202 uint32_t Y_point_2; 2203 uint32_t Y_point_3; 2204 uint32_t Y_point_4; 2205 float INV_Margin_VYL; 2206 float INV_Margin_VYU; 2207 uint32_t P0L; 2208 uint32_t P1L; 2209 uint32_t P2L; 2210 uint32_t P3L; 2211 uint32_t B0L; 2212 uint32_t B1L; 2213 uint32_t B2L; 2214 uint32_t B3L; 2215 float S0L; 2216 float Y_Slope_2; 2217 float S1L; 2218 float S2L; 2219 float S3L; 2220 uint32_t P0U; 2221 uint32_t P1U; 2222 float Y_Slope1; 2223 uint32_t P2U; 2224 uint32_t P3U; 2225 uint32_t B0U; 2226 uint32_t B1U; 2227 uint32_t B2U; 2228 uint32_t B3U; 2229 float S0U; 2230 float S1U; 2231 float S2U; 2232 bool TransformEnable; 2233 bool YUVChannelSwap; 2234 float C0; 2235 float C1; 2236 float C2; 2237 float C3; 2238 float C4; 2239 float C5; 2240 float C6; 2241 float C7; 2242 float C8; 2243 float OffsetIn1; 2244 float OffsetOut1; 2245 float OffsetIn2; 2246 float OffsetOut2; 2247 float OffsetIn3; 2248 float OffsetOut3; 2249}; 2250 2251static inline __attribute__((always_inline)) void 2252GFX9_SFC_IEF_STATE_BODY_pack(__attribute__((unused)) __gen_user_data *data, 2253 __attribute__((unused)) void * restrict dst, 2254 __attribute__((unused)) const struct GFX9_SFC_IEF_STATE_BODY * restrict values) 2255{ 2256 uint32_t * restrict dw = (uint32_t * restrict) dst; 2257 2258 dw[0] = 2259 __gen_uint(values->GainFactor, 0, 5) | 2260 __gen_uint(values->WeakEdgeThreshold, 6, 11) | 2261 __gen_uint(values->StrongEdgeThreshold, 12, 17) | 2262 __gen_ufixed(values->R3xCoefficient, 18, 22, 5) | 2263 __gen_ufixed(values->R3cCoefficient, 23, 27, 5); 2264 2265 dw[1] = 2266 __gen_uint(values->GlobalNoiseEstimation, 0, 7) | 2267 __gen_uint(values->NonEdgeWeight, 8, 10) | 2268 __gen_uint(values->RegularWeight, 11, 13) | 2269 __gen_uint(values->StrongEdgeWeight, 14, 16) | 2270 __gen_ufixed(values->R5xCoefficient, 17, 21, 5) | 2271 __gen_ufixed(values->R5cxCoefficient, 22, 26, 5) | 2272 __gen_ufixed(values->R5cCoefficient, 27, 31, 5); 2273 2274 dw[2] = 2275 __gen_sfixed(values->STDSinalpha, 0, 7, 7) | 2276 __gen_sfixed(values->STDCosalpha, 8, 15, 7) | 2277 __gen_uint(values->Sat_Max, 16, 21) | 2278 __gen_uint(values->Hue_Max, 22, 27); 2279 2280 dw[3] = 2281 __gen_sfixed(values->S3U, 0, 10, 8) | 2282 __gen_uint(values->DiamondMargin, 12, 14) | 2283 __gen_uint(values->VY_STD_Enable, 15, 15) | 2284 __gen_uint(values->U_Mid, 16, 23) | 2285 __gen_uint(values->V_Mid, 24, 31); 2286 2287 dw[4] = 2288 __gen_sint(values->Diamond_dv, 0, 6) | 2289 __gen_uint(values->Diamond_Th, 7, 12) | 2290 __gen_ufixed(values->Diamond_alpha, 13, 20, 6) | 2291 __gen_uint(values->HS_margin, 21, 23) | 2292 __gen_sint(values->Diamond_du, 24, 30) | 2293 __gen_uint(values->SkinDetailFactor, 31, 31); 2294 2295 dw[5] = 2296 __gen_uint(values->Y_point_1, 0, 7) | 2297 __gen_uint(values->Y_point_2, 8, 15) | 2298 __gen_uint(values->Y_point_3, 16, 23) | 2299 __gen_uint(values->Y_point_4, 24, 31); 2300 2301 dw[6] = 2302 __gen_ufixed(values->INV_Margin_VYL, 0, 15, 16); 2303 2304 dw[7] = 2305 __gen_ufixed(values->INV_Margin_VYU, 0, 15, 16) | 2306 __gen_uint(values->P0L, 16, 23) | 2307 __gen_uint(values->P1L, 24, 31); 2308 2309 dw[8] = 2310 __gen_uint(values->P2L, 0, 7) | 2311 __gen_uint(values->P3L, 8, 15) | 2312 __gen_uint(values->B0L, 16, 23) | 2313 __gen_uint(values->B1L, 24, 31); 2314 2315 dw[9] = 2316 __gen_uint(values->B2L, 0, 7) | 2317 __gen_uint(values->B3L, 8, 15) | 2318 __gen_sfixed(values->S0L, 16, 26, 8) | 2319 __gen_ufixed(values->Y_Slope_2, 27, 31, 3); 2320 2321 dw[10] = 2322 __gen_sfixed(values->S1L, 0, 10, 8) | 2323 __gen_sfixed(values->S2L, 11, 21, 8); 2324 2325 dw[11] = 2326 __gen_sfixed(values->S3L, 0, 10, 8) | 2327 __gen_uint(values->P0U, 11, 18) | 2328 __gen_uint(values->P1U, 19, 26) | 2329 __gen_ufixed(values->Y_Slope1, 27, 31, 3); 2330 2331 dw[12] = 2332 __gen_uint(values->P2U, 0, 7) | 2333 __gen_uint(values->P3U, 8, 15) | 2334 __gen_uint(values->B0U, 16, 23) | 2335 __gen_uint(values->B1U, 24, 31); 2336 2337 dw[13] = 2338 __gen_uint(values->B2U, 0, 7) | 2339 __gen_uint(values->B3U, 8, 15) | 2340 __gen_sfixed(values->S0U, 16, 26, 8); 2341 2342 dw[14] = 2343 __gen_sfixed(values->S1U, 0, 10, 8) | 2344 __gen_sfixed(values->S2U, 11, 21, 8); 2345 2346 dw[15] = 2347 __gen_uint(values->TransformEnable, 0, 0) | 2348 __gen_uint(values->YUVChannelSwap, 1, 1) | 2349 __gen_sfixed(values->C0, 3, 15, 10) | 2350 __gen_sfixed(values->C1, 16, 28, 10); 2351 2352 dw[16] = 2353 __gen_sfixed(values->C2, 0, 12, 10) | 2354 __gen_sfixed(values->C3, 13, 25, 10); 2355 2356 dw[17] = 2357 __gen_sfixed(values->C4, 0, 12, 10) | 2358 __gen_sfixed(values->C5, 13, 25, 10); 2359 2360 dw[18] = 2361 __gen_sfixed(values->C6, 0, 12, 10) | 2362 __gen_sfixed(values->C7, 13, 25, 10); 2363 2364 dw[19] = 2365 __gen_sfixed(values->C8, 0, 12, 10); 2366 2367 dw[20] = 2368 __gen_sfixed(values->OffsetIn1, 0, 10, 8) | 2369 __gen_sfixed(values->OffsetOut1, 11, 21, 8); 2370 2371 dw[21] = 2372 __gen_sfixed(values->OffsetIn2, 0, 10, 8) | 2373 __gen_sfixed(values->OffsetOut2, 11, 21, 8); 2374 2375 dw[22] = 2376 __gen_sfixed(values->OffsetIn3, 0, 10, 8) | 2377 __gen_sfixed(values->OffsetOut3, 11, 21, 8); 2378} 2379 2380#define GFX9_SFC_LOCK_BODY_length 1 2381struct GFX9_SFC_LOCK_BODY { 2382 uint32_t VESFCPipeSelect; 2383 bool PreScaledOutputSurfaceOutputEnable; 2384}; 2385 2386static inline __attribute__((always_inline)) void 2387GFX9_SFC_LOCK_BODY_pack(__attribute__((unused)) __gen_user_data *data, 2388 __attribute__((unused)) void * restrict dst, 2389 __attribute__((unused)) const struct GFX9_SFC_LOCK_BODY * restrict values) 2390{ 2391 uint32_t * restrict dw = (uint32_t * restrict) dst; 2392 2393 dw[0] = 2394 __gen_uint(values->VESFCPipeSelect, 0, 0) | 2395 __gen_uint(values->PreScaledOutputSurfaceOutputEnable, 1, 1); 2396} 2397 2398#define GFX9_SF_CLIP_VIEWPORT_length 16 2399struct GFX9_SF_CLIP_VIEWPORT { 2400 float ViewportMatrixElementm00; 2401 float ViewportMatrixElementm11; 2402 float ViewportMatrixElementm22; 2403 float ViewportMatrixElementm30; 2404 float ViewportMatrixElementm31; 2405 float ViewportMatrixElementm32; 2406 float XMinClipGuardband; 2407 float XMaxClipGuardband; 2408 float YMinClipGuardband; 2409 float YMaxClipGuardband; 2410 float XMinViewPort; 2411 float XMaxViewPort; 2412 float YMinViewPort; 2413 float YMaxViewPort; 2414}; 2415 2416static inline __attribute__((always_inline)) void 2417GFX9_SF_CLIP_VIEWPORT_pack(__attribute__((unused)) __gen_user_data *data, 2418 __attribute__((unused)) void * restrict dst, 2419 __attribute__((unused)) const struct GFX9_SF_CLIP_VIEWPORT * restrict values) 2420{ 2421 uint32_t * restrict dw = (uint32_t * restrict) dst; 2422 2423 dw[0] = 2424 __gen_float(values->ViewportMatrixElementm00); 2425 2426 dw[1] = 2427 __gen_float(values->ViewportMatrixElementm11); 2428 2429 dw[2] = 2430 __gen_float(values->ViewportMatrixElementm22); 2431 2432 dw[3] = 2433 __gen_float(values->ViewportMatrixElementm30); 2434 2435 dw[4] = 2436 __gen_float(values->ViewportMatrixElementm31); 2437 2438 dw[5] = 2439 __gen_float(values->ViewportMatrixElementm32); 2440 2441 dw[6] = 0; 2442 2443 dw[7] = 0; 2444 2445 dw[8] = 2446 __gen_float(values->XMinClipGuardband); 2447 2448 dw[9] = 2449 __gen_float(values->XMaxClipGuardband); 2450 2451 dw[10] = 2452 __gen_float(values->YMinClipGuardband); 2453 2454 dw[11] = 2455 __gen_float(values->YMaxClipGuardband); 2456 2457 dw[12] = 2458 __gen_float(values->XMinViewPort); 2459 2460 dw[13] = 2461 __gen_float(values->XMaxViewPort); 2462 2463 dw[14] = 2464 __gen_float(values->YMinViewPort); 2465 2466 dw[15] = 2467 __gen_float(values->YMaxViewPort); 2468} 2469 2470#define GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL_length 1 2471struct GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL { 2472 uint32_t SourceAttribute; 2473 uint32_t SwizzleSelect; 2474#define INPUTATTR 0 2475#define INPUTATTR_FACING 1 2476#define INPUTATTR_W 2 2477#define INPUTATTR_FACING_W 3 2478 uint32_t ConstantSource; 2479#define CONST_0000 0 2480#define CONST_0001_FLOAT 1 2481#define CONST_1111_FLOAT 2 2482#define PRIM_ID 3 2483 uint32_t SwizzleControlMode; 2484 bool ComponentOverrideX; 2485 bool ComponentOverrideY; 2486 bool ComponentOverrideZ; 2487 bool ComponentOverrideW; 2488}; 2489 2490static inline __attribute__((always_inline)) void 2491GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(__attribute__((unused)) __gen_user_data *data, 2492 __attribute__((unused)) void * restrict dst, 2493 __attribute__((unused)) const struct GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL * restrict values) 2494{ 2495 uint32_t * restrict dw = (uint32_t * restrict) dst; 2496 2497 dw[0] = 2498 __gen_uint(values->SourceAttribute, 0, 4) | 2499 __gen_uint(values->SwizzleSelect, 6, 7) | 2500 __gen_uint(values->ConstantSource, 9, 10) | 2501 __gen_uint(values->SwizzleControlMode, 11, 11) | 2502 __gen_uint(values->ComponentOverrideX, 12, 12) | 2503 __gen_uint(values->ComponentOverrideY, 13, 13) | 2504 __gen_uint(values->ComponentOverrideZ, 14, 14) | 2505 __gen_uint(values->ComponentOverrideW, 15, 15); 2506} 2507 2508#define GFX9_SO_DECL_length 1 2509struct GFX9_SO_DECL { 2510 uint32_t ComponentMask; 2511 uint32_t RegisterIndex; 2512 bool HoleFlag; 2513 uint32_t OutputBufferSlot; 2514}; 2515 2516static inline __attribute__((always_inline)) void 2517GFX9_SO_DECL_pack(__attribute__((unused)) __gen_user_data *data, 2518 __attribute__((unused)) void * restrict dst, 2519 __attribute__((unused)) const struct GFX9_SO_DECL * restrict values) 2520{ 2521 uint32_t * restrict dw = (uint32_t * restrict) dst; 2522 2523 dw[0] = 2524 __gen_uint(values->ComponentMask, 0, 3) | 2525 __gen_uint(values->RegisterIndex, 4, 9) | 2526 __gen_uint(values->HoleFlag, 11, 11) | 2527 __gen_uint(values->OutputBufferSlot, 12, 13); 2528} 2529 2530#define GFX9_SO_DECL_ENTRY_length 2 2531struct GFX9_SO_DECL_ENTRY { 2532 struct GFX9_SO_DECL Stream0Decl; 2533 struct GFX9_SO_DECL Stream1Decl; 2534 struct GFX9_SO_DECL Stream2Decl; 2535 struct GFX9_SO_DECL Stream3Decl; 2536}; 2537 2538static inline __attribute__((always_inline)) void 2539GFX9_SO_DECL_ENTRY_pack(__attribute__((unused)) __gen_user_data *data, 2540 __attribute__((unused)) void * restrict dst, 2541 __attribute__((unused)) const struct GFX9_SO_DECL_ENTRY * restrict values) 2542{ 2543 uint32_t * restrict dw = (uint32_t * restrict) dst; 2544 2545 uint32_t v0_0; 2546 GFX9_SO_DECL_pack(data, &v0_0, &values->Stream0Decl); 2547 2548 uint32_t v0_1; 2549 GFX9_SO_DECL_pack(data, &v0_1, &values->Stream1Decl); 2550 2551 dw[0] = 2552 __gen_uint(v0_0, 0, 15) | 2553 __gen_uint(v0_1, 16, 31); 2554 2555 uint32_t v1_0; 2556 GFX9_SO_DECL_pack(data, &v1_0, &values->Stream2Decl); 2557 2558 uint32_t v1_1; 2559 GFX9_SO_DECL_pack(data, &v1_1, &values->Stream3Decl); 2560 2561 dw[1] = 2562 __gen_uint(v1_0, 0, 15) | 2563 __gen_uint(v1_1, 16, 31); 2564} 2565 2566#define GFX9_VDENC_SURFACE_CONTROL_BITS_length 1 2567struct GFX9_VDENC_SURFACE_CONTROL_BITS { 2568 uint32_t MOCS; 2569 uint32_t ArbitrationPriorityControl; 2570#define Highestpriority 0 2571#define Secondhighestpriority 1 2572#define Thirdhighestpriority 2 2573#define Lowestpriority 3 2574 bool MemoryCompressionEnable; 2575 uint32_t MemoryCompressionMode; 2576 uint32_t CacheSelect; 2577 uint32_t TiledResourceMode; 2578#define TRMODE_NONE 0 2579#define TRMODE_TILEYF 1 2580#define TRMODE_TILEYS 2 2581}; 2582 2583static inline __attribute__((always_inline)) void 2584GFX9_VDENC_SURFACE_CONTROL_BITS_pack(__attribute__((unused)) __gen_user_data *data, 2585 __attribute__((unused)) void * restrict dst, 2586 __attribute__((unused)) const struct GFX9_VDENC_SURFACE_CONTROL_BITS * restrict values) 2587{ 2588 uint32_t * restrict dw = (uint32_t * restrict) dst; 2589 2590 dw[0] = 2591 __gen_uint(values->MOCS, 1, 6) | 2592 __gen_uint(values->ArbitrationPriorityControl, 7, 8) | 2593 __gen_uint(values->MemoryCompressionEnable, 9, 9) | 2594 __gen_uint(values->MemoryCompressionMode, 10, 10) | 2595 __gen_uint(values->CacheSelect, 12, 12) | 2596 __gen_uint(values->TiledResourceMode, 13, 14); 2597} 2598 2599#define GFX9_VDENC_PICTURE_length 3 2600struct GFX9_VDENC_PICTURE { 2601 __gen_address_type Address; 2602 struct GFX9_VDENC_SURFACE_CONTROL_BITS PictureFields; 2603}; 2604 2605static inline __attribute__((always_inline)) void 2606GFX9_VDENC_PICTURE_pack(__attribute__((unused)) __gen_user_data *data, 2607 __attribute__((unused)) void * restrict dst, 2608 __attribute__((unused)) const struct GFX9_VDENC_PICTURE * restrict values) 2609{ 2610 uint32_t * restrict dw = (uint32_t * restrict) dst; 2611 2612 const uint64_t v0_address = 2613 __gen_address(data, &dw[0], values->Address, 0, 0, 63); 2614 dw[0] = v0_address; 2615 dw[1] = v0_address >> 32; 2616 2617 GFX9_VDENC_SURFACE_CONTROL_BITS_pack(data, &dw[2], &values->PictureFields); 2618} 2619 2620#define GFX9_VDENC_SURFACE_STATE_FIELDS_length 4 2621struct GFX9_VDENC_SURFACE_STATE_FIELDS { 2622 float CrVCbUPixelOffsetVDirection; 2623 bool SurfaceFormatByteSwizzle; 2624 uint32_t Colorspaceselection; 2625 uint32_t Width; 2626 uint32_t Height; 2627 uint32_t TileWalk; 2628#define TW_XMAJOR 0 2629#define TW_YMAJOR 1 2630 uint32_t TiledSurface; 2631 bool HalfPitchforChroma; 2632 uint32_t SurfacePitch; 2633 uint32_t Format; 2634 uint32_t SurfaceFormat; 2635#define VDENC_YUV422 0 2636#define VDENC_RGBA4444 1 2637#define VDENC_YUV444 2 2638#define VDENC_Y8_UNORM 3 2639#define VDENC_PLANAR_420_8 4 2640 uint32_t YOffsetforUCb; 2641 uint32_t XOffsetforUCb; 2642 uint32_t YOffsetforVCr; 2643 uint32_t XOffsetforVCr; 2644}; 2645 2646static inline __attribute__((always_inline)) void 2647GFX9_VDENC_SURFACE_STATE_FIELDS_pack(__attribute__((unused)) __gen_user_data *data, 2648 __attribute__((unused)) void * restrict dst, 2649 __attribute__((unused)) const struct GFX9_VDENC_SURFACE_STATE_FIELDS * restrict values) 2650{ 2651 uint32_t * restrict dw = (uint32_t * restrict) dst; 2652 2653 dw[0] = 2654 __gen_ufixed(values->CrVCbUPixelOffsetVDirection, 0, 1, 2) | 2655 __gen_uint(values->SurfaceFormatByteSwizzle, 2, 2) | 2656 __gen_uint(values->Colorspaceselection, 3, 3) | 2657 __gen_uint(values->Width, 4, 17) | 2658 __gen_uint(values->Height, 18, 31); 2659 2660 dw[1] = 2661 __gen_uint(values->TileWalk, 0, 0) | 2662 __gen_uint(values->TiledSurface, 1, 1) | 2663 __gen_uint(values->HalfPitchforChroma, 2, 2) | 2664 __gen_uint(values->SurfacePitch, 3, 19) | 2665 __gen_uint(values->Format, 27, 31) | 2666 __gen_uint(values->SurfaceFormat, 28, 31); 2667 2668 dw[2] = 2669 __gen_uint(values->YOffsetforUCb, 0, 14) | 2670 __gen_uint(values->XOffsetforUCb, 16, 30); 2671 2672 dw[3] = 2673 __gen_uint(values->YOffsetforVCr, 0, 15) | 2674 __gen_uint(values->XOffsetforVCr, 16, 28); 2675} 2676 2677#define GFX9_VERTEX_BUFFER_STATE_length 4 2678struct GFX9_VERTEX_BUFFER_STATE { 2679 uint32_t BufferPitch; 2680 bool NullVertexBuffer; 2681 bool AddressModifyEnable; 2682 uint32_t MOCS; 2683 uint32_t VertexBufferIndex; 2684 __gen_address_type BufferStartingAddress; 2685 uint32_t BufferSize; 2686}; 2687 2688static inline __attribute__((always_inline)) void 2689GFX9_VERTEX_BUFFER_STATE_pack(__attribute__((unused)) __gen_user_data *data, 2690 __attribute__((unused)) void * restrict dst, 2691 __attribute__((unused)) const struct GFX9_VERTEX_BUFFER_STATE * restrict values) 2692{ 2693 uint32_t * restrict dw = (uint32_t * restrict) dst; 2694 2695 dw[0] = 2696 __gen_uint(values->BufferPitch, 0, 11) | 2697 __gen_uint(values->NullVertexBuffer, 13, 13) | 2698 __gen_uint(values->AddressModifyEnable, 14, 14) | 2699 __gen_uint(values->MOCS, 16, 22) | 2700 __gen_uint(values->VertexBufferIndex, 26, 31); 2701 2702 const uint64_t v1_address = 2703 __gen_address(data, &dw[1], values->BufferStartingAddress, 0, 0, 63); 2704 dw[1] = v1_address; 2705 dw[2] = v1_address >> 32; 2706 2707 dw[3] = 2708 __gen_uint(values->BufferSize, 0, 31); 2709} 2710 2711#define GFX9_VERTEX_ELEMENT_STATE_length 2 2712struct GFX9_VERTEX_ELEMENT_STATE { 2713 uint32_t SourceElementOffset; 2714 bool EdgeFlagEnable; 2715 uint32_t SourceElementFormat; 2716 bool Valid; 2717 uint32_t VertexBufferIndex; 2718 enum GFX9_3D_Vertex_Component_Control Component3Control; 2719 enum GFX9_3D_Vertex_Component_Control Component2Control; 2720 enum GFX9_3D_Vertex_Component_Control Component1Control; 2721 enum GFX9_3D_Vertex_Component_Control Component0Control; 2722}; 2723 2724static inline __attribute__((always_inline)) void 2725GFX9_VERTEX_ELEMENT_STATE_pack(__attribute__((unused)) __gen_user_data *data, 2726 __attribute__((unused)) void * restrict dst, 2727 __attribute__((unused)) const struct GFX9_VERTEX_ELEMENT_STATE * restrict values) 2728{ 2729 uint32_t * restrict dw = (uint32_t * restrict) dst; 2730 2731 dw[0] = 2732 __gen_uint(values->SourceElementOffset, 0, 11) | 2733 __gen_uint(values->EdgeFlagEnable, 15, 15) | 2734 __gen_uint(values->SourceElementFormat, 16, 24) | 2735 __gen_uint(values->Valid, 25, 25) | 2736 __gen_uint(values->VertexBufferIndex, 26, 31); 2737 2738 dw[1] = 2739 __gen_uint(values->Component3Control, 16, 18) | 2740 __gen_uint(values->Component2Control, 20, 22) | 2741 __gen_uint(values->Component1Control, 24, 26) | 2742 __gen_uint(values->Component0Control, 28, 30); 2743} 2744 2745#define GFX9_3DPRIMITIVE_length 7 2746#define GFX9_3DPRIMITIVE_length_bias 2 2747#define GFX9_3DPRIMITIVE_header \ 2748 .DWordLength = 5, \ 2749 ._3DCommandSubOpcode = 0, \ 2750 ._3DCommandOpcode = 3, \ 2751 .CommandSubType = 3, \ 2752 .CommandType = 3 2753 2754struct GFX9_3DPRIMITIVE { 2755 uint32_t DWordLength; 2756 bool PredicateEnable; 2757 bool UAVCoherencyRequired; 2758 bool IndirectParameterEnable; 2759 uint32_t _3DCommandSubOpcode; 2760 uint32_t _3DCommandOpcode; 2761 uint32_t CommandSubType; 2762 uint32_t CommandType; 2763 enum GFX9_3D_Prim_Topo_Type PrimitiveTopologyType; 2764 uint32_t VertexAccessType; 2765#define SEQUENTIAL 0 2766#define RANDOM 1 2767 bool EndOffsetEnable; 2768 uint32_t VertexCountPerInstance; 2769 uint32_t StartVertexLocation; 2770 uint32_t InstanceCount; 2771 uint32_t StartInstanceLocation; 2772 int32_t BaseVertexLocation; 2773}; 2774 2775static inline __attribute__((always_inline)) void 2776GFX9_3DPRIMITIVE_pack(__attribute__((unused)) __gen_user_data *data, 2777 __attribute__((unused)) void * restrict dst, 2778 __attribute__((unused)) const struct GFX9_3DPRIMITIVE * restrict values) 2779{ 2780 uint32_t * restrict dw = (uint32_t * restrict) dst; 2781 2782 dw[0] = 2783 __gen_uint(values->DWordLength, 0, 7) | 2784 __gen_uint(values->PredicateEnable, 8, 8) | 2785 __gen_uint(values->UAVCoherencyRequired, 9, 9) | 2786 __gen_uint(values->IndirectParameterEnable, 10, 10) | 2787 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 2788 __gen_uint(values->_3DCommandOpcode, 24, 26) | 2789 __gen_uint(values->CommandSubType, 27, 28) | 2790 __gen_uint(values->CommandType, 29, 31); 2791 2792 dw[1] = 2793 __gen_uint(values->PrimitiveTopologyType, 0, 5) | 2794 __gen_uint(values->VertexAccessType, 8, 8) | 2795 __gen_uint(values->EndOffsetEnable, 9, 9); 2796 2797 dw[2] = 2798 __gen_uint(values->VertexCountPerInstance, 0, 31); 2799 2800 dw[3] = 2801 __gen_uint(values->StartVertexLocation, 0, 31); 2802 2803 dw[4] = 2804 __gen_uint(values->InstanceCount, 0, 31); 2805 2806 dw[5] = 2807 __gen_uint(values->StartInstanceLocation, 0, 31); 2808 2809 dw[6] = 2810 __gen_sint(values->BaseVertexLocation, 0, 31); 2811} 2812 2813#define GFX9_3DSTATE_AA_LINE_PARAMETERS_length 3 2814#define GFX9_3DSTATE_AA_LINE_PARAMETERS_length_bias 2 2815#define GFX9_3DSTATE_AA_LINE_PARAMETERS_header \ 2816 .DWordLength = 1, \ 2817 ._3DCommandSubOpcode = 10, \ 2818 ._3DCommandOpcode = 1, \ 2819 .CommandSubType = 3, \ 2820 .CommandType = 3 2821 2822struct GFX9_3DSTATE_AA_LINE_PARAMETERS { 2823 uint32_t DWordLength; 2824 uint32_t _3DCommandSubOpcode; 2825 uint32_t _3DCommandOpcode; 2826 uint32_t CommandSubType; 2827 uint32_t CommandType; 2828 float AACoverageSlope; 2829 float AAPointCoverageSlope; 2830 float AACoverageBias; 2831 float AAPointCoverageBias; 2832 float AACoverageEndCapSlope; 2833 float AAPointCoverageEndCapSlope; 2834 float AACoverageEndCapBias; 2835 float AAPointCoverageEndCapBias; 2836}; 2837 2838static inline __attribute__((always_inline)) void 2839GFX9_3DSTATE_AA_LINE_PARAMETERS_pack(__attribute__((unused)) __gen_user_data *data, 2840 __attribute__((unused)) void * restrict dst, 2841 __attribute__((unused)) const struct GFX9_3DSTATE_AA_LINE_PARAMETERS * restrict values) 2842{ 2843 uint32_t * restrict dw = (uint32_t * restrict) dst; 2844 2845 dw[0] = 2846 __gen_uint(values->DWordLength, 0, 7) | 2847 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 2848 __gen_uint(values->_3DCommandOpcode, 24, 26) | 2849 __gen_uint(values->CommandSubType, 27, 28) | 2850 __gen_uint(values->CommandType, 29, 31); 2851 2852 dw[1] = 2853 __gen_ufixed(values->AACoverageSlope, 0, 7, 8) | 2854 __gen_ufixed(values->AAPointCoverageSlope, 8, 15, 8) | 2855 __gen_ufixed(values->AACoverageBias, 16, 23, 8) | 2856 __gen_ufixed(values->AAPointCoverageBias, 24, 31, 8); 2857 2858 dw[2] = 2859 __gen_ufixed(values->AACoverageEndCapSlope, 0, 7, 8) | 2860 __gen_ufixed(values->AAPointCoverageEndCapSlope, 8, 15, 8) | 2861 __gen_ufixed(values->AACoverageEndCapBias, 16, 23, 8) | 2862 __gen_ufixed(values->AAPointCoverageEndCapBias, 24, 31, 8); 2863} 2864 2865#define GFX9_3DSTATE_BINDING_TABLE_EDIT_DS_length_bias 2 2866#define GFX9_3DSTATE_BINDING_TABLE_EDIT_DS_header\ 2867 .DWordLength = 0, \ 2868 ._3DCommandSubOpcode = 70, \ 2869 ._3DCommandOpcode = 0, \ 2870 .CommandSubType = 3, \ 2871 .CommandType = 3 2872 2873struct GFX9_3DSTATE_BINDING_TABLE_EDIT_DS { 2874 uint32_t DWordLength; 2875 uint32_t _3DCommandSubOpcode; 2876 uint32_t _3DCommandOpcode; 2877 uint32_t CommandSubType; 2878 uint32_t CommandType; 2879 uint32_t BindingTableEditTarget; 2880#define AllCores 3 2881#define Core1 2 2882#define Core0 1 2883 uint32_t BindingTableBlockClear; 2884 /* variable length fields follow */ 2885}; 2886 2887static inline __attribute__((always_inline)) void 2888GFX9_3DSTATE_BINDING_TABLE_EDIT_DS_pack(__attribute__((unused)) __gen_user_data *data, 2889 __attribute__((unused)) void * restrict dst, 2890 __attribute__((unused)) const struct GFX9_3DSTATE_BINDING_TABLE_EDIT_DS * restrict values) 2891{ 2892 uint32_t * restrict dw = (uint32_t * restrict) dst; 2893 2894 dw[0] = 2895 __gen_uint(values->DWordLength, 0, 8) | 2896 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 2897 __gen_uint(values->_3DCommandOpcode, 24, 26) | 2898 __gen_uint(values->CommandSubType, 27, 28) | 2899 __gen_uint(values->CommandType, 29, 31); 2900 2901 dw[1] = 2902 __gen_uint(values->BindingTableEditTarget, 0, 1) | 2903 __gen_uint(values->BindingTableBlockClear, 16, 31); 2904} 2905 2906#define GFX9_3DSTATE_BINDING_TABLE_EDIT_GS_length_bias 2 2907#define GFX9_3DSTATE_BINDING_TABLE_EDIT_GS_header\ 2908 .DWordLength = 0, \ 2909 ._3DCommandSubOpcode = 68, \ 2910 ._3DCommandOpcode = 0, \ 2911 .CommandSubType = 3, \ 2912 .CommandType = 3 2913 2914struct GFX9_3DSTATE_BINDING_TABLE_EDIT_GS { 2915 uint32_t DWordLength; 2916 uint32_t _3DCommandSubOpcode; 2917 uint32_t _3DCommandOpcode; 2918 uint32_t CommandSubType; 2919 uint32_t CommandType; 2920 uint32_t BindingTableEditTarget; 2921#define AllCores 3 2922#define Core1 2 2923#define Core0 1 2924 uint32_t BindingTableBlockClear; 2925 /* variable length fields follow */ 2926}; 2927 2928static inline __attribute__((always_inline)) void 2929GFX9_3DSTATE_BINDING_TABLE_EDIT_GS_pack(__attribute__((unused)) __gen_user_data *data, 2930 __attribute__((unused)) void * restrict dst, 2931 __attribute__((unused)) const struct GFX9_3DSTATE_BINDING_TABLE_EDIT_GS * restrict values) 2932{ 2933 uint32_t * restrict dw = (uint32_t * restrict) dst; 2934 2935 dw[0] = 2936 __gen_uint(values->DWordLength, 0, 8) | 2937 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 2938 __gen_uint(values->_3DCommandOpcode, 24, 26) | 2939 __gen_uint(values->CommandSubType, 27, 28) | 2940 __gen_uint(values->CommandType, 29, 31); 2941 2942 dw[1] = 2943 __gen_uint(values->BindingTableEditTarget, 0, 1) | 2944 __gen_uint(values->BindingTableBlockClear, 16, 31); 2945} 2946 2947#define GFX9_3DSTATE_BINDING_TABLE_EDIT_HS_length_bias 2 2948#define GFX9_3DSTATE_BINDING_TABLE_EDIT_HS_header\ 2949 .DWordLength = 0, \ 2950 ._3DCommandSubOpcode = 69, \ 2951 ._3DCommandOpcode = 0, \ 2952 .CommandSubType = 3, \ 2953 .CommandType = 3 2954 2955struct GFX9_3DSTATE_BINDING_TABLE_EDIT_HS { 2956 uint32_t DWordLength; 2957 uint32_t _3DCommandSubOpcode; 2958 uint32_t _3DCommandOpcode; 2959 uint32_t CommandSubType; 2960 uint32_t CommandType; 2961 uint32_t BindingTableEditTarget; 2962#define AllCores 3 2963#define Core1 2 2964#define Core0 1 2965 uint32_t BindingTableBlockClear; 2966 /* variable length fields follow */ 2967}; 2968 2969static inline __attribute__((always_inline)) void 2970GFX9_3DSTATE_BINDING_TABLE_EDIT_HS_pack(__attribute__((unused)) __gen_user_data *data, 2971 __attribute__((unused)) void * restrict dst, 2972 __attribute__((unused)) const struct GFX9_3DSTATE_BINDING_TABLE_EDIT_HS * restrict values) 2973{ 2974 uint32_t * restrict dw = (uint32_t * restrict) dst; 2975 2976 dw[0] = 2977 __gen_uint(values->DWordLength, 0, 8) | 2978 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 2979 __gen_uint(values->_3DCommandOpcode, 24, 26) | 2980 __gen_uint(values->CommandSubType, 27, 28) | 2981 __gen_uint(values->CommandType, 29, 31); 2982 2983 dw[1] = 2984 __gen_uint(values->BindingTableEditTarget, 0, 1) | 2985 __gen_uint(values->BindingTableBlockClear, 16, 31); 2986} 2987 2988#define GFX9_3DSTATE_BINDING_TABLE_EDIT_PS_length_bias 2 2989#define GFX9_3DSTATE_BINDING_TABLE_EDIT_PS_header\ 2990 .DWordLength = 0, \ 2991 ._3DCommandSubOpcode = 71, \ 2992 ._3DCommandOpcode = 0, \ 2993 .CommandSubType = 3, \ 2994 .CommandType = 3 2995 2996struct GFX9_3DSTATE_BINDING_TABLE_EDIT_PS { 2997 uint32_t DWordLength; 2998 uint32_t _3DCommandSubOpcode; 2999 uint32_t _3DCommandOpcode; 3000 uint32_t CommandSubType; 3001 uint32_t CommandType; 3002 uint32_t BindingTableEditTarget; 3003#define AllCores 3 3004#define Core1 2 3005#define Core0 1 3006 uint32_t BindingTableBlockClear; 3007 /* variable length fields follow */ 3008}; 3009 3010static inline __attribute__((always_inline)) void 3011GFX9_3DSTATE_BINDING_TABLE_EDIT_PS_pack(__attribute__((unused)) __gen_user_data *data, 3012 __attribute__((unused)) void * restrict dst, 3013 __attribute__((unused)) const struct GFX9_3DSTATE_BINDING_TABLE_EDIT_PS * restrict values) 3014{ 3015 uint32_t * restrict dw = (uint32_t * restrict) dst; 3016 3017 dw[0] = 3018 __gen_uint(values->DWordLength, 0, 8) | 3019 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3020 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3021 __gen_uint(values->CommandSubType, 27, 28) | 3022 __gen_uint(values->CommandType, 29, 31); 3023 3024 dw[1] = 3025 __gen_uint(values->BindingTableEditTarget, 0, 1) | 3026 __gen_uint(values->BindingTableBlockClear, 16, 31); 3027} 3028 3029#define GFX9_3DSTATE_BINDING_TABLE_EDIT_VS_length_bias 2 3030#define GFX9_3DSTATE_BINDING_TABLE_EDIT_VS_header\ 3031 .DWordLength = 0, \ 3032 ._3DCommandSubOpcode = 67, \ 3033 ._3DCommandOpcode = 0, \ 3034 .CommandSubType = 3, \ 3035 .CommandType = 3 3036 3037struct GFX9_3DSTATE_BINDING_TABLE_EDIT_VS { 3038 uint32_t DWordLength; 3039 uint32_t _3DCommandSubOpcode; 3040 uint32_t _3DCommandOpcode; 3041 uint32_t CommandSubType; 3042 uint32_t CommandType; 3043 uint32_t BindingTableEditTarget; 3044#define AllCores 3 3045#define Core1 2 3046#define Core0 1 3047 uint32_t BindingTableBlockClear; 3048 /* variable length fields follow */ 3049}; 3050 3051static inline __attribute__((always_inline)) void 3052GFX9_3DSTATE_BINDING_TABLE_EDIT_VS_pack(__attribute__((unused)) __gen_user_data *data, 3053 __attribute__((unused)) void * restrict dst, 3054 __attribute__((unused)) const struct GFX9_3DSTATE_BINDING_TABLE_EDIT_VS * restrict values) 3055{ 3056 uint32_t * restrict dw = (uint32_t * restrict) dst; 3057 3058 dw[0] = 3059 __gen_uint(values->DWordLength, 0, 8) | 3060 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3061 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3062 __gen_uint(values->CommandSubType, 27, 28) | 3063 __gen_uint(values->CommandType, 29, 31); 3064 3065 dw[1] = 3066 __gen_uint(values->BindingTableEditTarget, 0, 1) | 3067 __gen_uint(values->BindingTableBlockClear, 16, 31); 3068} 3069 3070#define GFX9_3DSTATE_BINDING_TABLE_POINTERS_DS_length 2 3071#define GFX9_3DSTATE_BINDING_TABLE_POINTERS_DS_length_bias 2 3072#define GFX9_3DSTATE_BINDING_TABLE_POINTERS_DS_header\ 3073 .DWordLength = 0, \ 3074 ._3DCommandSubOpcode = 40, \ 3075 ._3DCommandOpcode = 0, \ 3076 .CommandSubType = 3, \ 3077 .CommandType = 3 3078 3079struct GFX9_3DSTATE_BINDING_TABLE_POINTERS_DS { 3080 uint32_t DWordLength; 3081 uint32_t _3DCommandSubOpcode; 3082 uint32_t _3DCommandOpcode; 3083 uint32_t CommandSubType; 3084 uint32_t CommandType; 3085 uint64_t PointertoDSBindingTable; 3086}; 3087 3088static inline __attribute__((always_inline)) void 3089GFX9_3DSTATE_BINDING_TABLE_POINTERS_DS_pack(__attribute__((unused)) __gen_user_data *data, 3090 __attribute__((unused)) void * restrict dst, 3091 __attribute__((unused)) const struct GFX9_3DSTATE_BINDING_TABLE_POINTERS_DS * restrict values) 3092{ 3093 uint32_t * restrict dw = (uint32_t * restrict) dst; 3094 3095 dw[0] = 3096 __gen_uint(values->DWordLength, 0, 7) | 3097 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3098 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3099 __gen_uint(values->CommandSubType, 27, 28) | 3100 __gen_uint(values->CommandType, 29, 31); 3101 3102 dw[1] = 3103 __gen_offset(values->PointertoDSBindingTable, 5, 15); 3104} 3105 3106#define GFX9_3DSTATE_BINDING_TABLE_POINTERS_GS_length 2 3107#define GFX9_3DSTATE_BINDING_TABLE_POINTERS_GS_length_bias 2 3108#define GFX9_3DSTATE_BINDING_TABLE_POINTERS_GS_header\ 3109 .DWordLength = 0, \ 3110 ._3DCommandSubOpcode = 41, \ 3111 ._3DCommandOpcode = 0, \ 3112 .CommandSubType = 3, \ 3113 .CommandType = 3 3114 3115struct GFX9_3DSTATE_BINDING_TABLE_POINTERS_GS { 3116 uint32_t DWordLength; 3117 uint32_t _3DCommandSubOpcode; 3118 uint32_t _3DCommandOpcode; 3119 uint32_t CommandSubType; 3120 uint32_t CommandType; 3121 uint64_t PointertoGSBindingTable; 3122}; 3123 3124static inline __attribute__((always_inline)) void 3125GFX9_3DSTATE_BINDING_TABLE_POINTERS_GS_pack(__attribute__((unused)) __gen_user_data *data, 3126 __attribute__((unused)) void * restrict dst, 3127 __attribute__((unused)) const struct GFX9_3DSTATE_BINDING_TABLE_POINTERS_GS * restrict values) 3128{ 3129 uint32_t * restrict dw = (uint32_t * restrict) dst; 3130 3131 dw[0] = 3132 __gen_uint(values->DWordLength, 0, 7) | 3133 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3134 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3135 __gen_uint(values->CommandSubType, 27, 28) | 3136 __gen_uint(values->CommandType, 29, 31); 3137 3138 dw[1] = 3139 __gen_offset(values->PointertoGSBindingTable, 5, 15); 3140} 3141 3142#define GFX9_3DSTATE_BINDING_TABLE_POINTERS_HS_length 2 3143#define GFX9_3DSTATE_BINDING_TABLE_POINTERS_HS_length_bias 2 3144#define GFX9_3DSTATE_BINDING_TABLE_POINTERS_HS_header\ 3145 .DWordLength = 0, \ 3146 ._3DCommandSubOpcode = 39, \ 3147 ._3DCommandOpcode = 0, \ 3148 .CommandSubType = 3, \ 3149 .CommandType = 3 3150 3151struct GFX9_3DSTATE_BINDING_TABLE_POINTERS_HS { 3152 uint32_t DWordLength; 3153 uint32_t _3DCommandSubOpcode; 3154 uint32_t _3DCommandOpcode; 3155 uint32_t CommandSubType; 3156 uint32_t CommandType; 3157 uint64_t PointertoHSBindingTable; 3158}; 3159 3160static inline __attribute__((always_inline)) void 3161GFX9_3DSTATE_BINDING_TABLE_POINTERS_HS_pack(__attribute__((unused)) __gen_user_data *data, 3162 __attribute__((unused)) void * restrict dst, 3163 __attribute__((unused)) const struct GFX9_3DSTATE_BINDING_TABLE_POINTERS_HS * restrict values) 3164{ 3165 uint32_t * restrict dw = (uint32_t * restrict) dst; 3166 3167 dw[0] = 3168 __gen_uint(values->DWordLength, 0, 7) | 3169 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3170 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3171 __gen_uint(values->CommandSubType, 27, 28) | 3172 __gen_uint(values->CommandType, 29, 31); 3173 3174 dw[1] = 3175 __gen_offset(values->PointertoHSBindingTable, 5, 15); 3176} 3177 3178#define GFX9_3DSTATE_BINDING_TABLE_POINTERS_PS_length 2 3179#define GFX9_3DSTATE_BINDING_TABLE_POINTERS_PS_length_bias 2 3180#define GFX9_3DSTATE_BINDING_TABLE_POINTERS_PS_header\ 3181 .DWordLength = 0, \ 3182 ._3DCommandSubOpcode = 42, \ 3183 ._3DCommandOpcode = 0, \ 3184 .CommandSubType = 3, \ 3185 .CommandType = 3 3186 3187struct GFX9_3DSTATE_BINDING_TABLE_POINTERS_PS { 3188 uint32_t DWordLength; 3189 uint32_t _3DCommandSubOpcode; 3190 uint32_t _3DCommandOpcode; 3191 uint32_t CommandSubType; 3192 uint32_t CommandType; 3193 uint64_t PointertoPSBindingTable; 3194}; 3195 3196static inline __attribute__((always_inline)) void 3197GFX9_3DSTATE_BINDING_TABLE_POINTERS_PS_pack(__attribute__((unused)) __gen_user_data *data, 3198 __attribute__((unused)) void * restrict dst, 3199 __attribute__((unused)) const struct GFX9_3DSTATE_BINDING_TABLE_POINTERS_PS * restrict values) 3200{ 3201 uint32_t * restrict dw = (uint32_t * restrict) dst; 3202 3203 dw[0] = 3204 __gen_uint(values->DWordLength, 0, 7) | 3205 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3206 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3207 __gen_uint(values->CommandSubType, 27, 28) | 3208 __gen_uint(values->CommandType, 29, 31); 3209 3210 dw[1] = 3211 __gen_offset(values->PointertoPSBindingTable, 5, 15); 3212} 3213 3214#define GFX9_3DSTATE_BINDING_TABLE_POINTERS_VS_length 2 3215#define GFX9_3DSTATE_BINDING_TABLE_POINTERS_VS_length_bias 2 3216#define GFX9_3DSTATE_BINDING_TABLE_POINTERS_VS_header\ 3217 .DWordLength = 0, \ 3218 ._3DCommandSubOpcode = 38, \ 3219 ._3DCommandOpcode = 0, \ 3220 .CommandSubType = 3, \ 3221 .CommandType = 3 3222 3223struct GFX9_3DSTATE_BINDING_TABLE_POINTERS_VS { 3224 uint32_t DWordLength; 3225 uint32_t _3DCommandSubOpcode; 3226 uint32_t _3DCommandOpcode; 3227 uint32_t CommandSubType; 3228 uint32_t CommandType; 3229 uint64_t PointertoVSBindingTable; 3230}; 3231 3232static inline __attribute__((always_inline)) void 3233GFX9_3DSTATE_BINDING_TABLE_POINTERS_VS_pack(__attribute__((unused)) __gen_user_data *data, 3234 __attribute__((unused)) void * restrict dst, 3235 __attribute__((unused)) const struct GFX9_3DSTATE_BINDING_TABLE_POINTERS_VS * restrict values) 3236{ 3237 uint32_t * restrict dw = (uint32_t * restrict) dst; 3238 3239 dw[0] = 3240 __gen_uint(values->DWordLength, 0, 7) | 3241 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3242 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3243 __gen_uint(values->CommandSubType, 27, 28) | 3244 __gen_uint(values->CommandType, 29, 31); 3245 3246 dw[1] = 3247 __gen_offset(values->PointertoVSBindingTable, 5, 15); 3248} 3249 3250#define GFX9_3DSTATE_BINDING_TABLE_POOL_ALLOC_length 4 3251#define GFX9_3DSTATE_BINDING_TABLE_POOL_ALLOC_length_bias 2 3252#define GFX9_3DSTATE_BINDING_TABLE_POOL_ALLOC_header\ 3253 .DWordLength = 2, \ 3254 ._3DCommandSubOpcode = 25, \ 3255 ._3DCommandOpcode = 1, \ 3256 .CommandSubType = 3, \ 3257 .CommandType = 3 3258 3259struct GFX9_3DSTATE_BINDING_TABLE_POOL_ALLOC { 3260 uint32_t DWordLength; 3261 uint32_t _3DCommandSubOpcode; 3262 uint32_t _3DCommandOpcode; 3263 uint32_t CommandSubType; 3264 uint32_t CommandType; 3265 uint32_t MOCS; 3266 bool BindingTablePoolEnable; 3267 __gen_address_type BindingTablePoolBaseAddress; 3268 uint32_t BindingTablePoolBufferSize; 3269#define NoValidData 0 3270}; 3271 3272static inline __attribute__((always_inline)) void 3273GFX9_3DSTATE_BINDING_TABLE_POOL_ALLOC_pack(__attribute__((unused)) __gen_user_data *data, 3274 __attribute__((unused)) void * restrict dst, 3275 __attribute__((unused)) const struct GFX9_3DSTATE_BINDING_TABLE_POOL_ALLOC * restrict values) 3276{ 3277 uint32_t * restrict dw = (uint32_t * restrict) dst; 3278 3279 dw[0] = 3280 __gen_uint(values->DWordLength, 0, 7) | 3281 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3282 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3283 __gen_uint(values->CommandSubType, 27, 28) | 3284 __gen_uint(values->CommandType, 29, 31); 3285 3286 const uint64_t v1 = 3287 __gen_uint(values->MOCS, 0, 6) | 3288 __gen_uint(values->BindingTablePoolEnable, 11, 11); 3289 const uint64_t v1_address = 3290 __gen_address(data, &dw[1], values->BindingTablePoolBaseAddress, v1, 12, 63); 3291 dw[1] = v1_address; 3292 dw[2] = (v1_address >> 32) | (v1 >> 32); 3293 3294 dw[3] = 3295 __gen_uint(values->BindingTablePoolBufferSize, 12, 31); 3296} 3297 3298#define GFX9_3DSTATE_BLEND_STATE_POINTERS_length 2 3299#define GFX9_3DSTATE_BLEND_STATE_POINTERS_length_bias 2 3300#define GFX9_3DSTATE_BLEND_STATE_POINTERS_header\ 3301 .DWordLength = 0, \ 3302 ._3DCommandSubOpcode = 36, \ 3303 ._3DCommandOpcode = 0, \ 3304 .CommandSubType = 3, \ 3305 .CommandType = 3 3306 3307struct GFX9_3DSTATE_BLEND_STATE_POINTERS { 3308 uint32_t DWordLength; 3309 uint32_t _3DCommandSubOpcode; 3310 uint32_t _3DCommandOpcode; 3311 uint32_t CommandSubType; 3312 uint32_t CommandType; 3313 bool BlendStatePointerValid; 3314 uint64_t BlendStatePointer; 3315}; 3316 3317static inline __attribute__((always_inline)) void 3318GFX9_3DSTATE_BLEND_STATE_POINTERS_pack(__attribute__((unused)) __gen_user_data *data, 3319 __attribute__((unused)) void * restrict dst, 3320 __attribute__((unused)) const struct GFX9_3DSTATE_BLEND_STATE_POINTERS * restrict values) 3321{ 3322 uint32_t * restrict dw = (uint32_t * restrict) dst; 3323 3324 dw[0] = 3325 __gen_uint(values->DWordLength, 0, 7) | 3326 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3327 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3328 __gen_uint(values->CommandSubType, 27, 28) | 3329 __gen_uint(values->CommandType, 29, 31); 3330 3331 dw[1] = 3332 __gen_uint(values->BlendStatePointerValid, 0, 0) | 3333 __gen_offset(values->BlendStatePointer, 6, 31); 3334} 3335 3336#define GFX9_3DSTATE_CC_STATE_POINTERS_length 2 3337#define GFX9_3DSTATE_CC_STATE_POINTERS_length_bias 2 3338#define GFX9_3DSTATE_CC_STATE_POINTERS_header \ 3339 .DWordLength = 0, \ 3340 ._3DCommandSubOpcode = 14, \ 3341 ._3DCommandOpcode = 0, \ 3342 .CommandSubType = 3, \ 3343 .CommandType = 3 3344 3345struct GFX9_3DSTATE_CC_STATE_POINTERS { 3346 uint32_t DWordLength; 3347 uint32_t _3DCommandSubOpcode; 3348 uint32_t _3DCommandOpcode; 3349 uint32_t CommandSubType; 3350 uint32_t CommandType; 3351 bool ColorCalcStatePointerValid; 3352 uint64_t ColorCalcStatePointer; 3353}; 3354 3355static inline __attribute__((always_inline)) void 3356GFX9_3DSTATE_CC_STATE_POINTERS_pack(__attribute__((unused)) __gen_user_data *data, 3357 __attribute__((unused)) void * restrict dst, 3358 __attribute__((unused)) const struct GFX9_3DSTATE_CC_STATE_POINTERS * restrict values) 3359{ 3360 uint32_t * restrict dw = (uint32_t * restrict) dst; 3361 3362 dw[0] = 3363 __gen_uint(values->DWordLength, 0, 7) | 3364 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3365 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3366 __gen_uint(values->CommandSubType, 27, 28) | 3367 __gen_uint(values->CommandType, 29, 31); 3368 3369 dw[1] = 3370 __gen_uint(values->ColorCalcStatePointerValid, 0, 0) | 3371 __gen_offset(values->ColorCalcStatePointer, 6, 31); 3372} 3373 3374#define GFX9_3DSTATE_CHROMA_KEY_length 4 3375#define GFX9_3DSTATE_CHROMA_KEY_length_bias 2 3376#define GFX9_3DSTATE_CHROMA_KEY_header \ 3377 .DWordLength = 2, \ 3378 ._3DCommandSubOpcode = 4, \ 3379 ._3DCommandOpcode = 1, \ 3380 .CommandSubType = 3, \ 3381 .CommandType = 3 3382 3383struct GFX9_3DSTATE_CHROMA_KEY { 3384 uint32_t DWordLength; 3385 uint32_t _3DCommandSubOpcode; 3386 uint32_t _3DCommandOpcode; 3387 uint32_t CommandSubType; 3388 uint32_t CommandType; 3389 uint32_t ChromaKeyTableIndex; 3390 uint32_t ChromaKeyLowValue; 3391 uint32_t ChromaKeyHighValue; 3392}; 3393 3394static inline __attribute__((always_inline)) void 3395GFX9_3DSTATE_CHROMA_KEY_pack(__attribute__((unused)) __gen_user_data *data, 3396 __attribute__((unused)) void * restrict dst, 3397 __attribute__((unused)) const struct GFX9_3DSTATE_CHROMA_KEY * restrict values) 3398{ 3399 uint32_t * restrict dw = (uint32_t * restrict) dst; 3400 3401 dw[0] = 3402 __gen_uint(values->DWordLength, 0, 7) | 3403 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3404 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3405 __gen_uint(values->CommandSubType, 27, 28) | 3406 __gen_uint(values->CommandType, 29, 31); 3407 3408 dw[1] = 3409 __gen_uint(values->ChromaKeyTableIndex, 30, 31); 3410 3411 dw[2] = 3412 __gen_uint(values->ChromaKeyLowValue, 0, 31); 3413 3414 dw[3] = 3415 __gen_uint(values->ChromaKeyHighValue, 0, 31); 3416} 3417 3418#define GFX9_3DSTATE_CLEAR_PARAMS_length 3 3419#define GFX9_3DSTATE_CLEAR_PARAMS_length_bias 2 3420#define GFX9_3DSTATE_CLEAR_PARAMS_header \ 3421 .DWordLength = 1, \ 3422 ._3DCommandSubOpcode = 4, \ 3423 ._3DCommandOpcode = 0, \ 3424 .CommandSubType = 3, \ 3425 .CommandType = 3 3426 3427struct GFX9_3DSTATE_CLEAR_PARAMS { 3428 uint32_t DWordLength; 3429 uint32_t _3DCommandSubOpcode; 3430 uint32_t _3DCommandOpcode; 3431 uint32_t CommandSubType; 3432 uint32_t CommandType; 3433 float DepthClearValue; 3434 bool DepthClearValueValid; 3435}; 3436 3437static inline __attribute__((always_inline)) void 3438GFX9_3DSTATE_CLEAR_PARAMS_pack(__attribute__((unused)) __gen_user_data *data, 3439 __attribute__((unused)) void * restrict dst, 3440 __attribute__((unused)) const struct GFX9_3DSTATE_CLEAR_PARAMS * restrict values) 3441{ 3442 uint32_t * restrict dw = (uint32_t * restrict) dst; 3443 3444 dw[0] = 3445 __gen_uint(values->DWordLength, 0, 7) | 3446 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3447 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3448 __gen_uint(values->CommandSubType, 27, 28) | 3449 __gen_uint(values->CommandType, 29, 31); 3450 3451 dw[1] = 3452 __gen_float(values->DepthClearValue); 3453 3454 dw[2] = 3455 __gen_uint(values->DepthClearValueValid, 0, 0); 3456} 3457 3458#define GFX9_3DSTATE_CLIP_length 4 3459#define GFX9_3DSTATE_CLIP_length_bias 2 3460#define GFX9_3DSTATE_CLIP_header \ 3461 .DWordLength = 2, \ 3462 ._3DCommandSubOpcode = 18, \ 3463 ._3DCommandOpcode = 0, \ 3464 .CommandSubType = 3, \ 3465 .CommandType = 3 3466 3467struct GFX9_3DSTATE_CLIP { 3468 uint32_t DWordLength; 3469 uint32_t _3DCommandSubOpcode; 3470 uint32_t _3DCommandOpcode; 3471 uint32_t CommandSubType; 3472 uint32_t CommandType; 3473 uint32_t UserClipDistanceCullTestEnableBitmask; 3474 bool StatisticsEnable; 3475 bool ForceClipMode; 3476 bool ForceUserClipDistanceClipTestEnableBitmask; 3477 bool EarlyCullEnable; 3478 uint32_t VertexSubPixelPrecisionSelect; 3479#define _8Bit 0 3480#define _4Bit 1 3481 bool ForceUserClipDistanceCullTestEnableBitmask; 3482 uint32_t TriangleFanProvokingVertexSelect; 3483 uint32_t LineStripListProvokingVertexSelect; 3484 uint32_t TriangleStripListProvokingVertexSelect; 3485 bool NonPerspectiveBarycentricEnable; 3486 bool PerspectiveDivideDisable; 3487 uint32_t ClipMode; 3488#define CLIPMODE_NORMAL 0 3489#define CLIPMODE_REJECT_ALL 3 3490#define CLIPMODE_ACCEPT_ALL 4 3491 uint32_t UserClipDistanceClipTestEnableBitmask; 3492 bool GuardbandClipTestEnable; 3493 bool ViewportXYClipTestEnable; 3494 uint32_t APIMode; 3495#define APIMODE_OGL 0 3496#define APIMODE_D3D 1 3497 bool ClipEnable; 3498 uint32_t MaximumVPIndex; 3499 bool ForceZeroRTAIndexEnable; 3500 float MaximumPointWidth; 3501 float MinimumPointWidth; 3502}; 3503 3504static inline __attribute__((always_inline)) void 3505GFX9_3DSTATE_CLIP_pack(__attribute__((unused)) __gen_user_data *data, 3506 __attribute__((unused)) void * restrict dst, 3507 __attribute__((unused)) const struct GFX9_3DSTATE_CLIP * restrict values) 3508{ 3509 uint32_t * restrict dw = (uint32_t * restrict) dst; 3510 3511 dw[0] = 3512 __gen_uint(values->DWordLength, 0, 7) | 3513 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3514 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3515 __gen_uint(values->CommandSubType, 27, 28) | 3516 __gen_uint(values->CommandType, 29, 31); 3517 3518 dw[1] = 3519 __gen_uint(values->UserClipDistanceCullTestEnableBitmask, 0, 7) | 3520 __gen_uint(values->StatisticsEnable, 10, 10) | 3521 __gen_uint(values->ForceClipMode, 16, 16) | 3522 __gen_uint(values->ForceUserClipDistanceClipTestEnableBitmask, 17, 17) | 3523 __gen_uint(values->EarlyCullEnable, 18, 18) | 3524 __gen_uint(values->VertexSubPixelPrecisionSelect, 19, 19) | 3525 __gen_uint(values->ForceUserClipDistanceCullTestEnableBitmask, 20, 20); 3526 3527 dw[2] = 3528 __gen_uint(values->TriangleFanProvokingVertexSelect, 0, 1) | 3529 __gen_uint(values->LineStripListProvokingVertexSelect, 2, 3) | 3530 __gen_uint(values->TriangleStripListProvokingVertexSelect, 4, 5) | 3531 __gen_uint(values->NonPerspectiveBarycentricEnable, 8, 8) | 3532 __gen_uint(values->PerspectiveDivideDisable, 9, 9) | 3533 __gen_uint(values->ClipMode, 13, 15) | 3534 __gen_uint(values->UserClipDistanceClipTestEnableBitmask, 16, 23) | 3535 __gen_uint(values->GuardbandClipTestEnable, 26, 26) | 3536 __gen_uint(values->ViewportXYClipTestEnable, 28, 28) | 3537 __gen_uint(values->APIMode, 30, 30) | 3538 __gen_uint(values->ClipEnable, 31, 31); 3539 3540 dw[3] = 3541 __gen_uint(values->MaximumVPIndex, 0, 3) | 3542 __gen_uint(values->ForceZeroRTAIndexEnable, 5, 5) | 3543 __gen_ufixed(values->MaximumPointWidth, 6, 16, 3) | 3544 __gen_ufixed(values->MinimumPointWidth, 17, 27, 3); 3545} 3546 3547#define GFX9_3DSTATE_CONSTANT_DS_length 11 3548#define GFX9_3DSTATE_CONSTANT_DS_length_bias 2 3549#define GFX9_3DSTATE_CONSTANT_DS_header \ 3550 .DWordLength = 9, \ 3551 ._3DCommandSubOpcode = 26, \ 3552 ._3DCommandOpcode = 0, \ 3553 .CommandSubType = 3, \ 3554 .CommandType = 3 3555 3556struct GFX9_3DSTATE_CONSTANT_DS { 3557 uint32_t DWordLength; 3558 uint32_t MOCS; 3559 uint32_t _3DCommandSubOpcode; 3560 uint32_t _3DCommandOpcode; 3561 uint32_t CommandSubType; 3562 uint32_t CommandType; 3563 struct GFX9_3DSTATE_CONSTANT_BODY ConstantBody; 3564}; 3565 3566static inline __attribute__((always_inline)) void 3567GFX9_3DSTATE_CONSTANT_DS_pack(__attribute__((unused)) __gen_user_data *data, 3568 __attribute__((unused)) void * restrict dst, 3569 __attribute__((unused)) const struct GFX9_3DSTATE_CONSTANT_DS * restrict values) 3570{ 3571 uint32_t * restrict dw = (uint32_t * restrict) dst; 3572 3573 dw[0] = 3574 __gen_uint(values->DWordLength, 0, 7) | 3575 __gen_uint(values->MOCS, 8, 14) | 3576 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3577 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3578 __gen_uint(values->CommandSubType, 27, 28) | 3579 __gen_uint(values->CommandType, 29, 31); 3580 3581 GFX9_3DSTATE_CONSTANT_BODY_pack(data, &dw[1], &values->ConstantBody); 3582} 3583 3584#define GFX9_3DSTATE_CONSTANT_GS_length 11 3585#define GFX9_3DSTATE_CONSTANT_GS_length_bias 2 3586#define GFX9_3DSTATE_CONSTANT_GS_header \ 3587 .DWordLength = 9, \ 3588 ._3DCommandSubOpcode = 22, \ 3589 ._3DCommandOpcode = 0, \ 3590 .CommandSubType = 3, \ 3591 .CommandType = 3 3592 3593struct GFX9_3DSTATE_CONSTANT_GS { 3594 uint32_t DWordLength; 3595 uint32_t MOCS; 3596 uint32_t _3DCommandSubOpcode; 3597 uint32_t _3DCommandOpcode; 3598 uint32_t CommandSubType; 3599 uint32_t CommandType; 3600 struct GFX9_3DSTATE_CONSTANT_BODY ConstantBody; 3601}; 3602 3603static inline __attribute__((always_inline)) void 3604GFX9_3DSTATE_CONSTANT_GS_pack(__attribute__((unused)) __gen_user_data *data, 3605 __attribute__((unused)) void * restrict dst, 3606 __attribute__((unused)) const struct GFX9_3DSTATE_CONSTANT_GS * restrict values) 3607{ 3608 uint32_t * restrict dw = (uint32_t * restrict) dst; 3609 3610 dw[0] = 3611 __gen_uint(values->DWordLength, 0, 7) | 3612 __gen_uint(values->MOCS, 8, 14) | 3613 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3614 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3615 __gen_uint(values->CommandSubType, 27, 28) | 3616 __gen_uint(values->CommandType, 29, 31); 3617 3618 GFX9_3DSTATE_CONSTANT_BODY_pack(data, &dw[1], &values->ConstantBody); 3619} 3620 3621#define GFX9_3DSTATE_CONSTANT_HS_length 11 3622#define GFX9_3DSTATE_CONSTANT_HS_length_bias 2 3623#define GFX9_3DSTATE_CONSTANT_HS_header \ 3624 .DWordLength = 9, \ 3625 ._3DCommandSubOpcode = 25, \ 3626 ._3DCommandOpcode = 0, \ 3627 .CommandSubType = 3, \ 3628 .CommandType = 3 3629 3630struct GFX9_3DSTATE_CONSTANT_HS { 3631 uint32_t DWordLength; 3632 uint32_t MOCS; 3633 uint32_t _3DCommandSubOpcode; 3634 uint32_t _3DCommandOpcode; 3635 uint32_t CommandSubType; 3636 uint32_t CommandType; 3637 struct GFX9_3DSTATE_CONSTANT_BODY ConstantBody; 3638}; 3639 3640static inline __attribute__((always_inline)) void 3641GFX9_3DSTATE_CONSTANT_HS_pack(__attribute__((unused)) __gen_user_data *data, 3642 __attribute__((unused)) void * restrict dst, 3643 __attribute__((unused)) const struct GFX9_3DSTATE_CONSTANT_HS * restrict values) 3644{ 3645 uint32_t * restrict dw = (uint32_t * restrict) dst; 3646 3647 dw[0] = 3648 __gen_uint(values->DWordLength, 0, 7) | 3649 __gen_uint(values->MOCS, 8, 14) | 3650 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3651 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3652 __gen_uint(values->CommandSubType, 27, 28) | 3653 __gen_uint(values->CommandType, 29, 31); 3654 3655 GFX9_3DSTATE_CONSTANT_BODY_pack(data, &dw[1], &values->ConstantBody); 3656} 3657 3658#define GFX9_3DSTATE_CONSTANT_PS_length 11 3659#define GFX9_3DSTATE_CONSTANT_PS_length_bias 2 3660#define GFX9_3DSTATE_CONSTANT_PS_header \ 3661 .DWordLength = 9, \ 3662 ._3DCommandSubOpcode = 23, \ 3663 ._3DCommandOpcode = 0, \ 3664 .CommandSubType = 3, \ 3665 .CommandType = 3 3666 3667struct GFX9_3DSTATE_CONSTANT_PS { 3668 uint32_t DWordLength; 3669 uint32_t MOCS; 3670 uint32_t _3DCommandSubOpcode; 3671 uint32_t _3DCommandOpcode; 3672 uint32_t CommandSubType; 3673 uint32_t CommandType; 3674 struct GFX9_3DSTATE_CONSTANT_BODY ConstantBody; 3675}; 3676 3677static inline __attribute__((always_inline)) void 3678GFX9_3DSTATE_CONSTANT_PS_pack(__attribute__((unused)) __gen_user_data *data, 3679 __attribute__((unused)) void * restrict dst, 3680 __attribute__((unused)) const struct GFX9_3DSTATE_CONSTANT_PS * restrict values) 3681{ 3682 uint32_t * restrict dw = (uint32_t * restrict) dst; 3683 3684 dw[0] = 3685 __gen_uint(values->DWordLength, 0, 7) | 3686 __gen_uint(values->MOCS, 8, 14) | 3687 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3688 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3689 __gen_uint(values->CommandSubType, 27, 28) | 3690 __gen_uint(values->CommandType, 29, 31); 3691 3692 GFX9_3DSTATE_CONSTANT_BODY_pack(data, &dw[1], &values->ConstantBody); 3693} 3694 3695#define GFX9_3DSTATE_CONSTANT_VS_length 11 3696#define GFX9_3DSTATE_CONSTANT_VS_length_bias 2 3697#define GFX9_3DSTATE_CONSTANT_VS_header \ 3698 .DWordLength = 9, \ 3699 ._3DCommandSubOpcode = 21, \ 3700 ._3DCommandOpcode = 0, \ 3701 .CommandSubType = 3, \ 3702 .CommandType = 3 3703 3704struct GFX9_3DSTATE_CONSTANT_VS { 3705 uint32_t DWordLength; 3706 uint32_t MOCS; 3707 uint32_t _3DCommandSubOpcode; 3708 uint32_t _3DCommandOpcode; 3709 uint32_t CommandSubType; 3710 uint32_t CommandType; 3711 struct GFX9_3DSTATE_CONSTANT_BODY ConstantBody; 3712}; 3713 3714static inline __attribute__((always_inline)) void 3715GFX9_3DSTATE_CONSTANT_VS_pack(__attribute__((unused)) __gen_user_data *data, 3716 __attribute__((unused)) void * restrict dst, 3717 __attribute__((unused)) const struct GFX9_3DSTATE_CONSTANT_VS * restrict values) 3718{ 3719 uint32_t * restrict dw = (uint32_t * restrict) dst; 3720 3721 dw[0] = 3722 __gen_uint(values->DWordLength, 0, 7) | 3723 __gen_uint(values->MOCS, 8, 14) | 3724 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3725 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3726 __gen_uint(values->CommandSubType, 27, 28) | 3727 __gen_uint(values->CommandType, 29, 31); 3728 3729 GFX9_3DSTATE_CONSTANT_BODY_pack(data, &dw[1], &values->ConstantBody); 3730} 3731 3732#define GFX9_3DSTATE_DEPTH_BUFFER_length 8 3733#define GFX9_3DSTATE_DEPTH_BUFFER_length_bias 2 3734#define GFX9_3DSTATE_DEPTH_BUFFER_header \ 3735 .DWordLength = 6, \ 3736 ._3DCommandSubOpcode = 5, \ 3737 ._3DCommandOpcode = 0, \ 3738 .CommandSubType = 3, \ 3739 .CommandType = 3 3740 3741struct GFX9_3DSTATE_DEPTH_BUFFER { 3742 uint32_t DWordLength; 3743 uint32_t _3DCommandSubOpcode; 3744 uint32_t _3DCommandOpcode; 3745 uint32_t CommandSubType; 3746 uint32_t CommandType; 3747 uint32_t SurfacePitch; 3748 uint32_t SurfaceFormat; 3749#define D32_FLOAT 1 3750#define D24_UNORM_X8_UINT 3 3751#define D16_UNORM 5 3752 bool HierarchicalDepthBufferEnable; 3753 bool StencilWriteEnable; 3754 bool DepthWriteEnable; 3755 uint32_t SurfaceType; 3756#define SURFTYPE_2D 1 3757#define SURFTYPE_CUBE 3 3758#define SURFTYPE_NULL 7 3759 __gen_address_type SurfaceBaseAddress; 3760 uint32_t LOD; 3761 uint32_t Width; 3762 uint32_t Height; 3763 uint32_t MOCS; 3764 uint32_t MinimumArrayElement; 3765 uint32_t Depth; 3766 uint32_t MipTailStartLOD; 3767 uint32_t TiledResourceMode; 3768#define NONE 0 3769#define TILEYF 1 3770#define TILEYS 2 3771 uint32_t SurfaceQPitch; 3772 uint32_t RenderTargetViewExtent; 3773}; 3774 3775static inline __attribute__((always_inline)) void 3776GFX9_3DSTATE_DEPTH_BUFFER_pack(__attribute__((unused)) __gen_user_data *data, 3777 __attribute__((unused)) void * restrict dst, 3778 __attribute__((unused)) const struct GFX9_3DSTATE_DEPTH_BUFFER * restrict values) 3779{ 3780 uint32_t * restrict dw = (uint32_t * restrict) dst; 3781 3782 dw[0] = 3783 __gen_uint(values->DWordLength, 0, 7) | 3784 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3785 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3786 __gen_uint(values->CommandSubType, 27, 28) | 3787 __gen_uint(values->CommandType, 29, 31); 3788 3789 dw[1] = 3790 __gen_uint(values->SurfacePitch, 0, 17) | 3791 __gen_uint(values->SurfaceFormat, 18, 20) | 3792 __gen_uint(values->HierarchicalDepthBufferEnable, 22, 22) | 3793 __gen_uint(values->StencilWriteEnable, 27, 27) | 3794 __gen_uint(values->DepthWriteEnable, 28, 28) | 3795 __gen_uint(values->SurfaceType, 29, 31); 3796 3797 const uint64_t v2_address = 3798 __gen_address(data, &dw[2], values->SurfaceBaseAddress, 0, 0, 63); 3799 dw[2] = v2_address; 3800 dw[3] = v2_address >> 32; 3801 3802 dw[4] = 3803 __gen_uint(values->LOD, 0, 3) | 3804 __gen_uint(values->Width, 4, 17) | 3805 __gen_uint(values->Height, 18, 31); 3806 3807 dw[5] = 3808 __gen_uint(values->MOCS, 0, 6) | 3809 __gen_uint(values->MinimumArrayElement, 10, 20) | 3810 __gen_uint(values->Depth, 21, 31); 3811 3812 dw[6] = 3813 __gen_uint(values->MipTailStartLOD, 26, 29) | 3814 __gen_uint(values->TiledResourceMode, 30, 31); 3815 3816 dw[7] = 3817 __gen_uint(values->SurfaceQPitch, 0, 14) | 3818 __gen_uint(values->RenderTargetViewExtent, 21, 31); 3819} 3820 3821#define GFX9_3DSTATE_DRAWING_RECTANGLE_length 4 3822#define GFX9_3DSTATE_DRAWING_RECTANGLE_length_bias 2 3823#define GFX9_3DSTATE_DRAWING_RECTANGLE_header \ 3824 .DWordLength = 2, \ 3825 ._3DCommandSubOpcode = 0, \ 3826 ._3DCommandOpcode = 1, \ 3827 .CommandSubType = 3, \ 3828 .CommandType = 3 3829 3830struct GFX9_3DSTATE_DRAWING_RECTANGLE { 3831 uint32_t DWordLength; 3832 uint32_t CoreModeSelect; 3833#define Legacy 0 3834#define Core0Enabled 1 3835#define Core1Enabled 2 3836 uint32_t _3DCommandSubOpcode; 3837 uint32_t _3DCommandOpcode; 3838 uint32_t CommandSubType; 3839 uint32_t CommandType; 3840 uint32_t ClippedDrawingRectangleXMin; 3841 uint32_t ClippedDrawingRectangleYMin; 3842 uint32_t ClippedDrawingRectangleXMax; 3843 uint32_t ClippedDrawingRectangleYMax; 3844 int32_t DrawingRectangleOriginX; 3845 int32_t DrawingRectangleOriginY; 3846}; 3847 3848static inline __attribute__((always_inline)) void 3849GFX9_3DSTATE_DRAWING_RECTANGLE_pack(__attribute__((unused)) __gen_user_data *data, 3850 __attribute__((unused)) void * restrict dst, 3851 __attribute__((unused)) const struct GFX9_3DSTATE_DRAWING_RECTANGLE * restrict values) 3852{ 3853 uint32_t * restrict dw = (uint32_t * restrict) dst; 3854 3855 dw[0] = 3856 __gen_uint(values->DWordLength, 0, 7) | 3857 __gen_uint(values->CoreModeSelect, 14, 15) | 3858 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3859 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3860 __gen_uint(values->CommandSubType, 27, 28) | 3861 __gen_uint(values->CommandType, 29, 31); 3862 3863 dw[1] = 3864 __gen_uint(values->ClippedDrawingRectangleXMin, 0, 15) | 3865 __gen_uint(values->ClippedDrawingRectangleYMin, 16, 31); 3866 3867 dw[2] = 3868 __gen_uint(values->ClippedDrawingRectangleXMax, 0, 15) | 3869 __gen_uint(values->ClippedDrawingRectangleYMax, 16, 31); 3870 3871 dw[3] = 3872 __gen_sint(values->DrawingRectangleOriginX, 0, 15) | 3873 __gen_sint(values->DrawingRectangleOriginY, 16, 31); 3874} 3875 3876#define GFX9_3DSTATE_DS_length 11 3877#define GFX9_3DSTATE_DS_length_bias 2 3878#define GFX9_3DSTATE_DS_header \ 3879 .DWordLength = 9, \ 3880 ._3DCommandSubOpcode = 29, \ 3881 ._3DCommandOpcode = 0, \ 3882 .CommandSubType = 3, \ 3883 .CommandType = 3 3884 3885struct GFX9_3DSTATE_DS { 3886 uint32_t DWordLength; 3887 uint32_t _3DCommandSubOpcode; 3888 uint32_t _3DCommandOpcode; 3889 uint32_t CommandSubType; 3890 uint32_t CommandType; 3891 uint64_t KernelStartPointer; 3892 bool SoftwareExceptionEnable; 3893 bool IllegalOpcodeExceptionEnable; 3894 bool AccessesUAV; 3895 uint32_t FloatingPointMode; 3896#define IEEE754 0 3897#define Alternate 1 3898 uint32_t ThreadDispatchPriority; 3899#define High 1 3900 uint32_t BindingTableEntryCount; 3901 uint32_t SamplerCount; 3902#define NoSamplers 0 3903#define _14Samplers 1 3904#define _58Samplers 2 3905#define _912Samplers 3 3906#define _1316Samplers 4 3907 bool VectorMaskEnable; 3908 uint32_t PerThreadScratchSpace; 3909 __gen_address_type ScratchSpaceBasePointer; 3910 uint32_t PatchURBEntryReadOffset; 3911 uint32_t PatchURBEntryReadLength; 3912 uint32_t DispatchGRFStartRegisterForURBData; 3913 bool Enable; 3914 bool CacheDisable; 3915 bool ComputeWCoordinateEnable; 3916 uint32_t DispatchMode; 3917#define DISPATCH_MODE_SIMD4X2 0 3918#define DISPATCH_MODE_SIMD8_SINGLE_PATCH 1 3919#define DISPATCH_MODE_SIMD8_SINGLE_OR_DUAL_PATCH 2 3920 bool StatisticsEnable; 3921 uint32_t MaximumNumberofThreads; 3922 uint32_t UserClipDistanceCullTestEnableBitmask; 3923 uint32_t UserClipDistanceClipTestEnableBitmask; 3924 uint32_t VertexURBEntryOutputLength; 3925 uint32_t VertexURBEntryOutputReadOffset; 3926 uint64_t DUAL_PATCHKernelStartPointer; 3927}; 3928 3929static inline __attribute__((always_inline)) void 3930GFX9_3DSTATE_DS_pack(__attribute__((unused)) __gen_user_data *data, 3931 __attribute__((unused)) void * restrict dst, 3932 __attribute__((unused)) const struct GFX9_3DSTATE_DS * restrict values) 3933{ 3934 uint32_t * restrict dw = (uint32_t * restrict) dst; 3935 3936 dw[0] = 3937 __gen_uint(values->DWordLength, 0, 7) | 3938 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 3939 __gen_uint(values->_3DCommandOpcode, 24, 26) | 3940 __gen_uint(values->CommandSubType, 27, 28) | 3941 __gen_uint(values->CommandType, 29, 31); 3942 3943 const uint64_t v1 = 3944 __gen_offset(values->KernelStartPointer, 6, 63); 3945 dw[1] = v1; 3946 dw[2] = v1 >> 32; 3947 3948 dw[3] = 3949 __gen_uint(values->SoftwareExceptionEnable, 7, 7) | 3950 __gen_uint(values->IllegalOpcodeExceptionEnable, 13, 13) | 3951 __gen_uint(values->AccessesUAV, 14, 14) | 3952 __gen_uint(values->FloatingPointMode, 16, 16) | 3953 __gen_uint(values->ThreadDispatchPriority, 17, 17) | 3954 __gen_uint(values->BindingTableEntryCount, 18, 25) | 3955 __gen_uint(values->SamplerCount, 27, 29) | 3956 __gen_uint(values->VectorMaskEnable, 30, 30); 3957 3958 const uint64_t v4 = 3959 __gen_uint(values->PerThreadScratchSpace, 0, 3); 3960 const uint64_t v4_address = 3961 __gen_address(data, &dw[4], values->ScratchSpaceBasePointer, v4, 10, 63); 3962 dw[4] = v4_address; 3963 dw[5] = (v4_address >> 32) | (v4 >> 32); 3964 3965 dw[6] = 3966 __gen_uint(values->PatchURBEntryReadOffset, 4, 9) | 3967 __gen_uint(values->PatchURBEntryReadLength, 11, 17) | 3968 __gen_uint(values->DispatchGRFStartRegisterForURBData, 20, 24); 3969 3970 dw[7] = 3971 __gen_uint(values->Enable, 0, 0) | 3972 __gen_uint(values->CacheDisable, 1, 1) | 3973 __gen_uint(values->ComputeWCoordinateEnable, 2, 2) | 3974 __gen_uint(values->DispatchMode, 3, 4) | 3975 __gen_uint(values->StatisticsEnable, 10, 10) | 3976 __gen_uint(values->MaximumNumberofThreads, 21, 29); 3977 3978 dw[8] = 3979 __gen_uint(values->UserClipDistanceCullTestEnableBitmask, 0, 7) | 3980 __gen_uint(values->UserClipDistanceClipTestEnableBitmask, 8, 15) | 3981 __gen_uint(values->VertexURBEntryOutputLength, 16, 20) | 3982 __gen_uint(values->VertexURBEntryOutputReadOffset, 21, 26); 3983 3984 const uint64_t v9 = 3985 __gen_offset(values->DUAL_PATCHKernelStartPointer, 6, 63); 3986 dw[9] = v9; 3987 dw[10] = v9 >> 32; 3988} 3989 3990#define GFX9_3DSTATE_GATHER_CONSTANT_DS_length_bias 2 3991#define GFX9_3DSTATE_GATHER_CONSTANT_DS_header \ 3992 .DWordLength = 1, \ 3993 ._3DCommandSubOpcode = 55, \ 3994 ._3DCommandOpcode = 0, \ 3995 .CommandSubType = 3, \ 3996 .CommandType = 3 3997 3998struct GFX9_3DSTATE_GATHER_CONSTANT_DS { 3999 uint32_t DWordLength; 4000 uint32_t _3DCommandSubOpcode; 4001 uint32_t _3DCommandOpcode; 4002 uint32_t CommandSubType; 4003 uint32_t CommandType; 4004 uint32_t UpdateGatherTableOnly; 4005#define CommitGather 0 4006#define NonCommitGather 1 4007 uint32_t ConstantBufferBindingTableBlock; 4008 uint32_t ConstantBufferValid; 4009 uint32_t OnDieTable; 4010#define Load 0 4011#define Read 1 4012 bool ConstantBufferDx9GenerateStall; 4013 uint64_t GatherBufferOffset; 4014 /* variable length fields follow */ 4015}; 4016 4017static inline __attribute__((always_inline)) void 4018GFX9_3DSTATE_GATHER_CONSTANT_DS_pack(__attribute__((unused)) __gen_user_data *data, 4019 __attribute__((unused)) void * restrict dst, 4020 __attribute__((unused)) const struct GFX9_3DSTATE_GATHER_CONSTANT_DS * restrict values) 4021{ 4022 uint32_t * restrict dw = (uint32_t * restrict) dst; 4023 4024 dw[0] = 4025 __gen_uint(values->DWordLength, 0, 7) | 4026 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 4027 __gen_uint(values->_3DCommandOpcode, 24, 26) | 4028 __gen_uint(values->CommandSubType, 27, 28) | 4029 __gen_uint(values->CommandType, 29, 31); 4030 4031 dw[1] = 4032 __gen_uint(values->UpdateGatherTableOnly, 1, 1) | 4033 __gen_uint(values->ConstantBufferBindingTableBlock, 12, 15) | 4034 __gen_uint(values->ConstantBufferValid, 16, 31); 4035 4036 dw[2] = 4037 __gen_uint(values->OnDieTable, 3, 3) | 4038 __gen_uint(values->ConstantBufferDx9GenerateStall, 5, 5) | 4039 __gen_offset(values->GatherBufferOffset, 6, 22); 4040} 4041 4042#define GFX9_3DSTATE_GATHER_CONSTANT_GS_length_bias 2 4043#define GFX9_3DSTATE_GATHER_CONSTANT_GS_header \ 4044 .DWordLength = 1, \ 4045 ._3DCommandSubOpcode = 53, \ 4046 ._3DCommandOpcode = 0, \ 4047 .CommandSubType = 3, \ 4048 .CommandType = 3 4049 4050struct GFX9_3DSTATE_GATHER_CONSTANT_GS { 4051 uint32_t DWordLength; 4052 uint32_t _3DCommandSubOpcode; 4053 uint32_t _3DCommandOpcode; 4054 uint32_t CommandSubType; 4055 uint32_t CommandType; 4056 uint32_t UpdateGatherTableOnly; 4057#define CommitGather 0 4058#define NonCommitGather 1 4059 uint32_t ConstantBufferBindingTableBlock; 4060 uint32_t ConstantBufferValid; 4061 uint32_t OnDieTable; 4062#define Load 0 4063#define Read 1 4064 bool ConstantBufferDx9GenerateStall; 4065 uint64_t GatherBufferOffset; 4066 /* variable length fields follow */ 4067}; 4068 4069static inline __attribute__((always_inline)) void 4070GFX9_3DSTATE_GATHER_CONSTANT_GS_pack(__attribute__((unused)) __gen_user_data *data, 4071 __attribute__((unused)) void * restrict dst, 4072 __attribute__((unused)) const struct GFX9_3DSTATE_GATHER_CONSTANT_GS * restrict values) 4073{ 4074 uint32_t * restrict dw = (uint32_t * restrict) dst; 4075 4076 dw[0] = 4077 __gen_uint(values->DWordLength, 0, 7) | 4078 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 4079 __gen_uint(values->_3DCommandOpcode, 24, 26) | 4080 __gen_uint(values->CommandSubType, 27, 28) | 4081 __gen_uint(values->CommandType, 29, 31); 4082 4083 dw[1] = 4084 __gen_uint(values->UpdateGatherTableOnly, 1, 1) | 4085 __gen_uint(values->ConstantBufferBindingTableBlock, 12, 15) | 4086 __gen_uint(values->ConstantBufferValid, 16, 31); 4087 4088 dw[2] = 4089 __gen_uint(values->OnDieTable, 3, 3) | 4090 __gen_uint(values->ConstantBufferDx9GenerateStall, 5, 5) | 4091 __gen_offset(values->GatherBufferOffset, 6, 22); 4092} 4093 4094#define GFX9_3DSTATE_GATHER_CONSTANT_HS_length_bias 2 4095#define GFX9_3DSTATE_GATHER_CONSTANT_HS_header \ 4096 .DWordLength = 1, \ 4097 ._3DCommandSubOpcode = 54, \ 4098 ._3DCommandOpcode = 0, \ 4099 .CommandSubType = 3, \ 4100 .CommandType = 3 4101 4102struct GFX9_3DSTATE_GATHER_CONSTANT_HS { 4103 uint32_t DWordLength; 4104 uint32_t _3DCommandSubOpcode; 4105 uint32_t _3DCommandOpcode; 4106 uint32_t CommandSubType; 4107 uint32_t CommandType; 4108 uint32_t UpdateGatherTableOnly; 4109#define CommitGather 0 4110#define NonCommitGather 1 4111 uint32_t ConstantBufferBindingTableBlock; 4112 uint32_t ConstantBufferValid; 4113 uint32_t OnDieTable; 4114#define Load 0 4115#define Read 1 4116 bool ConstantBufferDx9GenerateStall; 4117 uint64_t GatherBufferOffset; 4118 /* variable length fields follow */ 4119}; 4120 4121static inline __attribute__((always_inline)) void 4122GFX9_3DSTATE_GATHER_CONSTANT_HS_pack(__attribute__((unused)) __gen_user_data *data, 4123 __attribute__((unused)) void * restrict dst, 4124 __attribute__((unused)) const struct GFX9_3DSTATE_GATHER_CONSTANT_HS * restrict values) 4125{ 4126 uint32_t * restrict dw = (uint32_t * restrict) dst; 4127 4128 dw[0] = 4129 __gen_uint(values->DWordLength, 0, 7) | 4130 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 4131 __gen_uint(values->_3DCommandOpcode, 24, 26) | 4132 __gen_uint(values->CommandSubType, 27, 28) | 4133 __gen_uint(values->CommandType, 29, 31); 4134 4135 dw[1] = 4136 __gen_uint(values->UpdateGatherTableOnly, 1, 1) | 4137 __gen_uint(values->ConstantBufferBindingTableBlock, 12, 15) | 4138 __gen_uint(values->ConstantBufferValid, 16, 31); 4139 4140 dw[2] = 4141 __gen_uint(values->OnDieTable, 3, 3) | 4142 __gen_uint(values->ConstantBufferDx9GenerateStall, 5, 5) | 4143 __gen_offset(values->GatherBufferOffset, 6, 22); 4144} 4145 4146#define GFX9_3DSTATE_GATHER_CONSTANT_PS_length_bias 2 4147#define GFX9_3DSTATE_GATHER_CONSTANT_PS_header \ 4148 .DWordLength = 1, \ 4149 ._3DCommandSubOpcode = 56, \ 4150 ._3DCommandOpcode = 0, \ 4151 .CommandSubType = 3, \ 4152 .CommandType = 3 4153 4154struct GFX9_3DSTATE_GATHER_CONSTANT_PS { 4155 uint32_t DWordLength; 4156 uint32_t _3DCommandSubOpcode; 4157 uint32_t _3DCommandOpcode; 4158 uint32_t CommandSubType; 4159 uint32_t CommandType; 4160 bool DX9OnDieRegisterReadEnable; 4161 uint32_t UpdateGatherTableOnly; 4162#define CommitGather 0 4163#define NonCommitGather 1 4164 uint32_t ConstantBufferBindingTableBlock; 4165 uint32_t ConstantBufferValid; 4166 uint32_t OnDieTable; 4167#define Load 0 4168#define Read 1 4169 bool ConstantBufferDx9Enable; 4170 bool ConstantBufferDx9GenerateStall; 4171 uint64_t GatherBufferOffset; 4172 /* variable length fields follow */ 4173}; 4174 4175static inline __attribute__((always_inline)) void 4176GFX9_3DSTATE_GATHER_CONSTANT_PS_pack(__attribute__((unused)) __gen_user_data *data, 4177 __attribute__((unused)) void * restrict dst, 4178 __attribute__((unused)) const struct GFX9_3DSTATE_GATHER_CONSTANT_PS * restrict values) 4179{ 4180 uint32_t * restrict dw = (uint32_t * restrict) dst; 4181 4182 dw[0] = 4183 __gen_uint(values->DWordLength, 0, 7) | 4184 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 4185 __gen_uint(values->_3DCommandOpcode, 24, 26) | 4186 __gen_uint(values->CommandSubType, 27, 28) | 4187 __gen_uint(values->CommandType, 29, 31); 4188 4189 dw[1] = 4190 __gen_uint(values->DX9OnDieRegisterReadEnable, 0, 0) | 4191 __gen_uint(values->UpdateGatherTableOnly, 1, 1) | 4192 __gen_uint(values->ConstantBufferBindingTableBlock, 12, 15) | 4193 __gen_uint(values->ConstantBufferValid, 16, 31); 4194 4195 dw[2] = 4196 __gen_uint(values->OnDieTable, 3, 3) | 4197 __gen_uint(values->ConstantBufferDx9Enable, 4, 4) | 4198 __gen_uint(values->ConstantBufferDx9GenerateStall, 5, 5) | 4199 __gen_offset(values->GatherBufferOffset, 6, 22); 4200} 4201 4202#define GFX9_3DSTATE_GATHER_CONSTANT_VS_length_bias 2 4203#define GFX9_3DSTATE_GATHER_CONSTANT_VS_header \ 4204 .DWordLength = 0, \ 4205 ._3DCommandSubOpcode = 52, \ 4206 ._3DCommandOpcode = 0, \ 4207 .CommandSubType = 3, \ 4208 .CommandType = 3 4209 4210struct GFX9_3DSTATE_GATHER_CONSTANT_VS { 4211 uint32_t DWordLength; 4212 uint32_t _3DCommandSubOpcode; 4213 uint32_t _3DCommandOpcode; 4214 uint32_t CommandSubType; 4215 uint32_t CommandType; 4216 bool DX9OnDieRegisterReadEnable; 4217 uint32_t UpdateGatherTableOnly; 4218#define CommitGather 0 4219#define NonCommitGather 1 4220 uint32_t ConstantBufferBindingTableBlock; 4221 uint32_t ConstantBufferValid; 4222 uint32_t OnDieTable; 4223#define Load 0 4224#define Read 1 4225 bool ConstantBufferDx9Enable; 4226 bool ConstantBufferDx9GenerateStall; 4227 uint64_t GatherBufferOffset; 4228 /* variable length fields follow */ 4229}; 4230 4231static inline __attribute__((always_inline)) void 4232GFX9_3DSTATE_GATHER_CONSTANT_VS_pack(__attribute__((unused)) __gen_user_data *data, 4233 __attribute__((unused)) void * restrict dst, 4234 __attribute__((unused)) const struct GFX9_3DSTATE_GATHER_CONSTANT_VS * restrict values) 4235{ 4236 uint32_t * restrict dw = (uint32_t * restrict) dst; 4237 4238 dw[0] = 4239 __gen_uint(values->DWordLength, 0, 7) | 4240 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 4241 __gen_uint(values->_3DCommandOpcode, 24, 26) | 4242 __gen_uint(values->CommandSubType, 27, 28) | 4243 __gen_uint(values->CommandType, 29, 31); 4244 4245 dw[1] = 4246 __gen_uint(values->DX9OnDieRegisterReadEnable, 0, 0) | 4247 __gen_uint(values->UpdateGatherTableOnly, 1, 1) | 4248 __gen_uint(values->ConstantBufferBindingTableBlock, 12, 15) | 4249 __gen_uint(values->ConstantBufferValid, 16, 31); 4250 4251 dw[2] = 4252 __gen_uint(values->OnDieTable, 3, 3) | 4253 __gen_uint(values->ConstantBufferDx9Enable, 4, 4) | 4254 __gen_uint(values->ConstantBufferDx9GenerateStall, 5, 5) | 4255 __gen_offset(values->GatherBufferOffset, 6, 22); 4256} 4257 4258#define GFX9_3DSTATE_GATHER_POOL_ALLOC_length 4 4259#define GFX9_3DSTATE_GATHER_POOL_ALLOC_length_bias 2 4260#define GFX9_3DSTATE_GATHER_POOL_ALLOC_header \ 4261 .DWordLength = 2, \ 4262 ._3DCommandSubOpcode = 26, \ 4263 ._3DCommandOpcode = 1, \ 4264 .CommandSubType = 3, \ 4265 .CommandType = 3 4266 4267struct GFX9_3DSTATE_GATHER_POOL_ALLOC { 4268 uint32_t DWordLength; 4269 uint32_t _3DCommandSubOpcode; 4270 uint32_t _3DCommandOpcode; 4271 uint32_t CommandSubType; 4272 uint32_t CommandType; 4273 uint32_t MOCS; 4274 bool GatherPoolEnable; 4275 __gen_address_type GatherPoolBaseAddress; 4276 uint32_t GatherPoolBufferSize; 4277}; 4278 4279static inline __attribute__((always_inline)) void 4280GFX9_3DSTATE_GATHER_POOL_ALLOC_pack(__attribute__((unused)) __gen_user_data *data, 4281 __attribute__((unused)) void * restrict dst, 4282 __attribute__((unused)) const struct GFX9_3DSTATE_GATHER_POOL_ALLOC * restrict values) 4283{ 4284 uint32_t * restrict dw = (uint32_t * restrict) dst; 4285 4286 dw[0] = 4287 __gen_uint(values->DWordLength, 0, 7) | 4288 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 4289 __gen_uint(values->_3DCommandOpcode, 24, 26) | 4290 __gen_uint(values->CommandSubType, 27, 28) | 4291 __gen_uint(values->CommandType, 29, 31); 4292 4293 const uint64_t v1 = 4294 __gen_uint(values->MOCS, 0, 6) | 4295 __gen_uint(values->GatherPoolEnable, 11, 11); 4296 const uint64_t v1_address = 4297 __gen_address(data, &dw[1], values->GatherPoolBaseAddress, v1, 12, 63); 4298 dw[1] = v1_address; 4299 dw[2] = (v1_address >> 32) | (v1 >> 32); 4300 4301 dw[3] = 4302 __gen_uint(values->GatherPoolBufferSize, 12, 31); 4303} 4304 4305#define GFX9_3DSTATE_GS_length 10 4306#define GFX9_3DSTATE_GS_length_bias 2 4307#define GFX9_3DSTATE_GS_header \ 4308 .DWordLength = 8, \ 4309 ._3DCommandSubOpcode = 17, \ 4310 ._3DCommandOpcode = 0, \ 4311 .CommandSubType = 3, \ 4312 .CommandType = 3 4313 4314struct GFX9_3DSTATE_GS { 4315 uint32_t DWordLength; 4316 uint32_t _3DCommandSubOpcode; 4317 uint32_t _3DCommandOpcode; 4318 uint32_t CommandSubType; 4319 uint32_t CommandType; 4320 uint64_t KernelStartPointer; 4321 uint32_t ExpectedVertexCount; 4322 bool SoftwareExceptionEnable; 4323 bool MaskStackExceptionEnable; 4324 bool AccessesUAV; 4325 bool IllegalOpcodeExceptionEnable; 4326 uint32_t FloatingPointMode; 4327#define IEEE754 0 4328#define Alternate 1 4329 uint32_t ThreadDispatchPriority; 4330#define High 1 4331 uint32_t BindingTableEntryCount; 4332 uint32_t SamplerCount; 4333#define NoSamplers 0 4334#define _14Samplers 1 4335#define _58Samplers 2 4336#define _912Samplers 3 4337#define _1316Samplers 4 4338 bool VectorMaskEnable; 4339 bool SingleProgramFlow; 4340 uint32_t PerThreadScratchSpace; 4341 __gen_address_type ScratchSpaceBasePointer; 4342 uint32_t DispatchGRFStartRegisterForURBData; 4343 uint32_t VertexURBEntryReadOffset; 4344 bool IncludeVertexHandles; 4345 uint32_t VertexURBEntryReadLength; 4346 enum GFX9_3D_Prim_Topo_Type OutputTopology; 4347 uint32_t OutputVertexSize; 4348 uint32_t DispatchGRFStartRegisterForURBData54; 4349 bool Enable; 4350 bool DiscardAdjacency; 4351 uint32_t ReorderMode; 4352#define LEADING 0 4353#define TRAILING 1 4354 uint32_t Hint; 4355 bool IncludePrimitiveID; 4356 uint32_t InvocationsIncrementValue; 4357 bool StatisticsEnable; 4358 uint32_t DispatchMode; 4359#define DISPATCH_MODE_DualInstance 1 4360#define DISPATCH_MODE_DualObject 2 4361#define DISPATCH_MODE_SIMD8 3 4362 uint32_t DefaultStreamId; 4363 uint32_t InstanceControl; 4364 uint32_t ControlDataHeaderSize; 4365 uint32_t MaximumNumberofThreads; 4366 uint32_t StaticOutputVertexCount; 4367 bool StaticOutput; 4368 uint32_t ControlDataFormat; 4369#define CUT 0 4370#define SID 1 4371 uint32_t UserClipDistanceCullTestEnableBitmask; 4372 uint32_t UserClipDistanceClipTestEnableBitmask; 4373 uint32_t VertexURBEntryOutputLength; 4374 uint32_t VertexURBEntryOutputReadOffset; 4375}; 4376 4377static inline __attribute__((always_inline)) void 4378GFX9_3DSTATE_GS_pack(__attribute__((unused)) __gen_user_data *data, 4379 __attribute__((unused)) void * restrict dst, 4380 __attribute__((unused)) const struct GFX9_3DSTATE_GS * restrict values) 4381{ 4382 uint32_t * restrict dw = (uint32_t * restrict) dst; 4383 4384 dw[0] = 4385 __gen_uint(values->DWordLength, 0, 7) | 4386 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 4387 __gen_uint(values->_3DCommandOpcode, 24, 26) | 4388 __gen_uint(values->CommandSubType, 27, 28) | 4389 __gen_uint(values->CommandType, 29, 31); 4390 4391 const uint64_t v1 = 4392 __gen_offset(values->KernelStartPointer, 6, 63); 4393 dw[1] = v1; 4394 dw[2] = v1 >> 32; 4395 4396 dw[3] = 4397 __gen_uint(values->ExpectedVertexCount, 0, 5) | 4398 __gen_uint(values->SoftwareExceptionEnable, 7, 7) | 4399 __gen_uint(values->MaskStackExceptionEnable, 11, 11) | 4400 __gen_uint(values->AccessesUAV, 12, 12) | 4401 __gen_uint(values->IllegalOpcodeExceptionEnable, 13, 13) | 4402 __gen_uint(values->FloatingPointMode, 16, 16) | 4403 __gen_uint(values->ThreadDispatchPriority, 17, 17) | 4404 __gen_uint(values->BindingTableEntryCount, 18, 25) | 4405 __gen_uint(values->SamplerCount, 27, 29) | 4406 __gen_uint(values->VectorMaskEnable, 30, 30) | 4407 __gen_uint(values->SingleProgramFlow, 31, 31); 4408 4409 const uint64_t v4 = 4410 __gen_uint(values->PerThreadScratchSpace, 0, 3); 4411 const uint64_t v4_address = 4412 __gen_address(data, &dw[4], values->ScratchSpaceBasePointer, v4, 10, 63); 4413 dw[4] = v4_address; 4414 dw[5] = (v4_address >> 32) | (v4 >> 32); 4415 4416 dw[6] = 4417 __gen_uint(values->DispatchGRFStartRegisterForURBData, 0, 3) | 4418 __gen_uint(values->VertexURBEntryReadOffset, 4, 9) | 4419 __gen_uint(values->IncludeVertexHandles, 10, 10) | 4420 __gen_uint(values->VertexURBEntryReadLength, 11, 16) | 4421 __gen_uint(values->OutputTopology, 17, 22) | 4422 __gen_uint(values->OutputVertexSize, 23, 28) | 4423 __gen_uint(values->DispatchGRFStartRegisterForURBData54, 29, 30); 4424 4425 dw[7] = 4426 __gen_uint(values->Enable, 0, 0) | 4427 __gen_uint(values->DiscardAdjacency, 1, 1) | 4428 __gen_uint(values->ReorderMode, 2, 2) | 4429 __gen_uint(values->Hint, 3, 3) | 4430 __gen_uint(values->IncludePrimitiveID, 4, 4) | 4431 __gen_uint(values->InvocationsIncrementValue, 5, 9) | 4432 __gen_uint(values->StatisticsEnable, 10, 10) | 4433 __gen_uint(values->DispatchMode, 11, 12) | 4434 __gen_uint(values->DefaultStreamId, 13, 14) | 4435 __gen_uint(values->InstanceControl, 15, 19) | 4436 __gen_uint(values->ControlDataHeaderSize, 20, 23); 4437 4438 dw[8] = 4439 __gen_uint(values->MaximumNumberofThreads, 0, 8) | 4440 __gen_uint(values->StaticOutputVertexCount, 16, 26) | 4441 __gen_uint(values->StaticOutput, 30, 30) | 4442 __gen_uint(values->ControlDataFormat, 31, 31); 4443 4444 dw[9] = 4445 __gen_uint(values->UserClipDistanceCullTestEnableBitmask, 0, 7) | 4446 __gen_uint(values->UserClipDistanceClipTestEnableBitmask, 8, 15) | 4447 __gen_uint(values->VertexURBEntryOutputLength, 16, 20) | 4448 __gen_uint(values->VertexURBEntryOutputReadOffset, 21, 26); 4449} 4450 4451#define GFX9_3DSTATE_HIER_DEPTH_BUFFER_length 5 4452#define GFX9_3DSTATE_HIER_DEPTH_BUFFER_length_bias 2 4453#define GFX9_3DSTATE_HIER_DEPTH_BUFFER_header \ 4454 .DWordLength = 3, \ 4455 ._3DCommandSubOpcode = 7, \ 4456 ._3DCommandOpcode = 0, \ 4457 .CommandSubType = 3, \ 4458 .CommandType = 3 4459 4460struct GFX9_3DSTATE_HIER_DEPTH_BUFFER { 4461 uint32_t DWordLength; 4462 uint32_t _3DCommandSubOpcode; 4463 uint32_t _3DCommandOpcode; 4464 uint32_t CommandSubType; 4465 uint32_t CommandType; 4466 uint32_t SurfacePitch; 4467 uint32_t MOCS; 4468 __gen_address_type SurfaceBaseAddress; 4469 uint32_t SurfaceQPitch; 4470}; 4471 4472static inline __attribute__((always_inline)) void 4473GFX9_3DSTATE_HIER_DEPTH_BUFFER_pack(__attribute__((unused)) __gen_user_data *data, 4474 __attribute__((unused)) void * restrict dst, 4475 __attribute__((unused)) const struct GFX9_3DSTATE_HIER_DEPTH_BUFFER * restrict values) 4476{ 4477 uint32_t * restrict dw = (uint32_t * restrict) dst; 4478 4479 dw[0] = 4480 __gen_uint(values->DWordLength, 0, 7) | 4481 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 4482 __gen_uint(values->_3DCommandOpcode, 24, 26) | 4483 __gen_uint(values->CommandSubType, 27, 28) | 4484 __gen_uint(values->CommandType, 29, 31); 4485 4486 dw[1] = 4487 __gen_uint(values->SurfacePitch, 0, 16) | 4488 __gen_uint(values->MOCS, 25, 31); 4489 4490 const uint64_t v2_address = 4491 __gen_address(data, &dw[2], values->SurfaceBaseAddress, 0, 0, 63); 4492 dw[2] = v2_address; 4493 dw[3] = v2_address >> 32; 4494 4495 dw[4] = 4496 __gen_uint(values->SurfaceQPitch, 0, 14); 4497} 4498 4499#define GFX9_3DSTATE_HS_length 9 4500#define GFX9_3DSTATE_HS_length_bias 2 4501#define GFX9_3DSTATE_HS_header \ 4502 .DWordLength = 7, \ 4503 ._3DCommandSubOpcode = 27, \ 4504 ._3DCommandOpcode = 0, \ 4505 .CommandSubType = 3, \ 4506 .CommandType = 3 4507 4508struct GFX9_3DSTATE_HS { 4509 uint32_t DWordLength; 4510 uint32_t _3DCommandSubOpcode; 4511 uint32_t _3DCommandOpcode; 4512 uint32_t CommandSubType; 4513 uint32_t CommandType; 4514 bool SoftwareExceptionEnable; 4515 bool IllegalOpcodeExceptionEnable; 4516 uint32_t FloatingPointMode; 4517#define IEEE754 0 4518#define alternate 1 4519 uint32_t ThreadDispatchPriority; 4520#define High 1 4521 uint32_t BindingTableEntryCount; 4522 uint32_t SamplerCount; 4523#define NoSamplers 0 4524#define _14Samplers 1 4525#define _58Samplers 2 4526#define _912Samplers 3 4527#define _1316Samplers 4 4528 uint32_t InstanceCount; 4529 uint32_t MaximumNumberofThreads; 4530 bool StatisticsEnable; 4531 bool Enable; 4532 uint64_t KernelStartPointer; 4533 uint32_t PerThreadScratchSpace; 4534 __gen_address_type ScratchSpaceBasePointer; 4535 bool IncludePrimitiveID; 4536 uint32_t VertexURBEntryReadOffset; 4537 uint32_t VertexURBEntryReadLength; 4538 uint32_t DispatchMode; 4539#define DISPATCH_MODE_SINGLE_PATCH 0 4540#define DISPATCH_MODE_DUAL_PATCH 1 4541#define DISPATCH_MODE__8_PATCH 2 4542 uint32_t DispatchGRFStartRegisterForURBData; 4543 bool IncludeVertexHandles; 4544 bool AccessesUAV; 4545 bool VectorMaskEnable; 4546 bool SingleProgramFlow; 4547 uint32_t DispatchGRFStartRegisterForURBData5; 4548}; 4549 4550static inline __attribute__((always_inline)) void 4551GFX9_3DSTATE_HS_pack(__attribute__((unused)) __gen_user_data *data, 4552 __attribute__((unused)) void * restrict dst, 4553 __attribute__((unused)) const struct GFX9_3DSTATE_HS * restrict values) 4554{ 4555 uint32_t * restrict dw = (uint32_t * restrict) dst; 4556 4557 dw[0] = 4558 __gen_uint(values->DWordLength, 0, 7) | 4559 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 4560 __gen_uint(values->_3DCommandOpcode, 24, 26) | 4561 __gen_uint(values->CommandSubType, 27, 28) | 4562 __gen_uint(values->CommandType, 29, 31); 4563 4564 dw[1] = 4565 __gen_uint(values->SoftwareExceptionEnable, 12, 12) | 4566 __gen_uint(values->IllegalOpcodeExceptionEnable, 13, 13) | 4567 __gen_uint(values->FloatingPointMode, 16, 16) | 4568 __gen_uint(values->ThreadDispatchPriority, 17, 17) | 4569 __gen_uint(values->BindingTableEntryCount, 18, 25) | 4570 __gen_uint(values->SamplerCount, 27, 29); 4571 4572 dw[2] = 4573 __gen_uint(values->InstanceCount, 0, 3) | 4574 __gen_uint(values->MaximumNumberofThreads, 8, 16) | 4575 __gen_uint(values->StatisticsEnable, 29, 29) | 4576 __gen_uint(values->Enable, 31, 31); 4577 4578 const uint64_t v3 = 4579 __gen_offset(values->KernelStartPointer, 6, 63); 4580 dw[3] = v3; 4581 dw[4] = v3 >> 32; 4582 4583 const uint64_t v5 = 4584 __gen_uint(values->PerThreadScratchSpace, 0, 3); 4585 const uint64_t v5_address = 4586 __gen_address(data, &dw[5], values->ScratchSpaceBasePointer, v5, 10, 63); 4587 dw[5] = v5_address; 4588 dw[6] = (v5_address >> 32) | (v5 >> 32); 4589 4590 dw[7] = 4591 __gen_uint(values->IncludePrimitiveID, 0, 0) | 4592 __gen_uint(values->VertexURBEntryReadOffset, 4, 9) | 4593 __gen_uint(values->VertexURBEntryReadLength, 11, 16) | 4594 __gen_uint(values->DispatchMode, 17, 18) | 4595 __gen_uint(values->DispatchGRFStartRegisterForURBData, 19, 23) | 4596 __gen_uint(values->IncludeVertexHandles, 24, 24) | 4597 __gen_uint(values->AccessesUAV, 25, 25) | 4598 __gen_uint(values->VectorMaskEnable, 26, 26) | 4599 __gen_uint(values->SingleProgramFlow, 27, 27) | 4600 __gen_uint(values->DispatchGRFStartRegisterForURBData5, 28, 28); 4601 4602 dw[8] = 0; 4603} 4604 4605#define GFX9_3DSTATE_INDEX_BUFFER_length 5 4606#define GFX9_3DSTATE_INDEX_BUFFER_length_bias 2 4607#define GFX9_3DSTATE_INDEX_BUFFER_header \ 4608 .DWordLength = 3, \ 4609 ._3DCommandSubOpcode = 10, \ 4610 ._3DCommandOpcode = 0, \ 4611 .CommandSubType = 3, \ 4612 .CommandType = 3 4613 4614struct GFX9_3DSTATE_INDEX_BUFFER { 4615 uint32_t DWordLength; 4616 uint32_t _3DCommandSubOpcode; 4617 uint32_t _3DCommandOpcode; 4618 uint32_t CommandSubType; 4619 uint32_t CommandType; 4620 uint32_t MOCS; 4621 uint32_t IndexFormat; 4622#define INDEX_BYTE 0 4623#define INDEX_WORD 1 4624#define INDEX_DWORD 2 4625 __gen_address_type BufferStartingAddress; 4626 uint32_t BufferSize; 4627}; 4628 4629static inline __attribute__((always_inline)) void 4630GFX9_3DSTATE_INDEX_BUFFER_pack(__attribute__((unused)) __gen_user_data *data, 4631 __attribute__((unused)) void * restrict dst, 4632 __attribute__((unused)) const struct GFX9_3DSTATE_INDEX_BUFFER * restrict values) 4633{ 4634 uint32_t * restrict dw = (uint32_t * restrict) dst; 4635 4636 dw[0] = 4637 __gen_uint(values->DWordLength, 0, 7) | 4638 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 4639 __gen_uint(values->_3DCommandOpcode, 24, 26) | 4640 __gen_uint(values->CommandSubType, 27, 28) | 4641 __gen_uint(values->CommandType, 29, 31); 4642 4643 dw[1] = 4644 __gen_uint(values->MOCS, 0, 6) | 4645 __gen_uint(values->IndexFormat, 8, 9); 4646 4647 const uint64_t v2_address = 4648 __gen_address(data, &dw[2], values->BufferStartingAddress, 0, 0, 63); 4649 dw[2] = v2_address; 4650 dw[3] = v2_address >> 32; 4651 4652 dw[4] = 4653 __gen_uint(values->BufferSize, 0, 31); 4654} 4655 4656#define GFX9_3DSTATE_LINE_STIPPLE_length 3 4657#define GFX9_3DSTATE_LINE_STIPPLE_length_bias 2 4658#define GFX9_3DSTATE_LINE_STIPPLE_header \ 4659 .DWordLength = 1, \ 4660 ._3DCommandSubOpcode = 8, \ 4661 ._3DCommandOpcode = 1, \ 4662 .CommandSubType = 3, \ 4663 .CommandType = 3 4664 4665struct GFX9_3DSTATE_LINE_STIPPLE { 4666 uint32_t DWordLength; 4667 uint32_t _3DCommandSubOpcode; 4668 uint32_t _3DCommandOpcode; 4669 uint32_t CommandSubType; 4670 uint32_t CommandType; 4671 uint32_t LineStipplePattern; 4672 uint32_t CurrentStippleIndex; 4673 uint32_t CurrentRepeatCounter; 4674 bool ModifyEnableCurrentRepeatCounterCurrentStippleIndex; 4675 uint32_t LineStippleRepeatCount; 4676 float LineStippleInverseRepeatCount; 4677}; 4678 4679static inline __attribute__((always_inline)) void 4680GFX9_3DSTATE_LINE_STIPPLE_pack(__attribute__((unused)) __gen_user_data *data, 4681 __attribute__((unused)) void * restrict dst, 4682 __attribute__((unused)) const struct GFX9_3DSTATE_LINE_STIPPLE * restrict values) 4683{ 4684 uint32_t * restrict dw = (uint32_t * restrict) dst; 4685 4686 dw[0] = 4687 __gen_uint(values->DWordLength, 0, 7) | 4688 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 4689 __gen_uint(values->_3DCommandOpcode, 24, 26) | 4690 __gen_uint(values->CommandSubType, 27, 28) | 4691 __gen_uint(values->CommandType, 29, 31); 4692 4693 dw[1] = 4694 __gen_uint(values->LineStipplePattern, 0, 15) | 4695 __gen_uint(values->CurrentStippleIndex, 16, 19) | 4696 __gen_uint(values->CurrentRepeatCounter, 21, 29) | 4697 __gen_uint(values->ModifyEnableCurrentRepeatCounterCurrentStippleIndex, 31, 31); 4698 4699 dw[2] = 4700 __gen_uint(values->LineStippleRepeatCount, 0, 8) | 4701 __gen_ufixed(values->LineStippleInverseRepeatCount, 15, 31, 16); 4702} 4703 4704#define GFX9_3DSTATE_MONOFILTER_SIZE_length 2 4705#define GFX9_3DSTATE_MONOFILTER_SIZE_length_bias 2 4706#define GFX9_3DSTATE_MONOFILTER_SIZE_header \ 4707 .DWordLength = 0, \ 4708 ._3DCommandSubOpcode = 17, \ 4709 ._3DCommandOpcode = 1, \ 4710 .CommandSubType = 3, \ 4711 .CommandType = 3 4712 4713struct GFX9_3DSTATE_MONOFILTER_SIZE { 4714 uint32_t DWordLength; 4715 uint32_t _3DCommandSubOpcode; 4716 uint32_t _3DCommandOpcode; 4717 uint32_t CommandSubType; 4718 uint32_t CommandType; 4719 uint32_t MonochromeFilterHeight; 4720 uint32_t MonochromeFilterWidth; 4721}; 4722 4723static inline __attribute__((always_inline)) void 4724GFX9_3DSTATE_MONOFILTER_SIZE_pack(__attribute__((unused)) __gen_user_data *data, 4725 __attribute__((unused)) void * restrict dst, 4726 __attribute__((unused)) const struct GFX9_3DSTATE_MONOFILTER_SIZE * restrict values) 4727{ 4728 uint32_t * restrict dw = (uint32_t * restrict) dst; 4729 4730 dw[0] = 4731 __gen_uint(values->DWordLength, 0, 7) | 4732 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 4733 __gen_uint(values->_3DCommandOpcode, 24, 26) | 4734 __gen_uint(values->CommandSubType, 27, 28) | 4735 __gen_uint(values->CommandType, 29, 31); 4736 4737 dw[1] = 4738 __gen_uint(values->MonochromeFilterHeight, 0, 2) | 4739 __gen_uint(values->MonochromeFilterWidth, 3, 5); 4740} 4741 4742#define GFX9_3DSTATE_MULTISAMPLE_length 2 4743#define GFX9_3DSTATE_MULTISAMPLE_length_bias 2 4744#define GFX9_3DSTATE_MULTISAMPLE_header \ 4745 .DWordLength = 0, \ 4746 ._3DCommandSubOpcode = 13, \ 4747 ._3DCommandOpcode = 0, \ 4748 .CommandSubType = 3, \ 4749 .CommandType = 3 4750 4751struct GFX9_3DSTATE_MULTISAMPLE { 4752 uint32_t DWordLength; 4753 uint32_t _3DCommandSubOpcode; 4754 uint32_t _3DCommandOpcode; 4755 uint32_t CommandSubType; 4756 uint32_t CommandType; 4757 uint32_t NumberofMultisamples; 4758 uint32_t PixelLocation; 4759#define CENTER 0 4760#define UL_CORNER 1 4761 bool PixelPositionOffsetEnable; 4762}; 4763 4764static inline __attribute__((always_inline)) void 4765GFX9_3DSTATE_MULTISAMPLE_pack(__attribute__((unused)) __gen_user_data *data, 4766 __attribute__((unused)) void * restrict dst, 4767 __attribute__((unused)) const struct GFX9_3DSTATE_MULTISAMPLE * restrict values) 4768{ 4769 uint32_t * restrict dw = (uint32_t * restrict) dst; 4770 4771 dw[0] = 4772 __gen_uint(values->DWordLength, 0, 7) | 4773 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 4774 __gen_uint(values->_3DCommandOpcode, 24, 26) | 4775 __gen_uint(values->CommandSubType, 27, 28) | 4776 __gen_uint(values->CommandType, 29, 31); 4777 4778 dw[1] = 4779 __gen_uint(values->NumberofMultisamples, 1, 3) | 4780 __gen_uint(values->PixelLocation, 4, 4) | 4781 __gen_uint(values->PixelPositionOffsetEnable, 5, 5); 4782} 4783 4784#define GFX9_3DSTATE_POLY_STIPPLE_OFFSET_length 2 4785#define GFX9_3DSTATE_POLY_STIPPLE_OFFSET_length_bias 2 4786#define GFX9_3DSTATE_POLY_STIPPLE_OFFSET_header \ 4787 .DWordLength = 0, \ 4788 ._3DCommandSubOpcode = 6, \ 4789 ._3DCommandOpcode = 1, \ 4790 .CommandSubType = 3, \ 4791 .CommandType = 3 4792 4793struct GFX9_3DSTATE_POLY_STIPPLE_OFFSET { 4794 uint32_t DWordLength; 4795 uint32_t _3DCommandSubOpcode; 4796 uint32_t _3DCommandOpcode; 4797 uint32_t CommandSubType; 4798 uint32_t CommandType; 4799 uint32_t PolygonStippleYOffset; 4800 uint32_t PolygonStippleXOffset; 4801}; 4802 4803static inline __attribute__((always_inline)) void 4804GFX9_3DSTATE_POLY_STIPPLE_OFFSET_pack(__attribute__((unused)) __gen_user_data *data, 4805 __attribute__((unused)) void * restrict dst, 4806 __attribute__((unused)) const struct GFX9_3DSTATE_POLY_STIPPLE_OFFSET * restrict values) 4807{ 4808 uint32_t * restrict dw = (uint32_t * restrict) dst; 4809 4810 dw[0] = 4811 __gen_uint(values->DWordLength, 0, 7) | 4812 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 4813 __gen_uint(values->_3DCommandOpcode, 24, 26) | 4814 __gen_uint(values->CommandSubType, 27, 28) | 4815 __gen_uint(values->CommandType, 29, 31); 4816 4817 dw[1] = 4818 __gen_uint(values->PolygonStippleYOffset, 0, 4) | 4819 __gen_uint(values->PolygonStippleXOffset, 8, 12); 4820} 4821 4822#define GFX9_3DSTATE_POLY_STIPPLE_PATTERN_length 33 4823#define GFX9_3DSTATE_POLY_STIPPLE_PATTERN_length_bias 2 4824#define GFX9_3DSTATE_POLY_STIPPLE_PATTERN_header\ 4825 .DWordLength = 31, \ 4826 ._3DCommandSubOpcode = 7, \ 4827 ._3DCommandOpcode = 1, \ 4828 .CommandSubType = 3, \ 4829 .CommandType = 3 4830 4831struct GFX9_3DSTATE_POLY_STIPPLE_PATTERN { 4832 uint32_t DWordLength; 4833 uint32_t _3DCommandSubOpcode; 4834 uint32_t _3DCommandOpcode; 4835 uint32_t CommandSubType; 4836 uint32_t CommandType; 4837 uint32_t PatternRow[32]; 4838}; 4839 4840static inline __attribute__((always_inline)) void 4841GFX9_3DSTATE_POLY_STIPPLE_PATTERN_pack(__attribute__((unused)) __gen_user_data *data, 4842 __attribute__((unused)) void * restrict dst, 4843 __attribute__((unused)) const struct GFX9_3DSTATE_POLY_STIPPLE_PATTERN * restrict values) 4844{ 4845 uint32_t * restrict dw = (uint32_t * restrict) dst; 4846 4847 dw[0] = 4848 __gen_uint(values->DWordLength, 0, 7) | 4849 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 4850 __gen_uint(values->_3DCommandOpcode, 24, 26) | 4851 __gen_uint(values->CommandSubType, 27, 28) | 4852 __gen_uint(values->CommandType, 29, 31); 4853 4854 dw[1] = 4855 __gen_uint(values->PatternRow[0], 0, 31); 4856 4857 dw[2] = 4858 __gen_uint(values->PatternRow[1], 0, 31); 4859 4860 dw[3] = 4861 __gen_uint(values->PatternRow[2], 0, 31); 4862 4863 dw[4] = 4864 __gen_uint(values->PatternRow[3], 0, 31); 4865 4866 dw[5] = 4867 __gen_uint(values->PatternRow[4], 0, 31); 4868 4869 dw[6] = 4870 __gen_uint(values->PatternRow[5], 0, 31); 4871 4872 dw[7] = 4873 __gen_uint(values->PatternRow[6], 0, 31); 4874 4875 dw[8] = 4876 __gen_uint(values->PatternRow[7], 0, 31); 4877 4878 dw[9] = 4879 __gen_uint(values->PatternRow[8], 0, 31); 4880 4881 dw[10] = 4882 __gen_uint(values->PatternRow[9], 0, 31); 4883 4884 dw[11] = 4885 __gen_uint(values->PatternRow[10], 0, 31); 4886 4887 dw[12] = 4888 __gen_uint(values->PatternRow[11], 0, 31); 4889 4890 dw[13] = 4891 __gen_uint(values->PatternRow[12], 0, 31); 4892 4893 dw[14] = 4894 __gen_uint(values->PatternRow[13], 0, 31); 4895 4896 dw[15] = 4897 __gen_uint(values->PatternRow[14], 0, 31); 4898 4899 dw[16] = 4900 __gen_uint(values->PatternRow[15], 0, 31); 4901 4902 dw[17] = 4903 __gen_uint(values->PatternRow[16], 0, 31); 4904 4905 dw[18] = 4906 __gen_uint(values->PatternRow[17], 0, 31); 4907 4908 dw[19] = 4909 __gen_uint(values->PatternRow[18], 0, 31); 4910 4911 dw[20] = 4912 __gen_uint(values->PatternRow[19], 0, 31); 4913 4914 dw[21] = 4915 __gen_uint(values->PatternRow[20], 0, 31); 4916 4917 dw[22] = 4918 __gen_uint(values->PatternRow[21], 0, 31); 4919 4920 dw[23] = 4921 __gen_uint(values->PatternRow[22], 0, 31); 4922 4923 dw[24] = 4924 __gen_uint(values->PatternRow[23], 0, 31); 4925 4926 dw[25] = 4927 __gen_uint(values->PatternRow[24], 0, 31); 4928 4929 dw[26] = 4930 __gen_uint(values->PatternRow[25], 0, 31); 4931 4932 dw[27] = 4933 __gen_uint(values->PatternRow[26], 0, 31); 4934 4935 dw[28] = 4936 __gen_uint(values->PatternRow[27], 0, 31); 4937 4938 dw[29] = 4939 __gen_uint(values->PatternRow[28], 0, 31); 4940 4941 dw[30] = 4942 __gen_uint(values->PatternRow[29], 0, 31); 4943 4944 dw[31] = 4945 __gen_uint(values->PatternRow[30], 0, 31); 4946 4947 dw[32] = 4948 __gen_uint(values->PatternRow[31], 0, 31); 4949} 4950 4951#define GFX9_3DSTATE_PS_length 12 4952#define GFX9_3DSTATE_PS_length_bias 2 4953#define GFX9_3DSTATE_PS_header \ 4954 .DWordLength = 10, \ 4955 ._3DCommandSubOpcode = 32, \ 4956 ._3DCommandOpcode = 0, \ 4957 .CommandSubType = 3, \ 4958 .CommandType = 3 4959 4960struct GFX9_3DSTATE_PS { 4961 uint32_t DWordLength; 4962 uint32_t _3DCommandSubOpcode; 4963 uint32_t _3DCommandOpcode; 4964 uint32_t CommandSubType; 4965 uint32_t CommandType; 4966 uint64_t KernelStartPointer0; 4967 bool SoftwareExceptionEnable; 4968 bool MaskStackExceptionEnable; 4969 bool IllegalOpcodeExceptionEnable; 4970 uint32_t RoundingMode; 4971#define RTNE 0 4972#define RU 1 4973#define RD 2 4974#define RTZ 3 4975 uint32_t FloatingPointMode; 4976#define IEEE754 0 4977#define Alternate 1 4978 uint32_t ThreadDispatchPriority; 4979#define High 1 4980 uint32_t BindingTableEntryCount; 4981 uint32_t SinglePrecisionDenormalMode; 4982#define FlushedtoZero 0 4983#define Retained 1 4984 uint32_t SamplerCount; 4985#define NoSamplers 0 4986#define _14Samplers 1 4987#define _58Samplers 2 4988#define _912Samplers 3 4989#define _1316Samplers 4 4990 bool VectorMaskEnable; 4991 bool SingleProgramFlow; 4992 uint32_t PerThreadScratchSpace; 4993 __gen_address_type ScratchSpaceBasePointer; 4994 bool _8PixelDispatchEnable; 4995 bool _16PixelDispatchEnable; 4996 bool _32PixelDispatchEnable; 4997 uint32_t PositionXYOffsetSelect; 4998#define POSOFFSET_NONE 0 4999#define POSOFFSET_CENTROID 2 5000#define POSOFFSET_SAMPLE 3 5001 uint32_t RenderTargetResolveType; 5002#define RESOLVE_DISABLED 0 5003#define RESOLVE_PARTIAL 1 5004#define RESOLVE_FULL 3 5005 bool RenderTargetFastClearEnable; 5006 bool PushConstantEnable; 5007 uint32_t MaximumNumberofThreadsPerPSD; 5008 uint32_t DispatchGRFStartRegisterForConstantSetupData2; 5009 uint32_t DispatchGRFStartRegisterForConstantSetupData1; 5010 uint32_t DispatchGRFStartRegisterForConstantSetupData0; 5011 uint64_t KernelStartPointer1; 5012 uint64_t KernelStartPointer2; 5013}; 5014 5015static inline __attribute__((always_inline)) void 5016GFX9_3DSTATE_PS_pack(__attribute__((unused)) __gen_user_data *data, 5017 __attribute__((unused)) void * restrict dst, 5018 __attribute__((unused)) const struct GFX9_3DSTATE_PS * restrict values) 5019{ 5020 uint32_t * restrict dw = (uint32_t * restrict) dst; 5021 5022 dw[0] = 5023 __gen_uint(values->DWordLength, 0, 7) | 5024 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5025 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5026 __gen_uint(values->CommandSubType, 27, 28) | 5027 __gen_uint(values->CommandType, 29, 31); 5028 5029 const uint64_t v1 = 5030 __gen_offset(values->KernelStartPointer0, 6, 63); 5031 dw[1] = v1; 5032 dw[2] = v1 >> 32; 5033 5034 dw[3] = 5035 __gen_uint(values->SoftwareExceptionEnable, 7, 7) | 5036 __gen_uint(values->MaskStackExceptionEnable, 11, 11) | 5037 __gen_uint(values->IllegalOpcodeExceptionEnable, 13, 13) | 5038 __gen_uint(values->RoundingMode, 14, 15) | 5039 __gen_uint(values->FloatingPointMode, 16, 16) | 5040 __gen_uint(values->ThreadDispatchPriority, 17, 17) | 5041 __gen_uint(values->BindingTableEntryCount, 18, 25) | 5042 __gen_uint(values->SinglePrecisionDenormalMode, 26, 26) | 5043 __gen_uint(values->SamplerCount, 27, 29) | 5044 __gen_uint(values->VectorMaskEnable, 30, 30) | 5045 __gen_uint(values->SingleProgramFlow, 31, 31); 5046 5047 const uint64_t v4 = 5048 __gen_uint(values->PerThreadScratchSpace, 0, 3); 5049 const uint64_t v4_address = 5050 __gen_address(data, &dw[4], values->ScratchSpaceBasePointer, v4, 10, 63); 5051 dw[4] = v4_address; 5052 dw[5] = (v4_address >> 32) | (v4 >> 32); 5053 5054 dw[6] = 5055 __gen_uint(values->_8PixelDispatchEnable, 0, 0) | 5056 __gen_uint(values->_16PixelDispatchEnable, 1, 1) | 5057 __gen_uint(values->_32PixelDispatchEnable, 2, 2) | 5058 __gen_uint(values->PositionXYOffsetSelect, 3, 4) | 5059 __gen_uint(values->RenderTargetResolveType, 6, 7) | 5060 __gen_uint(values->RenderTargetFastClearEnable, 8, 8) | 5061 __gen_uint(values->PushConstantEnable, 11, 11) | 5062 __gen_uint(values->MaximumNumberofThreadsPerPSD, 23, 31); 5063 5064 dw[7] = 5065 __gen_uint(values->DispatchGRFStartRegisterForConstantSetupData2, 0, 6) | 5066 __gen_uint(values->DispatchGRFStartRegisterForConstantSetupData1, 8, 14) | 5067 __gen_uint(values->DispatchGRFStartRegisterForConstantSetupData0, 16, 22); 5068 5069 const uint64_t v8 = 5070 __gen_offset(values->KernelStartPointer1, 6, 63); 5071 dw[8] = v8; 5072 dw[9] = v8 >> 32; 5073 5074 const uint64_t v10 = 5075 __gen_offset(values->KernelStartPointer2, 6, 63); 5076 dw[10] = v10; 5077 dw[11] = v10 >> 32; 5078} 5079 5080#define GFX9_3DSTATE_PS_BLEND_length 2 5081#define GFX9_3DSTATE_PS_BLEND_length_bias 2 5082#define GFX9_3DSTATE_PS_BLEND_header \ 5083 .DWordLength = 0, \ 5084 ._3DCommandSubOpcode = 77, \ 5085 ._3DCommandOpcode = 0, \ 5086 .CommandSubType = 3, \ 5087 .CommandType = 3 5088 5089struct GFX9_3DSTATE_PS_BLEND { 5090 uint32_t DWordLength; 5091 uint32_t _3DCommandSubOpcode; 5092 uint32_t _3DCommandOpcode; 5093 uint32_t CommandSubType; 5094 uint32_t CommandType; 5095 bool IndependentAlphaBlendEnable; 5096 bool AlphaTestEnable; 5097 enum GFX9_3D_Color_Buffer_Blend_Factor DestinationBlendFactor; 5098 enum GFX9_3D_Color_Buffer_Blend_Factor SourceBlendFactor; 5099 enum GFX9_3D_Color_Buffer_Blend_Factor DestinationAlphaBlendFactor; 5100 enum GFX9_3D_Color_Buffer_Blend_Factor SourceAlphaBlendFactor; 5101 bool ColorBufferBlendEnable; 5102 bool HasWriteableRT; 5103 bool AlphaToCoverageEnable; 5104}; 5105 5106static inline __attribute__((always_inline)) void 5107GFX9_3DSTATE_PS_BLEND_pack(__attribute__((unused)) __gen_user_data *data, 5108 __attribute__((unused)) void * restrict dst, 5109 __attribute__((unused)) const struct GFX9_3DSTATE_PS_BLEND * restrict values) 5110{ 5111 uint32_t * restrict dw = (uint32_t * restrict) dst; 5112 5113 dw[0] = 5114 __gen_uint(values->DWordLength, 0, 7) | 5115 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5116 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5117 __gen_uint(values->CommandSubType, 27, 28) | 5118 __gen_uint(values->CommandType, 29, 31); 5119 5120 dw[1] = 5121 __gen_uint(values->IndependentAlphaBlendEnable, 7, 7) | 5122 __gen_uint(values->AlphaTestEnable, 8, 8) | 5123 __gen_uint(values->DestinationBlendFactor, 9, 13) | 5124 __gen_uint(values->SourceBlendFactor, 14, 18) | 5125 __gen_uint(values->DestinationAlphaBlendFactor, 19, 23) | 5126 __gen_uint(values->SourceAlphaBlendFactor, 24, 28) | 5127 __gen_uint(values->ColorBufferBlendEnable, 29, 29) | 5128 __gen_uint(values->HasWriteableRT, 30, 30) | 5129 __gen_uint(values->AlphaToCoverageEnable, 31, 31); 5130} 5131 5132#define GFX9_3DSTATE_PS_EXTRA_length 2 5133#define GFX9_3DSTATE_PS_EXTRA_length_bias 2 5134#define GFX9_3DSTATE_PS_EXTRA_header \ 5135 .DWordLength = 0, \ 5136 ._3DCommandSubOpcode = 79, \ 5137 ._3DCommandOpcode = 0, \ 5138 .CommandSubType = 3, \ 5139 .CommandType = 3 5140 5141struct GFX9_3DSTATE_PS_EXTRA { 5142 uint32_t DWordLength; 5143 uint32_t _3DCommandSubOpcode; 5144 uint32_t _3DCommandOpcode; 5145 uint32_t CommandSubType; 5146 uint32_t CommandType; 5147 uint32_t InputCoverageMaskState; 5148#define ICMS_NONE 0 5149#define ICMS_NORMAL 1 5150#define ICMS_INNER_CONSERVATIVE 2 5151#define ICMS_DEPTH_COVERAGE 3 5152 bool PixelShaderHasUAV; 5153 bool PixelShaderPullsBary; 5154 bool PixelShaderComputesStencil; 5155 bool PixelShaderIsPerSample; 5156 bool PixelShaderDisablesAlphaToCoverage; 5157 bool AttributeEnable; 5158 bool PixelShaderUsesSourceW; 5159 bool PixelShaderUsesSourceDepth; 5160 bool ForceComputedDepth; 5161 uint32_t PixelShaderComputedDepthMode; 5162#define PSCDEPTH_OFF 0 5163#define PSCDEPTH_ON 1 5164#define PSCDEPTH_ON_GE 2 5165#define PSCDEPTH_ON_LE 3 5166 bool PixelShaderKillsPixel; 5167 bool oMaskPresenttoRenderTarget; 5168 bool PixelShaderDoesnotwritetoRT; 5169 bool PixelShaderValid; 5170}; 5171 5172static inline __attribute__((always_inline)) void 5173GFX9_3DSTATE_PS_EXTRA_pack(__attribute__((unused)) __gen_user_data *data, 5174 __attribute__((unused)) void * restrict dst, 5175 __attribute__((unused)) const struct GFX9_3DSTATE_PS_EXTRA * restrict values) 5176{ 5177 uint32_t * restrict dw = (uint32_t * restrict) dst; 5178 5179 dw[0] = 5180 __gen_uint(values->DWordLength, 0, 7) | 5181 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5182 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5183 __gen_uint(values->CommandSubType, 27, 28) | 5184 __gen_uint(values->CommandType, 29, 31); 5185 5186 dw[1] = 5187 __gen_uint(values->InputCoverageMaskState, 0, 1) | 5188 __gen_uint(values->PixelShaderHasUAV, 2, 2) | 5189 __gen_uint(values->PixelShaderPullsBary, 3, 3) | 5190 __gen_uint(values->PixelShaderComputesStencil, 5, 5) | 5191 __gen_uint(values->PixelShaderIsPerSample, 6, 6) | 5192 __gen_uint(values->PixelShaderDisablesAlphaToCoverage, 7, 7) | 5193 __gen_uint(values->AttributeEnable, 8, 8) | 5194 __gen_uint(values->PixelShaderUsesSourceW, 23, 23) | 5195 __gen_uint(values->PixelShaderUsesSourceDepth, 24, 24) | 5196 __gen_uint(values->ForceComputedDepth, 25, 25) | 5197 __gen_uint(values->PixelShaderComputedDepthMode, 26, 27) | 5198 __gen_uint(values->PixelShaderKillsPixel, 28, 28) | 5199 __gen_uint(values->oMaskPresenttoRenderTarget, 29, 29) | 5200 __gen_uint(values->PixelShaderDoesnotwritetoRT, 30, 30) | 5201 __gen_uint(values->PixelShaderValid, 31, 31); 5202} 5203 5204#define GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_DS_length 2 5205#define GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_DS_length_bias 2 5206#define GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_DS_header\ 5207 .DWordLength = 0, \ 5208 ._3DCommandSubOpcode = 20, \ 5209 ._3DCommandOpcode = 1, \ 5210 .CommandSubType = 3, \ 5211 .CommandType = 3 5212 5213struct GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_DS { 5214 uint32_t DWordLength; 5215 uint32_t _3DCommandSubOpcode; 5216 uint32_t _3DCommandOpcode; 5217 uint32_t CommandSubType; 5218 uint32_t CommandType; 5219 uint32_t ConstantBufferSize; 5220 uint32_t ConstantBufferOffset; 5221}; 5222 5223static inline __attribute__((always_inline)) void 5224GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_DS_pack(__attribute__((unused)) __gen_user_data *data, 5225 __attribute__((unused)) void * restrict dst, 5226 __attribute__((unused)) const struct GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_DS * restrict values) 5227{ 5228 uint32_t * restrict dw = (uint32_t * restrict) dst; 5229 5230 dw[0] = 5231 __gen_uint(values->DWordLength, 0, 7) | 5232 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5233 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5234 __gen_uint(values->CommandSubType, 27, 28) | 5235 __gen_uint(values->CommandType, 29, 31); 5236 5237 dw[1] = 5238 __gen_uint(values->ConstantBufferSize, 0, 5) | 5239 __gen_uint(values->ConstantBufferOffset, 16, 20); 5240} 5241 5242#define GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_GS_length 2 5243#define GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_GS_length_bias 2 5244#define GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_GS_header\ 5245 .DWordLength = 0, \ 5246 ._3DCommandSubOpcode = 21, \ 5247 ._3DCommandOpcode = 1, \ 5248 .CommandSubType = 3, \ 5249 .CommandType = 3 5250 5251struct GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_GS { 5252 uint32_t DWordLength; 5253 uint32_t _3DCommandSubOpcode; 5254 uint32_t _3DCommandOpcode; 5255 uint32_t CommandSubType; 5256 uint32_t CommandType; 5257 uint32_t ConstantBufferSize; 5258 uint32_t ConstantBufferOffset; 5259}; 5260 5261static inline __attribute__((always_inline)) void 5262GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_GS_pack(__attribute__((unused)) __gen_user_data *data, 5263 __attribute__((unused)) void * restrict dst, 5264 __attribute__((unused)) const struct GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_GS * restrict values) 5265{ 5266 uint32_t * restrict dw = (uint32_t * restrict) dst; 5267 5268 dw[0] = 5269 __gen_uint(values->DWordLength, 0, 7) | 5270 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5271 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5272 __gen_uint(values->CommandSubType, 27, 28) | 5273 __gen_uint(values->CommandType, 29, 31); 5274 5275 dw[1] = 5276 __gen_uint(values->ConstantBufferSize, 0, 5) | 5277 __gen_uint(values->ConstantBufferOffset, 16, 20); 5278} 5279 5280#define GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_HS_length 2 5281#define GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_HS_length_bias 2 5282#define GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_HS_header\ 5283 .DWordLength = 0, \ 5284 ._3DCommandSubOpcode = 19, \ 5285 ._3DCommandOpcode = 1, \ 5286 .CommandSubType = 3, \ 5287 .CommandType = 3 5288 5289struct GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_HS { 5290 uint32_t DWordLength; 5291 uint32_t _3DCommandSubOpcode; 5292 uint32_t _3DCommandOpcode; 5293 uint32_t CommandSubType; 5294 uint32_t CommandType; 5295 uint32_t ConstantBufferSize; 5296 uint32_t ConstantBufferOffset; 5297}; 5298 5299static inline __attribute__((always_inline)) void 5300GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_HS_pack(__attribute__((unused)) __gen_user_data *data, 5301 __attribute__((unused)) void * restrict dst, 5302 __attribute__((unused)) const struct GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_HS * restrict values) 5303{ 5304 uint32_t * restrict dw = (uint32_t * restrict) dst; 5305 5306 dw[0] = 5307 __gen_uint(values->DWordLength, 0, 7) | 5308 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5309 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5310 __gen_uint(values->CommandSubType, 27, 28) | 5311 __gen_uint(values->CommandType, 29, 31); 5312 5313 dw[1] = 5314 __gen_uint(values->ConstantBufferSize, 0, 5) | 5315 __gen_uint(values->ConstantBufferOffset, 16, 20); 5316} 5317 5318#define GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_PS_length 2 5319#define GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_PS_length_bias 2 5320#define GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_PS_header\ 5321 .DWordLength = 0, \ 5322 ._3DCommandSubOpcode = 22, \ 5323 ._3DCommandOpcode = 1, \ 5324 .CommandSubType = 3, \ 5325 .CommandType = 3 5326 5327struct GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_PS { 5328 uint32_t DWordLength; 5329 uint32_t _3DCommandSubOpcode; 5330 uint32_t _3DCommandOpcode; 5331 uint32_t CommandSubType; 5332 uint32_t CommandType; 5333 uint32_t ConstantBufferSize; 5334 uint32_t ConstantBufferOffset; 5335}; 5336 5337static inline __attribute__((always_inline)) void 5338GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_PS_pack(__attribute__((unused)) __gen_user_data *data, 5339 __attribute__((unused)) void * restrict dst, 5340 __attribute__((unused)) const struct GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_PS * restrict values) 5341{ 5342 uint32_t * restrict dw = (uint32_t * restrict) dst; 5343 5344 dw[0] = 5345 __gen_uint(values->DWordLength, 0, 7) | 5346 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5347 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5348 __gen_uint(values->CommandSubType, 27, 28) | 5349 __gen_uint(values->CommandType, 29, 31); 5350 5351 dw[1] = 5352 __gen_uint(values->ConstantBufferSize, 0, 5) | 5353 __gen_uint(values->ConstantBufferOffset, 16, 20); 5354} 5355 5356#define GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_VS_length 2 5357#define GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_VS_length_bias 2 5358#define GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_VS_header\ 5359 .DWordLength = 0, \ 5360 ._3DCommandSubOpcode = 18, \ 5361 ._3DCommandOpcode = 1, \ 5362 .CommandSubType = 3, \ 5363 .CommandType = 3 5364 5365struct GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_VS { 5366 uint32_t DWordLength; 5367 uint32_t _3DCommandSubOpcode; 5368 uint32_t _3DCommandOpcode; 5369 uint32_t CommandSubType; 5370 uint32_t CommandType; 5371 uint32_t ConstantBufferSize; 5372 uint32_t ConstantBufferOffset; 5373}; 5374 5375static inline __attribute__((always_inline)) void 5376GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_VS_pack(__attribute__((unused)) __gen_user_data *data, 5377 __attribute__((unused)) void * restrict dst, 5378 __attribute__((unused)) const struct GFX9_3DSTATE_PUSH_CONSTANT_ALLOC_VS * restrict values) 5379{ 5380 uint32_t * restrict dw = (uint32_t * restrict) dst; 5381 5382 dw[0] = 5383 __gen_uint(values->DWordLength, 0, 7) | 5384 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5385 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5386 __gen_uint(values->CommandSubType, 27, 28) | 5387 __gen_uint(values->CommandType, 29, 31); 5388 5389 dw[1] = 5390 __gen_uint(values->ConstantBufferSize, 0, 5) | 5391 __gen_uint(values->ConstantBufferOffset, 16, 20); 5392} 5393 5394#define GFX9_3DSTATE_RASTER_length 5 5395#define GFX9_3DSTATE_RASTER_length_bias 2 5396#define GFX9_3DSTATE_RASTER_header \ 5397 .DWordLength = 3, \ 5398 ._3DCommandSubOpcode = 80, \ 5399 ._3DCommandOpcode = 0, \ 5400 .CommandSubType = 3, \ 5401 .CommandType = 3 5402 5403struct GFX9_3DSTATE_RASTER { 5404 uint32_t DWordLength; 5405 uint32_t _3DCommandSubOpcode; 5406 uint32_t _3DCommandOpcode; 5407 uint32_t CommandSubType; 5408 uint32_t CommandType; 5409 bool ViewportZNearClipTestEnable; 5410 bool ScissorRectangleEnable; 5411 bool AntialiasingEnable; 5412 uint32_t BackFaceFillMode; 5413#define FILL_MODE_SOLID 0 5414#define FILL_MODE_WIREFRAME 1 5415#define FILL_MODE_POINT 2 5416 uint32_t FrontFaceFillMode; 5417#define FILL_MODE_SOLID 0 5418#define FILL_MODE_WIREFRAME 1 5419#define FILL_MODE_POINT 2 5420 bool GlobalDepthOffsetEnablePoint; 5421 bool GlobalDepthOffsetEnableWireframe; 5422 bool GlobalDepthOffsetEnableSolid; 5423 uint32_t DXMultisampleRasterizationMode; 5424#define MSRASTMODE_OFF_PIXEL 0 5425#define MSRASTMODE_OFF_PATTERN 1 5426#define MSRASTMODE_ON_PIXEL 2 5427#define MSRASTMODE_ON_PATTERN 3 5428 bool DXMultisampleRasterizationEnable; 5429 bool SmoothPointEnable; 5430 uint32_t ForceMultisampling; 5431 uint32_t CullMode; 5432#define CULLMODE_BOTH 0 5433#define CULLMODE_NONE 1 5434#define CULLMODE_FRONT 2 5435#define CULLMODE_BACK 3 5436 uint32_t ForcedSampleCount; 5437#define FSC_NUMRASTSAMPLES_0 0 5438#define FSC_NUMRASTSAMPLES_1 1 5439#define FSC_NUMRASTSAMPLES_2 2 5440#define FSC_NUMRASTSAMPLES_4 3 5441#define FSC_NUMRASTSAMPLES_8 4 5442#define FSC_NUMRASTSAMPLES_16 5 5443 uint32_t FrontWinding; 5444#define Clockwise 0 5445#define CounterClockwise 1 5446 uint32_t APIMode; 5447#define DX9OGL 0 5448#define DX100 1 5449#define DX101 2 5450 bool ConservativeRasterizationEnable; 5451 bool ViewportZFarClipTestEnable; 5452 float GlobalDepthOffsetConstant; 5453 float GlobalDepthOffsetScale; 5454 float GlobalDepthOffsetClamp; 5455}; 5456 5457static inline __attribute__((always_inline)) void 5458GFX9_3DSTATE_RASTER_pack(__attribute__((unused)) __gen_user_data *data, 5459 __attribute__((unused)) void * restrict dst, 5460 __attribute__((unused)) const struct GFX9_3DSTATE_RASTER * restrict values) 5461{ 5462 uint32_t * restrict dw = (uint32_t * restrict) dst; 5463 5464 dw[0] = 5465 __gen_uint(values->DWordLength, 0, 7) | 5466 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5467 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5468 __gen_uint(values->CommandSubType, 27, 28) | 5469 __gen_uint(values->CommandType, 29, 31); 5470 5471 dw[1] = 5472 __gen_uint(values->ViewportZNearClipTestEnable, 0, 0) | 5473 __gen_uint(values->ScissorRectangleEnable, 1, 1) | 5474 __gen_uint(values->AntialiasingEnable, 2, 2) | 5475 __gen_uint(values->BackFaceFillMode, 3, 4) | 5476 __gen_uint(values->FrontFaceFillMode, 5, 6) | 5477 __gen_uint(values->GlobalDepthOffsetEnablePoint, 7, 7) | 5478 __gen_uint(values->GlobalDepthOffsetEnableWireframe, 8, 8) | 5479 __gen_uint(values->GlobalDepthOffsetEnableSolid, 9, 9) | 5480 __gen_uint(values->DXMultisampleRasterizationMode, 10, 11) | 5481 __gen_uint(values->DXMultisampleRasterizationEnable, 12, 12) | 5482 __gen_uint(values->SmoothPointEnable, 13, 13) | 5483 __gen_uint(values->ForceMultisampling, 14, 14) | 5484 __gen_uint(values->CullMode, 16, 17) | 5485 __gen_uint(values->ForcedSampleCount, 18, 20) | 5486 __gen_uint(values->FrontWinding, 21, 21) | 5487 __gen_uint(values->APIMode, 22, 23) | 5488 __gen_uint(values->ConservativeRasterizationEnable, 24, 24) | 5489 __gen_uint(values->ViewportZFarClipTestEnable, 26, 26); 5490 5491 dw[2] = 5492 __gen_float(values->GlobalDepthOffsetConstant); 5493 5494 dw[3] = 5495 __gen_float(values->GlobalDepthOffsetScale); 5496 5497 dw[4] = 5498 __gen_float(values->GlobalDepthOffsetClamp); 5499} 5500 5501#define GFX9_3DSTATE_RS_CONSTANT_POINTER_length 4 5502#define GFX9_3DSTATE_RS_CONSTANT_POINTER_length_bias 2 5503#define GFX9_3DSTATE_RS_CONSTANT_POINTER_header \ 5504 .DWordLength = 2, \ 5505 ._3DCommandSubOpcode = 84, \ 5506 ._3DCommandOpcode = 0, \ 5507 .CommandSubType = 3, \ 5508 .CommandType = 3 5509 5510struct GFX9_3DSTATE_RS_CONSTANT_POINTER { 5511 uint32_t DWordLength; 5512 uint32_t _3DCommandSubOpcode; 5513 uint32_t _3DCommandOpcode; 5514 uint32_t CommandSubType; 5515 uint32_t CommandType; 5516 uint32_t OperationLoadorStore; 5517#define RS_Store 0 5518#define RS_Load 1 5519 uint32_t ShaderSelect; 5520#define VS 0 5521#define PS 4 5522 __gen_address_type GlobalConstantBufferAddress; 5523 __gen_address_type GlobalConstantBufferAddressHigh; 5524}; 5525 5526static inline __attribute__((always_inline)) void 5527GFX9_3DSTATE_RS_CONSTANT_POINTER_pack(__attribute__((unused)) __gen_user_data *data, 5528 __attribute__((unused)) void * restrict dst, 5529 __attribute__((unused)) const struct GFX9_3DSTATE_RS_CONSTANT_POINTER * restrict values) 5530{ 5531 uint32_t * restrict dw = (uint32_t * restrict) dst; 5532 5533 dw[0] = 5534 __gen_uint(values->DWordLength, 0, 7) | 5535 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5536 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5537 __gen_uint(values->CommandSubType, 27, 28) | 5538 __gen_uint(values->CommandType, 29, 31); 5539 5540 dw[1] = 5541 __gen_uint(values->OperationLoadorStore, 12, 12) | 5542 __gen_uint(values->ShaderSelect, 28, 30); 5543 5544 dw[2] = __gen_address(data, &dw[2], values->GlobalConstantBufferAddress, 0, 6, 31); 5545 5546 dw[3] = __gen_address(data, &dw[3], values->GlobalConstantBufferAddressHigh, 0, 0, 31); 5547} 5548 5549#define GFX9_3DSTATE_SAMPLER_PALETTE_LOAD0_length_bias 2 5550#define GFX9_3DSTATE_SAMPLER_PALETTE_LOAD0_header\ 5551 ._3DCommandSubOpcode = 2, \ 5552 ._3DCommandOpcode = 1, \ 5553 .CommandSubType = 3, \ 5554 .CommandType = 3 5555 5556struct GFX9_3DSTATE_SAMPLER_PALETTE_LOAD0 { 5557 uint32_t DWordLength; 5558 uint32_t _3DCommandSubOpcode; 5559 uint32_t _3DCommandOpcode; 5560 uint32_t CommandSubType; 5561 uint32_t CommandType; 5562 /* variable length fields follow */ 5563}; 5564 5565static inline __attribute__((always_inline)) void 5566GFX9_3DSTATE_SAMPLER_PALETTE_LOAD0_pack(__attribute__((unused)) __gen_user_data *data, 5567 __attribute__((unused)) void * restrict dst, 5568 __attribute__((unused)) const struct GFX9_3DSTATE_SAMPLER_PALETTE_LOAD0 * restrict values) 5569{ 5570 uint32_t * restrict dw = (uint32_t * restrict) dst; 5571 5572 dw[0] = 5573 __gen_uint(values->DWordLength, 0, 7) | 5574 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5575 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5576 __gen_uint(values->CommandSubType, 27, 28) | 5577 __gen_uint(values->CommandType, 29, 31); 5578} 5579 5580#define GFX9_3DSTATE_SAMPLER_PALETTE_LOAD1_length_bias 2 5581#define GFX9_3DSTATE_SAMPLER_PALETTE_LOAD1_header\ 5582 .DWordLength = 0, \ 5583 ._3DCommandSubOpcode = 12, \ 5584 ._3DCommandOpcode = 1, \ 5585 .CommandSubType = 3, \ 5586 .CommandType = 3 5587 5588struct GFX9_3DSTATE_SAMPLER_PALETTE_LOAD1 { 5589 uint32_t DWordLength; 5590 uint32_t _3DCommandSubOpcode; 5591 uint32_t _3DCommandOpcode; 5592 uint32_t CommandSubType; 5593 uint32_t CommandType; 5594 /* variable length fields follow */ 5595}; 5596 5597static inline __attribute__((always_inline)) void 5598GFX9_3DSTATE_SAMPLER_PALETTE_LOAD1_pack(__attribute__((unused)) __gen_user_data *data, 5599 __attribute__((unused)) void * restrict dst, 5600 __attribute__((unused)) const struct GFX9_3DSTATE_SAMPLER_PALETTE_LOAD1 * restrict values) 5601{ 5602 uint32_t * restrict dw = (uint32_t * restrict) dst; 5603 5604 dw[0] = 5605 __gen_uint(values->DWordLength, 0, 7) | 5606 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5607 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5608 __gen_uint(values->CommandSubType, 27, 28) | 5609 __gen_uint(values->CommandType, 29, 31); 5610} 5611 5612#define GFX9_3DSTATE_SAMPLER_STATE_POINTERS_DS_length 2 5613#define GFX9_3DSTATE_SAMPLER_STATE_POINTERS_DS_length_bias 2 5614#define GFX9_3DSTATE_SAMPLER_STATE_POINTERS_DS_header\ 5615 .DWordLength = 0, \ 5616 ._3DCommandSubOpcode = 45, \ 5617 ._3DCommandOpcode = 0, \ 5618 .CommandSubType = 3, \ 5619 .CommandType = 3 5620 5621struct GFX9_3DSTATE_SAMPLER_STATE_POINTERS_DS { 5622 uint32_t DWordLength; 5623 uint32_t _3DCommandSubOpcode; 5624 uint32_t _3DCommandOpcode; 5625 uint32_t CommandSubType; 5626 uint32_t CommandType; 5627 uint64_t PointertoDSSamplerState; 5628}; 5629 5630static inline __attribute__((always_inline)) void 5631GFX9_3DSTATE_SAMPLER_STATE_POINTERS_DS_pack(__attribute__((unused)) __gen_user_data *data, 5632 __attribute__((unused)) void * restrict dst, 5633 __attribute__((unused)) const struct GFX9_3DSTATE_SAMPLER_STATE_POINTERS_DS * restrict values) 5634{ 5635 uint32_t * restrict dw = (uint32_t * restrict) dst; 5636 5637 dw[0] = 5638 __gen_uint(values->DWordLength, 0, 7) | 5639 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5640 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5641 __gen_uint(values->CommandSubType, 27, 28) | 5642 __gen_uint(values->CommandType, 29, 31); 5643 5644 dw[1] = 5645 __gen_offset(values->PointertoDSSamplerState, 5, 31); 5646} 5647 5648#define GFX9_3DSTATE_SAMPLER_STATE_POINTERS_GS_length 2 5649#define GFX9_3DSTATE_SAMPLER_STATE_POINTERS_GS_length_bias 2 5650#define GFX9_3DSTATE_SAMPLER_STATE_POINTERS_GS_header\ 5651 .DWordLength = 0, \ 5652 ._3DCommandSubOpcode = 46, \ 5653 ._3DCommandOpcode = 0, \ 5654 .CommandSubType = 3, \ 5655 .CommandType = 3 5656 5657struct GFX9_3DSTATE_SAMPLER_STATE_POINTERS_GS { 5658 uint32_t DWordLength; 5659 uint32_t _3DCommandSubOpcode; 5660 uint32_t _3DCommandOpcode; 5661 uint32_t CommandSubType; 5662 uint32_t CommandType; 5663 uint64_t PointertoGSSamplerState; 5664}; 5665 5666static inline __attribute__((always_inline)) void 5667GFX9_3DSTATE_SAMPLER_STATE_POINTERS_GS_pack(__attribute__((unused)) __gen_user_data *data, 5668 __attribute__((unused)) void * restrict dst, 5669 __attribute__((unused)) const struct GFX9_3DSTATE_SAMPLER_STATE_POINTERS_GS * restrict values) 5670{ 5671 uint32_t * restrict dw = (uint32_t * restrict) dst; 5672 5673 dw[0] = 5674 __gen_uint(values->DWordLength, 0, 7) | 5675 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5676 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5677 __gen_uint(values->CommandSubType, 27, 28) | 5678 __gen_uint(values->CommandType, 29, 31); 5679 5680 dw[1] = 5681 __gen_offset(values->PointertoGSSamplerState, 5, 31); 5682} 5683 5684#define GFX9_3DSTATE_SAMPLER_STATE_POINTERS_HS_length 2 5685#define GFX9_3DSTATE_SAMPLER_STATE_POINTERS_HS_length_bias 2 5686#define GFX9_3DSTATE_SAMPLER_STATE_POINTERS_HS_header\ 5687 .DWordLength = 0, \ 5688 ._3DCommandSubOpcode = 44, \ 5689 ._3DCommandOpcode = 0, \ 5690 .CommandSubType = 3, \ 5691 .CommandType = 3 5692 5693struct GFX9_3DSTATE_SAMPLER_STATE_POINTERS_HS { 5694 uint32_t DWordLength; 5695 uint32_t _3DCommandSubOpcode; 5696 uint32_t _3DCommandOpcode; 5697 uint32_t CommandSubType; 5698 uint32_t CommandType; 5699 uint64_t PointertoHSSamplerState; 5700}; 5701 5702static inline __attribute__((always_inline)) void 5703GFX9_3DSTATE_SAMPLER_STATE_POINTERS_HS_pack(__attribute__((unused)) __gen_user_data *data, 5704 __attribute__((unused)) void * restrict dst, 5705 __attribute__((unused)) const struct GFX9_3DSTATE_SAMPLER_STATE_POINTERS_HS * restrict values) 5706{ 5707 uint32_t * restrict dw = (uint32_t * restrict) dst; 5708 5709 dw[0] = 5710 __gen_uint(values->DWordLength, 0, 7) | 5711 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5712 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5713 __gen_uint(values->CommandSubType, 27, 28) | 5714 __gen_uint(values->CommandType, 29, 31); 5715 5716 dw[1] = 5717 __gen_offset(values->PointertoHSSamplerState, 5, 31); 5718} 5719 5720#define GFX9_3DSTATE_SAMPLER_STATE_POINTERS_PS_length 2 5721#define GFX9_3DSTATE_SAMPLER_STATE_POINTERS_PS_length_bias 2 5722#define GFX9_3DSTATE_SAMPLER_STATE_POINTERS_PS_header\ 5723 .DWordLength = 0, \ 5724 ._3DCommandSubOpcode = 47, \ 5725 ._3DCommandOpcode = 0, \ 5726 .CommandSubType = 3, \ 5727 .CommandType = 3 5728 5729struct GFX9_3DSTATE_SAMPLER_STATE_POINTERS_PS { 5730 uint32_t DWordLength; 5731 uint32_t _3DCommandSubOpcode; 5732 uint32_t _3DCommandOpcode; 5733 uint32_t CommandSubType; 5734 uint32_t CommandType; 5735 uint64_t PointertoPSSamplerState; 5736}; 5737 5738static inline __attribute__((always_inline)) void 5739GFX9_3DSTATE_SAMPLER_STATE_POINTERS_PS_pack(__attribute__((unused)) __gen_user_data *data, 5740 __attribute__((unused)) void * restrict dst, 5741 __attribute__((unused)) const struct GFX9_3DSTATE_SAMPLER_STATE_POINTERS_PS * restrict values) 5742{ 5743 uint32_t * restrict dw = (uint32_t * restrict) dst; 5744 5745 dw[0] = 5746 __gen_uint(values->DWordLength, 0, 7) | 5747 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5748 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5749 __gen_uint(values->CommandSubType, 27, 28) | 5750 __gen_uint(values->CommandType, 29, 31); 5751 5752 dw[1] = 5753 __gen_offset(values->PointertoPSSamplerState, 5, 31); 5754} 5755 5756#define GFX9_3DSTATE_SAMPLER_STATE_POINTERS_VS_length 2 5757#define GFX9_3DSTATE_SAMPLER_STATE_POINTERS_VS_length_bias 2 5758#define GFX9_3DSTATE_SAMPLER_STATE_POINTERS_VS_header\ 5759 .DWordLength = 0, \ 5760 ._3DCommandSubOpcode = 43, \ 5761 ._3DCommandOpcode = 0, \ 5762 .CommandSubType = 3, \ 5763 .CommandType = 3 5764 5765struct GFX9_3DSTATE_SAMPLER_STATE_POINTERS_VS { 5766 uint32_t DWordLength; 5767 uint32_t _3DCommandSubOpcode; 5768 uint32_t _3DCommandOpcode; 5769 uint32_t CommandSubType; 5770 uint32_t CommandType; 5771 uint64_t PointertoVSSamplerState; 5772}; 5773 5774static inline __attribute__((always_inline)) void 5775GFX9_3DSTATE_SAMPLER_STATE_POINTERS_VS_pack(__attribute__((unused)) __gen_user_data *data, 5776 __attribute__((unused)) void * restrict dst, 5777 __attribute__((unused)) const struct GFX9_3DSTATE_SAMPLER_STATE_POINTERS_VS * restrict values) 5778{ 5779 uint32_t * restrict dw = (uint32_t * restrict) dst; 5780 5781 dw[0] = 5782 __gen_uint(values->DWordLength, 0, 7) | 5783 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5784 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5785 __gen_uint(values->CommandSubType, 27, 28) | 5786 __gen_uint(values->CommandType, 29, 31); 5787 5788 dw[1] = 5789 __gen_offset(values->PointertoVSSamplerState, 5, 31); 5790} 5791 5792#define GFX9_3DSTATE_SAMPLE_MASK_length 2 5793#define GFX9_3DSTATE_SAMPLE_MASK_length_bias 2 5794#define GFX9_3DSTATE_SAMPLE_MASK_header \ 5795 .DWordLength = 0, \ 5796 ._3DCommandSubOpcode = 24, \ 5797 ._3DCommandOpcode = 0, \ 5798 .CommandSubType = 3, \ 5799 .CommandType = 3 5800 5801struct GFX9_3DSTATE_SAMPLE_MASK { 5802 uint32_t DWordLength; 5803 uint32_t _3DCommandSubOpcode; 5804 uint32_t _3DCommandOpcode; 5805 uint32_t CommandSubType; 5806 uint32_t CommandType; 5807 uint32_t SampleMask; 5808}; 5809 5810static inline __attribute__((always_inline)) void 5811GFX9_3DSTATE_SAMPLE_MASK_pack(__attribute__((unused)) __gen_user_data *data, 5812 __attribute__((unused)) void * restrict dst, 5813 __attribute__((unused)) const struct GFX9_3DSTATE_SAMPLE_MASK * restrict values) 5814{ 5815 uint32_t * restrict dw = (uint32_t * restrict) dst; 5816 5817 dw[0] = 5818 __gen_uint(values->DWordLength, 0, 7) | 5819 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5820 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5821 __gen_uint(values->CommandSubType, 27, 28) | 5822 __gen_uint(values->CommandType, 29, 31); 5823 5824 dw[1] = 5825 __gen_uint(values->SampleMask, 0, 15); 5826} 5827 5828#define GFX9_3DSTATE_SAMPLE_PATTERN_length 9 5829#define GFX9_3DSTATE_SAMPLE_PATTERN_length_bias 2 5830#define GFX9_3DSTATE_SAMPLE_PATTERN_header \ 5831 .DWordLength = 7, \ 5832 ._3DCommandSubOpcode = 28, \ 5833 ._3DCommandOpcode = 1, \ 5834 .CommandSubType = 3, \ 5835 .CommandType = 3 5836 5837struct GFX9_3DSTATE_SAMPLE_PATTERN { 5838 uint32_t DWordLength; 5839 uint32_t _3DCommandSubOpcode; 5840 uint32_t _3DCommandOpcode; 5841 uint32_t CommandSubType; 5842 uint32_t CommandType; 5843 float _16xSample0YOffset; 5844 float _16xSample0XOffset; 5845 float _16xSample1YOffset; 5846 float _16xSample1XOffset; 5847 float _16xSample2YOffset; 5848 float _16xSample2XOffset; 5849 float _16xSample3YOffset; 5850 float _16xSample3XOffset; 5851 float _16xSample4YOffset; 5852 float _16xSample4XOffset; 5853 float _16xSample5YOffset; 5854 float _16xSample5XOffset; 5855 float _16xSample6YOffset; 5856 float _16xSample6XOffset; 5857 float _16xSample7YOffset; 5858 float _16xSample7XOffset; 5859 float _16xSample8YOffset; 5860 float _16xSample8XOffset; 5861 float _16xSample9YOffset; 5862 float _16xSample9XOffset; 5863 float _16xSample10YOffset; 5864 float _16xSample10XOffset; 5865 float _16xSample11YOffset; 5866 float _16xSample11XOffset; 5867 float _16xSample12YOffset; 5868 float _16xSample12XOffset; 5869 float _16xSample13YOffset; 5870 float _16xSample13XOffset; 5871 float _16xSample14YOffset; 5872 float _16xSample14XOffset; 5873 float _16xSample15YOffset; 5874 float _16xSample15XOffset; 5875 float _8xSample4YOffset; 5876 float _8xSample4XOffset; 5877 float _8xSample5YOffset; 5878 float _8xSample5XOffset; 5879 float _8xSample6YOffset; 5880 float _8xSample6XOffset; 5881 float _8xSample7YOffset; 5882 float _8xSample7XOffset; 5883 float _8xSample0YOffset; 5884 float _8xSample0XOffset; 5885 float _8xSample1YOffset; 5886 float _8xSample1XOffset; 5887 float _8xSample2YOffset; 5888 float _8xSample2XOffset; 5889 float _8xSample3YOffset; 5890 float _8xSample3XOffset; 5891 float _4xSample0YOffset; 5892 float _4xSample0XOffset; 5893 float _4xSample1YOffset; 5894 float _4xSample1XOffset; 5895 float _4xSample2YOffset; 5896 float _4xSample2XOffset; 5897 float _4xSample3YOffset; 5898 float _4xSample3XOffset; 5899 float _2xSample0YOffset; 5900 float _2xSample0XOffset; 5901 float _2xSample1YOffset; 5902 float _2xSample1XOffset; 5903 float _1xSample0YOffset; 5904 float _1xSample0XOffset; 5905}; 5906 5907static inline __attribute__((always_inline)) void 5908GFX9_3DSTATE_SAMPLE_PATTERN_pack(__attribute__((unused)) __gen_user_data *data, 5909 __attribute__((unused)) void * restrict dst, 5910 __attribute__((unused)) const struct GFX9_3DSTATE_SAMPLE_PATTERN * restrict values) 5911{ 5912 uint32_t * restrict dw = (uint32_t * restrict) dst; 5913 5914 dw[0] = 5915 __gen_uint(values->DWordLength, 0, 7) | 5916 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 5917 __gen_uint(values->_3DCommandOpcode, 24, 26) | 5918 __gen_uint(values->CommandSubType, 27, 28) | 5919 __gen_uint(values->CommandType, 29, 31); 5920 5921 dw[1] = 5922 __gen_ufixed(values->_16xSample0YOffset, 0, 3, 4) | 5923 __gen_ufixed(values->_16xSample0XOffset, 4, 7, 4) | 5924 __gen_ufixed(values->_16xSample1YOffset, 8, 11, 4) | 5925 __gen_ufixed(values->_16xSample1XOffset, 12, 15, 4) | 5926 __gen_ufixed(values->_16xSample2YOffset, 16, 19, 4) | 5927 __gen_ufixed(values->_16xSample2XOffset, 20, 23, 4) | 5928 __gen_ufixed(values->_16xSample3YOffset, 24, 27, 4) | 5929 __gen_ufixed(values->_16xSample3XOffset, 28, 31, 4); 5930 5931 dw[2] = 5932 __gen_ufixed(values->_16xSample4YOffset, 0, 3, 4) | 5933 __gen_ufixed(values->_16xSample4XOffset, 4, 7, 4) | 5934 __gen_ufixed(values->_16xSample5YOffset, 8, 11, 4) | 5935 __gen_ufixed(values->_16xSample5XOffset, 12, 15, 4) | 5936 __gen_ufixed(values->_16xSample6YOffset, 16, 19, 4) | 5937 __gen_ufixed(values->_16xSample6XOffset, 20, 23, 4) | 5938 __gen_ufixed(values->_16xSample7YOffset, 24, 27, 4) | 5939 __gen_ufixed(values->_16xSample7XOffset, 28, 31, 4); 5940 5941 dw[3] = 5942 __gen_ufixed(values->_16xSample8YOffset, 0, 3, 4) | 5943 __gen_ufixed(values->_16xSample8XOffset, 4, 7, 4) | 5944 __gen_ufixed(values->_16xSample9YOffset, 8, 11, 4) | 5945 __gen_ufixed(values->_16xSample9XOffset, 12, 15, 4) | 5946 __gen_ufixed(values->_16xSample10YOffset, 16, 19, 4) | 5947 __gen_ufixed(values->_16xSample10XOffset, 20, 23, 4) | 5948 __gen_ufixed(values->_16xSample11YOffset, 24, 27, 4) | 5949 __gen_ufixed(values->_16xSample11XOffset, 28, 31, 4); 5950 5951 dw[4] = 5952 __gen_ufixed(values->_16xSample12YOffset, 0, 3, 4) | 5953 __gen_ufixed(values->_16xSample12XOffset, 4, 7, 4) | 5954 __gen_ufixed(values->_16xSample13YOffset, 8, 11, 4) | 5955 __gen_ufixed(values->_16xSample13XOffset, 12, 15, 4) | 5956 __gen_ufixed(values->_16xSample14YOffset, 16, 19, 4) | 5957 __gen_ufixed(values->_16xSample14XOffset, 20, 23, 4) | 5958 __gen_ufixed(values->_16xSample15YOffset, 24, 27, 4) | 5959 __gen_ufixed(values->_16xSample15XOffset, 28, 31, 4); 5960 5961 dw[5] = 5962 __gen_ufixed(values->_8xSample4YOffset, 0, 3, 4) | 5963 __gen_ufixed(values->_8xSample4XOffset, 4, 7, 4) | 5964 __gen_ufixed(values->_8xSample5YOffset, 8, 11, 4) | 5965 __gen_ufixed(values->_8xSample5XOffset, 12, 15, 4) | 5966 __gen_ufixed(values->_8xSample6YOffset, 16, 19, 4) | 5967 __gen_ufixed(values->_8xSample6XOffset, 20, 23, 4) | 5968 __gen_ufixed(values->_8xSample7YOffset, 24, 27, 4) | 5969 __gen_ufixed(values->_8xSample7XOffset, 28, 31, 4); 5970 5971 dw[6] = 5972 __gen_ufixed(values->_8xSample0YOffset, 0, 3, 4) | 5973 __gen_ufixed(values->_8xSample0XOffset, 4, 7, 4) | 5974 __gen_ufixed(values->_8xSample1YOffset, 8, 11, 4) | 5975 __gen_ufixed(values->_8xSample1XOffset, 12, 15, 4) | 5976 __gen_ufixed(values->_8xSample2YOffset, 16, 19, 4) | 5977 __gen_ufixed(values->_8xSample2XOffset, 20, 23, 4) | 5978 __gen_ufixed(values->_8xSample3YOffset, 24, 27, 4) | 5979 __gen_ufixed(values->_8xSample3XOffset, 28, 31, 4); 5980 5981 dw[7] = 5982 __gen_ufixed(values->_4xSample0YOffset, 0, 3, 4) | 5983 __gen_ufixed(values->_4xSample0XOffset, 4, 7, 4) | 5984 __gen_ufixed(values->_4xSample1YOffset, 8, 11, 4) | 5985 __gen_ufixed(values->_4xSample1XOffset, 12, 15, 4) | 5986 __gen_ufixed(values->_4xSample2YOffset, 16, 19, 4) | 5987 __gen_ufixed(values->_4xSample2XOffset, 20, 23, 4) | 5988 __gen_ufixed(values->_4xSample3YOffset, 24, 27, 4) | 5989 __gen_ufixed(values->_4xSample3XOffset, 28, 31, 4); 5990 5991 dw[8] = 5992 __gen_ufixed(values->_2xSample0YOffset, 0, 3, 4) | 5993 __gen_ufixed(values->_2xSample0XOffset, 4, 7, 4) | 5994 __gen_ufixed(values->_2xSample1YOffset, 8, 11, 4) | 5995 __gen_ufixed(values->_2xSample1XOffset, 12, 15, 4) | 5996 __gen_ufixed(values->_1xSample0YOffset, 16, 19, 4) | 5997 __gen_ufixed(values->_1xSample0XOffset, 20, 23, 4); 5998} 5999 6000#define GFX9_3DSTATE_SBE_length 6 6001#define GFX9_3DSTATE_SBE_length_bias 2 6002#define GFX9_3DSTATE_SBE_header \ 6003 .DWordLength = 4, \ 6004 ._3DCommandSubOpcode = 31, \ 6005 ._3DCommandOpcode = 0, \ 6006 .CommandSubType = 3, \ 6007 .CommandType = 3 6008 6009struct GFX9_3DSTATE_SBE { 6010 uint32_t DWordLength; 6011 uint32_t _3DCommandSubOpcode; 6012 uint32_t _3DCommandOpcode; 6013 uint32_t CommandSubType; 6014 uint32_t CommandType; 6015 uint32_t PrimitiveIDOverrideAttributeSelect; 6016 uint32_t VertexURBEntryReadOffset; 6017 uint32_t VertexURBEntryReadLength; 6018 bool PrimitiveIDOverrideComponentX; 6019 bool PrimitiveIDOverrideComponentY; 6020 bool PrimitiveIDOverrideComponentZ; 6021 bool PrimitiveIDOverrideComponentW; 6022 uint32_t PointSpriteTextureCoordinateOrigin; 6023#define UPPERLEFT 0 6024#define LOWERLEFT 1 6025 bool AttributeSwizzleEnable; 6026 uint32_t NumberofSFOutputAttributes; 6027 bool ForceVertexURBEntryReadOffset; 6028 bool ForceVertexURBEntryReadLength; 6029 uint32_t PointSpriteTextureCoordinateEnable; 6030 uint32_t ConstantInterpolationEnable; 6031 uint32_t AttributeActiveComponentFormat[32]; 6032#define ACTIVE_COMPONENT_DISABLED 0 6033#define ACTIVE_COMPONENT_XY 1 6034#define ACTIVE_COMPONENT_XYZ 2 6035#define ACTIVE_COMPONENT_XYZW 3 6036}; 6037 6038static inline __attribute__((always_inline)) void 6039GFX9_3DSTATE_SBE_pack(__attribute__((unused)) __gen_user_data *data, 6040 __attribute__((unused)) void * restrict dst, 6041 __attribute__((unused)) const struct GFX9_3DSTATE_SBE * restrict values) 6042{ 6043 uint32_t * restrict dw = (uint32_t * restrict) dst; 6044 6045 dw[0] = 6046 __gen_uint(values->DWordLength, 0, 7) | 6047 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 6048 __gen_uint(values->_3DCommandOpcode, 24, 26) | 6049 __gen_uint(values->CommandSubType, 27, 28) | 6050 __gen_uint(values->CommandType, 29, 31); 6051 6052 dw[1] = 6053 __gen_uint(values->PrimitiveIDOverrideAttributeSelect, 0, 4) | 6054 __gen_uint(values->VertexURBEntryReadOffset, 5, 10) | 6055 __gen_uint(values->VertexURBEntryReadLength, 11, 15) | 6056 __gen_uint(values->PrimitiveIDOverrideComponentX, 16, 16) | 6057 __gen_uint(values->PrimitiveIDOverrideComponentY, 17, 17) | 6058 __gen_uint(values->PrimitiveIDOverrideComponentZ, 18, 18) | 6059 __gen_uint(values->PrimitiveIDOverrideComponentW, 19, 19) | 6060 __gen_uint(values->PointSpriteTextureCoordinateOrigin, 20, 20) | 6061 __gen_uint(values->AttributeSwizzleEnable, 21, 21) | 6062 __gen_uint(values->NumberofSFOutputAttributes, 22, 27) | 6063 __gen_uint(values->ForceVertexURBEntryReadOffset, 28, 28) | 6064 __gen_uint(values->ForceVertexURBEntryReadLength, 29, 29); 6065 6066 dw[2] = 6067 __gen_uint(values->PointSpriteTextureCoordinateEnable, 0, 31); 6068 6069 dw[3] = 6070 __gen_uint(values->ConstantInterpolationEnable, 0, 31); 6071 6072 dw[4] = 6073 __gen_uint(values->AttributeActiveComponentFormat[0], 0, 1) | 6074 __gen_uint(values->AttributeActiveComponentFormat[1], 2, 3) | 6075 __gen_uint(values->AttributeActiveComponentFormat[2], 4, 5) | 6076 __gen_uint(values->AttributeActiveComponentFormat[3], 6, 7) | 6077 __gen_uint(values->AttributeActiveComponentFormat[4], 8, 9) | 6078 __gen_uint(values->AttributeActiveComponentFormat[5], 10, 11) | 6079 __gen_uint(values->AttributeActiveComponentFormat[6], 12, 13) | 6080 __gen_uint(values->AttributeActiveComponentFormat[7], 14, 15) | 6081 __gen_uint(values->AttributeActiveComponentFormat[8], 16, 17) | 6082 __gen_uint(values->AttributeActiveComponentFormat[9], 18, 19) | 6083 __gen_uint(values->AttributeActiveComponentFormat[10], 20, 21) | 6084 __gen_uint(values->AttributeActiveComponentFormat[11], 22, 23) | 6085 __gen_uint(values->AttributeActiveComponentFormat[12], 24, 25) | 6086 __gen_uint(values->AttributeActiveComponentFormat[13], 26, 27) | 6087 __gen_uint(values->AttributeActiveComponentFormat[14], 28, 29) | 6088 __gen_uint(values->AttributeActiveComponentFormat[15], 30, 31); 6089 6090 dw[5] = 6091 __gen_uint(values->AttributeActiveComponentFormat[16], 0, 1) | 6092 __gen_uint(values->AttributeActiveComponentFormat[17], 2, 3) | 6093 __gen_uint(values->AttributeActiveComponentFormat[18], 4, 5) | 6094 __gen_uint(values->AttributeActiveComponentFormat[19], 6, 7) | 6095 __gen_uint(values->AttributeActiveComponentFormat[20], 8, 9) | 6096 __gen_uint(values->AttributeActiveComponentFormat[21], 10, 11) | 6097 __gen_uint(values->AttributeActiveComponentFormat[22], 12, 13) | 6098 __gen_uint(values->AttributeActiveComponentFormat[23], 14, 15) | 6099 __gen_uint(values->AttributeActiveComponentFormat[24], 16, 17) | 6100 __gen_uint(values->AttributeActiveComponentFormat[25], 18, 19) | 6101 __gen_uint(values->AttributeActiveComponentFormat[26], 20, 21) | 6102 __gen_uint(values->AttributeActiveComponentFormat[27], 22, 23) | 6103 __gen_uint(values->AttributeActiveComponentFormat[28], 24, 25) | 6104 __gen_uint(values->AttributeActiveComponentFormat[29], 26, 27) | 6105 __gen_uint(values->AttributeActiveComponentFormat[30], 28, 29) | 6106 __gen_uint(values->AttributeActiveComponentFormat[31], 30, 31); 6107} 6108 6109#define GFX9_3DSTATE_SBE_SWIZ_length 11 6110#define GFX9_3DSTATE_SBE_SWIZ_length_bias 2 6111#define GFX9_3DSTATE_SBE_SWIZ_header \ 6112 .DWordLength = 9, \ 6113 ._3DCommandSubOpcode = 81, \ 6114 ._3DCommandOpcode = 0, \ 6115 .CommandSubType = 3, \ 6116 .CommandType = 3 6117 6118struct GFX9_3DSTATE_SBE_SWIZ { 6119 uint32_t DWordLength; 6120 uint32_t _3DCommandSubOpcode; 6121 uint32_t _3DCommandOpcode; 6122 uint32_t CommandSubType; 6123 uint32_t CommandType; 6124 struct GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL Attribute[16]; 6125 uint32_t AttributeWrapShortestEnables[16]; 6126}; 6127 6128static inline __attribute__((always_inline)) void 6129GFX9_3DSTATE_SBE_SWIZ_pack(__attribute__((unused)) __gen_user_data *data, 6130 __attribute__((unused)) void * restrict dst, 6131 __attribute__((unused)) const struct GFX9_3DSTATE_SBE_SWIZ * restrict values) 6132{ 6133 uint32_t * restrict dw = (uint32_t * restrict) dst; 6134 6135 dw[0] = 6136 __gen_uint(values->DWordLength, 0, 7) | 6137 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 6138 __gen_uint(values->_3DCommandOpcode, 24, 26) | 6139 __gen_uint(values->CommandSubType, 27, 28) | 6140 __gen_uint(values->CommandType, 29, 31); 6141 6142 uint32_t v1_0; 6143 GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v1_0, &values->Attribute[0]); 6144 6145 uint32_t v1_1; 6146 GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v1_1, &values->Attribute[1]); 6147 6148 dw[1] = 6149 __gen_uint(v1_0, 0, 15) | 6150 __gen_uint(v1_1, 16, 31); 6151 6152 uint32_t v2_0; 6153 GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v2_0, &values->Attribute[2]); 6154 6155 uint32_t v2_1; 6156 GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v2_1, &values->Attribute[3]); 6157 6158 dw[2] = 6159 __gen_uint(v2_0, 0, 15) | 6160 __gen_uint(v2_1, 16, 31); 6161 6162 uint32_t v3_0; 6163 GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v3_0, &values->Attribute[4]); 6164 6165 uint32_t v3_1; 6166 GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v3_1, &values->Attribute[5]); 6167 6168 dw[3] = 6169 __gen_uint(v3_0, 0, 15) | 6170 __gen_uint(v3_1, 16, 31); 6171 6172 uint32_t v4_0; 6173 GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v4_0, &values->Attribute[6]); 6174 6175 uint32_t v4_1; 6176 GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v4_1, &values->Attribute[7]); 6177 6178 dw[4] = 6179 __gen_uint(v4_0, 0, 15) | 6180 __gen_uint(v4_1, 16, 31); 6181 6182 uint32_t v5_0; 6183 GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v5_0, &values->Attribute[8]); 6184 6185 uint32_t v5_1; 6186 GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v5_1, &values->Attribute[9]); 6187 6188 dw[5] = 6189 __gen_uint(v5_0, 0, 15) | 6190 __gen_uint(v5_1, 16, 31); 6191 6192 uint32_t v6_0; 6193 GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v6_0, &values->Attribute[10]); 6194 6195 uint32_t v6_1; 6196 GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v6_1, &values->Attribute[11]); 6197 6198 dw[6] = 6199 __gen_uint(v6_0, 0, 15) | 6200 __gen_uint(v6_1, 16, 31); 6201 6202 uint32_t v7_0; 6203 GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v7_0, &values->Attribute[12]); 6204 6205 uint32_t v7_1; 6206 GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v7_1, &values->Attribute[13]); 6207 6208 dw[7] = 6209 __gen_uint(v7_0, 0, 15) | 6210 __gen_uint(v7_1, 16, 31); 6211 6212 uint32_t v8_0; 6213 GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v8_0, &values->Attribute[14]); 6214 6215 uint32_t v8_1; 6216 GFX9_SF_OUTPUT_ATTRIBUTE_DETAIL_pack(data, &v8_1, &values->Attribute[15]); 6217 6218 dw[8] = 6219 __gen_uint(v8_0, 0, 15) | 6220 __gen_uint(v8_1, 16, 31); 6221 6222 dw[9] = 6223 __gen_uint(values->AttributeWrapShortestEnables[0], 0, 3) | 6224 __gen_uint(values->AttributeWrapShortestEnables[1], 4, 7) | 6225 __gen_uint(values->AttributeWrapShortestEnables[2], 8, 11) | 6226 __gen_uint(values->AttributeWrapShortestEnables[3], 12, 15) | 6227 __gen_uint(values->AttributeWrapShortestEnables[4], 16, 19) | 6228 __gen_uint(values->AttributeWrapShortestEnables[5], 20, 23) | 6229 __gen_uint(values->AttributeWrapShortestEnables[6], 24, 27) | 6230 __gen_uint(values->AttributeWrapShortestEnables[7], 28, 31); 6231 6232 dw[10] = 6233 __gen_uint(values->AttributeWrapShortestEnables[8], 0, 3) | 6234 __gen_uint(values->AttributeWrapShortestEnables[9], 4, 7) | 6235 __gen_uint(values->AttributeWrapShortestEnables[10], 8, 11) | 6236 __gen_uint(values->AttributeWrapShortestEnables[11], 12, 15) | 6237 __gen_uint(values->AttributeWrapShortestEnables[12], 16, 19) | 6238 __gen_uint(values->AttributeWrapShortestEnables[13], 20, 23) | 6239 __gen_uint(values->AttributeWrapShortestEnables[14], 24, 27) | 6240 __gen_uint(values->AttributeWrapShortestEnables[15], 28, 31); 6241} 6242 6243#define GFX9_3DSTATE_SCISSOR_STATE_POINTERS_length 2 6244#define GFX9_3DSTATE_SCISSOR_STATE_POINTERS_length_bias 2 6245#define GFX9_3DSTATE_SCISSOR_STATE_POINTERS_header\ 6246 .DWordLength = 0, \ 6247 ._3DCommandSubOpcode = 15, \ 6248 ._3DCommandOpcode = 0, \ 6249 .CommandSubType = 3, \ 6250 .CommandType = 3 6251 6252struct GFX9_3DSTATE_SCISSOR_STATE_POINTERS { 6253 uint32_t DWordLength; 6254 uint32_t _3DCommandSubOpcode; 6255 uint32_t _3DCommandOpcode; 6256 uint32_t CommandSubType; 6257 uint32_t CommandType; 6258 uint64_t ScissorRectPointer; 6259}; 6260 6261static inline __attribute__((always_inline)) void 6262GFX9_3DSTATE_SCISSOR_STATE_POINTERS_pack(__attribute__((unused)) __gen_user_data *data, 6263 __attribute__((unused)) void * restrict dst, 6264 __attribute__((unused)) const struct GFX9_3DSTATE_SCISSOR_STATE_POINTERS * restrict values) 6265{ 6266 uint32_t * restrict dw = (uint32_t * restrict) dst; 6267 6268 dw[0] = 6269 __gen_uint(values->DWordLength, 0, 7) | 6270 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 6271 __gen_uint(values->_3DCommandOpcode, 24, 26) | 6272 __gen_uint(values->CommandSubType, 27, 28) | 6273 __gen_uint(values->CommandType, 29, 31); 6274 6275 dw[1] = 6276 __gen_offset(values->ScissorRectPointer, 5, 31); 6277} 6278 6279#define GFX9_3DSTATE_SF_length 4 6280#define GFX9_3DSTATE_SF_length_bias 2 6281#define GFX9_3DSTATE_SF_header \ 6282 .DWordLength = 2, \ 6283 ._3DCommandSubOpcode = 19, \ 6284 ._3DCommandOpcode = 0, \ 6285 .CommandSubType = 3, \ 6286 .CommandType = 3 6287 6288struct GFX9_3DSTATE_SF { 6289 uint32_t DWordLength; 6290 uint32_t _3DCommandSubOpcode; 6291 uint32_t _3DCommandOpcode; 6292 uint32_t CommandSubType; 6293 uint32_t CommandType; 6294 bool ViewportTransformEnable; 6295 bool StatisticsEnable; 6296 bool LegacyGlobalDepthBiasEnable; 6297 float LineWidth; 6298 uint32_t LineEndCapAntialiasingRegionWidth; 6299#define _05pixels 0 6300#define _10pixels 1 6301#define _20pixels 2 6302#define _40pixels 3 6303 float PointWidth; 6304 uint32_t PointWidthSource; 6305#define Vertex 0 6306#define State 1 6307 uint32_t VertexSubPixelPrecisionSelect; 6308#define _8Bit 0 6309#define _4Bit 1 6310 bool SmoothPointEnable; 6311 uint32_t AALineDistanceMode; 6312#define AALINEDISTANCE_TRUE 1 6313 uint32_t TriangleFanProvokingVertexSelect; 6314 uint32_t LineStripListProvokingVertexSelect; 6315 uint32_t TriangleStripListProvokingVertexSelect; 6316 bool LastPixelEnable; 6317}; 6318 6319static inline __attribute__((always_inline)) void 6320GFX9_3DSTATE_SF_pack(__attribute__((unused)) __gen_user_data *data, 6321 __attribute__((unused)) void * restrict dst, 6322 __attribute__((unused)) const struct GFX9_3DSTATE_SF * restrict values) 6323{ 6324 uint32_t * restrict dw = (uint32_t * restrict) dst; 6325 6326 dw[0] = 6327 __gen_uint(values->DWordLength, 0, 7) | 6328 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 6329 __gen_uint(values->_3DCommandOpcode, 24, 26) | 6330 __gen_uint(values->CommandSubType, 27, 28) | 6331 __gen_uint(values->CommandType, 29, 31); 6332 6333 dw[1] = 6334 __gen_uint(values->ViewportTransformEnable, 1, 1) | 6335 __gen_uint(values->StatisticsEnable, 10, 10) | 6336 __gen_uint(values->LegacyGlobalDepthBiasEnable, 11, 11) | 6337 __gen_ufixed(values->LineWidth, 12, 29, 7); 6338 6339 dw[2] = 6340 __gen_uint(values->LineEndCapAntialiasingRegionWidth, 16, 17); 6341 6342 dw[3] = 6343 __gen_ufixed(values->PointWidth, 0, 10, 3) | 6344 __gen_uint(values->PointWidthSource, 11, 11) | 6345 __gen_uint(values->VertexSubPixelPrecisionSelect, 12, 12) | 6346 __gen_uint(values->SmoothPointEnable, 13, 13) | 6347 __gen_uint(values->AALineDistanceMode, 14, 14) | 6348 __gen_uint(values->TriangleFanProvokingVertexSelect, 25, 26) | 6349 __gen_uint(values->LineStripListProvokingVertexSelect, 27, 28) | 6350 __gen_uint(values->TriangleStripListProvokingVertexSelect, 29, 30) | 6351 __gen_uint(values->LastPixelEnable, 31, 31); 6352} 6353 6354#define GFX9_3DSTATE_SO_BUFFER_length 8 6355#define GFX9_3DSTATE_SO_BUFFER_length_bias 2 6356#define GFX9_3DSTATE_SO_BUFFER_header \ 6357 .DWordLength = 6, \ 6358 ._3DCommandSubOpcode = 24, \ 6359 ._3DCommandOpcode = 1, \ 6360 .CommandSubType = 3, \ 6361 .CommandType = 3 6362 6363struct GFX9_3DSTATE_SO_BUFFER { 6364 uint32_t DWordLength; 6365 uint32_t _3DCommandSubOpcode; 6366 uint32_t _3DCommandOpcode; 6367 uint32_t CommandSubType; 6368 uint32_t CommandType; 6369 bool StreamOutputBufferOffsetAddressEnable; 6370 bool StreamOffsetWriteEnable; 6371 uint32_t MOCS; 6372 uint32_t SOBufferIndex; 6373 bool SOBufferEnable; 6374 __gen_address_type SurfaceBaseAddress; 6375 uint32_t SurfaceSize; 6376 __gen_address_type StreamOutputBufferOffsetAddress; 6377 uint32_t StreamOffset; 6378}; 6379 6380static inline __attribute__((always_inline)) void 6381GFX9_3DSTATE_SO_BUFFER_pack(__attribute__((unused)) __gen_user_data *data, 6382 __attribute__((unused)) void * restrict dst, 6383 __attribute__((unused)) const struct GFX9_3DSTATE_SO_BUFFER * restrict values) 6384{ 6385 uint32_t * restrict dw = (uint32_t * restrict) dst; 6386 6387 dw[0] = 6388 __gen_uint(values->DWordLength, 0, 7) | 6389 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 6390 __gen_uint(values->_3DCommandOpcode, 24, 26) | 6391 __gen_uint(values->CommandSubType, 27, 28) | 6392 __gen_uint(values->CommandType, 29, 31); 6393 6394 dw[1] = 6395 __gen_uint(values->StreamOutputBufferOffsetAddressEnable, 20, 20) | 6396 __gen_uint(values->StreamOffsetWriteEnable, 21, 21) | 6397 __gen_uint(values->MOCS, 22, 28) | 6398 __gen_uint(values->SOBufferIndex, 29, 30) | 6399 __gen_uint(values->SOBufferEnable, 31, 31); 6400 6401 const uint64_t v2_address = 6402 __gen_address(data, &dw[2], values->SurfaceBaseAddress, 0, 2, 47); 6403 dw[2] = v2_address; 6404 dw[3] = v2_address >> 32; 6405 6406 dw[4] = 6407 __gen_uint(values->SurfaceSize, 0, 29); 6408 6409 const uint64_t v5_address = 6410 __gen_address(data, &dw[5], values->StreamOutputBufferOffsetAddress, 0, 2, 47); 6411 dw[5] = v5_address; 6412 dw[6] = v5_address >> 32; 6413 6414 dw[7] = 6415 __gen_uint(values->StreamOffset, 0, 31); 6416} 6417 6418#define GFX9_3DSTATE_SO_DECL_LIST_length_bias 2 6419#define GFX9_3DSTATE_SO_DECL_LIST_header \ 6420 ._3DCommandSubOpcode = 23, \ 6421 ._3DCommandOpcode = 1, \ 6422 .CommandSubType = 3, \ 6423 .CommandType = 3 6424 6425struct GFX9_3DSTATE_SO_DECL_LIST { 6426 uint32_t DWordLength; 6427 uint32_t _3DCommandSubOpcode; 6428 uint32_t _3DCommandOpcode; 6429 uint32_t CommandSubType; 6430 uint32_t CommandType; 6431 uint32_t StreamtoBufferSelects0; 6432 uint32_t StreamtoBufferSelects1; 6433 uint32_t StreamtoBufferSelects2; 6434 uint32_t StreamtoBufferSelects3; 6435 uint32_t NumEntries0; 6436 uint32_t NumEntries1; 6437 uint32_t NumEntries2; 6438 uint32_t NumEntries3; 6439 /* variable length fields follow */ 6440}; 6441 6442static inline __attribute__((always_inline)) void 6443GFX9_3DSTATE_SO_DECL_LIST_pack(__attribute__((unused)) __gen_user_data *data, 6444 __attribute__((unused)) void * restrict dst, 6445 __attribute__((unused)) const struct GFX9_3DSTATE_SO_DECL_LIST * restrict values) 6446{ 6447 uint32_t * restrict dw = (uint32_t * restrict) dst; 6448 6449 dw[0] = 6450 __gen_uint(values->DWordLength, 0, 8) | 6451 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 6452 __gen_uint(values->_3DCommandOpcode, 24, 26) | 6453 __gen_uint(values->CommandSubType, 27, 28) | 6454 __gen_uint(values->CommandType, 29, 31); 6455 6456 dw[1] = 6457 __gen_uint(values->StreamtoBufferSelects0, 0, 3) | 6458 __gen_uint(values->StreamtoBufferSelects1, 4, 7) | 6459 __gen_uint(values->StreamtoBufferSelects2, 8, 11) | 6460 __gen_uint(values->StreamtoBufferSelects3, 12, 15); 6461 6462 dw[2] = 6463 __gen_uint(values->NumEntries0, 0, 7) | 6464 __gen_uint(values->NumEntries1, 8, 15) | 6465 __gen_uint(values->NumEntries2, 16, 23) | 6466 __gen_uint(values->NumEntries3, 24, 31); 6467} 6468 6469#define GFX9_3DSTATE_STENCIL_BUFFER_length 5 6470#define GFX9_3DSTATE_STENCIL_BUFFER_length_bias 2 6471#define GFX9_3DSTATE_STENCIL_BUFFER_header \ 6472 .DWordLength = 3, \ 6473 ._3DCommandSubOpcode = 6, \ 6474 ._3DCommandOpcode = 0, \ 6475 .CommandSubType = 3, \ 6476 .CommandType = 3 6477 6478struct GFX9_3DSTATE_STENCIL_BUFFER { 6479 uint32_t DWordLength; 6480 uint32_t _3DCommandSubOpcode; 6481 uint32_t _3DCommandOpcode; 6482 uint32_t CommandSubType; 6483 uint32_t CommandType; 6484 uint32_t SurfacePitch; 6485 uint32_t MOCS; 6486 bool StencilBufferEnable; 6487 __gen_address_type SurfaceBaseAddress; 6488 uint32_t SurfaceQPitch; 6489}; 6490 6491static inline __attribute__((always_inline)) void 6492GFX9_3DSTATE_STENCIL_BUFFER_pack(__attribute__((unused)) __gen_user_data *data, 6493 __attribute__((unused)) void * restrict dst, 6494 __attribute__((unused)) const struct GFX9_3DSTATE_STENCIL_BUFFER * restrict values) 6495{ 6496 uint32_t * restrict dw = (uint32_t * restrict) dst; 6497 6498 dw[0] = 6499 __gen_uint(values->DWordLength, 0, 7) | 6500 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 6501 __gen_uint(values->_3DCommandOpcode, 24, 26) | 6502 __gen_uint(values->CommandSubType, 27, 28) | 6503 __gen_uint(values->CommandType, 29, 31); 6504 6505 dw[1] = 6506 __gen_uint(values->SurfacePitch, 0, 16) | 6507 __gen_uint(values->MOCS, 22, 28) | 6508 __gen_uint(values->StencilBufferEnable, 31, 31); 6509 6510 const uint64_t v2_address = 6511 __gen_address(data, &dw[2], values->SurfaceBaseAddress, 0, 0, 63); 6512 dw[2] = v2_address; 6513 dw[3] = v2_address >> 32; 6514 6515 dw[4] = 6516 __gen_uint(values->SurfaceQPitch, 0, 14); 6517} 6518 6519#define GFX9_3DSTATE_STREAMOUT_length 5 6520#define GFX9_3DSTATE_STREAMOUT_length_bias 2 6521#define GFX9_3DSTATE_STREAMOUT_header \ 6522 .DWordLength = 3, \ 6523 ._3DCommandSubOpcode = 30, \ 6524 ._3DCommandOpcode = 0, \ 6525 .CommandSubType = 3, \ 6526 .CommandType = 3 6527 6528struct GFX9_3DSTATE_STREAMOUT { 6529 uint32_t DWordLength; 6530 uint32_t _3DCommandSubOpcode; 6531 uint32_t _3DCommandOpcode; 6532 uint32_t CommandSubType; 6533 uint32_t CommandType; 6534 uint32_t ForceRendering; 6535#define Resreved 1 6536#define Force_Off 2 6537#define Force_on 3 6538 bool SOStatisticsEnable; 6539 uint32_t ReorderMode; 6540#define LEADING 0 6541#define TRAILING 1 6542 uint32_t RenderStreamSelect; 6543 bool RenderingDisable; 6544 bool SOFunctionEnable; 6545 uint32_t Stream0VertexReadLength; 6546 uint32_t Stream0VertexReadOffset; 6547 uint32_t Stream1VertexReadLength; 6548 uint32_t Stream1VertexReadOffset; 6549 uint32_t Stream2VertexReadLength; 6550 uint32_t Stream2VertexReadOffset; 6551 uint32_t Stream3VertexReadLength; 6552 uint32_t Stream3VertexReadOffset; 6553 uint32_t Buffer0SurfacePitch; 6554 uint32_t Buffer1SurfacePitch; 6555 uint32_t Buffer2SurfacePitch; 6556 uint32_t Buffer3SurfacePitch; 6557}; 6558 6559static inline __attribute__((always_inline)) void 6560GFX9_3DSTATE_STREAMOUT_pack(__attribute__((unused)) __gen_user_data *data, 6561 __attribute__((unused)) void * restrict dst, 6562 __attribute__((unused)) const struct GFX9_3DSTATE_STREAMOUT * restrict values) 6563{ 6564 uint32_t * restrict dw = (uint32_t * restrict) dst; 6565 6566 dw[0] = 6567 __gen_uint(values->DWordLength, 0, 7) | 6568 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 6569 __gen_uint(values->_3DCommandOpcode, 24, 26) | 6570 __gen_uint(values->CommandSubType, 27, 28) | 6571 __gen_uint(values->CommandType, 29, 31); 6572 6573 dw[1] = 6574 __gen_uint(values->ForceRendering, 23, 24) | 6575 __gen_uint(values->SOStatisticsEnable, 25, 25) | 6576 __gen_uint(values->ReorderMode, 26, 26) | 6577 __gen_uint(values->RenderStreamSelect, 27, 28) | 6578 __gen_uint(values->RenderingDisable, 30, 30) | 6579 __gen_uint(values->SOFunctionEnable, 31, 31); 6580 6581 dw[2] = 6582 __gen_uint(values->Stream0VertexReadLength, 0, 4) | 6583 __gen_uint(values->Stream0VertexReadOffset, 5, 5) | 6584 __gen_uint(values->Stream1VertexReadLength, 8, 12) | 6585 __gen_uint(values->Stream1VertexReadOffset, 13, 13) | 6586 __gen_uint(values->Stream2VertexReadLength, 16, 20) | 6587 __gen_uint(values->Stream2VertexReadOffset, 21, 21) | 6588 __gen_uint(values->Stream3VertexReadLength, 24, 28) | 6589 __gen_uint(values->Stream3VertexReadOffset, 29, 29); 6590 6591 dw[3] = 6592 __gen_uint(values->Buffer0SurfacePitch, 0, 11) | 6593 __gen_uint(values->Buffer1SurfacePitch, 16, 27); 6594 6595 dw[4] = 6596 __gen_uint(values->Buffer2SurfacePitch, 0, 11) | 6597 __gen_uint(values->Buffer3SurfacePitch, 16, 27); 6598} 6599 6600#define GFX9_3DSTATE_TE_length 4 6601#define GFX9_3DSTATE_TE_length_bias 2 6602#define GFX9_3DSTATE_TE_header \ 6603 .DWordLength = 2, \ 6604 ._3DCommandSubOpcode = 28, \ 6605 ._3DCommandOpcode = 0, \ 6606 .CommandSubType = 3, \ 6607 .CommandType = 3 6608 6609struct GFX9_3DSTATE_TE { 6610 uint32_t DWordLength; 6611 uint32_t _3DCommandSubOpcode; 6612 uint32_t _3DCommandOpcode; 6613 uint32_t CommandSubType; 6614 uint32_t CommandType; 6615 bool TEEnable; 6616 uint32_t TEMode; 6617#define HW_TESS 0 6618 uint32_t TEDomain; 6619#define QUAD 0 6620#define TRI 1 6621#define ISOLINE 2 6622 uint32_t OutputTopology; 6623#define OUTPUT_POINT 0 6624#define OUTPUT_LINE 1 6625#define OUTPUT_TRI_CW 2 6626#define OUTPUT_TRI_CCW 3 6627 uint32_t Partitioning; 6628#define INTEGER 0 6629#define ODD_FRACTIONAL 1 6630#define EVEN_FRACTIONAL 2 6631 float MaximumTessellationFactorOdd; 6632 float MaximumTessellationFactorNotOdd; 6633}; 6634 6635static inline __attribute__((always_inline)) void 6636GFX9_3DSTATE_TE_pack(__attribute__((unused)) __gen_user_data *data, 6637 __attribute__((unused)) void * restrict dst, 6638 __attribute__((unused)) const struct GFX9_3DSTATE_TE * restrict values) 6639{ 6640 uint32_t * restrict dw = (uint32_t * restrict) dst; 6641 6642 dw[0] = 6643 __gen_uint(values->DWordLength, 0, 7) | 6644 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 6645 __gen_uint(values->_3DCommandOpcode, 24, 26) | 6646 __gen_uint(values->CommandSubType, 27, 28) | 6647 __gen_uint(values->CommandType, 29, 31); 6648 6649 dw[1] = 6650 __gen_uint(values->TEEnable, 0, 0) | 6651 __gen_uint(values->TEMode, 1, 2) | 6652 __gen_uint(values->TEDomain, 4, 5) | 6653 __gen_uint(values->OutputTopology, 8, 9) | 6654 __gen_uint(values->Partitioning, 12, 13); 6655 6656 dw[2] = 6657 __gen_float(values->MaximumTessellationFactorOdd); 6658 6659 dw[3] = 6660 __gen_float(values->MaximumTessellationFactorNotOdd); 6661} 6662 6663#define GFX9_3DSTATE_URB_CLEAR_length 2 6664#define GFX9_3DSTATE_URB_CLEAR_length_bias 2 6665#define GFX9_3DSTATE_URB_CLEAR_header \ 6666 .DWordLength = 0, \ 6667 ._3DCommandSubOpcode = 29, \ 6668 ._3DCommandOpcode = 1, \ 6669 .CommandSubType = 3, \ 6670 .CommandType = 3 6671 6672struct GFX9_3DSTATE_URB_CLEAR { 6673 uint32_t DWordLength; 6674 uint32_t _3DCommandSubOpcode; 6675 uint32_t _3DCommandOpcode; 6676 uint32_t CommandSubType; 6677 uint32_t CommandType; 6678 uint64_t URBAddress; 6679 uint32_t URBClearLength; 6680}; 6681 6682static inline __attribute__((always_inline)) void 6683GFX9_3DSTATE_URB_CLEAR_pack(__attribute__((unused)) __gen_user_data *data, 6684 __attribute__((unused)) void * restrict dst, 6685 __attribute__((unused)) const struct GFX9_3DSTATE_URB_CLEAR * restrict values) 6686{ 6687 uint32_t * restrict dw = (uint32_t * restrict) dst; 6688 6689 dw[0] = 6690 __gen_uint(values->DWordLength, 0, 7) | 6691 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 6692 __gen_uint(values->_3DCommandOpcode, 24, 26) | 6693 __gen_uint(values->CommandSubType, 27, 28) | 6694 __gen_uint(values->CommandType, 29, 31); 6695 6696 dw[1] = 6697 __gen_offset(values->URBAddress, 0, 14) | 6698 __gen_uint(values->URBClearLength, 16, 29); 6699} 6700 6701#define GFX9_3DSTATE_URB_DS_length 2 6702#define GFX9_3DSTATE_URB_DS_length_bias 2 6703#define GFX9_3DSTATE_URB_DS_header \ 6704 .DWordLength = 0, \ 6705 ._3DCommandSubOpcode = 50, \ 6706 ._3DCommandOpcode = 0, \ 6707 .CommandSubType = 3, \ 6708 .CommandType = 3 6709 6710struct GFX9_3DSTATE_URB_DS { 6711 uint32_t DWordLength; 6712 uint32_t _3DCommandSubOpcode; 6713 uint32_t _3DCommandOpcode; 6714 uint32_t CommandSubType; 6715 uint32_t CommandType; 6716 uint32_t DSNumberofURBEntries; 6717 uint32_t DSURBEntryAllocationSize; 6718 uint32_t DSURBStartingAddress; 6719}; 6720 6721static inline __attribute__((always_inline)) void 6722GFX9_3DSTATE_URB_DS_pack(__attribute__((unused)) __gen_user_data *data, 6723 __attribute__((unused)) void * restrict dst, 6724 __attribute__((unused)) const struct GFX9_3DSTATE_URB_DS * restrict values) 6725{ 6726 uint32_t * restrict dw = (uint32_t * restrict) dst; 6727 6728 dw[0] = 6729 __gen_uint(values->DWordLength, 0, 7) | 6730 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 6731 __gen_uint(values->_3DCommandOpcode, 24, 26) | 6732 __gen_uint(values->CommandSubType, 27, 28) | 6733 __gen_uint(values->CommandType, 29, 31); 6734 6735 dw[1] = 6736 __gen_uint(values->DSNumberofURBEntries, 0, 15) | 6737 __gen_uint(values->DSURBEntryAllocationSize, 16, 24) | 6738 __gen_uint(values->DSURBStartingAddress, 25, 31); 6739} 6740 6741#define GFX9_3DSTATE_URB_GS_length 2 6742#define GFX9_3DSTATE_URB_GS_length_bias 2 6743#define GFX9_3DSTATE_URB_GS_header \ 6744 .DWordLength = 0, \ 6745 ._3DCommandSubOpcode = 51, \ 6746 ._3DCommandOpcode = 0, \ 6747 .CommandSubType = 3, \ 6748 .CommandType = 3 6749 6750struct GFX9_3DSTATE_URB_GS { 6751 uint32_t DWordLength; 6752 uint32_t _3DCommandSubOpcode; 6753 uint32_t _3DCommandOpcode; 6754 uint32_t CommandSubType; 6755 uint32_t CommandType; 6756 uint32_t GSNumberofURBEntries; 6757 uint32_t GSURBEntryAllocationSize; 6758 uint32_t GSURBStartingAddress; 6759}; 6760 6761static inline __attribute__((always_inline)) void 6762GFX9_3DSTATE_URB_GS_pack(__attribute__((unused)) __gen_user_data *data, 6763 __attribute__((unused)) void * restrict dst, 6764 __attribute__((unused)) const struct GFX9_3DSTATE_URB_GS * restrict values) 6765{ 6766 uint32_t * restrict dw = (uint32_t * restrict) dst; 6767 6768 dw[0] = 6769 __gen_uint(values->DWordLength, 0, 7) | 6770 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 6771 __gen_uint(values->_3DCommandOpcode, 24, 26) | 6772 __gen_uint(values->CommandSubType, 27, 28) | 6773 __gen_uint(values->CommandType, 29, 31); 6774 6775 dw[1] = 6776 __gen_uint(values->GSNumberofURBEntries, 0, 15) | 6777 __gen_uint(values->GSURBEntryAllocationSize, 16, 24) | 6778 __gen_uint(values->GSURBStartingAddress, 25, 31); 6779} 6780 6781#define GFX9_3DSTATE_URB_HS_length 2 6782#define GFX9_3DSTATE_URB_HS_length_bias 2 6783#define GFX9_3DSTATE_URB_HS_header \ 6784 .DWordLength = 0, \ 6785 ._3DCommandSubOpcode = 49, \ 6786 ._3DCommandOpcode = 0, \ 6787 .CommandSubType = 3, \ 6788 .CommandType = 3 6789 6790struct GFX9_3DSTATE_URB_HS { 6791 uint32_t DWordLength; 6792 uint32_t _3DCommandSubOpcode; 6793 uint32_t _3DCommandOpcode; 6794 uint32_t CommandSubType; 6795 uint32_t CommandType; 6796 uint32_t HSNumberofURBEntries; 6797 uint32_t HSURBEntryAllocationSize; 6798 uint32_t HSURBStartingAddress; 6799}; 6800 6801static inline __attribute__((always_inline)) void 6802GFX9_3DSTATE_URB_HS_pack(__attribute__((unused)) __gen_user_data *data, 6803 __attribute__((unused)) void * restrict dst, 6804 __attribute__((unused)) const struct GFX9_3DSTATE_URB_HS * restrict values) 6805{ 6806 uint32_t * restrict dw = (uint32_t * restrict) dst; 6807 6808 dw[0] = 6809 __gen_uint(values->DWordLength, 0, 7) | 6810 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 6811 __gen_uint(values->_3DCommandOpcode, 24, 26) | 6812 __gen_uint(values->CommandSubType, 27, 28) | 6813 __gen_uint(values->CommandType, 29, 31); 6814 6815 dw[1] = 6816 __gen_uint(values->HSNumberofURBEntries, 0, 15) | 6817 __gen_uint(values->HSURBEntryAllocationSize, 16, 24) | 6818 __gen_uint(values->HSURBStartingAddress, 25, 31); 6819} 6820 6821#define GFX9_3DSTATE_URB_VS_length 2 6822#define GFX9_3DSTATE_URB_VS_length_bias 2 6823#define GFX9_3DSTATE_URB_VS_header \ 6824 .DWordLength = 0, \ 6825 ._3DCommandSubOpcode = 48, \ 6826 ._3DCommandOpcode = 0, \ 6827 .CommandSubType = 3, \ 6828 .CommandType = 3 6829 6830struct GFX9_3DSTATE_URB_VS { 6831 uint32_t DWordLength; 6832 uint32_t _3DCommandSubOpcode; 6833 uint32_t _3DCommandOpcode; 6834 uint32_t CommandSubType; 6835 uint32_t CommandType; 6836 uint32_t VSNumberofURBEntries; 6837 uint32_t VSURBEntryAllocationSize; 6838 uint32_t VSURBStartingAddress; 6839}; 6840 6841static inline __attribute__((always_inline)) void 6842GFX9_3DSTATE_URB_VS_pack(__attribute__((unused)) __gen_user_data *data, 6843 __attribute__((unused)) void * restrict dst, 6844 __attribute__((unused)) const struct GFX9_3DSTATE_URB_VS * restrict values) 6845{ 6846 uint32_t * restrict dw = (uint32_t * restrict) dst; 6847 6848 dw[0] = 6849 __gen_uint(values->DWordLength, 0, 7) | 6850 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 6851 __gen_uint(values->_3DCommandOpcode, 24, 26) | 6852 __gen_uint(values->CommandSubType, 27, 28) | 6853 __gen_uint(values->CommandType, 29, 31); 6854 6855 dw[1] = 6856 __gen_uint(values->VSNumberofURBEntries, 0, 15) | 6857 __gen_uint(values->VSURBEntryAllocationSize, 16, 24) | 6858 __gen_uint(values->VSURBStartingAddress, 25, 31); 6859} 6860 6861#define GFX9_3DSTATE_VERTEX_BUFFERS_length_bias 2 6862#define GFX9_3DSTATE_VERTEX_BUFFERS_header \ 6863 .DWordLength = 3, \ 6864 ._3DCommandSubOpcode = 8, \ 6865 ._3DCommandOpcode = 0, \ 6866 .CommandSubType = 3, \ 6867 .CommandType = 3 6868 6869struct GFX9_3DSTATE_VERTEX_BUFFERS { 6870 uint32_t DWordLength; 6871 uint32_t _3DCommandSubOpcode; 6872 uint32_t _3DCommandOpcode; 6873 uint32_t CommandSubType; 6874 uint32_t CommandType; 6875 /* variable length fields follow */ 6876}; 6877 6878static inline __attribute__((always_inline)) void 6879GFX9_3DSTATE_VERTEX_BUFFERS_pack(__attribute__((unused)) __gen_user_data *data, 6880 __attribute__((unused)) void * restrict dst, 6881 __attribute__((unused)) const struct GFX9_3DSTATE_VERTEX_BUFFERS * restrict values) 6882{ 6883 uint32_t * restrict dw = (uint32_t * restrict) dst; 6884 6885 dw[0] = 6886 __gen_uint(values->DWordLength, 0, 7) | 6887 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 6888 __gen_uint(values->_3DCommandOpcode, 24, 26) | 6889 __gen_uint(values->CommandSubType, 27, 28) | 6890 __gen_uint(values->CommandType, 29, 31); 6891} 6892 6893#define GFX9_3DSTATE_VERTEX_ELEMENTS_length_bias 2 6894#define GFX9_3DSTATE_VERTEX_ELEMENTS_header \ 6895 .DWordLength = 1, \ 6896 ._3DCommandSubOpcode = 9, \ 6897 ._3DCommandOpcode = 0, \ 6898 .CommandSubType = 3, \ 6899 .CommandType = 3 6900 6901struct GFX9_3DSTATE_VERTEX_ELEMENTS { 6902 uint32_t DWordLength; 6903 uint32_t _3DCommandSubOpcode; 6904 uint32_t _3DCommandOpcode; 6905 uint32_t CommandSubType; 6906 uint32_t CommandType; 6907 /* variable length fields follow */ 6908}; 6909 6910static inline __attribute__((always_inline)) void 6911GFX9_3DSTATE_VERTEX_ELEMENTS_pack(__attribute__((unused)) __gen_user_data *data, 6912 __attribute__((unused)) void * restrict dst, 6913 __attribute__((unused)) const struct GFX9_3DSTATE_VERTEX_ELEMENTS * restrict values) 6914{ 6915 uint32_t * restrict dw = (uint32_t * restrict) dst; 6916 6917 dw[0] = 6918 __gen_uint(values->DWordLength, 0, 7) | 6919 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 6920 __gen_uint(values->_3DCommandOpcode, 24, 26) | 6921 __gen_uint(values->CommandSubType, 27, 28) | 6922 __gen_uint(values->CommandType, 29, 31); 6923} 6924 6925#define GFX9_3DSTATE_VF_length 2 6926#define GFX9_3DSTATE_VF_length_bias 2 6927#define GFX9_3DSTATE_VF_header \ 6928 .DWordLength = 0, \ 6929 ._3DCommandSubOpcode = 12, \ 6930 ._3DCommandOpcode = 0, \ 6931 .CommandSubType = 3, \ 6932 .CommandType = 3 6933 6934struct GFX9_3DSTATE_VF { 6935 uint32_t DWordLength; 6936 bool IndexedDrawCutIndexEnable; 6937 bool ComponentPackingEnable; 6938 bool SequentialDrawCutIndexEnable; 6939 uint32_t _3DCommandSubOpcode; 6940 uint32_t _3DCommandOpcode; 6941 uint32_t CommandSubType; 6942 uint32_t CommandType; 6943 uint32_t CutIndex; 6944}; 6945 6946static inline __attribute__((always_inline)) void 6947GFX9_3DSTATE_VF_pack(__attribute__((unused)) __gen_user_data *data, 6948 __attribute__((unused)) void * restrict dst, 6949 __attribute__((unused)) const struct GFX9_3DSTATE_VF * restrict values) 6950{ 6951 uint32_t * restrict dw = (uint32_t * restrict) dst; 6952 6953 dw[0] = 6954 __gen_uint(values->DWordLength, 0, 7) | 6955 __gen_uint(values->IndexedDrawCutIndexEnable, 8, 8) | 6956 __gen_uint(values->ComponentPackingEnable, 9, 9) | 6957 __gen_uint(values->SequentialDrawCutIndexEnable, 10, 10) | 6958 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 6959 __gen_uint(values->_3DCommandOpcode, 24, 26) | 6960 __gen_uint(values->CommandSubType, 27, 28) | 6961 __gen_uint(values->CommandType, 29, 31); 6962 6963 dw[1] = 6964 __gen_uint(values->CutIndex, 0, 31); 6965} 6966 6967#define GFX9_3DSTATE_VF_COMPONENT_PACKING_length 5 6968#define GFX9_3DSTATE_VF_COMPONENT_PACKING_length_bias 2 6969#define GFX9_3DSTATE_VF_COMPONENT_PACKING_header\ 6970 .DWordLength = 3, \ 6971 ._3DCommandSubOpcode = 85, \ 6972 ._3DCommandOpcode = 0, \ 6973 .CommandSubType = 3, \ 6974 .CommandType = 3 6975 6976struct GFX9_3DSTATE_VF_COMPONENT_PACKING { 6977 uint32_t DWordLength; 6978 uint32_t _3DCommandSubOpcode; 6979 uint32_t _3DCommandOpcode; 6980 uint32_t CommandSubType; 6981 uint32_t CommandType; 6982 uint32_t VertexElement00Enables; 6983 uint32_t VertexElement01Enables; 6984 uint32_t VertexElement02Enables; 6985 uint32_t VertexElement03Enables; 6986 uint32_t VertexElement04Enables; 6987 uint32_t VertexElement05Enables; 6988 uint32_t VertexElement06Enables; 6989 uint32_t VertexElement07Enables; 6990 uint32_t VertexElement08Enables; 6991 uint32_t VertexElement09Enables; 6992 uint32_t VertexElement10Enables; 6993 uint32_t VertexElement11Enables; 6994 uint32_t VertexElement12Enables; 6995 uint32_t VertexElement13Enables; 6996 uint32_t VertexElement14Enables; 6997 uint32_t VertexElement15Enables; 6998 uint32_t VertexElement16Enables; 6999 uint32_t VertexElement17Enables; 7000 uint32_t VertexElement18Enables; 7001 uint32_t VertexElement19Enables; 7002 uint32_t VertexElement20Enables; 7003 uint32_t VertexElement21Enables; 7004 uint32_t VertexElement22Enables; 7005 uint32_t VertexElement23Enables; 7006 uint32_t VertexElement24Enables; 7007 uint32_t VertexElement25Enables; 7008 uint32_t VertexElement26Enables; 7009 uint32_t VertexElement27Enables; 7010 uint32_t VertexElement28Enables; 7011 uint32_t VertexElement29Enables; 7012 uint32_t VertexElement30Enables; 7013 uint32_t VertexElement31Enables; 7014}; 7015 7016static inline __attribute__((always_inline)) void 7017GFX9_3DSTATE_VF_COMPONENT_PACKING_pack(__attribute__((unused)) __gen_user_data *data, 7018 __attribute__((unused)) void * restrict dst, 7019 __attribute__((unused)) const struct GFX9_3DSTATE_VF_COMPONENT_PACKING * restrict values) 7020{ 7021 uint32_t * restrict dw = (uint32_t * restrict) dst; 7022 7023 dw[0] = 7024 __gen_uint(values->DWordLength, 0, 7) | 7025 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 7026 __gen_uint(values->_3DCommandOpcode, 24, 26) | 7027 __gen_uint(values->CommandSubType, 27, 28) | 7028 __gen_uint(values->CommandType, 29, 31); 7029 7030 dw[1] = 7031 __gen_uint(values->VertexElement00Enables, 0, 3) | 7032 __gen_uint(values->VertexElement01Enables, 4, 7) | 7033 __gen_uint(values->VertexElement02Enables, 8, 11) | 7034 __gen_uint(values->VertexElement03Enables, 12, 15) | 7035 __gen_uint(values->VertexElement04Enables, 16, 19) | 7036 __gen_uint(values->VertexElement05Enables, 20, 23) | 7037 __gen_uint(values->VertexElement06Enables, 24, 27) | 7038 __gen_uint(values->VertexElement07Enables, 28, 31); 7039 7040 dw[2] = 7041 __gen_uint(values->VertexElement08Enables, 0, 3) | 7042 __gen_uint(values->VertexElement09Enables, 4, 7) | 7043 __gen_uint(values->VertexElement10Enables, 8, 11) | 7044 __gen_uint(values->VertexElement11Enables, 12, 15) | 7045 __gen_uint(values->VertexElement12Enables, 16, 19) | 7046 __gen_uint(values->VertexElement13Enables, 20, 23) | 7047 __gen_uint(values->VertexElement14Enables, 24, 27) | 7048 __gen_uint(values->VertexElement15Enables, 28, 31); 7049 7050 dw[3] = 7051 __gen_uint(values->VertexElement16Enables, 0, 3) | 7052 __gen_uint(values->VertexElement17Enables, 4, 7) | 7053 __gen_uint(values->VertexElement18Enables, 8, 11) | 7054 __gen_uint(values->VertexElement19Enables, 12, 15) | 7055 __gen_uint(values->VertexElement20Enables, 16, 19) | 7056 __gen_uint(values->VertexElement21Enables, 20, 23) | 7057 __gen_uint(values->VertexElement22Enables, 24, 27) | 7058 __gen_uint(values->VertexElement23Enables, 28, 31); 7059 7060 dw[4] = 7061 __gen_uint(values->VertexElement24Enables, 0, 3) | 7062 __gen_uint(values->VertexElement25Enables, 4, 7) | 7063 __gen_uint(values->VertexElement26Enables, 8, 11) | 7064 __gen_uint(values->VertexElement27Enables, 12, 15) | 7065 __gen_uint(values->VertexElement28Enables, 16, 19) | 7066 __gen_uint(values->VertexElement29Enables, 20, 23) | 7067 __gen_uint(values->VertexElement30Enables, 24, 27) | 7068 __gen_uint(values->VertexElement31Enables, 28, 31); 7069} 7070 7071#define GFX9_3DSTATE_VF_INSTANCING_length 3 7072#define GFX9_3DSTATE_VF_INSTANCING_length_bias 2 7073#define GFX9_3DSTATE_VF_INSTANCING_header \ 7074 .DWordLength = 1, \ 7075 ._3DCommandSubOpcode = 73, \ 7076 ._3DCommandOpcode = 0, \ 7077 .CommandSubType = 3, \ 7078 .CommandType = 3 7079 7080struct GFX9_3DSTATE_VF_INSTANCING { 7081 uint32_t DWordLength; 7082 uint32_t _3DCommandSubOpcode; 7083 uint32_t _3DCommandOpcode; 7084 uint32_t CommandSubType; 7085 uint32_t CommandType; 7086 uint32_t VertexElementIndex; 7087 bool InstancingEnable; 7088 uint32_t InstanceDataStepRate; 7089}; 7090 7091static inline __attribute__((always_inline)) void 7092GFX9_3DSTATE_VF_INSTANCING_pack(__attribute__((unused)) __gen_user_data *data, 7093 __attribute__((unused)) void * restrict dst, 7094 __attribute__((unused)) const struct GFX9_3DSTATE_VF_INSTANCING * restrict values) 7095{ 7096 uint32_t * restrict dw = (uint32_t * restrict) dst; 7097 7098 dw[0] = 7099 __gen_uint(values->DWordLength, 0, 7) | 7100 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 7101 __gen_uint(values->_3DCommandOpcode, 24, 26) | 7102 __gen_uint(values->CommandSubType, 27, 28) | 7103 __gen_uint(values->CommandType, 29, 31); 7104 7105 dw[1] = 7106 __gen_uint(values->VertexElementIndex, 0, 5) | 7107 __gen_uint(values->InstancingEnable, 8, 8); 7108 7109 dw[2] = 7110 __gen_uint(values->InstanceDataStepRate, 0, 31); 7111} 7112 7113#define GFX9_3DSTATE_VF_SGVS_length 2 7114#define GFX9_3DSTATE_VF_SGVS_length_bias 2 7115#define GFX9_3DSTATE_VF_SGVS_header \ 7116 .DWordLength = 0, \ 7117 ._3DCommandSubOpcode = 74, \ 7118 ._3DCommandOpcode = 0, \ 7119 .CommandSubType = 3, \ 7120 .CommandType = 3 7121 7122struct GFX9_3DSTATE_VF_SGVS { 7123 uint32_t DWordLength; 7124 uint32_t _3DCommandSubOpcode; 7125 uint32_t _3DCommandOpcode; 7126 uint32_t CommandSubType; 7127 uint32_t CommandType; 7128 uint32_t VertexIDElementOffset; 7129 uint32_t VertexIDComponentNumber; 7130#define COMP_0 0 7131#define COMP_1 1 7132#define COMP_2 2 7133#define COMP_3 3 7134 bool VertexIDEnable; 7135 uint32_t InstanceIDElementOffset; 7136 uint32_t InstanceIDComponentNumber; 7137#define COMP_0 0 7138#define COMP_1 1 7139#define COMP_2 2 7140#define COMP_3 3 7141 bool InstanceIDEnable; 7142}; 7143 7144static inline __attribute__((always_inline)) void 7145GFX9_3DSTATE_VF_SGVS_pack(__attribute__((unused)) __gen_user_data *data, 7146 __attribute__((unused)) void * restrict dst, 7147 __attribute__((unused)) const struct GFX9_3DSTATE_VF_SGVS * restrict values) 7148{ 7149 uint32_t * restrict dw = (uint32_t * restrict) dst; 7150 7151 dw[0] = 7152 __gen_uint(values->DWordLength, 0, 7) | 7153 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 7154 __gen_uint(values->_3DCommandOpcode, 24, 26) | 7155 __gen_uint(values->CommandSubType, 27, 28) | 7156 __gen_uint(values->CommandType, 29, 31); 7157 7158 dw[1] = 7159 __gen_uint(values->VertexIDElementOffset, 0, 5) | 7160 __gen_uint(values->VertexIDComponentNumber, 13, 14) | 7161 __gen_uint(values->VertexIDEnable, 15, 15) | 7162 __gen_uint(values->InstanceIDElementOffset, 16, 21) | 7163 __gen_uint(values->InstanceIDComponentNumber, 29, 30) | 7164 __gen_uint(values->InstanceIDEnable, 31, 31); 7165} 7166 7167#define GFX9_3DSTATE_VF_STATISTICS_length 1 7168#define GFX9_3DSTATE_VF_STATISTICS_length_bias 1 7169#define GFX9_3DSTATE_VF_STATISTICS_header \ 7170 ._3DCommandSubOpcode = 11, \ 7171 ._3DCommandOpcode = 0, \ 7172 .CommandSubType = 1, \ 7173 .CommandType = 3 7174 7175struct GFX9_3DSTATE_VF_STATISTICS { 7176 bool StatisticsEnable; 7177 uint32_t _3DCommandSubOpcode; 7178 uint32_t _3DCommandOpcode; 7179 uint32_t CommandSubType; 7180 uint32_t CommandType; 7181}; 7182 7183static inline __attribute__((always_inline)) void 7184GFX9_3DSTATE_VF_STATISTICS_pack(__attribute__((unused)) __gen_user_data *data, 7185 __attribute__((unused)) void * restrict dst, 7186 __attribute__((unused)) const struct GFX9_3DSTATE_VF_STATISTICS * restrict values) 7187{ 7188 uint32_t * restrict dw = (uint32_t * restrict) dst; 7189 7190 dw[0] = 7191 __gen_uint(values->StatisticsEnable, 0, 0) | 7192 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 7193 __gen_uint(values->_3DCommandOpcode, 24, 26) | 7194 __gen_uint(values->CommandSubType, 27, 28) | 7195 __gen_uint(values->CommandType, 29, 31); 7196} 7197 7198#define GFX9_3DSTATE_VF_TOPOLOGY_length 2 7199#define GFX9_3DSTATE_VF_TOPOLOGY_length_bias 2 7200#define GFX9_3DSTATE_VF_TOPOLOGY_header \ 7201 .DWordLength = 0, \ 7202 ._3DCommandSubOpcode = 75, \ 7203 ._3DCommandOpcode = 0, \ 7204 .CommandSubType = 3, \ 7205 .CommandType = 3 7206 7207struct GFX9_3DSTATE_VF_TOPOLOGY { 7208 uint32_t DWordLength; 7209 uint32_t _3DCommandSubOpcode; 7210 uint32_t _3DCommandOpcode; 7211 uint32_t CommandSubType; 7212 uint32_t CommandType; 7213 enum GFX9_3D_Prim_Topo_Type PrimitiveTopologyType; 7214}; 7215 7216static inline __attribute__((always_inline)) void 7217GFX9_3DSTATE_VF_TOPOLOGY_pack(__attribute__((unused)) __gen_user_data *data, 7218 __attribute__((unused)) void * restrict dst, 7219 __attribute__((unused)) const struct GFX9_3DSTATE_VF_TOPOLOGY * restrict values) 7220{ 7221 uint32_t * restrict dw = (uint32_t * restrict) dst; 7222 7223 dw[0] = 7224 __gen_uint(values->DWordLength, 0, 7) | 7225 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 7226 __gen_uint(values->_3DCommandOpcode, 24, 26) | 7227 __gen_uint(values->CommandSubType, 27, 28) | 7228 __gen_uint(values->CommandType, 29, 31); 7229 7230 dw[1] = 7231 __gen_uint(values->PrimitiveTopologyType, 0, 5); 7232} 7233 7234#define GFX9_3DSTATE_VIEWPORT_STATE_POINTERS_CC_length 2 7235#define GFX9_3DSTATE_VIEWPORT_STATE_POINTERS_CC_length_bias 2 7236#define GFX9_3DSTATE_VIEWPORT_STATE_POINTERS_CC_header\ 7237 .DWordLength = 0, \ 7238 ._3DCommandSubOpcode = 35, \ 7239 ._3DCommandOpcode = 0, \ 7240 .CommandSubType = 3, \ 7241 .CommandType = 3 7242 7243struct GFX9_3DSTATE_VIEWPORT_STATE_POINTERS_CC { 7244 uint32_t DWordLength; 7245 uint32_t _3DCommandSubOpcode; 7246 uint32_t _3DCommandOpcode; 7247 uint32_t CommandSubType; 7248 uint32_t CommandType; 7249 uint64_t CCViewportPointer; 7250}; 7251 7252static inline __attribute__((always_inline)) void 7253GFX9_3DSTATE_VIEWPORT_STATE_POINTERS_CC_pack(__attribute__((unused)) __gen_user_data *data, 7254 __attribute__((unused)) void * restrict dst, 7255 __attribute__((unused)) const struct GFX9_3DSTATE_VIEWPORT_STATE_POINTERS_CC * restrict values) 7256{ 7257 uint32_t * restrict dw = (uint32_t * restrict) dst; 7258 7259 dw[0] = 7260 __gen_uint(values->DWordLength, 0, 7) | 7261 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 7262 __gen_uint(values->_3DCommandOpcode, 24, 26) | 7263 __gen_uint(values->CommandSubType, 27, 28) | 7264 __gen_uint(values->CommandType, 29, 31); 7265 7266 dw[1] = 7267 __gen_offset(values->CCViewportPointer, 5, 31); 7268} 7269 7270#define GFX9_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP_length 2 7271#define GFX9_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP_length_bias 2 7272#define GFX9_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP_header\ 7273 .DWordLength = 0, \ 7274 ._3DCommandSubOpcode = 33, \ 7275 ._3DCommandOpcode = 0, \ 7276 .CommandSubType = 3, \ 7277 .CommandType = 3 7278 7279struct GFX9_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP { 7280 uint32_t DWordLength; 7281 uint32_t _3DCommandSubOpcode; 7282 uint32_t _3DCommandOpcode; 7283 uint32_t CommandSubType; 7284 uint32_t CommandType; 7285 uint64_t SFClipViewportPointer; 7286}; 7287 7288static inline __attribute__((always_inline)) void 7289GFX9_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP_pack(__attribute__((unused)) __gen_user_data *data, 7290 __attribute__((unused)) void * restrict dst, 7291 __attribute__((unused)) const struct GFX9_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP * restrict values) 7292{ 7293 uint32_t * restrict dw = (uint32_t * restrict) dst; 7294 7295 dw[0] = 7296 __gen_uint(values->DWordLength, 0, 7) | 7297 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 7298 __gen_uint(values->_3DCommandOpcode, 24, 26) | 7299 __gen_uint(values->CommandSubType, 27, 28) | 7300 __gen_uint(values->CommandType, 29, 31); 7301 7302 dw[1] = 7303 __gen_offset(values->SFClipViewportPointer, 6, 31); 7304} 7305 7306#define GFX9_3DSTATE_VS_length 9 7307#define GFX9_3DSTATE_VS_length_bias 2 7308#define GFX9_3DSTATE_VS_header \ 7309 .DWordLength = 7, \ 7310 ._3DCommandSubOpcode = 16, \ 7311 ._3DCommandOpcode = 0, \ 7312 .CommandSubType = 3, \ 7313 .CommandType = 3 7314 7315struct GFX9_3DSTATE_VS { 7316 uint32_t DWordLength; 7317 uint32_t _3DCommandSubOpcode; 7318 uint32_t _3DCommandOpcode; 7319 uint32_t CommandSubType; 7320 uint32_t CommandType; 7321 uint64_t KernelStartPointer; 7322 bool SoftwareExceptionEnable; 7323 bool AccessesUAV; 7324 bool IllegalOpcodeExceptionEnable; 7325 uint32_t FloatingPointMode; 7326#define IEEE754 0 7327#define Alternate 1 7328 uint32_t ThreadDispatchPriority; 7329#define High 1 7330 uint32_t BindingTableEntryCount; 7331 uint32_t SamplerCount; 7332#define NoSamplers 0 7333#define _14Samplers 1 7334#define _58Samplers 2 7335#define _912Samplers 3 7336#define _1316Samplers 4 7337 bool VectorMaskEnable; 7338 bool SingleVertexDispatch; 7339 uint32_t PerThreadScratchSpace; 7340 __gen_address_type ScratchSpaceBasePointer; 7341 uint32_t VertexURBEntryReadOffset; 7342 uint32_t VertexURBEntryReadLength; 7343 uint32_t DispatchGRFStartRegisterForURBData; 7344 bool Enable; 7345 bool VertexCacheDisable; 7346 bool SIMD8DispatchEnable; 7347 bool StatisticsEnable; 7348 uint32_t MaximumNumberofThreads; 7349 uint32_t UserClipDistanceCullTestEnableBitmask; 7350 uint32_t UserClipDistanceClipTestEnableBitmask; 7351 uint32_t VertexURBEntryOutputLength; 7352 uint32_t VertexURBEntryOutputReadOffset; 7353}; 7354 7355static inline __attribute__((always_inline)) void 7356GFX9_3DSTATE_VS_pack(__attribute__((unused)) __gen_user_data *data, 7357 __attribute__((unused)) void * restrict dst, 7358 __attribute__((unused)) const struct GFX9_3DSTATE_VS * restrict values) 7359{ 7360 uint32_t * restrict dw = (uint32_t * restrict) dst; 7361 7362 dw[0] = 7363 __gen_uint(values->DWordLength, 0, 7) | 7364 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 7365 __gen_uint(values->_3DCommandOpcode, 24, 26) | 7366 __gen_uint(values->CommandSubType, 27, 28) | 7367 __gen_uint(values->CommandType, 29, 31); 7368 7369 const uint64_t v1 = 7370 __gen_offset(values->KernelStartPointer, 6, 63); 7371 dw[1] = v1; 7372 dw[2] = v1 >> 32; 7373 7374 dw[3] = 7375 __gen_uint(values->SoftwareExceptionEnable, 7, 7) | 7376 __gen_uint(values->AccessesUAV, 12, 12) | 7377 __gen_uint(values->IllegalOpcodeExceptionEnable, 13, 13) | 7378 __gen_uint(values->FloatingPointMode, 16, 16) | 7379 __gen_uint(values->ThreadDispatchPriority, 17, 17) | 7380 __gen_uint(values->BindingTableEntryCount, 18, 25) | 7381 __gen_uint(values->SamplerCount, 27, 29) | 7382 __gen_uint(values->VectorMaskEnable, 30, 30) | 7383 __gen_uint(values->SingleVertexDispatch, 31, 31); 7384 7385 const uint64_t v4 = 7386 __gen_uint(values->PerThreadScratchSpace, 0, 3); 7387 const uint64_t v4_address = 7388 __gen_address(data, &dw[4], values->ScratchSpaceBasePointer, v4, 10, 63); 7389 dw[4] = v4_address; 7390 dw[5] = (v4_address >> 32) | (v4 >> 32); 7391 7392 dw[6] = 7393 __gen_uint(values->VertexURBEntryReadOffset, 4, 9) | 7394 __gen_uint(values->VertexURBEntryReadLength, 11, 16) | 7395 __gen_uint(values->DispatchGRFStartRegisterForURBData, 20, 24); 7396 7397 dw[7] = 7398 __gen_uint(values->Enable, 0, 0) | 7399 __gen_uint(values->VertexCacheDisable, 1, 1) | 7400 __gen_uint(values->SIMD8DispatchEnable, 2, 2) | 7401 __gen_uint(values->StatisticsEnable, 10, 10) | 7402 __gen_uint(values->MaximumNumberofThreads, 23, 31); 7403 7404 dw[8] = 7405 __gen_uint(values->UserClipDistanceCullTestEnableBitmask, 0, 7) | 7406 __gen_uint(values->UserClipDistanceClipTestEnableBitmask, 8, 15) | 7407 __gen_uint(values->VertexURBEntryOutputLength, 16, 20) | 7408 __gen_uint(values->VertexURBEntryOutputReadOffset, 21, 26); 7409} 7410 7411#define GFX9_3DSTATE_WM_length 2 7412#define GFX9_3DSTATE_WM_length_bias 2 7413#define GFX9_3DSTATE_WM_header \ 7414 .DWordLength = 0, \ 7415 ._3DCommandSubOpcode = 20, \ 7416 ._3DCommandOpcode = 0, \ 7417 .CommandSubType = 3, \ 7418 .CommandType = 3 7419 7420struct GFX9_3DSTATE_WM { 7421 uint32_t DWordLength; 7422 uint32_t _3DCommandSubOpcode; 7423 uint32_t _3DCommandOpcode; 7424 uint32_t CommandSubType; 7425 uint32_t CommandType; 7426 uint32_t ForceKillPixelEnable; 7427#define ForceOff 1 7428#define ForceON 2 7429 uint32_t PointRasterizationRule; 7430#define RASTRULE_UPPER_LEFT 0 7431#define RASTRULE_UPPER_RIGHT 1 7432 bool LineStippleEnable; 7433 bool PolygonStippleEnable; 7434 uint32_t LineAntialiasingRegionWidth; 7435#define _05pixels 0 7436#define _10pixels 1 7437#define _20pixels 2 7438#define _40pixels 3 7439 uint32_t LineEndCapAntialiasingRegionWidth; 7440#define _05pixels 0 7441#define _10pixels 1 7442#define _20pixels 2 7443#define _40pixels 3 7444 uint32_t BarycentricInterpolationMode; 7445#define BIM_PERSPECTIVE_PIXEL 1 7446#define BIM_PERSPECTIVE_CENTROID 2 7447#define BIM_PERSPECTIVE_SAMPLE 4 7448#define BIM_LINEAR_PIXEL 8 7449#define BIM_LINEAR_CENTROID 16 7450#define BIM_LINEAR_SAMPLE 32 7451 uint32_t PositionZWInterpolationMode; 7452#define INTERP_PIXEL 0 7453#define INTERP_CENTROID 2 7454#define INTERP_SAMPLE 3 7455 uint32_t ForceThreadDispatchEnable; 7456#define ForceOff 1 7457#define ForceON 2 7458 uint32_t EarlyDepthStencilControl; 7459#define EDSC_NORMAL 0 7460#define EDSC_PSEXEC 1 7461#define EDSC_PREPS 2 7462 bool LegacyDiamondLineRasterization; 7463 bool LegacyHierarchicalDepthBufferResolveEnable; 7464 bool LegacyDepthBufferResolveEnable; 7465 bool LegacyDepthBufferClearEnable; 7466 bool StatisticsEnable; 7467}; 7468 7469static inline __attribute__((always_inline)) void 7470GFX9_3DSTATE_WM_pack(__attribute__((unused)) __gen_user_data *data, 7471 __attribute__((unused)) void * restrict dst, 7472 __attribute__((unused)) const struct GFX9_3DSTATE_WM * restrict values) 7473{ 7474 uint32_t * restrict dw = (uint32_t * restrict) dst; 7475 7476 dw[0] = 7477 __gen_uint(values->DWordLength, 0, 7) | 7478 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 7479 __gen_uint(values->_3DCommandOpcode, 24, 26) | 7480 __gen_uint(values->CommandSubType, 27, 28) | 7481 __gen_uint(values->CommandType, 29, 31); 7482 7483 dw[1] = 7484 __gen_uint(values->ForceKillPixelEnable, 0, 1) | 7485 __gen_uint(values->PointRasterizationRule, 2, 2) | 7486 __gen_uint(values->LineStippleEnable, 3, 3) | 7487 __gen_uint(values->PolygonStippleEnable, 4, 4) | 7488 __gen_uint(values->LineAntialiasingRegionWidth, 6, 7) | 7489 __gen_uint(values->LineEndCapAntialiasingRegionWidth, 8, 9) | 7490 __gen_uint(values->BarycentricInterpolationMode, 11, 16) | 7491 __gen_uint(values->PositionZWInterpolationMode, 17, 18) | 7492 __gen_uint(values->ForceThreadDispatchEnable, 19, 20) | 7493 __gen_uint(values->EarlyDepthStencilControl, 21, 22) | 7494 __gen_uint(values->LegacyDiamondLineRasterization, 26, 26) | 7495 __gen_uint(values->LegacyHierarchicalDepthBufferResolveEnable, 27, 27) | 7496 __gen_uint(values->LegacyDepthBufferResolveEnable, 28, 28) | 7497 __gen_uint(values->LegacyDepthBufferClearEnable, 30, 30) | 7498 __gen_uint(values->StatisticsEnable, 31, 31); 7499} 7500 7501#define GFX9_3DSTATE_WM_CHROMAKEY_length 2 7502#define GFX9_3DSTATE_WM_CHROMAKEY_length_bias 2 7503#define GFX9_3DSTATE_WM_CHROMAKEY_header \ 7504 .DWordLength = 0, \ 7505 ._3DCommandSubOpcode = 76, \ 7506 ._3DCommandOpcode = 0, \ 7507 .CommandSubType = 3, \ 7508 .CommandType = 3 7509 7510struct GFX9_3DSTATE_WM_CHROMAKEY { 7511 uint32_t DWordLength; 7512 uint32_t _3DCommandSubOpcode; 7513 uint32_t _3DCommandOpcode; 7514 uint32_t CommandSubType; 7515 uint32_t CommandType; 7516 bool ChromaKeyKillEnable; 7517}; 7518 7519static inline __attribute__((always_inline)) void 7520GFX9_3DSTATE_WM_CHROMAKEY_pack(__attribute__((unused)) __gen_user_data *data, 7521 __attribute__((unused)) void * restrict dst, 7522 __attribute__((unused)) const struct GFX9_3DSTATE_WM_CHROMAKEY * restrict values) 7523{ 7524 uint32_t * restrict dw = (uint32_t * restrict) dst; 7525 7526 dw[0] = 7527 __gen_uint(values->DWordLength, 0, 7) | 7528 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 7529 __gen_uint(values->_3DCommandOpcode, 24, 26) | 7530 __gen_uint(values->CommandSubType, 27, 28) | 7531 __gen_uint(values->CommandType, 29, 31); 7532 7533 dw[1] = 7534 __gen_uint(values->ChromaKeyKillEnable, 31, 31); 7535} 7536 7537#define GFX9_3DSTATE_WM_DEPTH_STENCIL_length 4 7538#define GFX9_3DSTATE_WM_DEPTH_STENCIL_length_bias 2 7539#define GFX9_3DSTATE_WM_DEPTH_STENCIL_header \ 7540 .DWordLength = 2, \ 7541 ._3DCommandSubOpcode = 78, \ 7542 ._3DCommandOpcode = 0, \ 7543 .CommandSubType = 3, \ 7544 .CommandType = 3 7545 7546struct GFX9_3DSTATE_WM_DEPTH_STENCIL { 7547 uint32_t DWordLength; 7548 uint32_t _3DCommandSubOpcode; 7549 uint32_t _3DCommandOpcode; 7550 uint32_t CommandSubType; 7551 uint32_t CommandType; 7552 bool DepthBufferWriteEnable; 7553 bool DepthTestEnable; 7554 bool StencilBufferWriteEnable; 7555 bool StencilTestEnable; 7556 bool DoubleSidedStencilEnable; 7557 enum GFX9_3D_Compare_Function DepthTestFunction; 7558 enum GFX9_3D_Compare_Function StencilTestFunction; 7559 enum GFX9_3D_Stencil_Operation BackfaceStencilPassDepthPassOp; 7560 enum GFX9_3D_Stencil_Operation BackfaceStencilPassDepthFailOp; 7561 enum GFX9_3D_Stencil_Operation BackfaceStencilFailOp; 7562 enum GFX9_3D_Compare_Function BackfaceStencilTestFunction; 7563 enum GFX9_3D_Stencil_Operation StencilPassDepthPassOp; 7564 enum GFX9_3D_Stencil_Operation StencilPassDepthFailOp; 7565 enum GFX9_3D_Stencil_Operation StencilFailOp; 7566 uint32_t BackfaceStencilWriteMask; 7567 uint32_t BackfaceStencilTestMask; 7568 uint32_t StencilWriteMask; 7569 uint32_t StencilTestMask; 7570 uint32_t BackfaceStencilReferenceValue; 7571 uint32_t StencilReferenceValue; 7572}; 7573 7574static inline __attribute__((always_inline)) void 7575GFX9_3DSTATE_WM_DEPTH_STENCIL_pack(__attribute__((unused)) __gen_user_data *data, 7576 __attribute__((unused)) void * restrict dst, 7577 __attribute__((unused)) const struct GFX9_3DSTATE_WM_DEPTH_STENCIL * restrict values) 7578{ 7579 uint32_t * restrict dw = (uint32_t * restrict) dst; 7580 7581 dw[0] = 7582 __gen_uint(values->DWordLength, 0, 7) | 7583 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 7584 __gen_uint(values->_3DCommandOpcode, 24, 26) | 7585 __gen_uint(values->CommandSubType, 27, 28) | 7586 __gen_uint(values->CommandType, 29, 31); 7587 7588 dw[1] = 7589 __gen_uint(values->DepthBufferWriteEnable, 0, 0) | 7590 __gen_uint(values->DepthTestEnable, 1, 1) | 7591 __gen_uint(values->StencilBufferWriteEnable, 2, 2) | 7592 __gen_uint(values->StencilTestEnable, 3, 3) | 7593 __gen_uint(values->DoubleSidedStencilEnable, 4, 4) | 7594 __gen_uint(values->DepthTestFunction, 5, 7) | 7595 __gen_uint(values->StencilTestFunction, 8, 10) | 7596 __gen_uint(values->BackfaceStencilPassDepthPassOp, 11, 13) | 7597 __gen_uint(values->BackfaceStencilPassDepthFailOp, 14, 16) | 7598 __gen_uint(values->BackfaceStencilFailOp, 17, 19) | 7599 __gen_uint(values->BackfaceStencilTestFunction, 20, 22) | 7600 __gen_uint(values->StencilPassDepthPassOp, 23, 25) | 7601 __gen_uint(values->StencilPassDepthFailOp, 26, 28) | 7602 __gen_uint(values->StencilFailOp, 29, 31); 7603 7604 dw[2] = 7605 __gen_uint(values->BackfaceStencilWriteMask, 0, 7) | 7606 __gen_uint(values->BackfaceStencilTestMask, 8, 15) | 7607 __gen_uint(values->StencilWriteMask, 16, 23) | 7608 __gen_uint(values->StencilTestMask, 24, 31); 7609 7610 dw[3] = 7611 __gen_uint(values->BackfaceStencilReferenceValue, 0, 7) | 7612 __gen_uint(values->StencilReferenceValue, 8, 15); 7613} 7614 7615#define GFX9_3DSTATE_WM_HZ_OP_length 5 7616#define GFX9_3DSTATE_WM_HZ_OP_length_bias 2 7617#define GFX9_3DSTATE_WM_HZ_OP_header \ 7618 .DWordLength = 3, \ 7619 ._3DCommandSubOpcode = 82, \ 7620 ._3DCommandOpcode = 0, \ 7621 .CommandSubType = 3, \ 7622 .CommandType = 3 7623 7624struct GFX9_3DSTATE_WM_HZ_OP { 7625 uint32_t DWordLength; 7626 uint32_t _3DCommandSubOpcode; 7627 uint32_t _3DCommandOpcode; 7628 uint32_t CommandSubType; 7629 uint32_t CommandType; 7630 uint32_t NumberofMultisamples; 7631 uint32_t StencilClearValue; 7632 bool FullSurfaceDepthandStencilClear; 7633 bool PixelPositionOffsetEnable; 7634 bool HierarchicalDepthBufferResolveEnable; 7635 bool DepthBufferResolveEnable; 7636 bool ScissorRectangleEnable; 7637 bool DepthBufferClearEnable; 7638 bool StencilBufferClearEnable; 7639 uint32_t ClearRectangleXMin; 7640 uint32_t ClearRectangleYMin; 7641 uint32_t ClearRectangleXMax; 7642 uint32_t ClearRectangleYMax; 7643 uint32_t SampleMask; 7644}; 7645 7646static inline __attribute__((always_inline)) void 7647GFX9_3DSTATE_WM_HZ_OP_pack(__attribute__((unused)) __gen_user_data *data, 7648 __attribute__((unused)) void * restrict dst, 7649 __attribute__((unused)) const struct GFX9_3DSTATE_WM_HZ_OP * restrict values) 7650{ 7651 uint32_t * restrict dw = (uint32_t * restrict) dst; 7652 7653 dw[0] = 7654 __gen_uint(values->DWordLength, 0, 7) | 7655 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 7656 __gen_uint(values->_3DCommandOpcode, 24, 26) | 7657 __gen_uint(values->CommandSubType, 27, 28) | 7658 __gen_uint(values->CommandType, 29, 31); 7659 7660 dw[1] = 7661 __gen_uint(values->NumberofMultisamples, 13, 15) | 7662 __gen_uint(values->StencilClearValue, 16, 23) | 7663 __gen_uint(values->FullSurfaceDepthandStencilClear, 25, 25) | 7664 __gen_uint(values->PixelPositionOffsetEnable, 26, 26) | 7665 __gen_uint(values->HierarchicalDepthBufferResolveEnable, 27, 27) | 7666 __gen_uint(values->DepthBufferResolveEnable, 28, 28) | 7667 __gen_uint(values->ScissorRectangleEnable, 29, 29) | 7668 __gen_uint(values->DepthBufferClearEnable, 30, 30) | 7669 __gen_uint(values->StencilBufferClearEnable, 31, 31); 7670 7671 dw[2] = 7672 __gen_uint(values->ClearRectangleXMin, 0, 15) | 7673 __gen_uint(values->ClearRectangleYMin, 16, 31); 7674 7675 dw[3] = 7676 __gen_uint(values->ClearRectangleXMax, 0, 15) | 7677 __gen_uint(values->ClearRectangleYMax, 16, 31); 7678 7679 dw[4] = 7680 __gen_uint(values->SampleMask, 0, 15); 7681} 7682 7683#define GFX9_GPGPU_CSR_BASE_ADDRESS_length 3 7684#define GFX9_GPGPU_CSR_BASE_ADDRESS_length_bias 2 7685#define GFX9_GPGPU_CSR_BASE_ADDRESS_header \ 7686 .DWordLength = 1, \ 7687 ._3DCommandSubOpcode = 4, \ 7688 ._3DCommandOpcode = 1, \ 7689 .CommandSubType = 0, \ 7690 .CommandType = 3 7691 7692struct GFX9_GPGPU_CSR_BASE_ADDRESS { 7693 uint32_t DWordLength; 7694 uint32_t _3DCommandSubOpcode; 7695 uint32_t _3DCommandOpcode; 7696 uint32_t CommandSubType; 7697 uint32_t CommandType; 7698 __gen_address_type GPGPUCSRBaseAddress; 7699}; 7700 7701static inline __attribute__((always_inline)) void 7702GFX9_GPGPU_CSR_BASE_ADDRESS_pack(__attribute__((unused)) __gen_user_data *data, 7703 __attribute__((unused)) void * restrict dst, 7704 __attribute__((unused)) const struct GFX9_GPGPU_CSR_BASE_ADDRESS * restrict values) 7705{ 7706 uint32_t * restrict dw = (uint32_t * restrict) dst; 7707 7708 dw[0] = 7709 __gen_uint(values->DWordLength, 0, 7) | 7710 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 7711 __gen_uint(values->_3DCommandOpcode, 24, 26) | 7712 __gen_uint(values->CommandSubType, 27, 28) | 7713 __gen_uint(values->CommandType, 29, 31); 7714 7715 const uint64_t v1_address = 7716 __gen_address(data, &dw[1], values->GPGPUCSRBaseAddress, 0, 12, 63); 7717 dw[1] = v1_address; 7718 dw[2] = v1_address >> 32; 7719} 7720 7721#define GFX9_GPGPU_WALKER_length 15 7722#define GFX9_GPGPU_WALKER_length_bias 2 7723#define GFX9_GPGPU_WALKER_header \ 7724 .DWordLength = 13, \ 7725 .SubOpcode = 5, \ 7726 .MediaCommandOpcode = 1, \ 7727 .Pipeline = 2, \ 7728 .CommandType = 3 7729 7730struct GFX9_GPGPU_WALKER { 7731 uint32_t DWordLength; 7732 bool PredicateEnable; 7733 bool IndirectParameterEnable; 7734 uint32_t SubOpcode; 7735 uint32_t MediaCommandOpcode; 7736 uint32_t Pipeline; 7737 uint32_t CommandType; 7738 uint32_t InterfaceDescriptorOffset; 7739 uint32_t IndirectDataLength; 7740 uint64_t IndirectDataStartAddress; 7741 uint32_t ThreadWidthCounterMaximum; 7742 uint32_t ThreadHeightCounterMaximum; 7743 uint32_t ThreadDepthCounterMaximum; 7744 uint32_t SIMDSize; 7745#define SIMD8 0 7746#define SIMD16 1 7747#define SIMD32 2 7748 uint32_t ThreadGroupIDStartingX; 7749 uint32_t ThreadGroupIDXDimension; 7750 uint32_t ThreadGroupIDStartingY; 7751 uint32_t ThreadGroupIDYDimension; 7752 uint32_t ThreadGroupIDStartingResumeZ; 7753 uint32_t ThreadGroupIDZDimension; 7754 uint32_t RightExecutionMask; 7755 uint32_t BottomExecutionMask; 7756}; 7757 7758static inline __attribute__((always_inline)) void 7759GFX9_GPGPU_WALKER_pack(__attribute__((unused)) __gen_user_data *data, 7760 __attribute__((unused)) void * restrict dst, 7761 __attribute__((unused)) const struct GFX9_GPGPU_WALKER * restrict values) 7762{ 7763 uint32_t * restrict dw = (uint32_t * restrict) dst; 7764 7765 dw[0] = 7766 __gen_uint(values->DWordLength, 0, 7) | 7767 __gen_uint(values->PredicateEnable, 8, 8) | 7768 __gen_uint(values->IndirectParameterEnable, 10, 10) | 7769 __gen_uint(values->SubOpcode, 16, 23) | 7770 __gen_uint(values->MediaCommandOpcode, 24, 26) | 7771 __gen_uint(values->Pipeline, 27, 28) | 7772 __gen_uint(values->CommandType, 29, 31); 7773 7774 dw[1] = 7775 __gen_uint(values->InterfaceDescriptorOffset, 0, 5); 7776 7777 dw[2] = 7778 __gen_uint(values->IndirectDataLength, 0, 16); 7779 7780 dw[3] = 7781 __gen_offset(values->IndirectDataStartAddress, 6, 31); 7782 7783 dw[4] = 7784 __gen_uint(values->ThreadWidthCounterMaximum, 0, 5) | 7785 __gen_uint(values->ThreadHeightCounterMaximum, 8, 13) | 7786 __gen_uint(values->ThreadDepthCounterMaximum, 16, 21) | 7787 __gen_uint(values->SIMDSize, 30, 31); 7788 7789 dw[5] = 7790 __gen_uint(values->ThreadGroupIDStartingX, 0, 31); 7791 7792 dw[6] = 0; 7793 7794 dw[7] = 7795 __gen_uint(values->ThreadGroupIDXDimension, 0, 31); 7796 7797 dw[8] = 7798 __gen_uint(values->ThreadGroupIDStartingY, 0, 31); 7799 7800 dw[9] = 0; 7801 7802 dw[10] = 7803 __gen_uint(values->ThreadGroupIDYDimension, 0, 31); 7804 7805 dw[11] = 7806 __gen_uint(values->ThreadGroupIDStartingResumeZ, 0, 31); 7807 7808 dw[12] = 7809 __gen_uint(values->ThreadGroupIDZDimension, 0, 31); 7810 7811 dw[13] = 7812 __gen_uint(values->RightExecutionMask, 0, 31); 7813 7814 dw[14] = 7815 __gen_uint(values->BottomExecutionMask, 0, 31); 7816} 7817 7818#define GFX9_MEDIA_CURBE_LOAD_length 4 7819#define GFX9_MEDIA_CURBE_LOAD_length_bias 2 7820#define GFX9_MEDIA_CURBE_LOAD_header \ 7821 .DWordLength = 2, \ 7822 .SubOpcode = 1, \ 7823 .MediaCommandOpcode = 0, \ 7824 .Pipeline = 2, \ 7825 .CommandType = 3 7826 7827struct GFX9_MEDIA_CURBE_LOAD { 7828 uint32_t DWordLength; 7829 uint32_t SubOpcode; 7830 uint32_t MediaCommandOpcode; 7831 uint32_t Pipeline; 7832 uint32_t CommandType; 7833 uint32_t CURBETotalDataLength; 7834 uint32_t CURBEDataStartAddress; 7835}; 7836 7837static inline __attribute__((always_inline)) void 7838GFX9_MEDIA_CURBE_LOAD_pack(__attribute__((unused)) __gen_user_data *data, 7839 __attribute__((unused)) void * restrict dst, 7840 __attribute__((unused)) const struct GFX9_MEDIA_CURBE_LOAD * restrict values) 7841{ 7842 uint32_t * restrict dw = (uint32_t * restrict) dst; 7843 7844 dw[0] = 7845 __gen_uint(values->DWordLength, 0, 15) | 7846 __gen_uint(values->SubOpcode, 16, 23) | 7847 __gen_uint(values->MediaCommandOpcode, 24, 26) | 7848 __gen_uint(values->Pipeline, 27, 28) | 7849 __gen_uint(values->CommandType, 29, 31); 7850 7851 dw[1] = 0; 7852 7853 dw[2] = 7854 __gen_uint(values->CURBETotalDataLength, 0, 16); 7855 7856 dw[3] = 7857 __gen_uint(values->CURBEDataStartAddress, 0, 31); 7858} 7859 7860#define GFX9_MEDIA_INTERFACE_DESCRIPTOR_LOAD_length 4 7861#define GFX9_MEDIA_INTERFACE_DESCRIPTOR_LOAD_length_bias 2 7862#define GFX9_MEDIA_INTERFACE_DESCRIPTOR_LOAD_header\ 7863 .DWordLength = 2, \ 7864 .SubOpcode = 2, \ 7865 .MediaCommandOpcode = 0, \ 7866 .Pipeline = 2, \ 7867 .CommandType = 3 7868 7869struct GFX9_MEDIA_INTERFACE_DESCRIPTOR_LOAD { 7870 uint32_t DWordLength; 7871 uint32_t SubOpcode; 7872 uint32_t MediaCommandOpcode; 7873 uint32_t Pipeline; 7874 uint32_t CommandType; 7875 uint32_t InterfaceDescriptorTotalLength; 7876 uint64_t InterfaceDescriptorDataStartAddress; 7877}; 7878 7879static inline __attribute__((always_inline)) void 7880GFX9_MEDIA_INTERFACE_DESCRIPTOR_LOAD_pack(__attribute__((unused)) __gen_user_data *data, 7881 __attribute__((unused)) void * restrict dst, 7882 __attribute__((unused)) const struct GFX9_MEDIA_INTERFACE_DESCRIPTOR_LOAD * restrict values) 7883{ 7884 uint32_t * restrict dw = (uint32_t * restrict) dst; 7885 7886 dw[0] = 7887 __gen_uint(values->DWordLength, 0, 15) | 7888 __gen_uint(values->SubOpcode, 16, 23) | 7889 __gen_uint(values->MediaCommandOpcode, 24, 26) | 7890 __gen_uint(values->Pipeline, 27, 28) | 7891 __gen_uint(values->CommandType, 29, 31); 7892 7893 dw[1] = 0; 7894 7895 dw[2] = 7896 __gen_uint(values->InterfaceDescriptorTotalLength, 0, 16); 7897 7898 dw[3] = 7899 __gen_offset(values->InterfaceDescriptorDataStartAddress, 0, 31); 7900} 7901 7902#define GFX9_MEDIA_OBJECT_length_bias 2 7903#define GFX9_MEDIA_OBJECT_header \ 7904 .DWordLength = 4, \ 7905 .MediaCommandSubOpcode = 0, \ 7906 .MediaCommandOpcode = 1, \ 7907 .MediaCommandPipeline = 2, \ 7908 .CommandType = 3 7909 7910struct GFX9_MEDIA_OBJECT { 7911 uint32_t DWordLength; 7912 uint32_t MediaCommandSubOpcode; 7913 uint32_t MediaCommandOpcode; 7914 uint32_t MediaCommandPipeline; 7915 uint32_t CommandType; 7916 uint32_t InterfaceDescriptorOffset; 7917 uint32_t IndirectDataLength; 7918 uint32_t SubSliceDestinationSelect; 7919#define Subslice3 3 7920#define SubSlice2 2 7921#define SubSlice1 1 7922#define SubSlice0 0 7923 uint32_t SliceDestinationSelect; 7924#define Slice0 0 7925#define Slice1 1 7926#define Slice2 2 7927 uint32_t UseScoreboard; 7928#define Notusingscoreboard 0 7929#define Usingscoreboard 1 7930 uint32_t ForceDestination; 7931 uint32_t ThreadSynchronization; 7932#define Nothreadsynchronization 0 7933#define Threaddispatchissynchronizedbythespawnrootthreadmessage 1 7934 uint32_t SliceDestinationSelectMSBs; 7935 bool ChildrenPresent; 7936 __gen_address_type IndirectDataStartAddress; 7937 uint32_t ScoreboardX; 7938 uint32_t ScoredboardY; 7939 uint32_t ScoreboardMask; 7940 uint32_t ScoreboardColor; 7941 /* variable length fields follow */ 7942}; 7943 7944static inline __attribute__((always_inline)) void 7945GFX9_MEDIA_OBJECT_pack(__attribute__((unused)) __gen_user_data *data, 7946 __attribute__((unused)) void * restrict dst, 7947 __attribute__((unused)) const struct GFX9_MEDIA_OBJECT * restrict values) 7948{ 7949 uint32_t * restrict dw = (uint32_t * restrict) dst; 7950 7951 dw[0] = 7952 __gen_uint(values->DWordLength, 0, 15) | 7953 __gen_uint(values->MediaCommandSubOpcode, 16, 23) | 7954 __gen_uint(values->MediaCommandOpcode, 24, 26) | 7955 __gen_uint(values->MediaCommandPipeline, 27, 28) | 7956 __gen_uint(values->CommandType, 29, 31); 7957 7958 dw[1] = 7959 __gen_uint(values->InterfaceDescriptorOffset, 0, 5); 7960 7961 dw[2] = 7962 __gen_uint(values->IndirectDataLength, 0, 16) | 7963 __gen_uint(values->SubSliceDestinationSelect, 17, 18) | 7964 __gen_uint(values->SliceDestinationSelect, 19, 20) | 7965 __gen_uint(values->UseScoreboard, 21, 21) | 7966 __gen_uint(values->ForceDestination, 22, 22) | 7967 __gen_uint(values->ThreadSynchronization, 24, 24) | 7968 __gen_uint(values->SliceDestinationSelectMSBs, 25, 26) | 7969 __gen_uint(values->ChildrenPresent, 31, 31); 7970 7971 dw[3] = __gen_address(data, &dw[3], values->IndirectDataStartAddress, 0, 0, 31); 7972 7973 dw[4] = 7974 __gen_uint(values->ScoreboardX, 0, 8) | 7975 __gen_uint(values->ScoredboardY, 16, 24); 7976 7977 dw[5] = 7978 __gen_uint(values->ScoreboardMask, 0, 7) | 7979 __gen_uint(values->ScoreboardColor, 16, 19); 7980} 7981 7982#define GFX9_MEDIA_OBJECT_GRPID_length_bias 2 7983#define GFX9_MEDIA_OBJECT_GRPID_header \ 7984 .DWordLength = 5, \ 7985 .MediaCommandSubOpcode = 6, \ 7986 .MediaCommandOpcode = 1, \ 7987 .MediaCommandPipeline = 2, \ 7988 .CommandType = 3 7989 7990struct GFX9_MEDIA_OBJECT_GRPID { 7991 uint32_t DWordLength; 7992 uint32_t MediaCommandSubOpcode; 7993 uint32_t MediaCommandOpcode; 7994 uint32_t MediaCommandPipeline; 7995 uint32_t CommandType; 7996 uint32_t InterfaceDescriptorOffset; 7997 uint32_t IndirectDataLength; 7998 uint32_t SubSliceDestinationSelect; 7999#define Subslice3 3 8000#define SubSlice2 2 8001#define SubSlice1 1 8002#define SubSlice0 0 8003 uint32_t SliceDestinationSelect; 8004#define Slice0 0 8005#define Slice1 1 8006#define Slice2 2 8007 uint32_t UseScoreboard; 8008#define Notusingscoreboard 0 8009#define Usingscoreboard 1 8010 uint32_t ForceDestination; 8011 uint32_t EndofThreadGroup; 8012 uint32_t SliceDestinationSelectMSB; 8013 __gen_address_type IndirectDataStartAddress; 8014 uint32_t ScoreboardX; 8015 uint32_t ScoreboardY; 8016 uint32_t ScoreboardMask; 8017 uint32_t ScoreboardColor; 8018 uint32_t GroupID; 8019 /* variable length fields follow */ 8020}; 8021 8022static inline __attribute__((always_inline)) void 8023GFX9_MEDIA_OBJECT_GRPID_pack(__attribute__((unused)) __gen_user_data *data, 8024 __attribute__((unused)) void * restrict dst, 8025 __attribute__((unused)) const struct GFX9_MEDIA_OBJECT_GRPID * restrict values) 8026{ 8027 uint32_t * restrict dw = (uint32_t * restrict) dst; 8028 8029 dw[0] = 8030 __gen_uint(values->DWordLength, 0, 15) | 8031 __gen_uint(values->MediaCommandSubOpcode, 16, 23) | 8032 __gen_uint(values->MediaCommandOpcode, 24, 26) | 8033 __gen_uint(values->MediaCommandPipeline, 27, 28) | 8034 __gen_uint(values->CommandType, 29, 31); 8035 8036 dw[1] = 8037 __gen_uint(values->InterfaceDescriptorOffset, 0, 5); 8038 8039 dw[2] = 8040 __gen_uint(values->IndirectDataLength, 0, 16) | 8041 __gen_uint(values->SubSliceDestinationSelect, 17, 18) | 8042 __gen_uint(values->SliceDestinationSelect, 19, 20) | 8043 __gen_uint(values->UseScoreboard, 21, 21) | 8044 __gen_uint(values->ForceDestination, 22, 22) | 8045 __gen_uint(values->EndofThreadGroup, 23, 23) | 8046 __gen_uint(values->SliceDestinationSelectMSB, 24, 24); 8047 8048 dw[3] = __gen_address(data, &dw[3], values->IndirectDataStartAddress, 0, 0, 31); 8049 8050 dw[4] = 8051 __gen_uint(values->ScoreboardX, 0, 8) | 8052 __gen_uint(values->ScoreboardY, 16, 24); 8053 8054 dw[5] = 8055 __gen_uint(values->ScoreboardMask, 0, 7) | 8056 __gen_uint(values->ScoreboardColor, 16, 19); 8057 8058 dw[6] = 8059 __gen_uint(values->GroupID, 0, 31); 8060} 8061 8062#define GFX9_MEDIA_OBJECT_PRT_length 16 8063#define GFX9_MEDIA_OBJECT_PRT_length_bias 2 8064#define GFX9_MEDIA_OBJECT_PRT_header \ 8065 .DWordLength = 14, \ 8066 .SubOpcode = 2, \ 8067 .MediaCommandOpcode = 1, \ 8068 .Pipeline = 2, \ 8069 .CommandType = 3 8070 8071struct GFX9_MEDIA_OBJECT_PRT { 8072 uint32_t DWordLength; 8073 uint32_t SubOpcode; 8074 uint32_t MediaCommandOpcode; 8075 uint32_t Pipeline; 8076 uint32_t CommandType; 8077 uint32_t InterfaceDescriptorOffset; 8078 uint32_t PRT_FenceType; 8079#define Rootthreadqueue 0 8080#define VFEstateflush 1 8081 bool PRT_FenceNeeded; 8082 bool ChildrenPresent; 8083 uint32_t InlineData[12]; 8084}; 8085 8086static inline __attribute__((always_inline)) void 8087GFX9_MEDIA_OBJECT_PRT_pack(__attribute__((unused)) __gen_user_data *data, 8088 __attribute__((unused)) void * restrict dst, 8089 __attribute__((unused)) const struct GFX9_MEDIA_OBJECT_PRT * restrict values) 8090{ 8091 uint32_t * restrict dw = (uint32_t * restrict) dst; 8092 8093 dw[0] = 8094 __gen_uint(values->DWordLength, 0, 15) | 8095 __gen_uint(values->SubOpcode, 16, 23) | 8096 __gen_uint(values->MediaCommandOpcode, 24, 26) | 8097 __gen_uint(values->Pipeline, 27, 28) | 8098 __gen_uint(values->CommandType, 29, 31); 8099 8100 dw[1] = 8101 __gen_uint(values->InterfaceDescriptorOffset, 0, 5); 8102 8103 dw[2] = 8104 __gen_uint(values->PRT_FenceType, 22, 22) | 8105 __gen_uint(values->PRT_FenceNeeded, 23, 23) | 8106 __gen_uint(values->ChildrenPresent, 31, 31); 8107 8108 dw[3] = 0; 8109 8110 dw[4] = 8111 __gen_uint(values->InlineData[0], 0, 31); 8112 8113 dw[5] = 8114 __gen_uint(values->InlineData[1], 0, 31); 8115 8116 dw[6] = 8117 __gen_uint(values->InlineData[2], 0, 31); 8118 8119 dw[7] = 8120 __gen_uint(values->InlineData[3], 0, 31); 8121 8122 dw[8] = 8123 __gen_uint(values->InlineData[4], 0, 31); 8124 8125 dw[9] = 8126 __gen_uint(values->InlineData[5], 0, 31); 8127 8128 dw[10] = 8129 __gen_uint(values->InlineData[6], 0, 31); 8130 8131 dw[11] = 8132 __gen_uint(values->InlineData[7], 0, 31); 8133 8134 dw[12] = 8135 __gen_uint(values->InlineData[8], 0, 31); 8136 8137 dw[13] = 8138 __gen_uint(values->InlineData[9], 0, 31); 8139 8140 dw[14] = 8141 __gen_uint(values->InlineData[10], 0, 31); 8142 8143 dw[15] = 8144 __gen_uint(values->InlineData[11], 0, 31); 8145} 8146 8147#define GFX9_MEDIA_OBJECT_WALKER_length_bias 2 8148#define GFX9_MEDIA_OBJECT_WALKER_header \ 8149 .DWordLength = 15, \ 8150 .SubOpcode = 3, \ 8151 .MediaCommandOpcode = 1, \ 8152 .Pipeline = 2, \ 8153 .CommandType = 3 8154 8155struct GFX9_MEDIA_OBJECT_WALKER { 8156 uint32_t DWordLength; 8157 uint32_t SubOpcode; 8158 uint32_t MediaCommandOpcode; 8159 uint32_t Pipeline; 8160 uint32_t CommandType; 8161 uint32_t InterfaceDescriptorOffset; 8162 uint32_t IndirectDataLength; 8163 uint32_t UseScoreboard; 8164#define Notusingscoreboard 0 8165#define Usingscoreboard 1 8166 uint32_t MaskedDispatch; 8167 uint32_t ThreadSynchronization; 8168#define Nothreadsynchronization 0 8169#define Threaddispatchissynchronizedbythespawnrootthreadmessage 1 8170 uint32_t IndirectDataStartAddress; 8171 uint32_t ScoreboardMask; 8172 uint32_t GroupIDLoopSelect; 8173#define No_Groups 0 8174#define Color_Groups 1 8175#define InnerLocal_Groups 2 8176#define MidLocal_Groups 3 8177#define OuterLocal_Groups 4 8178#define InnerGlobal_Groups 5 8179 int32_t MidLoopUnitX; 8180 int32_t LocalMidLoopUnitY; 8181 uint32_t MiddleLoopExtraSteps; 8182 uint32_t ColorCountMinusOne; 8183 uint32_t LocalLoopExecCount; 8184 uint32_t GlobalLoopExecCount; 8185 uint32_t BlockResolutionX; 8186 uint32_t BlockResolutionY; 8187 uint32_t LocalStartX; 8188 uint32_t LocalStartY; 8189 int32_t LocalOuterLoopStrideX; 8190 int32_t LocalOuterLoopStrideY; 8191 int32_t LocalInnerLoopUnitX; 8192 int32_t LocalInnerLoopUnitY; 8193 uint32_t GlobalResolutionX; 8194 uint32_t GlobalResolutionY; 8195 int32_t GlobalStartX; 8196 int32_t GlobalStartY; 8197 int32_t GlobalOuterLoopStrideX; 8198 int32_t GlobalOuterLoopStrideY; 8199 int32_t GlobalInnerLoopUnitX; 8200 int32_t GlobalInnerLoopUnitY; 8201 /* variable length fields follow */ 8202}; 8203 8204static inline __attribute__((always_inline)) void 8205GFX9_MEDIA_OBJECT_WALKER_pack(__attribute__((unused)) __gen_user_data *data, 8206 __attribute__((unused)) void * restrict dst, 8207 __attribute__((unused)) const struct GFX9_MEDIA_OBJECT_WALKER * restrict values) 8208{ 8209 uint32_t * restrict dw = (uint32_t * restrict) dst; 8210 8211 dw[0] = 8212 __gen_uint(values->DWordLength, 0, 15) | 8213 __gen_uint(values->SubOpcode, 16, 23) | 8214 __gen_uint(values->MediaCommandOpcode, 24, 26) | 8215 __gen_uint(values->Pipeline, 27, 28) | 8216 __gen_uint(values->CommandType, 29, 31); 8217 8218 dw[1] = 8219 __gen_uint(values->InterfaceDescriptorOffset, 0, 5); 8220 8221 dw[2] = 8222 __gen_uint(values->IndirectDataLength, 0, 16) | 8223 __gen_uint(values->UseScoreboard, 21, 21) | 8224 __gen_uint(values->MaskedDispatch, 22, 23) | 8225 __gen_uint(values->ThreadSynchronization, 24, 24); 8226 8227 dw[3] = 8228 __gen_uint(values->IndirectDataStartAddress, 0, 31); 8229 8230 dw[4] = 0; 8231 8232 dw[5] = 8233 __gen_uint(values->ScoreboardMask, 0, 7) | 8234 __gen_uint(values->GroupIDLoopSelect, 8, 31); 8235 8236 dw[6] = 8237 __gen_sint(values->MidLoopUnitX, 8, 9) | 8238 __gen_sint(values->LocalMidLoopUnitY, 12, 13) | 8239 __gen_uint(values->MiddleLoopExtraSteps, 16, 20) | 8240 __gen_uint(values->ColorCountMinusOne, 24, 27); 8241 8242 dw[7] = 8243 __gen_uint(values->LocalLoopExecCount, 0, 11) | 8244 __gen_uint(values->GlobalLoopExecCount, 16, 27); 8245 8246 dw[8] = 8247 __gen_uint(values->BlockResolutionX, 0, 10) | 8248 __gen_uint(values->BlockResolutionY, 16, 26); 8249 8250 dw[9] = 8251 __gen_uint(values->LocalStartX, 0, 10) | 8252 __gen_uint(values->LocalStartY, 16, 26); 8253 8254 dw[10] = 0; 8255 8256 dw[11] = 8257 __gen_sint(values->LocalOuterLoopStrideX, 0, 11) | 8258 __gen_sint(values->LocalOuterLoopStrideY, 16, 27); 8259 8260 dw[12] = 8261 __gen_sint(values->LocalInnerLoopUnitX, 0, 11) | 8262 __gen_sint(values->LocalInnerLoopUnitY, 16, 27); 8263 8264 dw[13] = 8265 __gen_uint(values->GlobalResolutionX, 0, 10) | 8266 __gen_uint(values->GlobalResolutionY, 16, 26); 8267 8268 dw[14] = 8269 __gen_sint(values->GlobalStartX, 0, 11) | 8270 __gen_sint(values->GlobalStartY, 16, 27); 8271 8272 dw[15] = 8273 __gen_sint(values->GlobalOuterLoopStrideX, 0, 11) | 8274 __gen_sint(values->GlobalOuterLoopStrideY, 16, 27); 8275 8276 dw[16] = 8277 __gen_sint(values->GlobalInnerLoopUnitX, 0, 11) | 8278 __gen_sint(values->GlobalInnerLoopUnitY, 16, 27); 8279} 8280 8281#define GFX9_MEDIA_STATE_FLUSH_length 2 8282#define GFX9_MEDIA_STATE_FLUSH_length_bias 2 8283#define GFX9_MEDIA_STATE_FLUSH_header \ 8284 .DWordLength = 0, \ 8285 .SubOpcode = 4, \ 8286 .MediaCommandOpcode = 0, \ 8287 .Pipeline = 2, \ 8288 .CommandType = 3 8289 8290struct GFX9_MEDIA_STATE_FLUSH { 8291 uint32_t DWordLength; 8292 uint32_t SubOpcode; 8293 uint32_t MediaCommandOpcode; 8294 uint32_t Pipeline; 8295 uint32_t CommandType; 8296 uint32_t InterfaceDescriptorOffset; 8297 uint32_t WatermarkRequired; 8298 bool FlushtoGO; 8299}; 8300 8301static inline __attribute__((always_inline)) void 8302GFX9_MEDIA_STATE_FLUSH_pack(__attribute__((unused)) __gen_user_data *data, 8303 __attribute__((unused)) void * restrict dst, 8304 __attribute__((unused)) const struct GFX9_MEDIA_STATE_FLUSH * restrict values) 8305{ 8306 uint32_t * restrict dw = (uint32_t * restrict) dst; 8307 8308 dw[0] = 8309 __gen_uint(values->DWordLength, 0, 15) | 8310 __gen_uint(values->SubOpcode, 16, 23) | 8311 __gen_uint(values->MediaCommandOpcode, 24, 26) | 8312 __gen_uint(values->Pipeline, 27, 28) | 8313 __gen_uint(values->CommandType, 29, 31); 8314 8315 dw[1] = 8316 __gen_uint(values->InterfaceDescriptorOffset, 0, 5) | 8317 __gen_uint(values->WatermarkRequired, 6, 6) | 8318 __gen_uint(values->FlushtoGO, 7, 7); 8319} 8320 8321#define GFX9_MEDIA_VFE_STATE_length 9 8322#define GFX9_MEDIA_VFE_STATE_length_bias 2 8323#define GFX9_MEDIA_VFE_STATE_header \ 8324 .DWordLength = 7, \ 8325 .SubOpcode = 0, \ 8326 .MediaCommandOpcode = 0, \ 8327 .Pipeline = 2, \ 8328 .CommandType = 3 8329 8330struct GFX9_MEDIA_VFE_STATE { 8331 uint32_t DWordLength; 8332 uint32_t SubOpcode; 8333 uint32_t MediaCommandOpcode; 8334 uint32_t Pipeline; 8335 uint32_t CommandType; 8336 uint32_t PerThreadScratchSpace; 8337 uint32_t StackSize; 8338 __gen_address_type ScratchSpaceBasePointer; 8339 uint32_t ResetGatewayTimer; 8340#define Maintainingtheexistingtimestampstate 0 8341#define Resettingrelativetimerandlatchingtheglobaltimestamp 1 8342 uint32_t NumberofURBEntries; 8343 uint32_t MaximumNumberofThreads; 8344 uint32_t SliceDisable; 8345#define AllSubslicesEnabled 0 8346#define OnlySlice0Enabled 1 8347#define OnlySlice0Subslice0Enabled 3 8348 uint32_t CURBEAllocationSize; 8349 uint32_t URBEntryAllocationSize; 8350 uint32_t ScoreboardMask; 8351 uint32_t ScoreboardType; 8352#define StallingScoreboard 0 8353#define NonStallingScoreboard 1 8354 bool ScoreboardEnable; 8355 int32_t Scoreboard0DeltaX; 8356 int32_t Scoreboard0DeltaY; 8357 int32_t Scoreboard1DeltaX; 8358 int32_t Scoreboard1DeltaY; 8359 int32_t Scoreboard2DeltaX; 8360 int32_t Scoreboard2DeltaY; 8361 int32_t Scoreboard3DeltaX; 8362 int32_t Scoreboard3DeltaY; 8363 int32_t Scoreboard4DeltaX; 8364 int32_t Scoreboard4DeltaY; 8365 int32_t Scoreboard5DeltaX; 8366 int32_t Scoreboard5DeltaY; 8367 int32_t Scoreboard6DeltaX; 8368 int32_t Scoreboard6DeltaY; 8369 int32_t Scoreboard7DeltaX; 8370 int32_t Scoreboard7DeltaY; 8371}; 8372 8373static inline __attribute__((always_inline)) void 8374GFX9_MEDIA_VFE_STATE_pack(__attribute__((unused)) __gen_user_data *data, 8375 __attribute__((unused)) void * restrict dst, 8376 __attribute__((unused)) const struct GFX9_MEDIA_VFE_STATE * restrict values) 8377{ 8378 uint32_t * restrict dw = (uint32_t * restrict) dst; 8379 8380 dw[0] = 8381 __gen_uint(values->DWordLength, 0, 15) | 8382 __gen_uint(values->SubOpcode, 16, 23) | 8383 __gen_uint(values->MediaCommandOpcode, 24, 26) | 8384 __gen_uint(values->Pipeline, 27, 28) | 8385 __gen_uint(values->CommandType, 29, 31); 8386 8387 const uint64_t v1 = 8388 __gen_uint(values->PerThreadScratchSpace, 0, 3) | 8389 __gen_uint(values->StackSize, 4, 7); 8390 const uint64_t v1_address = 8391 __gen_address(data, &dw[1], values->ScratchSpaceBasePointer, v1, 10, 47); 8392 dw[1] = v1_address; 8393 dw[2] = (v1_address >> 32) | (v1 >> 32); 8394 8395 dw[3] = 8396 __gen_uint(values->ResetGatewayTimer, 7, 7) | 8397 __gen_uint(values->NumberofURBEntries, 8, 15) | 8398 __gen_uint(values->MaximumNumberofThreads, 16, 31); 8399 8400 dw[4] = 8401 __gen_uint(values->SliceDisable, 0, 1); 8402 8403 dw[5] = 8404 __gen_uint(values->CURBEAllocationSize, 0, 15) | 8405 __gen_uint(values->URBEntryAllocationSize, 16, 31); 8406 8407 dw[6] = 8408 __gen_uint(values->ScoreboardMask, 0, 7) | 8409 __gen_uint(values->ScoreboardType, 30, 30) | 8410 __gen_uint(values->ScoreboardEnable, 31, 31); 8411 8412 dw[7] = 8413 __gen_sint(values->Scoreboard0DeltaX, 0, 3) | 8414 __gen_sint(values->Scoreboard0DeltaY, 4, 7) | 8415 __gen_sint(values->Scoreboard1DeltaX, 8, 11) | 8416 __gen_sint(values->Scoreboard1DeltaY, 12, 15) | 8417 __gen_sint(values->Scoreboard2DeltaX, 16, 19) | 8418 __gen_sint(values->Scoreboard2DeltaY, 20, 23) | 8419 __gen_sint(values->Scoreboard3DeltaX, 24, 27) | 8420 __gen_sint(values->Scoreboard3DeltaY, 28, 31); 8421 8422 dw[8] = 8423 __gen_sint(values->Scoreboard4DeltaX, 0, 3) | 8424 __gen_sint(values->Scoreboard4DeltaY, 4, 7) | 8425 __gen_sint(values->Scoreboard5DeltaX, 8, 11) | 8426 __gen_sint(values->Scoreboard5DeltaY, 12, 15) | 8427 __gen_sint(values->Scoreboard6DeltaX, 16, 19) | 8428 __gen_sint(values->Scoreboard6DeltaY, 20, 23) | 8429 __gen_sint(values->Scoreboard7DeltaX, 24, 27) | 8430 __gen_sint(values->Scoreboard7DeltaY, 28, 31); 8431} 8432 8433#define GFX9_MI_ARB_CHECK_length 1 8434#define GFX9_MI_ARB_CHECK_length_bias 1 8435#define GFX9_MI_ARB_CHECK_header \ 8436 .MICommandOpcode = 5, \ 8437 .CommandType = 0 8438 8439struct GFX9_MI_ARB_CHECK { 8440 uint32_t MICommandOpcode; 8441 uint32_t CommandType; 8442}; 8443 8444static inline __attribute__((always_inline)) void 8445GFX9_MI_ARB_CHECK_pack(__attribute__((unused)) __gen_user_data *data, 8446 __attribute__((unused)) void * restrict dst, 8447 __attribute__((unused)) const struct GFX9_MI_ARB_CHECK * restrict values) 8448{ 8449 uint32_t * restrict dw = (uint32_t * restrict) dst; 8450 8451 dw[0] = 8452 __gen_uint(values->MICommandOpcode, 23, 28) | 8453 __gen_uint(values->CommandType, 29, 31); 8454} 8455 8456#define GFX9_MI_ARB_ON_OFF_length 1 8457#define GFX9_MI_ARB_ON_OFF_length_bias 1 8458#define GFX9_MI_ARB_ON_OFF_header \ 8459 .ArbitrationEnable = 1, \ 8460 .MICommandOpcode = 8, \ 8461 .CommandType = 0 8462 8463struct GFX9_MI_ARB_ON_OFF { 8464 bool ArbitrationEnable; 8465 uint32_t MICommandOpcode; 8466 uint32_t CommandType; 8467}; 8468 8469static inline __attribute__((always_inline)) void 8470GFX9_MI_ARB_ON_OFF_pack(__attribute__((unused)) __gen_user_data *data, 8471 __attribute__((unused)) void * restrict dst, 8472 __attribute__((unused)) const struct GFX9_MI_ARB_ON_OFF * restrict values) 8473{ 8474 uint32_t * restrict dw = (uint32_t * restrict) dst; 8475 8476 dw[0] = 8477 __gen_uint(values->ArbitrationEnable, 0, 0) | 8478 __gen_uint(values->MICommandOpcode, 23, 28) | 8479 __gen_uint(values->CommandType, 29, 31); 8480} 8481 8482#define GFX9_MI_ATOMIC_length 3 8483#define GFX9_MI_ATOMIC_length_bias 2 8484#define GFX9_MI_ATOMIC_header \ 8485 .DWordLength = 1, \ 8486 .MICommandOpcode = 47, \ 8487 .CommandType = 0 8488 8489struct GFX9_MI_ATOMIC { 8490 uint32_t DWordLength; 8491 enum GFX9_Atomic_OPCODE ATOMICOPCODE; 8492 bool ReturnDataControl; 8493 bool CSSTALL; 8494 bool InlineData; 8495 uint32_t DataSize; 8496#define MI_ATOMIC_DWORD 0 8497#define MI_ATOMIC_QWORD 1 8498#define MI_ATOMIC_OCTWORD 2 8499#define MI_ATOMIC_RESERVED 3 8500 bool PostSyncOperation; 8501 uint32_t MemoryType; 8502#define PerProcessGraphicsAddress 0 8503#define GlobalGraphicsAddress 1 8504 uint32_t MICommandOpcode; 8505 uint32_t CommandType; 8506 __gen_address_type MemoryAddress; 8507 uint32_t Operand1DataDword0; 8508 uint32_t Operand2DataDword0; 8509 uint32_t Operand1DataDword1; 8510 uint32_t Operand2DataDword1; 8511 uint32_t Operand1DataDword2; 8512 uint32_t Operand2DataDword2; 8513 uint32_t Operand1DataDword3; 8514 uint32_t Operand2DataDword3; 8515}; 8516 8517static inline __attribute__((always_inline)) void 8518GFX9_MI_ATOMIC_pack(__attribute__((unused)) __gen_user_data *data, 8519 __attribute__((unused)) void * restrict dst, 8520 __attribute__((unused)) const struct GFX9_MI_ATOMIC * restrict values) 8521{ 8522 uint32_t * restrict dw = (uint32_t * restrict) dst; 8523 8524 dw[0] = 8525 __gen_uint(values->DWordLength, 0, 7) | 8526 __gen_uint(values->ATOMICOPCODE, 8, 15) | 8527 __gen_uint(values->ReturnDataControl, 16, 16) | 8528 __gen_uint(values->CSSTALL, 17, 17) | 8529 __gen_uint(values->InlineData, 18, 18) | 8530 __gen_uint(values->DataSize, 19, 20) | 8531 __gen_uint(values->PostSyncOperation, 21, 21) | 8532 __gen_uint(values->MemoryType, 22, 22) | 8533 __gen_uint(values->MICommandOpcode, 23, 28) | 8534 __gen_uint(values->CommandType, 29, 31); 8535 8536 const uint64_t v1_address = 8537 __gen_address(data, &dw[1], values->MemoryAddress, 0, 2, 47); 8538 dw[1] = v1_address; 8539 dw[2] = v1_address >> 32; 8540} 8541 8542#define GFX9_MI_BATCH_BUFFER_END_length 1 8543#define GFX9_MI_BATCH_BUFFER_END_length_bias 1 8544#define GFX9_MI_BATCH_BUFFER_END_header \ 8545 .MICommandOpcode = 10, \ 8546 .CommandType = 0 8547 8548struct GFX9_MI_BATCH_BUFFER_END { 8549 uint32_t MICommandOpcode; 8550 uint32_t CommandType; 8551}; 8552 8553static inline __attribute__((always_inline)) void 8554GFX9_MI_BATCH_BUFFER_END_pack(__attribute__((unused)) __gen_user_data *data, 8555 __attribute__((unused)) void * restrict dst, 8556 __attribute__((unused)) const struct GFX9_MI_BATCH_BUFFER_END * restrict values) 8557{ 8558 uint32_t * restrict dw = (uint32_t * restrict) dst; 8559 8560 dw[0] = 8561 __gen_uint(values->MICommandOpcode, 23, 28) | 8562 __gen_uint(values->CommandType, 29, 31); 8563} 8564 8565#define GFX9_MI_BATCH_BUFFER_START_length 3 8566#define GFX9_MI_BATCH_BUFFER_START_length_bias 2 8567#define GFX9_MI_BATCH_BUFFER_START_header \ 8568 .DWordLength = 1, \ 8569 .MICommandOpcode = 49, \ 8570 .CommandType = 0 8571 8572struct GFX9_MI_BATCH_BUFFER_START { 8573 uint32_t DWordLength; 8574 uint32_t AddressSpaceIndicator; 8575#define ASI_GGTT 0 8576#define ASI_PPGTT 1 8577 bool ResourceStreamerEnable; 8578 bool PredicationEnable; 8579 bool AddOffsetEnable; 8580 uint32_t SecondLevelBatchBuffer; 8581#define Firstlevelbatch 0 8582#define Secondlevelbatch 1 8583 uint32_t MICommandOpcode; 8584 uint32_t CommandType; 8585 __gen_address_type BatchBufferStartAddress; 8586}; 8587 8588static inline __attribute__((always_inline)) void 8589GFX9_MI_BATCH_BUFFER_START_pack(__attribute__((unused)) __gen_user_data *data, 8590 __attribute__((unused)) void * restrict dst, 8591 __attribute__((unused)) const struct GFX9_MI_BATCH_BUFFER_START * restrict values) 8592{ 8593 uint32_t * restrict dw = (uint32_t * restrict) dst; 8594 8595 dw[0] = 8596 __gen_uint(values->DWordLength, 0, 7) | 8597 __gen_uint(values->AddressSpaceIndicator, 8, 8) | 8598 __gen_uint(values->ResourceStreamerEnable, 10, 10) | 8599 __gen_uint(values->PredicationEnable, 15, 15) | 8600 __gen_uint(values->AddOffsetEnable, 16, 16) | 8601 __gen_uint(values->SecondLevelBatchBuffer, 22, 22) | 8602 __gen_uint(values->MICommandOpcode, 23, 28) | 8603 __gen_uint(values->CommandType, 29, 31); 8604 8605 const uint64_t v1_address = 8606 __gen_address(data, &dw[1], values->BatchBufferStartAddress, 0, 2, 63); 8607 dw[1] = v1_address; 8608 dw[2] = v1_address >> 32; 8609} 8610 8611#define GFX9_MI_CLFLUSH_length_bias 2 8612#define GFX9_MI_CLFLUSH_header \ 8613 .DWordLength = 1, \ 8614 .MICommandOpcode = 39, \ 8615 .CommandType = 0 8616 8617struct GFX9_MI_CLFLUSH { 8618 uint32_t DWordLength; 8619 bool UseGlobalGTT; 8620 uint32_t MICommandOpcode; 8621 uint32_t CommandType; 8622 uint32_t StartingCachelineOffset; 8623 __gen_address_type PageBaseAddress; 8624 /* variable length fields follow */ 8625}; 8626 8627static inline __attribute__((always_inline)) void 8628GFX9_MI_CLFLUSH_pack(__attribute__((unused)) __gen_user_data *data, 8629 __attribute__((unused)) void * restrict dst, 8630 __attribute__((unused)) const struct GFX9_MI_CLFLUSH * restrict values) 8631{ 8632 uint32_t * restrict dw = (uint32_t * restrict) dst; 8633 8634 dw[0] = 8635 __gen_uint(values->DWordLength, 0, 9) | 8636 __gen_uint(values->UseGlobalGTT, 22, 22) | 8637 __gen_uint(values->MICommandOpcode, 23, 28) | 8638 __gen_uint(values->CommandType, 29, 31); 8639 8640 const uint64_t v1 = 8641 __gen_uint(values->StartingCachelineOffset, 6, 11); 8642 const uint64_t v1_address = 8643 __gen_address(data, &dw[1], values->PageBaseAddress, v1, 12, 47); 8644 dw[1] = v1_address; 8645 dw[2] = (v1_address >> 32) | (v1 >> 32); 8646} 8647 8648#define GFX9_MI_CONDITIONAL_BATCH_BUFFER_END_length 4 8649#define GFX9_MI_CONDITIONAL_BATCH_BUFFER_END_length_bias 2 8650#define GFX9_MI_CONDITIONAL_BATCH_BUFFER_END_header\ 8651 .DWordLength = 2, \ 8652 .CompareSemaphore = 0, \ 8653 .MICommandOpcode = 54, \ 8654 .CommandType = 0 8655 8656struct GFX9_MI_CONDITIONAL_BATCH_BUFFER_END { 8657 uint32_t DWordLength; 8658 uint32_t CompareMaskMode; 8659#define CompareMaskModeDisabled 0 8660#define CompareMaskModeEnabled 1 8661 uint32_t CompareSemaphore; 8662 bool UseGlobalGTT; 8663 uint32_t MICommandOpcode; 8664 uint32_t CommandType; 8665 uint32_t CompareDataDword; 8666 __gen_address_type CompareAddress; 8667}; 8668 8669static inline __attribute__((always_inline)) void 8670GFX9_MI_CONDITIONAL_BATCH_BUFFER_END_pack(__attribute__((unused)) __gen_user_data *data, 8671 __attribute__((unused)) void * restrict dst, 8672 __attribute__((unused)) const struct GFX9_MI_CONDITIONAL_BATCH_BUFFER_END * restrict values) 8673{ 8674 uint32_t * restrict dw = (uint32_t * restrict) dst; 8675 8676 dw[0] = 8677 __gen_uint(values->DWordLength, 0, 7) | 8678 __gen_uint(values->CompareMaskMode, 19, 19) | 8679 __gen_uint(values->CompareSemaphore, 21, 21) | 8680 __gen_uint(values->UseGlobalGTT, 22, 22) | 8681 __gen_uint(values->MICommandOpcode, 23, 28) | 8682 __gen_uint(values->CommandType, 29, 31); 8683 8684 dw[1] = 8685 __gen_uint(values->CompareDataDword, 0, 31); 8686 8687 const uint64_t v2_address = 8688 __gen_address(data, &dw[2], values->CompareAddress, 0, 3, 63); 8689 dw[2] = v2_address; 8690 dw[3] = v2_address >> 32; 8691} 8692 8693#define GFX9_MI_COPY_MEM_MEM_length 5 8694#define GFX9_MI_COPY_MEM_MEM_length_bias 2 8695#define GFX9_MI_COPY_MEM_MEM_header \ 8696 .DWordLength = 3, \ 8697 .MICommandOpcode = 46, \ 8698 .CommandType = 0 8699 8700struct GFX9_MI_COPY_MEM_MEM { 8701 uint32_t DWordLength; 8702 bool UseGlobalGTTDestination; 8703 bool UseGlobalGTTSource; 8704 uint32_t MICommandOpcode; 8705 uint32_t CommandType; 8706 __gen_address_type DestinationMemoryAddress; 8707 __gen_address_type SourceMemoryAddress; 8708}; 8709 8710static inline __attribute__((always_inline)) void 8711GFX9_MI_COPY_MEM_MEM_pack(__attribute__((unused)) __gen_user_data *data, 8712 __attribute__((unused)) void * restrict dst, 8713 __attribute__((unused)) const struct GFX9_MI_COPY_MEM_MEM * restrict values) 8714{ 8715 uint32_t * restrict dw = (uint32_t * restrict) dst; 8716 8717 dw[0] = 8718 __gen_uint(values->DWordLength, 0, 7) | 8719 __gen_uint(values->UseGlobalGTTDestination, 21, 21) | 8720 __gen_uint(values->UseGlobalGTTSource, 22, 22) | 8721 __gen_uint(values->MICommandOpcode, 23, 28) | 8722 __gen_uint(values->CommandType, 29, 31); 8723 8724 const uint64_t v1_address = 8725 __gen_address(data, &dw[1], values->DestinationMemoryAddress, 0, 2, 63); 8726 dw[1] = v1_address; 8727 dw[2] = v1_address >> 32; 8728 8729 const uint64_t v3_address = 8730 __gen_address(data, &dw[3], values->SourceMemoryAddress, 0, 2, 63); 8731 dw[3] = v3_address; 8732 dw[4] = v3_address >> 32; 8733} 8734 8735#define GFX9_MI_DISPLAY_FLIP_length 3 8736#define GFX9_MI_DISPLAY_FLIP_length_bias 2 8737#define GFX9_MI_DISPLAY_FLIP_header \ 8738 .DWordLength = 1, \ 8739 .MICommandOpcode = 20, \ 8740 .CommandType = 0 8741 8742struct GFX9_MI_DISPLAY_FLIP { 8743 uint32_t DWordLength; 8744 uint32_t DisplayPlaneSelect; 8745#define DisplayPlane1 0 8746#define DisplayPlane2 1 8747#define DisplayPlane3 2 8748#define DisplayPlane4 4 8749#define DisplayPlane5 5 8750#define DisplayPlane6 6 8751#define DisplayPlane7 7 8752#define DisplayPlane8 8 8753#define DisplayPlane9 9 8754#define DisplayPlane10 10 8755#define DisplayPlane11 11 8756#define DisplayPlane12 12 8757 bool AsyncFlipIndicator; 8758 uint32_t MICommandOpcode; 8759 uint32_t CommandType; 8760 uint32_t TileParameter; 8761 uint32_t DisplayBufferPitch; 8762 bool Stereoscopic3DMode; 8763 uint32_t FlipType; 8764#define SyncFlip 0 8765#define AsyncFlip 1 8766#define Stereo3DFlip 2 8767 __gen_address_type DisplayBufferBaseAddress; 8768 __gen_address_type LeftEyeDisplayBufferBaseAddress; 8769}; 8770 8771static inline __attribute__((always_inline)) void 8772GFX9_MI_DISPLAY_FLIP_pack(__attribute__((unused)) __gen_user_data *data, 8773 __attribute__((unused)) void * restrict dst, 8774 __attribute__((unused)) const struct GFX9_MI_DISPLAY_FLIP * restrict values) 8775{ 8776 uint32_t * restrict dw = (uint32_t * restrict) dst; 8777 8778 dw[0] = 8779 __gen_uint(values->DWordLength, 0, 7) | 8780 __gen_uint(values->DisplayPlaneSelect, 8, 12) | 8781 __gen_uint(values->AsyncFlipIndicator, 22, 22) | 8782 __gen_uint(values->MICommandOpcode, 23, 28) | 8783 __gen_uint(values->CommandType, 29, 31); 8784 8785 dw[1] = 8786 __gen_uint(values->TileParameter, 0, 2) | 8787 __gen_uint(values->DisplayBufferPitch, 6, 15) | 8788 __gen_uint(values->Stereoscopic3DMode, 31, 31); 8789 8790 const uint32_t v2 = 8791 __gen_uint(values->FlipType, 0, 1); 8792 dw[2] = __gen_address(data, &dw[2], values->DisplayBufferBaseAddress, v2, 12, 31); 8793} 8794 8795#define GFX9_MI_FORCE_WAKEUP_length 2 8796#define GFX9_MI_FORCE_WAKEUP_length_bias 2 8797#define GFX9_MI_FORCE_WAKEUP_header \ 8798 .DWordLength = 0, \ 8799 .MICommandOpcode = 29, \ 8800 .CommandType = 0 8801 8802struct GFX9_MI_FORCE_WAKEUP { 8803 uint32_t DWordLength; 8804 uint32_t MICommandOpcode; 8805 uint32_t CommandType; 8806 uint32_t ForceMediaAwake; 8807 uint32_t ForceRenderAwake; 8808 uint32_t MaskBits; 8809}; 8810 8811static inline __attribute__((always_inline)) void 8812GFX9_MI_FORCE_WAKEUP_pack(__attribute__((unused)) __gen_user_data *data, 8813 __attribute__((unused)) void * restrict dst, 8814 __attribute__((unused)) const struct GFX9_MI_FORCE_WAKEUP * restrict values) 8815{ 8816 uint32_t * restrict dw = (uint32_t * restrict) dst; 8817 8818 dw[0] = 8819 __gen_uint(values->DWordLength, 0, 7) | 8820 __gen_uint(values->MICommandOpcode, 23, 28) | 8821 __gen_uint(values->CommandType, 29, 31); 8822 8823 dw[1] = 8824 __gen_uint(values->ForceMediaAwake, 0, 0) | 8825 __gen_uint(values->ForceRenderAwake, 1, 1) | 8826 __gen_uint(values->MaskBits, 16, 31); 8827} 8828 8829#define GFX9_MI_LOAD_REGISTER_IMM_length 3 8830#define GFX9_MI_LOAD_REGISTER_IMM_length_bias 2 8831#define GFX9_MI_LOAD_REGISTER_IMM_header \ 8832 .DWordLength = 1, \ 8833 .MICommandOpcode = 34, \ 8834 .CommandType = 0 8835 8836struct GFX9_MI_LOAD_REGISTER_IMM { 8837 uint32_t DWordLength; 8838 uint32_t ByteWriteDisables; 8839 uint32_t MICommandOpcode; 8840 uint32_t CommandType; 8841 uint64_t RegisterOffset; 8842 uint32_t DataDWord; 8843 /* variable length fields follow */ 8844}; 8845 8846static inline __attribute__((always_inline)) void 8847GFX9_MI_LOAD_REGISTER_IMM_pack(__attribute__((unused)) __gen_user_data *data, 8848 __attribute__((unused)) void * restrict dst, 8849 __attribute__((unused)) const struct GFX9_MI_LOAD_REGISTER_IMM * restrict values) 8850{ 8851 uint32_t * restrict dw = (uint32_t * restrict) dst; 8852 8853 dw[0] = 8854 __gen_uint(values->DWordLength, 0, 7) | 8855 __gen_uint(values->ByteWriteDisables, 8, 11) | 8856 __gen_uint(values->MICommandOpcode, 23, 28) | 8857 __gen_uint(values->CommandType, 29, 31); 8858 8859 dw[1] = 8860 __gen_offset(values->RegisterOffset, 2, 22); 8861 8862 dw[2] = 8863 __gen_uint(values->DataDWord, 0, 31); 8864} 8865 8866#define GFX9_MI_LOAD_REGISTER_MEM_length 4 8867#define GFX9_MI_LOAD_REGISTER_MEM_length_bias 2 8868#define GFX9_MI_LOAD_REGISTER_MEM_header \ 8869 .DWordLength = 2, \ 8870 .MICommandOpcode = 41, \ 8871 .CommandType = 0 8872 8873struct GFX9_MI_LOAD_REGISTER_MEM { 8874 uint32_t DWordLength; 8875 bool AsyncModeEnable; 8876 bool UseGlobalGTT; 8877 uint32_t MICommandOpcode; 8878 uint32_t CommandType; 8879 uint64_t RegisterAddress; 8880 __gen_address_type MemoryAddress; 8881}; 8882 8883static inline __attribute__((always_inline)) void 8884GFX9_MI_LOAD_REGISTER_MEM_pack(__attribute__((unused)) __gen_user_data *data, 8885 __attribute__((unused)) void * restrict dst, 8886 __attribute__((unused)) const struct GFX9_MI_LOAD_REGISTER_MEM * restrict values) 8887{ 8888 uint32_t * restrict dw = (uint32_t * restrict) dst; 8889 8890 dw[0] = 8891 __gen_uint(values->DWordLength, 0, 7) | 8892 __gen_uint(values->AsyncModeEnable, 21, 21) | 8893 __gen_uint(values->UseGlobalGTT, 22, 22) | 8894 __gen_uint(values->MICommandOpcode, 23, 28) | 8895 __gen_uint(values->CommandType, 29, 31); 8896 8897 dw[1] = 8898 __gen_offset(values->RegisterAddress, 2, 22); 8899 8900 const uint64_t v2_address = 8901 __gen_address(data, &dw[2], values->MemoryAddress, 0, 2, 63); 8902 dw[2] = v2_address; 8903 dw[3] = v2_address >> 32; 8904} 8905 8906#define GFX9_MI_LOAD_REGISTER_REG_length 3 8907#define GFX9_MI_LOAD_REGISTER_REG_length_bias 2 8908#define GFX9_MI_LOAD_REGISTER_REG_header \ 8909 .DWordLength = 1, \ 8910 .MICommandOpcode = 42, \ 8911 .CommandType = 0 8912 8913struct GFX9_MI_LOAD_REGISTER_REG { 8914 uint32_t DWordLength; 8915 uint32_t MICommandOpcode; 8916 uint32_t CommandType; 8917 uint64_t SourceRegisterAddress; 8918 uint64_t DestinationRegisterAddress; 8919}; 8920 8921static inline __attribute__((always_inline)) void 8922GFX9_MI_LOAD_REGISTER_REG_pack(__attribute__((unused)) __gen_user_data *data, 8923 __attribute__((unused)) void * restrict dst, 8924 __attribute__((unused)) const struct GFX9_MI_LOAD_REGISTER_REG * restrict values) 8925{ 8926 uint32_t * restrict dw = (uint32_t * restrict) dst; 8927 8928 dw[0] = 8929 __gen_uint(values->DWordLength, 0, 7) | 8930 __gen_uint(values->MICommandOpcode, 23, 28) | 8931 __gen_uint(values->CommandType, 29, 31); 8932 8933 dw[1] = 8934 __gen_offset(values->SourceRegisterAddress, 2, 22); 8935 8936 dw[2] = 8937 __gen_offset(values->DestinationRegisterAddress, 2, 22); 8938} 8939 8940#define GFX9_MI_LOAD_SCAN_LINES_EXCL_length 2 8941#define GFX9_MI_LOAD_SCAN_LINES_EXCL_length_bias 2 8942#define GFX9_MI_LOAD_SCAN_LINES_EXCL_header \ 8943 .DWordLength = 0, \ 8944 .MICommandOpcode = 19, \ 8945 .CommandType = 0 8946 8947struct GFX9_MI_LOAD_SCAN_LINES_EXCL { 8948 uint32_t DWordLength; 8949 uint32_t DisplayPlaneSelect; 8950#define DisplayPlaneA 0 8951#define DisplayPlaneB 1 8952#define DisplayPlaneC 4 8953 uint32_t MICommandOpcode; 8954 uint32_t CommandType; 8955 uint32_t EndScanLineNumber; 8956 uint32_t StartScanLineNumber; 8957}; 8958 8959static inline __attribute__((always_inline)) void 8960GFX9_MI_LOAD_SCAN_LINES_EXCL_pack(__attribute__((unused)) __gen_user_data *data, 8961 __attribute__((unused)) void * restrict dst, 8962 __attribute__((unused)) const struct GFX9_MI_LOAD_SCAN_LINES_EXCL * restrict values) 8963{ 8964 uint32_t * restrict dw = (uint32_t * restrict) dst; 8965 8966 dw[0] = 8967 __gen_uint(values->DWordLength, 0, 5) | 8968 __gen_uint(values->DisplayPlaneSelect, 19, 21) | 8969 __gen_uint(values->MICommandOpcode, 23, 28) | 8970 __gen_uint(values->CommandType, 29, 31); 8971 8972 dw[1] = 8973 __gen_uint(values->EndScanLineNumber, 0, 12) | 8974 __gen_uint(values->StartScanLineNumber, 16, 28); 8975} 8976 8977#define GFX9_MI_LOAD_SCAN_LINES_INCL_length 2 8978#define GFX9_MI_LOAD_SCAN_LINES_INCL_length_bias 2 8979#define GFX9_MI_LOAD_SCAN_LINES_INCL_header \ 8980 .DWordLength = 0, \ 8981 .MICommandOpcode = 18, \ 8982 .CommandType = 0 8983 8984struct GFX9_MI_LOAD_SCAN_LINES_INCL { 8985 uint32_t DWordLength; 8986 uint32_t ScanLineEventDoneForward; 8987 uint32_t DisplayPlaneSelect; 8988#define DisplayPlane1A 0 8989#define DisplayPlane1B 1 8990#define DisplayPlane1C 4 8991 uint32_t MICommandOpcode; 8992 uint32_t CommandType; 8993 uint32_t EndScanLineNumber; 8994 uint32_t StartScanLineNumber; 8995}; 8996 8997static inline __attribute__((always_inline)) void 8998GFX9_MI_LOAD_SCAN_LINES_INCL_pack(__attribute__((unused)) __gen_user_data *data, 8999 __attribute__((unused)) void * restrict dst, 9000 __attribute__((unused)) const struct GFX9_MI_LOAD_SCAN_LINES_INCL * restrict values) 9001{ 9002 uint32_t * restrict dw = (uint32_t * restrict) dst; 9003 9004 dw[0] = 9005 __gen_uint(values->DWordLength, 0, 5) | 9006 __gen_uint(values->ScanLineEventDoneForward, 17, 18) | 9007 __gen_uint(values->DisplayPlaneSelect, 19, 21) | 9008 __gen_uint(values->MICommandOpcode, 23, 28) | 9009 __gen_uint(values->CommandType, 29, 31); 9010 9011 dw[1] = 9012 __gen_uint(values->EndScanLineNumber, 0, 12) | 9013 __gen_uint(values->StartScanLineNumber, 16, 28); 9014} 9015 9016#define GFX9_MI_LOAD_URB_MEM_length 4 9017#define GFX9_MI_LOAD_URB_MEM_length_bias 2 9018#define GFX9_MI_LOAD_URB_MEM_header \ 9019 .DWordLength = 2, \ 9020 .MICommandOpcode = 44, \ 9021 .CommandType = 0 9022 9023struct GFX9_MI_LOAD_URB_MEM { 9024 uint32_t DWordLength; 9025 uint32_t MICommandOpcode; 9026 uint32_t CommandType; 9027 uint32_t URBAddress; 9028 __gen_address_type MemoryAddress; 9029}; 9030 9031static inline __attribute__((always_inline)) void 9032GFX9_MI_LOAD_URB_MEM_pack(__attribute__((unused)) __gen_user_data *data, 9033 __attribute__((unused)) void * restrict dst, 9034 __attribute__((unused)) const struct GFX9_MI_LOAD_URB_MEM * restrict values) 9035{ 9036 uint32_t * restrict dw = (uint32_t * restrict) dst; 9037 9038 dw[0] = 9039 __gen_uint(values->DWordLength, 0, 7) | 9040 __gen_uint(values->MICommandOpcode, 23, 28) | 9041 __gen_uint(values->CommandType, 29, 31); 9042 9043 dw[1] = 9044 __gen_uint(values->URBAddress, 2, 14); 9045 9046 const uint64_t v2_address = 9047 __gen_address(data, &dw[2], values->MemoryAddress, 0, 6, 63); 9048 dw[2] = v2_address; 9049 dw[3] = v2_address >> 32; 9050} 9051 9052#define GFX9_MI_MATH_length_bias 2 9053#define GFX9_MI_MATH_header \ 9054 .DWordLength = 0, \ 9055 .MICommandOpcode = 26, \ 9056 .CommandType = 0 9057 9058struct GFX9_MI_MATH { 9059 uint32_t DWordLength; 9060 uint32_t MICommandOpcode; 9061 uint32_t CommandType; 9062 /* variable length fields follow */ 9063}; 9064 9065static inline __attribute__((always_inline)) void 9066GFX9_MI_MATH_pack(__attribute__((unused)) __gen_user_data *data, 9067 __attribute__((unused)) void * restrict dst, 9068 __attribute__((unused)) const struct GFX9_MI_MATH * restrict values) 9069{ 9070 uint32_t * restrict dw = (uint32_t * restrict) dst; 9071 9072 dw[0] = 9073 __gen_uint(values->DWordLength, 0, 7) | 9074 __gen_uint(values->MICommandOpcode, 23, 28) | 9075 __gen_uint(values->CommandType, 29, 31); 9076} 9077 9078#define GFX9_MI_NOOP_length 1 9079#define GFX9_MI_NOOP_length_bias 1 9080#define GFX9_MI_NOOP_header \ 9081 .MICommandOpcode = 0, \ 9082 .CommandType = 0 9083 9084struct GFX9_MI_NOOP { 9085 uint32_t IdentificationNumber; 9086 bool IdentificationNumberRegisterWriteEnable; 9087 uint32_t MICommandOpcode; 9088 uint32_t CommandType; 9089}; 9090 9091static inline __attribute__((always_inline)) void 9092GFX9_MI_NOOP_pack(__attribute__((unused)) __gen_user_data *data, 9093 __attribute__((unused)) void * restrict dst, 9094 __attribute__((unused)) const struct GFX9_MI_NOOP * restrict values) 9095{ 9096 uint32_t * restrict dw = (uint32_t * restrict) dst; 9097 9098 dw[0] = 9099 __gen_uint(values->IdentificationNumber, 0, 21) | 9100 __gen_uint(values->IdentificationNumberRegisterWriteEnable, 22, 22) | 9101 __gen_uint(values->MICommandOpcode, 23, 28) | 9102 __gen_uint(values->CommandType, 29, 31); 9103} 9104 9105#define GFX9_MI_PREDICATE_length 1 9106#define GFX9_MI_PREDICATE_length_bias 1 9107#define GFX9_MI_PREDICATE_header \ 9108 .MICommandOpcode = 12, \ 9109 .CommandType = 0 9110 9111struct GFX9_MI_PREDICATE { 9112 uint32_t CompareOperation; 9113#define COMPARE_TRUE 0 9114#define COMPARE_FALSE 1 9115#define COMPARE_SRCS_EQUAL 2 9116#define COMPARE_DELTAS_EQUAL 3 9117 uint32_t CombineOperation; 9118#define COMBINE_SET 0 9119#define COMBINE_AND 1 9120#define COMBINE_OR 2 9121#define COMBINE_XOR 3 9122 uint32_t LoadOperation; 9123#define LOAD_KEEP 0 9124#define LOAD_LOAD 2 9125#define LOAD_LOADINV 3 9126 uint32_t MICommandOpcode; 9127 uint32_t CommandType; 9128}; 9129 9130static inline __attribute__((always_inline)) void 9131GFX9_MI_PREDICATE_pack(__attribute__((unused)) __gen_user_data *data, 9132 __attribute__((unused)) void * restrict dst, 9133 __attribute__((unused)) const struct GFX9_MI_PREDICATE * restrict values) 9134{ 9135 uint32_t * restrict dw = (uint32_t * restrict) dst; 9136 9137 dw[0] = 9138 __gen_uint(values->CompareOperation, 0, 1) | 9139 __gen_uint(values->CombineOperation, 3, 4) | 9140 __gen_uint(values->LoadOperation, 6, 7) | 9141 __gen_uint(values->MICommandOpcode, 23, 28) | 9142 __gen_uint(values->CommandType, 29, 31); 9143} 9144 9145#define GFX9_MI_REPORT_HEAD_length 1 9146#define GFX9_MI_REPORT_HEAD_length_bias 1 9147#define GFX9_MI_REPORT_HEAD_header \ 9148 .MICommandOpcode = 7, \ 9149 .CommandType = 0 9150 9151struct GFX9_MI_REPORT_HEAD { 9152 uint32_t MICommandOpcode; 9153 uint32_t CommandType; 9154}; 9155 9156static inline __attribute__((always_inline)) void 9157GFX9_MI_REPORT_HEAD_pack(__attribute__((unused)) __gen_user_data *data, 9158 __attribute__((unused)) void * restrict dst, 9159 __attribute__((unused)) const struct GFX9_MI_REPORT_HEAD * restrict values) 9160{ 9161 uint32_t * restrict dw = (uint32_t * restrict) dst; 9162 9163 dw[0] = 9164 __gen_uint(values->MICommandOpcode, 23, 28) | 9165 __gen_uint(values->CommandType, 29, 31); 9166} 9167 9168#define GFX9_MI_REPORT_PERF_COUNT_length 4 9169#define GFX9_MI_REPORT_PERF_COUNT_length_bias 2 9170#define GFX9_MI_REPORT_PERF_COUNT_header \ 9171 .DWordLength = 2, \ 9172 .MICommandOpcode = 40, \ 9173 .CommandType = 0 9174 9175struct GFX9_MI_REPORT_PERF_COUNT { 9176 uint32_t DWordLength; 9177 uint32_t MICommandOpcode; 9178 uint32_t CommandType; 9179 bool UseGlobalGTT; 9180 uint32_t CoreModeEnable; 9181 __gen_address_type MemoryAddress; 9182 uint32_t ReportID; 9183}; 9184 9185static inline __attribute__((always_inline)) void 9186GFX9_MI_REPORT_PERF_COUNT_pack(__attribute__((unused)) __gen_user_data *data, 9187 __attribute__((unused)) void * restrict dst, 9188 __attribute__((unused)) const struct GFX9_MI_REPORT_PERF_COUNT * restrict values) 9189{ 9190 uint32_t * restrict dw = (uint32_t * restrict) dst; 9191 9192 dw[0] = 9193 __gen_uint(values->DWordLength, 0, 5) | 9194 __gen_uint(values->MICommandOpcode, 23, 28) | 9195 __gen_uint(values->CommandType, 29, 31); 9196 9197 const uint64_t v1 = 9198 __gen_uint(values->UseGlobalGTT, 0, 0) | 9199 __gen_uint(values->CoreModeEnable, 4, 4); 9200 const uint64_t v1_address = 9201 __gen_address(data, &dw[1], values->MemoryAddress, v1, 6, 63); 9202 dw[1] = v1_address; 9203 dw[2] = (v1_address >> 32) | (v1 >> 32); 9204 9205 dw[3] = 9206 __gen_uint(values->ReportID, 0, 31); 9207} 9208 9209#define GFX9_MI_RS_CONTEXT_length 1 9210#define GFX9_MI_RS_CONTEXT_length_bias 1 9211#define GFX9_MI_RS_CONTEXT_header \ 9212 .MICommandOpcode = 15, \ 9213 .CommandType = 0 9214 9215struct GFX9_MI_RS_CONTEXT { 9216 uint32_t ResourceStreamerSave; 9217#define RS_Restore 0 9218#define RS_Save 1 9219 uint32_t MICommandOpcode; 9220 uint32_t CommandType; 9221}; 9222 9223static inline __attribute__((always_inline)) void 9224GFX9_MI_RS_CONTEXT_pack(__attribute__((unused)) __gen_user_data *data, 9225 __attribute__((unused)) void * restrict dst, 9226 __attribute__((unused)) const struct GFX9_MI_RS_CONTEXT * restrict values) 9227{ 9228 uint32_t * restrict dw = (uint32_t * restrict) dst; 9229 9230 dw[0] = 9231 __gen_uint(values->ResourceStreamerSave, 0, 0) | 9232 __gen_uint(values->MICommandOpcode, 23, 28) | 9233 __gen_uint(values->CommandType, 29, 31); 9234} 9235 9236#define GFX9_MI_RS_CONTROL_length 1 9237#define GFX9_MI_RS_CONTROL_length_bias 1 9238#define GFX9_MI_RS_CONTROL_header \ 9239 .MICommandOpcode = 6, \ 9240 .CommandType = 0 9241 9242struct GFX9_MI_RS_CONTROL { 9243 uint32_t ResourceStreamerControl; 9244#define RS_Stop 0 9245#define RS_Start 1 9246 uint32_t MICommandOpcode; 9247 uint32_t CommandType; 9248}; 9249 9250static inline __attribute__((always_inline)) void 9251GFX9_MI_RS_CONTROL_pack(__attribute__((unused)) __gen_user_data *data, 9252 __attribute__((unused)) void * restrict dst, 9253 __attribute__((unused)) const struct GFX9_MI_RS_CONTROL * restrict values) 9254{ 9255 uint32_t * restrict dw = (uint32_t * restrict) dst; 9256 9257 dw[0] = 9258 __gen_uint(values->ResourceStreamerControl, 0, 0) | 9259 __gen_uint(values->MICommandOpcode, 23, 28) | 9260 __gen_uint(values->CommandType, 29, 31); 9261} 9262 9263#define GFX9_MI_RS_STORE_DATA_IMM_length 4 9264#define GFX9_MI_RS_STORE_DATA_IMM_length_bias 2 9265#define GFX9_MI_RS_STORE_DATA_IMM_header \ 9266 .DWordLength = 2, \ 9267 .MICommandOpcode = 43, \ 9268 .CommandType = 0 9269 9270struct GFX9_MI_RS_STORE_DATA_IMM { 9271 uint32_t DWordLength; 9272 uint32_t MICommandOpcode; 9273 uint32_t CommandType; 9274 uint32_t CoreModeEnable; 9275 __gen_address_type DestinationAddress; 9276 uint32_t DataDWord0; 9277}; 9278 9279static inline __attribute__((always_inline)) void 9280GFX9_MI_RS_STORE_DATA_IMM_pack(__attribute__((unused)) __gen_user_data *data, 9281 __attribute__((unused)) void * restrict dst, 9282 __attribute__((unused)) const struct GFX9_MI_RS_STORE_DATA_IMM * restrict values) 9283{ 9284 uint32_t * restrict dw = (uint32_t * restrict) dst; 9285 9286 dw[0] = 9287 __gen_uint(values->DWordLength, 0, 7) | 9288 __gen_uint(values->MICommandOpcode, 23, 28) | 9289 __gen_uint(values->CommandType, 29, 31); 9290 9291 const uint64_t v1 = 9292 __gen_uint(values->CoreModeEnable, 0, 0); 9293 const uint64_t v1_address = 9294 __gen_address(data, &dw[1], values->DestinationAddress, v1, 2, 63); 9295 dw[1] = v1_address; 9296 dw[2] = (v1_address >> 32) | (v1 >> 32); 9297 9298 dw[3] = 9299 __gen_uint(values->DataDWord0, 0, 31); 9300} 9301 9302#define GFX9_MI_SEMAPHORE_SIGNAL_length 2 9303#define GFX9_MI_SEMAPHORE_SIGNAL_length_bias 2 9304#define GFX9_MI_SEMAPHORE_SIGNAL_header \ 9305 .DWordLength = 0, \ 9306 .MICommandOpcode = 27, \ 9307 .CommandType = 0 9308 9309struct GFX9_MI_SEMAPHORE_SIGNAL { 9310 uint32_t DWordLength; 9311 uint32_t TargetEngineSelect; 9312#define RCS 0 9313#define VCS0 1 9314#define BCS 2 9315#define VECS 3 9316#define VCS1 4 9317 bool PostSyncOperation; 9318 uint32_t MICommandOpcode; 9319 uint32_t CommandType; 9320 uint32_t TargetContextID; 9321}; 9322 9323static inline __attribute__((always_inline)) void 9324GFX9_MI_SEMAPHORE_SIGNAL_pack(__attribute__((unused)) __gen_user_data *data, 9325 __attribute__((unused)) void * restrict dst, 9326 __attribute__((unused)) const struct GFX9_MI_SEMAPHORE_SIGNAL * restrict values) 9327{ 9328 uint32_t * restrict dw = (uint32_t * restrict) dst; 9329 9330 dw[0] = 9331 __gen_uint(values->DWordLength, 0, 7) | 9332 __gen_uint(values->TargetEngineSelect, 15, 17) | 9333 __gen_uint(values->PostSyncOperation, 21, 21) | 9334 __gen_uint(values->MICommandOpcode, 23, 28) | 9335 __gen_uint(values->CommandType, 29, 31); 9336 9337 dw[1] = 9338 __gen_uint(values->TargetContextID, 0, 31); 9339} 9340 9341#define GFX9_MI_SEMAPHORE_WAIT_length 4 9342#define GFX9_MI_SEMAPHORE_WAIT_length_bias 2 9343#define GFX9_MI_SEMAPHORE_WAIT_header \ 9344 .DWordLength = 2, \ 9345 .MICommandOpcode = 28, \ 9346 .CommandType = 0 9347 9348struct GFX9_MI_SEMAPHORE_WAIT { 9349 uint32_t DWordLength; 9350 uint32_t CompareOperation; 9351#define COMPARE_SAD_GREATER_THAN_SDD 0 9352#define COMPARE_SAD_GREATER_THAN_OR_EQUAL_SDD 1 9353#define COMPARE_SAD_LESS_THAN_SDD 2 9354#define COMPARE_SAD_LESS_THAN_OR_EQUAL_SDD 3 9355#define COMPARE_SAD_EQUAL_SDD 4 9356#define COMPARE_SAD_NOT_EQUAL_SDD 5 9357 uint32_t WaitMode; 9358#define PollingMode 1 9359#define SignalMode 0 9360 bool RegisterPollMode; 9361 uint32_t MemoryType; 9362#define PerProcessGraphicsAddress 0 9363#define GlobalGraphicsAddress 1 9364 uint32_t MICommandOpcode; 9365 uint32_t CommandType; 9366 uint32_t SemaphoreDataDword; 9367 __gen_address_type SemaphoreAddress; 9368}; 9369 9370static inline __attribute__((always_inline)) void 9371GFX9_MI_SEMAPHORE_WAIT_pack(__attribute__((unused)) __gen_user_data *data, 9372 __attribute__((unused)) void * restrict dst, 9373 __attribute__((unused)) const struct GFX9_MI_SEMAPHORE_WAIT * restrict values) 9374{ 9375 uint32_t * restrict dw = (uint32_t * restrict) dst; 9376 9377 dw[0] = 9378 __gen_uint(values->DWordLength, 0, 7) | 9379 __gen_uint(values->CompareOperation, 12, 14) | 9380 __gen_uint(values->WaitMode, 15, 15) | 9381 __gen_uint(values->RegisterPollMode, 16, 16) | 9382 __gen_uint(values->MemoryType, 22, 22) | 9383 __gen_uint(values->MICommandOpcode, 23, 28) | 9384 __gen_uint(values->CommandType, 29, 31); 9385 9386 dw[1] = 9387 __gen_uint(values->SemaphoreDataDword, 0, 31); 9388 9389 const uint64_t v2_address = 9390 __gen_address(data, &dw[2], values->SemaphoreAddress, 0, 2, 63); 9391 dw[2] = v2_address; 9392 dw[3] = v2_address >> 32; 9393} 9394 9395#define GFX9_MI_SET_CONTEXT_length 2 9396#define GFX9_MI_SET_CONTEXT_length_bias 2 9397#define GFX9_MI_SET_CONTEXT_header \ 9398 .DWordLength = 0, \ 9399 .MICommandOpcode = 24, \ 9400 .CommandType = 0 9401 9402struct GFX9_MI_SET_CONTEXT { 9403 uint32_t DWordLength; 9404 uint32_t MICommandOpcode; 9405 uint32_t CommandType; 9406 uint32_t RestoreInhibit; 9407 uint32_t ForceRestore; 9408 bool ResourceStreamerStateRestoreEnable; 9409 bool ResourceStreamerStateSaveEnable; 9410 bool CoreModeEnable; 9411 uint32_t ReservedMustbe1; 9412 __gen_address_type LogicalContextAddress; 9413}; 9414 9415static inline __attribute__((always_inline)) void 9416GFX9_MI_SET_CONTEXT_pack(__attribute__((unused)) __gen_user_data *data, 9417 __attribute__((unused)) void * restrict dst, 9418 __attribute__((unused)) const struct GFX9_MI_SET_CONTEXT * restrict values) 9419{ 9420 uint32_t * restrict dw = (uint32_t * restrict) dst; 9421 9422 dw[0] = 9423 __gen_uint(values->DWordLength, 0, 7) | 9424 __gen_uint(values->MICommandOpcode, 23, 28) | 9425 __gen_uint(values->CommandType, 29, 31); 9426 9427 const uint32_t v1 = 9428 __gen_uint(values->RestoreInhibit, 0, 0) | 9429 __gen_uint(values->ForceRestore, 1, 1) | 9430 __gen_uint(values->ResourceStreamerStateRestoreEnable, 2, 2) | 9431 __gen_uint(values->ResourceStreamerStateSaveEnable, 3, 3) | 9432 __gen_uint(values->CoreModeEnable, 4, 4) | 9433 __gen_uint(values->ReservedMustbe1, 8, 8); 9434 dw[1] = __gen_address(data, &dw[1], values->LogicalContextAddress, v1, 12, 31); 9435} 9436 9437#define GFX9_MI_SET_PREDICATE_length 1 9438#define GFX9_MI_SET_PREDICATE_length_bias 1 9439#define GFX9_MI_SET_PREDICATE_header \ 9440 .MICommandOpcode = 1, \ 9441 .CommandType = 0 9442 9443struct GFX9_MI_SET_PREDICATE { 9444 uint32_t PREDICATEENABLE; 9445#define NOOPNever 0 9446#define NOOPonResult2clear 1 9447#define NOOPonResult2set 2 9448#define NOOPonResultclear 3 9449#define NOOPonResultset 4 9450#define Executewhenonesliceenabled 5 9451#define Executewhentwoslicesareenabled 6 9452#define Executewhenthreeslicesareenabled 7 9453#define NOOPAlways 15 9454 uint32_t MICommandOpcode; 9455 uint32_t CommandType; 9456}; 9457 9458static inline __attribute__((always_inline)) void 9459GFX9_MI_SET_PREDICATE_pack(__attribute__((unused)) __gen_user_data *data, 9460 __attribute__((unused)) void * restrict dst, 9461 __attribute__((unused)) const struct GFX9_MI_SET_PREDICATE * restrict values) 9462{ 9463 uint32_t * restrict dw = (uint32_t * restrict) dst; 9464 9465 dw[0] = 9466 __gen_uint(values->PREDICATEENABLE, 0, 3) | 9467 __gen_uint(values->MICommandOpcode, 23, 28) | 9468 __gen_uint(values->CommandType, 29, 31); 9469} 9470 9471#define GFX9_MI_STORE_DATA_IMM_length 4 9472#define GFX9_MI_STORE_DATA_IMM_length_bias 2 9473#define GFX9_MI_STORE_DATA_IMM_header \ 9474 .DWordLength = 2, \ 9475 .MICommandOpcode = 32, \ 9476 .CommandType = 0 9477 9478struct GFX9_MI_STORE_DATA_IMM { 9479 uint32_t DWordLength; 9480 uint32_t StoreQword; 9481 bool UseGlobalGTT; 9482 uint32_t MICommandOpcode; 9483 uint32_t CommandType; 9484 uint32_t CoreModeEnable; 9485 __gen_address_type Address; 9486 uint64_t ImmediateData; 9487}; 9488 9489static inline __attribute__((always_inline)) void 9490GFX9_MI_STORE_DATA_IMM_pack(__attribute__((unused)) __gen_user_data *data, 9491 __attribute__((unused)) void * restrict dst, 9492 __attribute__((unused)) const struct GFX9_MI_STORE_DATA_IMM * restrict values) 9493{ 9494 uint32_t * restrict dw = (uint32_t * restrict) dst; 9495 9496 dw[0] = 9497 __gen_uint(values->DWordLength, 0, 9) | 9498 __gen_uint(values->StoreQword, 21, 21) | 9499 __gen_uint(values->UseGlobalGTT, 22, 22) | 9500 __gen_uint(values->MICommandOpcode, 23, 28) | 9501 __gen_uint(values->CommandType, 29, 31); 9502 9503 const uint64_t v1 = 9504 __gen_uint(values->CoreModeEnable, 0, 0); 9505 const uint64_t v1_address = 9506 __gen_address(data, &dw[1], values->Address, v1, 2, 47); 9507 dw[1] = v1_address; 9508 dw[2] = (v1_address >> 32) | (v1 >> 32); 9509 9510 const uint64_t v3 = 9511 __gen_uint(values->ImmediateData, 0, 63); 9512 dw[3] = v3; 9513 dw[4] = v3 >> 32; 9514} 9515 9516#define GFX9_MI_STORE_DATA_INDEX_length 3 9517#define GFX9_MI_STORE_DATA_INDEX_length_bias 2 9518#define GFX9_MI_STORE_DATA_INDEX_header \ 9519 .DWordLength = 1, \ 9520 .MICommandOpcode = 33, \ 9521 .CommandType = 0 9522 9523struct GFX9_MI_STORE_DATA_INDEX { 9524 uint32_t DWordLength; 9525 uint32_t UsePerProcessHardwareStatusPage; 9526 uint32_t MICommandOpcode; 9527 uint32_t CommandType; 9528 uint32_t Offset; 9529 uint32_t DataDWord0; 9530 uint32_t DataDWord1; 9531}; 9532 9533static inline __attribute__((always_inline)) void 9534GFX9_MI_STORE_DATA_INDEX_pack(__attribute__((unused)) __gen_user_data *data, 9535 __attribute__((unused)) void * restrict dst, 9536 __attribute__((unused)) const struct GFX9_MI_STORE_DATA_INDEX * restrict values) 9537{ 9538 uint32_t * restrict dw = (uint32_t * restrict) dst; 9539 9540 dw[0] = 9541 __gen_uint(values->DWordLength, 0, 7) | 9542 __gen_uint(values->UsePerProcessHardwareStatusPage, 21, 21) | 9543 __gen_uint(values->MICommandOpcode, 23, 28) | 9544 __gen_uint(values->CommandType, 29, 31); 9545 9546 dw[1] = 9547 __gen_uint(values->Offset, 2, 11); 9548 9549 dw[2] = 9550 __gen_uint(values->DataDWord0, 0, 31); 9551} 9552 9553#define GFX9_MI_STORE_REGISTER_MEM_length 4 9554#define GFX9_MI_STORE_REGISTER_MEM_length_bias 2 9555#define GFX9_MI_STORE_REGISTER_MEM_header \ 9556 .DWordLength = 2, \ 9557 .MICommandOpcode = 36, \ 9558 .CommandType = 0 9559 9560struct GFX9_MI_STORE_REGISTER_MEM { 9561 uint32_t DWordLength; 9562 bool PredicateEnable; 9563 bool UseGlobalGTT; 9564 uint32_t MICommandOpcode; 9565 uint32_t CommandType; 9566 uint64_t RegisterAddress; 9567 __gen_address_type MemoryAddress; 9568}; 9569 9570static inline __attribute__((always_inline)) void 9571GFX9_MI_STORE_REGISTER_MEM_pack(__attribute__((unused)) __gen_user_data *data, 9572 __attribute__((unused)) void * restrict dst, 9573 __attribute__((unused)) const struct GFX9_MI_STORE_REGISTER_MEM * restrict values) 9574{ 9575 uint32_t * restrict dw = (uint32_t * restrict) dst; 9576 9577 dw[0] = 9578 __gen_uint(values->DWordLength, 0, 7) | 9579 __gen_uint(values->PredicateEnable, 21, 21) | 9580 __gen_uint(values->UseGlobalGTT, 22, 22) | 9581 __gen_uint(values->MICommandOpcode, 23, 28) | 9582 __gen_uint(values->CommandType, 29, 31); 9583 9584 dw[1] = 9585 __gen_offset(values->RegisterAddress, 2, 22); 9586 9587 const uint64_t v2_address = 9588 __gen_address(data, &dw[2], values->MemoryAddress, 0, 2, 63); 9589 dw[2] = v2_address; 9590 dw[3] = v2_address >> 32; 9591} 9592 9593#define GFX9_MI_STORE_URB_MEM_length 4 9594#define GFX9_MI_STORE_URB_MEM_length_bias 2 9595#define GFX9_MI_STORE_URB_MEM_header \ 9596 .DWordLength = 2, \ 9597 .MICommandOpcode = 45, \ 9598 .CommandType = 0 9599 9600struct GFX9_MI_STORE_URB_MEM { 9601 uint32_t DWordLength; 9602 uint32_t MICommandOpcode; 9603 uint32_t CommandType; 9604 uint32_t URBAddress; 9605 __gen_address_type MemoryAddress; 9606}; 9607 9608static inline __attribute__((always_inline)) void 9609GFX9_MI_STORE_URB_MEM_pack(__attribute__((unused)) __gen_user_data *data, 9610 __attribute__((unused)) void * restrict dst, 9611 __attribute__((unused)) const struct GFX9_MI_STORE_URB_MEM * restrict values) 9612{ 9613 uint32_t * restrict dw = (uint32_t * restrict) dst; 9614 9615 dw[0] = 9616 __gen_uint(values->DWordLength, 0, 7) | 9617 __gen_uint(values->MICommandOpcode, 23, 28) | 9618 __gen_uint(values->CommandType, 29, 31); 9619 9620 dw[1] = 9621 __gen_uint(values->URBAddress, 2, 14); 9622 9623 const uint64_t v2_address = 9624 __gen_address(data, &dw[2], values->MemoryAddress, 0, 6, 63); 9625 dw[2] = v2_address; 9626 dw[3] = v2_address >> 32; 9627} 9628 9629#define GFX9_MI_SUSPEND_FLUSH_length 1 9630#define GFX9_MI_SUSPEND_FLUSH_length_bias 1 9631#define GFX9_MI_SUSPEND_FLUSH_header \ 9632 .MICommandOpcode = 11, \ 9633 .CommandType = 0 9634 9635struct GFX9_MI_SUSPEND_FLUSH { 9636 bool SuspendFlush; 9637 uint32_t MICommandOpcode; 9638 uint32_t CommandType; 9639}; 9640 9641static inline __attribute__((always_inline)) void 9642GFX9_MI_SUSPEND_FLUSH_pack(__attribute__((unused)) __gen_user_data *data, 9643 __attribute__((unused)) void * restrict dst, 9644 __attribute__((unused)) const struct GFX9_MI_SUSPEND_FLUSH * restrict values) 9645{ 9646 uint32_t * restrict dw = (uint32_t * restrict) dst; 9647 9648 dw[0] = 9649 __gen_uint(values->SuspendFlush, 0, 0) | 9650 __gen_uint(values->MICommandOpcode, 23, 28) | 9651 __gen_uint(values->CommandType, 29, 31); 9652} 9653 9654#define GFX9_MI_TOPOLOGY_FILTER_length 1 9655#define GFX9_MI_TOPOLOGY_FILTER_length_bias 1 9656#define GFX9_MI_TOPOLOGY_FILTER_header \ 9657 .MICommandOpcode = 13, \ 9658 .CommandType = 0 9659 9660struct GFX9_MI_TOPOLOGY_FILTER { 9661 enum GFX9_3D_Prim_Topo_Type TopologyFilterValue; 9662 uint32_t MICommandOpcode; 9663 uint32_t CommandType; 9664}; 9665 9666static inline __attribute__((always_inline)) void 9667GFX9_MI_TOPOLOGY_FILTER_pack(__attribute__((unused)) __gen_user_data *data, 9668 __attribute__((unused)) void * restrict dst, 9669 __attribute__((unused)) const struct GFX9_MI_TOPOLOGY_FILTER * restrict values) 9670{ 9671 uint32_t * restrict dw = (uint32_t * restrict) dst; 9672 9673 dw[0] = 9674 __gen_uint(values->TopologyFilterValue, 0, 5) | 9675 __gen_uint(values->MICommandOpcode, 23, 28) | 9676 __gen_uint(values->CommandType, 29, 31); 9677} 9678 9679#define GFX9_MI_URB_ATOMIC_ALLOC_length 1 9680#define GFX9_MI_URB_ATOMIC_ALLOC_length_bias 1 9681#define GFX9_MI_URB_ATOMIC_ALLOC_header \ 9682 .MICommandOpcode = 9, \ 9683 .CommandType = 0 9684 9685struct GFX9_MI_URB_ATOMIC_ALLOC { 9686 uint32_t URBAtomicStorageSize; 9687 uint32_t URBAtomicStorageOffset; 9688 uint32_t MICommandOpcode; 9689 uint32_t CommandType; 9690}; 9691 9692static inline __attribute__((always_inline)) void 9693GFX9_MI_URB_ATOMIC_ALLOC_pack(__attribute__((unused)) __gen_user_data *data, 9694 __attribute__((unused)) void * restrict dst, 9695 __attribute__((unused)) const struct GFX9_MI_URB_ATOMIC_ALLOC * restrict values) 9696{ 9697 uint32_t * restrict dw = (uint32_t * restrict) dst; 9698 9699 dw[0] = 9700 __gen_uint(values->URBAtomicStorageSize, 0, 8) | 9701 __gen_uint(values->URBAtomicStorageOffset, 12, 19) | 9702 __gen_uint(values->MICommandOpcode, 23, 28) | 9703 __gen_uint(values->CommandType, 29, 31); 9704} 9705 9706#define GFX9_MI_USER_INTERRUPT_length 1 9707#define GFX9_MI_USER_INTERRUPT_length_bias 1 9708#define GFX9_MI_USER_INTERRUPT_header \ 9709 .MICommandOpcode = 2, \ 9710 .CommandType = 0 9711 9712struct GFX9_MI_USER_INTERRUPT { 9713 uint32_t MICommandOpcode; 9714 uint32_t CommandType; 9715}; 9716 9717static inline __attribute__((always_inline)) void 9718GFX9_MI_USER_INTERRUPT_pack(__attribute__((unused)) __gen_user_data *data, 9719 __attribute__((unused)) void * restrict dst, 9720 __attribute__((unused)) const struct GFX9_MI_USER_INTERRUPT * restrict values) 9721{ 9722 uint32_t * restrict dw = (uint32_t * restrict) dst; 9723 9724 dw[0] = 9725 __gen_uint(values->MICommandOpcode, 23, 28) | 9726 __gen_uint(values->CommandType, 29, 31); 9727} 9728 9729#define GFX9_MI_WAIT_FOR_EVENT_length 1 9730#define GFX9_MI_WAIT_FOR_EVENT_length_bias 1 9731#define GFX9_MI_WAIT_FOR_EVENT_header \ 9732 .MICommandOpcode = 3, \ 9733 .CommandType = 0 9734 9735struct GFX9_MI_WAIT_FOR_EVENT { 9736 bool DisplayPlnae1AScanLineWaitEnable; 9737 bool DisplayPlane1FlipPendingWaitEnable; 9738 bool DisplayPlane4FlipPendingWaitEnable; 9739 bool DisplayPlane1AVerticalBlankWaitEnable; 9740 bool DisplayPlane7FlipPendingWaitEnable; 9741 bool DisplayPlane8FlipPendingWaitEnable; 9742 bool DisplayPlane1BScanLineWaitEnable; 9743 bool DisplayPlane2FlipPendingWaitEnable; 9744 bool DisplayPlane5FlipPendingWaitEnable; 9745 bool DisplayPlane1BVerticalBlankWaitEnable; 9746 bool DisplayPlane1CScanLineWaitEnable; 9747 bool DisplayPlane3FlipPendingWaitEnable; 9748 bool DisplayPlane9FlipPendingWaitEnable; 9749 bool DisplayPlane10FlipPendingWaitEnable; 9750 bool DisplayPlane11FlipPendingWaitEnable; 9751 bool DisplayPlane12FlipPendingWaitEnable; 9752 bool DisplayPlane6FlipPendingWaitEnable; 9753 bool DisplayPlane1CVerticalBlankWaitEnable; 9754 uint32_t MICommandOpcode; 9755 uint32_t CommandType; 9756}; 9757 9758static inline __attribute__((always_inline)) void 9759GFX9_MI_WAIT_FOR_EVENT_pack(__attribute__((unused)) __gen_user_data *data, 9760 __attribute__((unused)) void * restrict dst, 9761 __attribute__((unused)) const struct GFX9_MI_WAIT_FOR_EVENT * restrict values) 9762{ 9763 uint32_t * restrict dw = (uint32_t * restrict) dst; 9764 9765 dw[0] = 9766 __gen_uint(values->DisplayPlnae1AScanLineWaitEnable, 0, 0) | 9767 __gen_uint(values->DisplayPlane1FlipPendingWaitEnable, 1, 1) | 9768 __gen_uint(values->DisplayPlane4FlipPendingWaitEnable, 2, 2) | 9769 __gen_uint(values->DisplayPlane1AVerticalBlankWaitEnable, 3, 3) | 9770 __gen_uint(values->DisplayPlane7FlipPendingWaitEnable, 6, 6) | 9771 __gen_uint(values->DisplayPlane8FlipPendingWaitEnable, 7, 7) | 9772 __gen_uint(values->DisplayPlane1BScanLineWaitEnable, 8, 8) | 9773 __gen_uint(values->DisplayPlane2FlipPendingWaitEnable, 9, 9) | 9774 __gen_uint(values->DisplayPlane5FlipPendingWaitEnable, 10, 10) | 9775 __gen_uint(values->DisplayPlane1BVerticalBlankWaitEnable, 11, 11) | 9776 __gen_uint(values->DisplayPlane1CScanLineWaitEnable, 14, 14) | 9777 __gen_uint(values->DisplayPlane3FlipPendingWaitEnable, 15, 15) | 9778 __gen_uint(values->DisplayPlane9FlipPendingWaitEnable, 16, 16) | 9779 __gen_uint(values->DisplayPlane10FlipPendingWaitEnable, 17, 17) | 9780 __gen_uint(values->DisplayPlane11FlipPendingWaitEnable, 18, 18) | 9781 __gen_uint(values->DisplayPlane12FlipPendingWaitEnable, 19, 19) | 9782 __gen_uint(values->DisplayPlane6FlipPendingWaitEnable, 20, 20) | 9783 __gen_uint(values->DisplayPlane1CVerticalBlankWaitEnable, 21, 21) | 9784 __gen_uint(values->MICommandOpcode, 23, 28) | 9785 __gen_uint(values->CommandType, 29, 31); 9786} 9787 9788#define GFX9_PIPELINE_SELECT_length 1 9789#define GFX9_PIPELINE_SELECT_length_bias 1 9790#define GFX9_PIPELINE_SELECT_header \ 9791 ._3DCommandSubOpcode = 4, \ 9792 ._3DCommandOpcode = 1, \ 9793 .CommandSubType = 1, \ 9794 .CommandType = 3 9795 9796struct GFX9_PIPELINE_SELECT { 9797 uint32_t PipelineSelection; 9798#define _3D 0 9799#define Media 1 9800#define GPGPU 2 9801 bool MediaSamplerDOPClockGateEnable; 9802 bool ForceMediaAwake; 9803 uint32_t MaskBits; 9804 uint32_t _3DCommandSubOpcode; 9805 uint32_t _3DCommandOpcode; 9806 uint32_t CommandSubType; 9807 uint32_t CommandType; 9808}; 9809 9810static inline __attribute__((always_inline)) void 9811GFX9_PIPELINE_SELECT_pack(__attribute__((unused)) __gen_user_data *data, 9812 __attribute__((unused)) void * restrict dst, 9813 __attribute__((unused)) const struct GFX9_PIPELINE_SELECT * restrict values) 9814{ 9815 uint32_t * restrict dw = (uint32_t * restrict) dst; 9816 9817 dw[0] = 9818 __gen_uint(values->PipelineSelection, 0, 1) | 9819 __gen_uint(values->MediaSamplerDOPClockGateEnable, 4, 4) | 9820 __gen_uint(values->ForceMediaAwake, 5, 5) | 9821 __gen_uint(values->MaskBits, 8, 15) | 9822 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 9823 __gen_uint(values->_3DCommandOpcode, 24, 26) | 9824 __gen_uint(values->CommandSubType, 27, 28) | 9825 __gen_uint(values->CommandType, 29, 31); 9826} 9827 9828#define GFX9_PIPE_CONTROL_length 6 9829#define GFX9_PIPE_CONTROL_length_bias 2 9830#define GFX9_PIPE_CONTROL_header \ 9831 .DWordLength = 4, \ 9832 ._3DCommandSubOpcode = 0, \ 9833 ._3DCommandOpcode = 2, \ 9834 .CommandSubType = 3, \ 9835 .CommandType = 3 9836 9837struct GFX9_PIPE_CONTROL { 9838 uint32_t DWordLength; 9839 uint32_t _3DCommandSubOpcode; 9840 uint32_t _3DCommandOpcode; 9841 uint32_t CommandSubType; 9842 uint32_t CommandType; 9843 bool DepthCacheFlushEnable; 9844 bool StallAtPixelScoreboard; 9845 bool StateCacheInvalidationEnable; 9846 bool ConstantCacheInvalidationEnable; 9847 bool VFCacheInvalidationEnable; 9848 bool DCFlushEnable; 9849 bool PipeControlFlushEnable; 9850 bool NotifyEnable; 9851 bool IndirectStatePointersDisable; 9852 bool TextureCacheInvalidationEnable; 9853 bool InstructionCacheInvalidateEnable; 9854 bool RenderTargetCacheFlushEnable; 9855 bool DepthStallEnable; 9856 uint32_t PostSyncOperation; 9857#define NoWrite 0 9858#define WriteImmediateData 1 9859#define WritePSDepthCount 2 9860#define WriteTimestamp 3 9861 bool GenericMediaStateClear; 9862 bool TLBInvalidate; 9863 bool GlobalSnapshotCountReset; 9864 bool CommandStreamerStallEnable; 9865 uint32_t StoreDataIndex; 9866 uint32_t LRIPostSyncOperation; 9867#define NoLRIOperation 0 9868#define MMIOWriteImmediateData 1 9869 uint32_t DestinationAddressType; 9870#define DAT_PPGTT 0 9871#define DAT_GGTT 1 9872 bool FlushLLC; 9873 __gen_address_type Address; 9874 uint64_t ImmediateData; 9875}; 9876 9877static inline __attribute__((always_inline)) void 9878GFX9_PIPE_CONTROL_pack(__attribute__((unused)) __gen_user_data *data, 9879 __attribute__((unused)) void * restrict dst, 9880 __attribute__((unused)) const struct GFX9_PIPE_CONTROL * restrict values) 9881{ 9882 uint32_t * restrict dw = (uint32_t * restrict) dst; 9883 9884 dw[0] = 9885 __gen_uint(values->DWordLength, 0, 7) | 9886 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 9887 __gen_uint(values->_3DCommandOpcode, 24, 26) | 9888 __gen_uint(values->CommandSubType, 27, 28) | 9889 __gen_uint(values->CommandType, 29, 31); 9890 9891 dw[1] = 9892 __gen_uint(values->DepthCacheFlushEnable, 0, 0) | 9893 __gen_uint(values->StallAtPixelScoreboard, 1, 1) | 9894 __gen_uint(values->StateCacheInvalidationEnable, 2, 2) | 9895 __gen_uint(values->ConstantCacheInvalidationEnable, 3, 3) | 9896 __gen_uint(values->VFCacheInvalidationEnable, 4, 4) | 9897 __gen_uint(values->DCFlushEnable, 5, 5) | 9898 __gen_uint(values->PipeControlFlushEnable, 7, 7) | 9899 __gen_uint(values->NotifyEnable, 8, 8) | 9900 __gen_uint(values->IndirectStatePointersDisable, 9, 9) | 9901 __gen_uint(values->TextureCacheInvalidationEnable, 10, 10) | 9902 __gen_uint(values->InstructionCacheInvalidateEnable, 11, 11) | 9903 __gen_uint(values->RenderTargetCacheFlushEnable, 12, 12) | 9904 __gen_uint(values->DepthStallEnable, 13, 13) | 9905 __gen_uint(values->PostSyncOperation, 14, 15) | 9906 __gen_uint(values->GenericMediaStateClear, 16, 16) | 9907 __gen_uint(values->TLBInvalidate, 18, 18) | 9908 __gen_uint(values->GlobalSnapshotCountReset, 19, 19) | 9909 __gen_uint(values->CommandStreamerStallEnable, 20, 20) | 9910 __gen_uint(values->StoreDataIndex, 21, 21) | 9911 __gen_uint(values->LRIPostSyncOperation, 23, 23) | 9912 __gen_uint(values->DestinationAddressType, 24, 24) | 9913 __gen_uint(values->FlushLLC, 26, 26); 9914 9915 const uint64_t v2_address = 9916 __gen_address(data, &dw[2], values->Address, 0, 2, 47); 9917 dw[2] = v2_address; 9918 dw[3] = v2_address >> 32; 9919 9920 const uint64_t v4 = 9921 __gen_uint(values->ImmediateData, 0, 63); 9922 dw[4] = v4; 9923 dw[5] = v4 >> 32; 9924} 9925 9926#define GFX9_STATE_BASE_ADDRESS_length 19 9927#define GFX9_STATE_BASE_ADDRESS_length_bias 2 9928#define GFX9_STATE_BASE_ADDRESS_header \ 9929 .DWordLength = 17, \ 9930 ._3DCommandSubOpcode = 1, \ 9931 ._3DCommandOpcode = 1, \ 9932 .CommandSubType = 0, \ 9933 .CommandType = 3 9934 9935struct GFX9_STATE_BASE_ADDRESS { 9936 uint32_t DWordLength; 9937 uint32_t _3DCommandSubOpcode; 9938 uint32_t _3DCommandOpcode; 9939 uint32_t CommandSubType; 9940 uint32_t CommandType; 9941 bool GeneralStateBaseAddressModifyEnable; 9942 uint32_t GeneralStateMOCS; 9943 __gen_address_type GeneralStateBaseAddress; 9944 uint32_t StatelessDataPortAccessMOCS; 9945 bool SurfaceStateBaseAddressModifyEnable; 9946 uint32_t SurfaceStateMOCS; 9947 __gen_address_type SurfaceStateBaseAddress; 9948 bool DynamicStateBaseAddressModifyEnable; 9949 uint32_t DynamicStateMOCS; 9950 __gen_address_type DynamicStateBaseAddress; 9951 bool IndirectObjectBaseAddressModifyEnable; 9952 uint32_t IndirectObjectMOCS; 9953 __gen_address_type IndirectObjectBaseAddress; 9954 bool InstructionBaseAddressModifyEnable; 9955 uint32_t InstructionMOCS; 9956 __gen_address_type InstructionBaseAddress; 9957 bool GeneralStateBufferSizeModifyEnable; 9958 uint32_t GeneralStateBufferSize; 9959 bool DynamicStateBufferSizeModifyEnable; 9960 uint32_t DynamicStateBufferSize; 9961 bool IndirectObjectBufferSizeModifyEnable; 9962 uint32_t IndirectObjectBufferSize; 9963 bool InstructionBuffersizeModifyEnable; 9964 uint32_t InstructionBufferSize; 9965 bool BindlessSurfaceStateBaseAddressModifyEnable; 9966 uint32_t BindlessSurfaceStateMOCS; 9967 __gen_address_type BindlessSurfaceStateBaseAddress; 9968 uint32_t BindlessSurfaceStateSize; 9969}; 9970 9971static inline __attribute__((always_inline)) void 9972GFX9_STATE_BASE_ADDRESS_pack(__attribute__((unused)) __gen_user_data *data, 9973 __attribute__((unused)) void * restrict dst, 9974 __attribute__((unused)) const struct GFX9_STATE_BASE_ADDRESS * restrict values) 9975{ 9976 uint32_t * restrict dw = (uint32_t * restrict) dst; 9977 9978 dw[0] = 9979 __gen_uint(values->DWordLength, 0, 7) | 9980 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 9981 __gen_uint(values->_3DCommandOpcode, 24, 26) | 9982 __gen_uint(values->CommandSubType, 27, 28) | 9983 __gen_uint(values->CommandType, 29, 31); 9984 9985 const uint64_t v1 = 9986 __gen_uint(values->GeneralStateBaseAddressModifyEnable, 0, 0) | 9987 __gen_uint(values->GeneralStateMOCS, 4, 10); 9988 const uint64_t v1_address = 9989 __gen_address(data, &dw[1], values->GeneralStateBaseAddress, v1, 12, 63); 9990 dw[1] = v1_address; 9991 dw[2] = (v1_address >> 32) | (v1 >> 32); 9992 9993 dw[3] = 9994 __gen_uint(values->StatelessDataPortAccessMOCS, 16, 22); 9995 9996 const uint64_t v4 = 9997 __gen_uint(values->SurfaceStateBaseAddressModifyEnable, 0, 0) | 9998 __gen_uint(values->SurfaceStateMOCS, 4, 10); 9999 const uint64_t v4_address = 10000 __gen_address(data, &dw[4], values->SurfaceStateBaseAddress, v4, 12, 63); 10001 dw[4] = v4_address; 10002 dw[5] = (v4_address >> 32) | (v4 >> 32); 10003 10004 const uint64_t v6 = 10005 __gen_uint(values->DynamicStateBaseAddressModifyEnable, 0, 0) | 10006 __gen_uint(values->DynamicStateMOCS, 4, 10); 10007 const uint64_t v6_address = 10008 __gen_address(data, &dw[6], values->DynamicStateBaseAddress, v6, 12, 63); 10009 dw[6] = v6_address; 10010 dw[7] = (v6_address >> 32) | (v6 >> 32); 10011 10012 const uint64_t v8 = 10013 __gen_uint(values->IndirectObjectBaseAddressModifyEnable, 0, 0) | 10014 __gen_uint(values->IndirectObjectMOCS, 4, 10); 10015 const uint64_t v8_address = 10016 __gen_address(data, &dw[8], values->IndirectObjectBaseAddress, v8, 12, 63); 10017 dw[8] = v8_address; 10018 dw[9] = (v8_address >> 32) | (v8 >> 32); 10019 10020 const uint64_t v10 = 10021 __gen_uint(values->InstructionBaseAddressModifyEnable, 0, 0) | 10022 __gen_uint(values->InstructionMOCS, 4, 10); 10023 const uint64_t v10_address = 10024 __gen_address(data, &dw[10], values->InstructionBaseAddress, v10, 12, 63); 10025 dw[10] = v10_address; 10026 dw[11] = (v10_address >> 32) | (v10 >> 32); 10027 10028 dw[12] = 10029 __gen_uint(values->GeneralStateBufferSizeModifyEnable, 0, 0) | 10030 __gen_uint(values->GeneralStateBufferSize, 12, 31); 10031 10032 dw[13] = 10033 __gen_uint(values->DynamicStateBufferSizeModifyEnable, 0, 0) | 10034 __gen_uint(values->DynamicStateBufferSize, 12, 31); 10035 10036 dw[14] = 10037 __gen_uint(values->IndirectObjectBufferSizeModifyEnable, 0, 0) | 10038 __gen_uint(values->IndirectObjectBufferSize, 12, 31); 10039 10040 dw[15] = 10041 __gen_uint(values->InstructionBuffersizeModifyEnable, 0, 0) | 10042 __gen_uint(values->InstructionBufferSize, 12, 31); 10043 10044 const uint64_t v16 = 10045 __gen_uint(values->BindlessSurfaceStateBaseAddressModifyEnable, 0, 0) | 10046 __gen_uint(values->BindlessSurfaceStateMOCS, 4, 10); 10047 const uint64_t v16_address = 10048 __gen_address(data, &dw[16], values->BindlessSurfaceStateBaseAddress, v16, 12, 63); 10049 dw[16] = v16_address; 10050 dw[17] = (v16_address >> 32) | (v16 >> 32); 10051 10052 dw[18] = 10053 __gen_uint(values->BindlessSurfaceStateSize, 12, 31); 10054} 10055 10056#define GFX9_STATE_PREFETCH_length 2 10057#define GFX9_STATE_PREFETCH_length_bias 2 10058#define GFX9_STATE_PREFETCH_header \ 10059 .DWordLength = 0, \ 10060 ._3DCommandSubOpcode = 3, \ 10061 ._3DCommandOpcode = 0, \ 10062 .CommandSubType = 0, \ 10063 .CommandType = 3 10064 10065struct GFX9_STATE_PREFETCH { 10066 uint32_t DWordLength; 10067 uint32_t _3DCommandSubOpcode; 10068 uint32_t _3DCommandOpcode; 10069 uint32_t CommandSubType; 10070 uint32_t CommandType; 10071 uint32_t PrefetchCount; 10072 __gen_address_type PrefetchPointer; 10073}; 10074 10075static inline __attribute__((always_inline)) void 10076GFX9_STATE_PREFETCH_pack(__attribute__((unused)) __gen_user_data *data, 10077 __attribute__((unused)) void * restrict dst, 10078 __attribute__((unused)) const struct GFX9_STATE_PREFETCH * restrict values) 10079{ 10080 uint32_t * restrict dw = (uint32_t * restrict) dst; 10081 10082 dw[0] = 10083 __gen_uint(values->DWordLength, 0, 7) | 10084 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 10085 __gen_uint(values->_3DCommandOpcode, 24, 26) | 10086 __gen_uint(values->CommandSubType, 27, 28) | 10087 __gen_uint(values->CommandType, 29, 31); 10088 10089 const uint32_t v1 = 10090 __gen_uint(values->PrefetchCount, 0, 2); 10091 dw[1] = __gen_address(data, &dw[1], values->PrefetchPointer, v1, 6, 31); 10092} 10093 10094#define GFX9_STATE_SIP_length 3 10095#define GFX9_STATE_SIP_length_bias 2 10096#define GFX9_STATE_SIP_header \ 10097 .DWordLength = 1, \ 10098 ._3DCommandSubOpcode = 2, \ 10099 ._3DCommandOpcode = 1, \ 10100 .CommandSubType = 0, \ 10101 .CommandType = 3 10102 10103struct GFX9_STATE_SIP { 10104 uint32_t DWordLength; 10105 uint32_t _3DCommandSubOpcode; 10106 uint32_t _3DCommandOpcode; 10107 uint32_t CommandSubType; 10108 uint32_t CommandType; 10109 uint64_t SystemInstructionPointer; 10110}; 10111 10112static inline __attribute__((always_inline)) void 10113GFX9_STATE_SIP_pack(__attribute__((unused)) __gen_user_data *data, 10114 __attribute__((unused)) void * restrict dst, 10115 __attribute__((unused)) const struct GFX9_STATE_SIP * restrict values) 10116{ 10117 uint32_t * restrict dw = (uint32_t * restrict) dst; 10118 10119 dw[0] = 10120 __gen_uint(values->DWordLength, 0, 7) | 10121 __gen_uint(values->_3DCommandSubOpcode, 16, 23) | 10122 __gen_uint(values->_3DCommandOpcode, 24, 26) | 10123 __gen_uint(values->CommandSubType, 27, 28) | 10124 __gen_uint(values->CommandType, 29, 31); 10125 10126 const uint64_t v1 = 10127 __gen_offset(values->SystemInstructionPointer, 4, 63); 10128 dw[1] = v1; 10129 dw[2] = v1 >> 32; 10130} 10131 10132#define GFX9_ACTHD_UDW_num 0x205c 10133#define GFX9_ACTHD_UDW_length 1 10134struct GFX9_ACTHD_UDW { 10135 uint32_t HeadPointerUpperDWORD; 10136}; 10137 10138static inline __attribute__((always_inline)) void 10139GFX9_ACTHD_UDW_pack(__attribute__((unused)) __gen_user_data *data, 10140 __attribute__((unused)) void * restrict dst, 10141 __attribute__((unused)) const struct GFX9_ACTHD_UDW * restrict values) 10142{ 10143 uint32_t * restrict dw = (uint32_t * restrict) dst; 10144 10145 dw[0] = 10146 __gen_uint(values->HeadPointerUpperDWORD, 0, 15); 10147} 10148 10149#define GFX9_BCS_ACTHD_UDW_num 0x2205c 10150#define GFX9_BCS_ACTHD_UDW_length 1 10151struct GFX9_BCS_ACTHD_UDW { 10152 uint32_t HeadPointerUpperDWORD; 10153}; 10154 10155static inline __attribute__((always_inline)) void 10156GFX9_BCS_ACTHD_UDW_pack(__attribute__((unused)) __gen_user_data *data, 10157 __attribute__((unused)) void * restrict dst, 10158 __attribute__((unused)) const struct GFX9_BCS_ACTHD_UDW * restrict values) 10159{ 10160 uint32_t * restrict dw = (uint32_t * restrict) dst; 10161 10162 dw[0] = 10163 __gen_uint(values->HeadPointerUpperDWORD, 0, 15); 10164} 10165 10166#define GFX9_BCS_INSTDONE_num 0x2206c 10167#define GFX9_BCS_INSTDONE_length 1 10168struct GFX9_BCS_INSTDONE { 10169 bool RingEnable; 10170 bool BlitterIDLE; 10171 bool GABIDLE; 10172 bool BCSDone; 10173}; 10174 10175static inline __attribute__((always_inline)) void 10176GFX9_BCS_INSTDONE_pack(__attribute__((unused)) __gen_user_data *data, 10177 __attribute__((unused)) void * restrict dst, 10178 __attribute__((unused)) const struct GFX9_BCS_INSTDONE * restrict values) 10179{ 10180 uint32_t * restrict dw = (uint32_t * restrict) dst; 10181 10182 dw[0] = 10183 __gen_uint(values->RingEnable, 0, 0) | 10184 __gen_uint(values->BlitterIDLE, 1, 1) | 10185 __gen_uint(values->GABIDLE, 2, 2) | 10186 __gen_uint(values->BCSDone, 3, 3); 10187} 10188 10189#define GFX9_BCS_RING_BUFFER_CTL_num 0x2203c 10190#define GFX9_BCS_RING_BUFFER_CTL_length 1 10191struct GFX9_BCS_RING_BUFFER_CTL { 10192 bool RingBufferEnable; 10193 uint32_t AutomaticReportHeadPointer; 10194#define MI_AUTOREPORT_OFF 0 10195#define MI_AUTOREPORT_64KB 1 10196#define MI_AUTOREPORT_4KB 2 10197#define MI_AUTOREPORT_128KB 3 10198 bool DisableRegisterAccesses; 10199 bool SemaphoreWait; 10200 bool RBWait; 10201 uint32_t BufferLengthinpages1; 10202}; 10203 10204static inline __attribute__((always_inline)) void 10205GFX9_BCS_RING_BUFFER_CTL_pack(__attribute__((unused)) __gen_user_data *data, 10206 __attribute__((unused)) void * restrict dst, 10207 __attribute__((unused)) const struct GFX9_BCS_RING_BUFFER_CTL * restrict values) 10208{ 10209 uint32_t * restrict dw = (uint32_t * restrict) dst; 10210 10211 dw[0] = 10212 __gen_uint(values->RingBufferEnable, 0, 0) | 10213 __gen_uint(values->AutomaticReportHeadPointer, 1, 2) | 10214 __gen_uint(values->DisableRegisterAccesses, 8, 8) | 10215 __gen_uint(values->SemaphoreWait, 10, 10) | 10216 __gen_uint(values->RBWait, 11, 11) | 10217 __gen_uint(values->BufferLengthinpages1, 12, 20); 10218} 10219 10220#define GFX9_CACHE_MODE_0_num 0x7000 10221#define GFX9_CACHE_MODE_0_length 1 10222struct GFX9_CACHE_MODE_0 { 10223 bool Nulltilefixdisable; 10224 bool Disableclockgatinginthepixelbackend; 10225 bool HierarchicalZRAWStallOptimizationDisable; 10226 bool RCCEvictionPolicy; 10227 bool STCPMAOptimizationEnable; 10228 uint32_t SamplerL2RequestArbitration; 10229#define RoundRobin 0 10230#define FetchareHighestPriority 1 10231#define ConstantsareHighestPriority 2 10232 bool SamplerL2TLBPrefetchEnable; 10233 bool SamplerSetRemappingfor3DDisable; 10234 uint32_t MSAACompressionPlaneNumberThresholdforeLLC; 10235 bool SamplerL2Disable; 10236 bool NulltilefixdisableMask; 10237 bool DisableclockgatinginthepixelbackendMask; 10238 bool HierarchicalZRAWStallOptimizationDisableMask; 10239 bool RCCEvictionPolicyMask; 10240 bool STCPMAOptimizationEnableMask; 10241 uint32_t SamplerL2RequestArbitrationMask; 10242 bool SamplerL2TLBPrefetchEnableMask; 10243 bool SamplerSetRemappingfor3DDisableMask; 10244 uint32_t MSAACompressionPlaneNumberThresholdforeLLCMask; 10245 bool SamplerL2DisableMask; 10246}; 10247 10248static inline __attribute__((always_inline)) void 10249GFX9_CACHE_MODE_0_pack(__attribute__((unused)) __gen_user_data *data, 10250 __attribute__((unused)) void * restrict dst, 10251 __attribute__((unused)) const struct GFX9_CACHE_MODE_0 * restrict values) 10252{ 10253 uint32_t * restrict dw = (uint32_t * restrict) dst; 10254 10255 dw[0] = 10256 __gen_uint(values->Nulltilefixdisable, 0, 0) | 10257 __gen_uint(values->Disableclockgatinginthepixelbackend, 1, 1) | 10258 __gen_uint(values->HierarchicalZRAWStallOptimizationDisable, 2, 2) | 10259 __gen_uint(values->RCCEvictionPolicy, 4, 4) | 10260 __gen_uint(values->STCPMAOptimizationEnable, 5, 5) | 10261 __gen_uint(values->SamplerL2RequestArbitration, 6, 7) | 10262 __gen_uint(values->SamplerL2TLBPrefetchEnable, 9, 9) | 10263 __gen_uint(values->SamplerSetRemappingfor3DDisable, 11, 11) | 10264 __gen_uint(values->MSAACompressionPlaneNumberThresholdforeLLC, 12, 14) | 10265 __gen_uint(values->SamplerL2Disable, 15, 15) | 10266 __gen_uint(values->NulltilefixdisableMask, 16, 16) | 10267 __gen_uint(values->DisableclockgatinginthepixelbackendMask, 17, 17) | 10268 __gen_uint(values->HierarchicalZRAWStallOptimizationDisableMask, 18, 18) | 10269 __gen_uint(values->RCCEvictionPolicyMask, 20, 20) | 10270 __gen_uint(values->STCPMAOptimizationEnableMask, 21, 21) | 10271 __gen_uint(values->SamplerL2RequestArbitrationMask, 22, 23) | 10272 __gen_uint(values->SamplerL2TLBPrefetchEnableMask, 25, 25) | 10273 __gen_uint(values->SamplerSetRemappingfor3DDisableMask, 27, 27) | 10274 __gen_uint(values->MSAACompressionPlaneNumberThresholdforeLLCMask, 28, 30) | 10275 __gen_uint(values->SamplerL2DisableMask, 31, 31); 10276} 10277 10278#define GFX9_CACHE_MODE_1_num 0x7004 10279#define GFX9_CACHE_MODE_1_length 1 10280struct GFX9_CACHE_MODE_1 { 10281 bool PartialResolveDisableInVC; 10282 bool RCZReadafterexpansioncontrolfix2; 10283 bool DepthReadHitWriteOnlyOptimizationDisable; 10284 bool FloatBlendOptimizationEnable; 10285 bool MCSCacheDisable; 10286 bool _4X4RCPFESTCOptimizationDisable; 10287 uint32_t SamplerCacheSetXORselection; 10288 bool MSCRAWHazardAvoidanceBit; 10289 uint32_t NPPMAFixEnable; 10290 uint32_t HIZEvictionPolicy; 10291 uint32_t NPEarlyZFailsDisable; 10292 bool BlendOptimizationFixDisable; 10293 bool ColorCompressionDisable; 10294 bool PartialResolveDisableInVCMask; 10295 bool RCZReadafterexpansioncontrolfix2Mask; 10296 bool DepthReadHitWriteOnlyOptimizationDisableMask; 10297 bool FloatBlendOptimizationEnableMask; 10298 bool MCSCacheDisableMask; 10299 bool _4X4RCPFESTCOptimizationDisableMask; 10300 uint32_t SamplerCacheSetXORselectionMask; 10301 bool MSCRAWHazardAvoidanceBitMask; 10302 bool NPPMAFixEnableMask; 10303 bool HIZEvictionPolicyMask; 10304 bool NPEarlyZFailsDisableMask; 10305 bool BlendOptimizationFixDisableMask; 10306 bool ColorCompressionDisableMask; 10307}; 10308 10309static inline __attribute__((always_inline)) void 10310GFX9_CACHE_MODE_1_pack(__attribute__((unused)) __gen_user_data *data, 10311 __attribute__((unused)) void * restrict dst, 10312 __attribute__((unused)) const struct GFX9_CACHE_MODE_1 * restrict values) 10313{ 10314 uint32_t * restrict dw = (uint32_t * restrict) dst; 10315 10316 dw[0] = 10317 __gen_uint(values->PartialResolveDisableInVC, 1, 1) | 10318 __gen_uint(values->RCZReadafterexpansioncontrolfix2, 2, 2) | 10319 __gen_uint(values->DepthReadHitWriteOnlyOptimizationDisable, 3, 3) | 10320 __gen_uint(values->FloatBlendOptimizationEnable, 4, 4) | 10321 __gen_uint(values->MCSCacheDisable, 5, 5) | 10322 __gen_uint(values->_4X4RCPFESTCOptimizationDisable, 6, 6) | 10323 __gen_uint(values->SamplerCacheSetXORselection, 7, 8) | 10324 __gen_uint(values->MSCRAWHazardAvoidanceBit, 9, 9) | 10325 __gen_uint(values->NPPMAFixEnable, 11, 11) | 10326 __gen_uint(values->HIZEvictionPolicy, 12, 12) | 10327 __gen_uint(values->NPEarlyZFailsDisable, 13, 13) | 10328 __gen_uint(values->BlendOptimizationFixDisable, 14, 14) | 10329 __gen_uint(values->ColorCompressionDisable, 15, 15) | 10330 __gen_uint(values->PartialResolveDisableInVCMask, 17, 17) | 10331 __gen_uint(values->RCZReadafterexpansioncontrolfix2Mask, 18, 18) | 10332 __gen_uint(values->DepthReadHitWriteOnlyOptimizationDisableMask, 19, 19) | 10333 __gen_uint(values->FloatBlendOptimizationEnableMask, 20, 20) | 10334 __gen_uint(values->MCSCacheDisableMask, 21, 21) | 10335 __gen_uint(values->_4X4RCPFESTCOptimizationDisableMask, 22, 22) | 10336 __gen_uint(values->SamplerCacheSetXORselectionMask, 23, 24) | 10337 __gen_uint(values->MSCRAWHazardAvoidanceBitMask, 25, 25) | 10338 __gen_uint(values->NPPMAFixEnableMask, 27, 27) | 10339 __gen_uint(values->HIZEvictionPolicyMask, 28, 28) | 10340 __gen_uint(values->NPEarlyZFailsDisableMask, 29, 29) | 10341 __gen_uint(values->BlendOptimizationFixDisableMask, 30, 30) | 10342 __gen_uint(values->ColorCompressionDisableMask, 31, 31); 10343} 10344 10345#define GFX9_CL_INVOCATION_COUNT_num 0x2338 10346#define GFX9_CL_INVOCATION_COUNT_length 2 10347struct GFX9_CL_INVOCATION_COUNT { 10348 uint64_t CLInvocationCountReport; 10349}; 10350 10351static inline __attribute__((always_inline)) void 10352GFX9_CL_INVOCATION_COUNT_pack(__attribute__((unused)) __gen_user_data *data, 10353 __attribute__((unused)) void * restrict dst, 10354 __attribute__((unused)) const struct GFX9_CL_INVOCATION_COUNT * restrict values) 10355{ 10356 uint32_t * restrict dw = (uint32_t * restrict) dst; 10357 10358 const uint64_t v0 = 10359 __gen_uint(values->CLInvocationCountReport, 0, 63); 10360 dw[0] = v0; 10361 dw[1] = v0 >> 32; 10362} 10363 10364#define GFX9_CL_PRIMITIVES_COUNT_num 0x2340 10365#define GFX9_CL_PRIMITIVES_COUNT_length 2 10366struct GFX9_CL_PRIMITIVES_COUNT { 10367 uint64_t CLPrimitivesCountReport; 10368}; 10369 10370static inline __attribute__((always_inline)) void 10371GFX9_CL_PRIMITIVES_COUNT_pack(__attribute__((unused)) __gen_user_data *data, 10372 __attribute__((unused)) void * restrict dst, 10373 __attribute__((unused)) const struct GFX9_CL_PRIMITIVES_COUNT * restrict values) 10374{ 10375 uint32_t * restrict dw = (uint32_t * restrict) dst; 10376 10377 const uint64_t v0 = 10378 __gen_uint(values->CLPrimitivesCountReport, 0, 63); 10379 dw[0] = v0; 10380 dw[1] = v0 >> 32; 10381} 10382 10383#define GFX9_CS_CHICKEN1_num 0x2580 10384#define GFX9_CS_CHICKEN1_length 1 10385struct GFX9_CS_CHICKEN1 { 10386 uint32_t ReplayMode; 10387#define MidcmdbufferPreemption 0 10388#define ObjectLevelPreemption 1 10389 bool ReplayModeMask; 10390}; 10391 10392static inline __attribute__((always_inline)) void 10393GFX9_CS_CHICKEN1_pack(__attribute__((unused)) __gen_user_data *data, 10394 __attribute__((unused)) void * restrict dst, 10395 __attribute__((unused)) const struct GFX9_CS_CHICKEN1 * restrict values) 10396{ 10397 uint32_t * restrict dw = (uint32_t * restrict) dst; 10398 10399 dw[0] = 10400 __gen_uint(values->ReplayMode, 0, 0) | 10401 __gen_uint(values->ReplayModeMask, 16, 16); 10402} 10403 10404#define GFX9_CS_DEBUG_MODE2_num 0x20d8 10405#define GFX9_CS_DEBUG_MODE2_length 1 10406struct GFX9_CS_DEBUG_MODE2 { 10407 bool _3DRenderingInstructionDisable; 10408 bool MediaInstructionDisable; 10409 bool CONSTANT_BUFFERAddressOffsetDisable; 10410 bool _3DRenderingInstructionDisableMask; 10411 bool MediaInstructionDisableMask; 10412 bool CONSTANT_BUFFERAddressOffsetDisableMask; 10413}; 10414 10415static inline __attribute__((always_inline)) void 10416GFX9_CS_DEBUG_MODE2_pack(__attribute__((unused)) __gen_user_data *data, 10417 __attribute__((unused)) void * restrict dst, 10418 __attribute__((unused)) const struct GFX9_CS_DEBUG_MODE2 * restrict values) 10419{ 10420 uint32_t * restrict dw = (uint32_t * restrict) dst; 10421 10422 dw[0] = 10423 __gen_uint(values->_3DRenderingInstructionDisable, 0, 0) | 10424 __gen_uint(values->MediaInstructionDisable, 1, 1) | 10425 __gen_uint(values->CONSTANT_BUFFERAddressOffsetDisable, 4, 4) | 10426 __gen_uint(values->_3DRenderingInstructionDisableMask, 16, 16) | 10427 __gen_uint(values->MediaInstructionDisableMask, 17, 17) | 10428 __gen_uint(values->CONSTANT_BUFFERAddressOffsetDisableMask, 20, 20); 10429} 10430 10431#define GFX9_CS_INVOCATION_COUNT_num 0x2290 10432#define GFX9_CS_INVOCATION_COUNT_length 2 10433struct GFX9_CS_INVOCATION_COUNT { 10434 uint64_t CSInvocationCountReport; 10435}; 10436 10437static inline __attribute__((always_inline)) void 10438GFX9_CS_INVOCATION_COUNT_pack(__attribute__((unused)) __gen_user_data *data, 10439 __attribute__((unused)) void * restrict dst, 10440 __attribute__((unused)) const struct GFX9_CS_INVOCATION_COUNT * restrict values) 10441{ 10442 uint32_t * restrict dw = (uint32_t * restrict) dst; 10443 10444 const uint64_t v0 = 10445 __gen_uint(values->CSInvocationCountReport, 0, 63); 10446 dw[0] = v0; 10447 dw[1] = v0 >> 32; 10448} 10449 10450#define GFX9_DS_INVOCATION_COUNT_num 0x2308 10451#define GFX9_DS_INVOCATION_COUNT_length 2 10452struct GFX9_DS_INVOCATION_COUNT { 10453 uint64_t DSInvocationCountReport; 10454}; 10455 10456static inline __attribute__((always_inline)) void 10457GFX9_DS_INVOCATION_COUNT_pack(__attribute__((unused)) __gen_user_data *data, 10458 __attribute__((unused)) void * restrict dst, 10459 __attribute__((unused)) const struct GFX9_DS_INVOCATION_COUNT * restrict values) 10460{ 10461 uint32_t * restrict dw = (uint32_t * restrict) dst; 10462 10463 const uint64_t v0 = 10464 __gen_uint(values->DSInvocationCountReport, 0, 63); 10465 dw[0] = v0; 10466 dw[1] = v0 >> 32; 10467} 10468 10469#define GFX9_FAULT_REG_num 0x4094 10470#define GFX9_FAULT_REG_length 1 10471struct GFX9_FAULT_REG { 10472 bool ValidBit; 10473 uint32_t FaultType; 10474#define InvalidPTEFault 0 10475#define InvalidPDEFault 1 10476#define InvalidPDPEFault 2 10477#define InvalidPML4EFault 3 10478 uint32_t SRCIDofFault; 10479 uint32_t GTTSEL; 10480#define PPGTT 0 10481#define GGTT 1 10482 uint32_t EngineID; 10483#define GFX 0 10484#define MFX0 1 10485#define MFX1 2 10486#define VEBX 3 10487#define BLT 4 10488#define GUC 5 10489}; 10490 10491static inline __attribute__((always_inline)) void 10492GFX9_FAULT_REG_pack(__attribute__((unused)) __gen_user_data *data, 10493 __attribute__((unused)) void * restrict dst, 10494 __attribute__((unused)) const struct GFX9_FAULT_REG * restrict values) 10495{ 10496 uint32_t * restrict dw = (uint32_t * restrict) dst; 10497 10498 dw[0] = 10499 __gen_uint(values->ValidBit, 0, 0) | 10500 __gen_uint(values->FaultType, 1, 2) | 10501 __gen_uint(values->SRCIDofFault, 3, 10) | 10502 __gen_uint(values->GTTSEL, 11, 11) | 10503 __gen_uint(values->EngineID, 12, 14); 10504} 10505 10506#define GFX9_GFX_ARB_ERROR_RPT_num 0x40a0 10507#define GFX9_GFX_ARB_ERROR_RPT_length 1 10508struct GFX9_GFX_ARB_ERROR_RPT { 10509 bool TLBPageFaultError; 10510 bool RSTRMPAVPReadInvalid; 10511 bool InvalidPageDirectoryEntryError; 10512 bool ROSTRMPAVPInvalidPhysicalAddress; 10513 bool TLBPageVTDTranslationError; 10514 bool WRDPPAVPInvalid; 10515 bool PageDirectoryEntryVTDTranslationError; 10516 bool UnloadedPDError; 10517 bool GuCVTdtranslationPageFault2ndlevelUndefineddoorbell; 10518 bool NonWBmemorytypeforAdvancedContext; 10519 bool PASIDNotEnabled; 10520 bool PASIDBoundaryViolation; 10521 bool PASIDNotValid; 10522 bool PASIDWasZeroForUntranslatedRequest; 10523 bool ContextWasNotMarkedAsPresentWhenDoingDMA; 10524}; 10525 10526static inline __attribute__((always_inline)) void 10527GFX9_GFX_ARB_ERROR_RPT_pack(__attribute__((unused)) __gen_user_data *data, 10528 __attribute__((unused)) void * restrict dst, 10529 __attribute__((unused)) const struct GFX9_GFX_ARB_ERROR_RPT * restrict values) 10530{ 10531 uint32_t * restrict dw = (uint32_t * restrict) dst; 10532 10533 dw[0] = 10534 __gen_uint(values->TLBPageFaultError, 0, 0) | 10535 __gen_uint(values->RSTRMPAVPReadInvalid, 1, 1) | 10536 __gen_uint(values->InvalidPageDirectoryEntryError, 2, 2) | 10537 __gen_uint(values->ROSTRMPAVPInvalidPhysicalAddress, 3, 3) | 10538 __gen_uint(values->TLBPageVTDTranslationError, 4, 4) | 10539 __gen_uint(values->WRDPPAVPInvalid, 5, 5) | 10540 __gen_uint(values->PageDirectoryEntryVTDTranslationError, 6, 6) | 10541 __gen_uint(values->UnloadedPDError, 8, 8) | 10542 __gen_uint(values->GuCVTdtranslationPageFault2ndlevelUndefineddoorbell, 9, 9) | 10543 __gen_uint(values->NonWBmemorytypeforAdvancedContext, 10, 10) | 10544 __gen_uint(values->PASIDNotEnabled, 11, 11) | 10545 __gen_uint(values->PASIDBoundaryViolation, 12, 12) | 10546 __gen_uint(values->PASIDNotValid, 13, 13) | 10547 __gen_uint(values->PASIDWasZeroForUntranslatedRequest, 14, 14) | 10548 __gen_uint(values->ContextWasNotMarkedAsPresentWhenDoingDMA, 15, 15); 10549} 10550 10551#define GFX9_GS_INVOCATION_COUNT_num 0x2328 10552#define GFX9_GS_INVOCATION_COUNT_length 2 10553struct GFX9_GS_INVOCATION_COUNT { 10554 uint64_t GSInvocationCountReport; 10555}; 10556 10557static inline __attribute__((always_inline)) void 10558GFX9_GS_INVOCATION_COUNT_pack(__attribute__((unused)) __gen_user_data *data, 10559 __attribute__((unused)) void * restrict dst, 10560 __attribute__((unused)) const struct GFX9_GS_INVOCATION_COUNT * restrict values) 10561{ 10562 uint32_t * restrict dw = (uint32_t * restrict) dst; 10563 10564 const uint64_t v0 = 10565 __gen_uint(values->GSInvocationCountReport, 0, 63); 10566 dw[0] = v0; 10567 dw[1] = v0 >> 32; 10568} 10569 10570#define GFX9_GS_PRIMITIVES_COUNT_num 0x2330 10571#define GFX9_GS_PRIMITIVES_COUNT_length 2 10572struct GFX9_GS_PRIMITIVES_COUNT { 10573 uint64_t GSPrimitivesCountReport; 10574}; 10575 10576static inline __attribute__((always_inline)) void 10577GFX9_GS_PRIMITIVES_COUNT_pack(__attribute__((unused)) __gen_user_data *data, 10578 __attribute__((unused)) void * restrict dst, 10579 __attribute__((unused)) const struct GFX9_GS_PRIMITIVES_COUNT * restrict values) 10580{ 10581 uint32_t * restrict dw = (uint32_t * restrict) dst; 10582 10583 const uint64_t v0 = 10584 __gen_uint(values->GSPrimitivesCountReport, 0, 63); 10585 dw[0] = v0; 10586 dw[1] = v0 >> 32; 10587} 10588 10589#define GFX9_GT_MODE_num 0x7008 10590#define GFX9_GT_MODE_length 1 10591struct GFX9_GT_MODE { 10592 uint32_t SubsliceHashing; 10593#define _8x8 0 10594#define _16x4 1 10595#define _8x4 2 10596#define _16x16 3 10597 uint32_t SliceHashing; 10598#define NORMAL 0 10599#define DISABLED 1 10600#define _32x16 2 10601#define _32x32 3 10602 int32_t SubsliceHashingMask; 10603 int32_t SliceHashingMask; 10604}; 10605 10606static inline __attribute__((always_inline)) void 10607GFX9_GT_MODE_pack(__attribute__((unused)) __gen_user_data *data, 10608 __attribute__((unused)) void * restrict dst, 10609 __attribute__((unused)) const struct GFX9_GT_MODE * restrict values) 10610{ 10611 uint32_t * restrict dw = (uint32_t * restrict) dst; 10612 10613 dw[0] = 10614 __gen_uint(values->SubsliceHashing, 8, 9) | 10615 __gen_uint(values->SliceHashing, 11, 12) | 10616 __gen_sint(values->SubsliceHashingMask, 24, 25) | 10617 __gen_sint(values->SliceHashingMask, 27, 28); 10618} 10619 10620#define GFX9_HS_INVOCATION_COUNT_num 0x2300 10621#define GFX9_HS_INVOCATION_COUNT_length 2 10622struct GFX9_HS_INVOCATION_COUNT { 10623 uint64_t HSInvocationCountReport; 10624}; 10625 10626static inline __attribute__((always_inline)) void 10627GFX9_HS_INVOCATION_COUNT_pack(__attribute__((unused)) __gen_user_data *data, 10628 __attribute__((unused)) void * restrict dst, 10629 __attribute__((unused)) const struct GFX9_HS_INVOCATION_COUNT * restrict values) 10630{ 10631 uint32_t * restrict dw = (uint32_t * restrict) dst; 10632 10633 const uint64_t v0 = 10634 __gen_uint(values->HSInvocationCountReport, 0, 63); 10635 dw[0] = v0; 10636 dw[1] = v0 >> 32; 10637} 10638 10639#define GFX9_IA_PRIMITIVES_COUNT_num 0x2318 10640#define GFX9_IA_PRIMITIVES_COUNT_length 2 10641struct GFX9_IA_PRIMITIVES_COUNT { 10642 uint64_t IAPrimitivesCountReport; 10643}; 10644 10645static inline __attribute__((always_inline)) void 10646GFX9_IA_PRIMITIVES_COUNT_pack(__attribute__((unused)) __gen_user_data *data, 10647 __attribute__((unused)) void * restrict dst, 10648 __attribute__((unused)) const struct GFX9_IA_PRIMITIVES_COUNT * restrict values) 10649{ 10650 uint32_t * restrict dw = (uint32_t * restrict) dst; 10651 10652 const uint64_t v0 = 10653 __gen_uint(values->IAPrimitivesCountReport, 0, 63); 10654 dw[0] = v0; 10655 dw[1] = v0 >> 32; 10656} 10657 10658#define GFX9_IA_VERTICES_COUNT_num 0x2310 10659#define GFX9_IA_VERTICES_COUNT_length 2 10660struct GFX9_IA_VERTICES_COUNT { 10661 uint64_t IAVerticesCountReport; 10662}; 10663 10664static inline __attribute__((always_inline)) void 10665GFX9_IA_VERTICES_COUNT_pack(__attribute__((unused)) __gen_user_data *data, 10666 __attribute__((unused)) void * restrict dst, 10667 __attribute__((unused)) const struct GFX9_IA_VERTICES_COUNT * restrict values) 10668{ 10669 uint32_t * restrict dw = (uint32_t * restrict) dst; 10670 10671 const uint64_t v0 = 10672 __gen_uint(values->IAVerticesCountReport, 0, 63); 10673 dw[0] = v0; 10674 dw[1] = v0 >> 32; 10675} 10676 10677#define GFX9_INSTDONE_1_num 0x206c 10678#define GFX9_INSTDONE_1_length 1 10679struct GFX9_INSTDONE_1 { 10680 bool PRB0RingEnable; 10681 bool VFGDone; 10682 bool VSDone; 10683 bool HSDone; 10684 bool TEDone; 10685 bool DSDone; 10686 bool GSDone; 10687 bool SOLDone; 10688 bool CLDone; 10689 bool SFDone; 10690 bool TDGDone; 10691 bool URBMDone; 10692 bool SVGDone; 10693 bool GAFSDone; 10694 bool VFEDone; 10695 bool TSGDone; 10696 bool GAFMDone; 10697 bool GAMDone; 10698 bool RSDone; 10699 bool CSDone; 10700 bool SDEDone; 10701 bool RCCFBCCSDone; 10702}; 10703 10704static inline __attribute__((always_inline)) void 10705GFX9_INSTDONE_1_pack(__attribute__((unused)) __gen_user_data *data, 10706 __attribute__((unused)) void * restrict dst, 10707 __attribute__((unused)) const struct GFX9_INSTDONE_1 * restrict values) 10708{ 10709 uint32_t * restrict dw = (uint32_t * restrict) dst; 10710 10711 dw[0] = 10712 __gen_uint(values->PRB0RingEnable, 0, 0) | 10713 __gen_uint(values->VFGDone, 1, 1) | 10714 __gen_uint(values->VSDone, 2, 2) | 10715 __gen_uint(values->HSDone, 3, 3) | 10716 __gen_uint(values->TEDone, 4, 4) | 10717 __gen_uint(values->DSDone, 5, 5) | 10718 __gen_uint(values->GSDone, 6, 6) | 10719 __gen_uint(values->SOLDone, 7, 7) | 10720 __gen_uint(values->CLDone, 8, 8) | 10721 __gen_uint(values->SFDone, 9, 9) | 10722 __gen_uint(values->TDGDone, 12, 12) | 10723 __gen_uint(values->URBMDone, 13, 13) | 10724 __gen_uint(values->SVGDone, 14, 14) | 10725 __gen_uint(values->GAFSDone, 15, 15) | 10726 __gen_uint(values->VFEDone, 16, 16) | 10727 __gen_uint(values->TSGDone, 17, 17) | 10728 __gen_uint(values->GAFMDone, 18, 18) | 10729 __gen_uint(values->GAMDone, 19, 19) | 10730 __gen_uint(values->RSDone, 20, 20) | 10731 __gen_uint(values->CSDone, 21, 21) | 10732 __gen_uint(values->SDEDone, 22, 22) | 10733 __gen_uint(values->RCCFBCCSDone, 23, 23); 10734} 10735 10736#define GFX9_L3CNTLREG_num 0x7034 10737#define GFX9_L3CNTLREG_length 1 10738struct GFX9_L3CNTLREG { 10739 bool SLMEnable; 10740 uint32_t URBAllocation; 10741 uint32_t ROAllocation; 10742 uint32_t DCAllocation; 10743 uint32_t AllAllocation; 10744}; 10745 10746static inline __attribute__((always_inline)) void 10747GFX9_L3CNTLREG_pack(__attribute__((unused)) __gen_user_data *data, 10748 __attribute__((unused)) void * restrict dst, 10749 __attribute__((unused)) const struct GFX9_L3CNTLREG * restrict values) 10750{ 10751 uint32_t * restrict dw = (uint32_t * restrict) dst; 10752 10753 dw[0] = 10754 __gen_uint(values->SLMEnable, 0, 0) | 10755 __gen_uint(values->URBAllocation, 1, 7) | 10756 __gen_uint(values->ROAllocation, 11, 17) | 10757 __gen_uint(values->DCAllocation, 18, 24) | 10758 __gen_uint(values->AllAllocation, 25, 31); 10759} 10760 10761#define GFX9_PERFCNT1_num 0x91b8 10762#define GFX9_PERFCNT1_length 2 10763struct GFX9_PERFCNT1 { 10764 uint64_t Value; 10765 uint32_t EventSelection; 10766 bool CounterClear; 10767 bool EdgeDetect; 10768 bool OverflowEnable; 10769 bool CounterEnable; 10770}; 10771 10772static inline __attribute__((always_inline)) void 10773GFX9_PERFCNT1_pack(__attribute__((unused)) __gen_user_data *data, 10774 __attribute__((unused)) void * restrict dst, 10775 __attribute__((unused)) const struct GFX9_PERFCNT1 * restrict values) 10776{ 10777 uint32_t * restrict dw = (uint32_t * restrict) dst; 10778 10779 const uint64_t v0 = 10780 __gen_uint(values->Value, 0, 43) | 10781 __gen_uint(values->EventSelection, 52, 59) | 10782 __gen_uint(values->CounterClear, 60, 60) | 10783 __gen_uint(values->EdgeDetect, 61, 61) | 10784 __gen_uint(values->OverflowEnable, 62, 62) | 10785 __gen_uint(values->CounterEnable, 63, 63); 10786 dw[0] = v0; 10787 dw[1] = v0 >> 32; 10788} 10789 10790#define GFX9_PERFCNT2_num 0x91c0 10791#define GFX9_PERFCNT2_length 2 10792struct GFX9_PERFCNT2 { 10793 uint64_t Value; 10794 uint32_t EventSelection; 10795 bool CounterClear; 10796 bool EdgeDetect; 10797 bool OverflowEnable; 10798 bool CounterEnable; 10799}; 10800 10801static inline __attribute__((always_inline)) void 10802GFX9_PERFCNT2_pack(__attribute__((unused)) __gen_user_data *data, 10803 __attribute__((unused)) void * restrict dst, 10804 __attribute__((unused)) const struct GFX9_PERFCNT2 * restrict values) 10805{ 10806 uint32_t * restrict dw = (uint32_t * restrict) dst; 10807 10808 const uint64_t v0 = 10809 __gen_uint(values->Value, 0, 43) | 10810 __gen_uint(values->EventSelection, 52, 59) | 10811 __gen_uint(values->CounterClear, 60, 60) | 10812 __gen_uint(values->EdgeDetect, 61, 61) | 10813 __gen_uint(values->OverflowEnable, 62, 62) | 10814 __gen_uint(values->CounterEnable, 63, 63); 10815 dw[0] = v0; 10816 dw[1] = v0 >> 32; 10817} 10818 10819#define GFX9_PS_INVOCATION_COUNT_num 0x2348 10820#define GFX9_PS_INVOCATION_COUNT_length 2 10821struct GFX9_PS_INVOCATION_COUNT { 10822 uint64_t PSInvocationCountReport; 10823}; 10824 10825static inline __attribute__((always_inline)) void 10826GFX9_PS_INVOCATION_COUNT_pack(__attribute__((unused)) __gen_user_data *data, 10827 __attribute__((unused)) void * restrict dst, 10828 __attribute__((unused)) const struct GFX9_PS_INVOCATION_COUNT * restrict values) 10829{ 10830 uint32_t * restrict dw = (uint32_t * restrict) dst; 10831 10832 const uint64_t v0 = 10833 __gen_uint(values->PSInvocationCountReport, 0, 63); 10834 dw[0] = v0; 10835 dw[1] = v0 >> 32; 10836} 10837 10838#define GFX9_RCS_RING_BUFFER_CTL_num 0x203c 10839#define GFX9_RCS_RING_BUFFER_CTL_length 1 10840struct GFX9_RCS_RING_BUFFER_CTL { 10841 bool RingBufferEnable; 10842 uint32_t AutomaticReportHeadPointer; 10843#define MI_AUTOREPORT_OFF 0 10844#define MI_AUTOREPORT_64KB 1 10845#define MI_AUTOREPORT_4KB 2 10846#define MI_AUTOREPORT_128KB 3 10847 bool SemaphoreWait; 10848 bool RBWait; 10849 uint32_t BufferLengthinpages1; 10850}; 10851 10852static inline __attribute__((always_inline)) void 10853GFX9_RCS_RING_BUFFER_CTL_pack(__attribute__((unused)) __gen_user_data *data, 10854 __attribute__((unused)) void * restrict dst, 10855 __attribute__((unused)) const struct GFX9_RCS_RING_BUFFER_CTL * restrict values) 10856{ 10857 uint32_t * restrict dw = (uint32_t * restrict) dst; 10858 10859 dw[0] = 10860 __gen_uint(values->RingBufferEnable, 0, 0) | 10861 __gen_uint(values->AutomaticReportHeadPointer, 1, 2) | 10862 __gen_uint(values->SemaphoreWait, 10, 10) | 10863 __gen_uint(values->RBWait, 11, 11) | 10864 __gen_uint(values->BufferLengthinpages1, 12, 20); 10865} 10866 10867#define GFX9_ROW_INSTDONE_num 0xe164 10868#define GFX9_ROW_INSTDONE_length 1 10869struct GFX9_ROW_INSTDONE { 10870 bool BCDone; 10871 bool PSDDone; 10872 bool DAPRDone; 10873 bool TDLDone; 10874 bool ICDone; 10875 bool MA0Done; 10876 bool EU00DoneSS0; 10877 bool EU01DoneSS0; 10878 bool EU02DoneSS0; 10879 bool EU03DoneSS0; 10880 bool EU10DoneSS0; 10881 bool EU11DoneSS0; 10882 bool EU12DoneSS0; 10883 bool EU13DoneSS0; 10884 bool MA1DoneSS0; 10885}; 10886 10887static inline __attribute__((always_inline)) void 10888GFX9_ROW_INSTDONE_pack(__attribute__((unused)) __gen_user_data *data, 10889 __attribute__((unused)) void * restrict dst, 10890 __attribute__((unused)) const struct GFX9_ROW_INSTDONE * restrict values) 10891{ 10892 uint32_t * restrict dw = (uint32_t * restrict) dst; 10893 10894 dw[0] = 10895 __gen_uint(values->BCDone, 0, 0) | 10896 __gen_uint(values->PSDDone, 1, 1) | 10897 __gen_uint(values->DAPRDone, 3, 3) | 10898 __gen_uint(values->TDLDone, 6, 6) | 10899 __gen_uint(values->ICDone, 12, 12) | 10900 __gen_uint(values->MA0Done, 15, 15) | 10901 __gen_uint(values->EU00DoneSS0, 16, 16) | 10902 __gen_uint(values->EU01DoneSS0, 17, 17) | 10903 __gen_uint(values->EU02DoneSS0, 18, 18) | 10904 __gen_uint(values->EU03DoneSS0, 19, 19) | 10905 __gen_uint(values->EU10DoneSS0, 21, 21) | 10906 __gen_uint(values->EU11DoneSS0, 22, 22) | 10907 __gen_uint(values->EU12DoneSS0, 23, 23) | 10908 __gen_uint(values->EU13DoneSS0, 24, 24) | 10909 __gen_uint(values->MA1DoneSS0, 26, 26); 10910} 10911 10912#define GFX9_RPSTAT0_num 0xa01c 10913#define GFX9_RPSTAT0_length 1 10914struct GFX9_RPSTAT0 { 10915 uint32_t PreviousGTFrequency; 10916 uint32_t CurrentGTFrequency; 10917}; 10918 10919static inline __attribute__((always_inline)) void 10920GFX9_RPSTAT0_pack(__attribute__((unused)) __gen_user_data *data, 10921 __attribute__((unused)) void * restrict dst, 10922 __attribute__((unused)) const struct GFX9_RPSTAT0 * restrict values) 10923{ 10924 uint32_t * restrict dw = (uint32_t * restrict) dst; 10925 10926 dw[0] = 10927 __gen_uint(values->PreviousGTFrequency, 0, 8) | 10928 __gen_uint(values->CurrentGTFrequency, 23, 31); 10929} 10930 10931#define GFX9_SAMPLER_INSTDONE_num 0xe160 10932#define GFX9_SAMPLER_INSTDONE_length 1 10933struct GFX9_SAMPLER_INSTDONE { 10934 bool IMEDone; 10935 bool PL0Done; 10936 bool SO0Done; 10937 bool DG0Done; 10938 bool FT0Done; 10939 bool DM0Done; 10940 bool SCDone; 10941 bool FL0Done; 10942 bool QCDone; 10943 bool SVSMDone; 10944 bool SI0Done; 10945 bool MT0Done; 10946 bool AVSDone; 10947 bool IEFDone; 10948 bool CREDone; 10949 bool SVSMARB3; 10950 bool SVSMARB2; 10951 bool SVSMARB1; 10952 bool SVSMAdapter; 10953 bool BDMDone; 10954}; 10955 10956static inline __attribute__((always_inline)) void 10957GFX9_SAMPLER_INSTDONE_pack(__attribute__((unused)) __gen_user_data *data, 10958 __attribute__((unused)) void * restrict dst, 10959 __attribute__((unused)) const struct GFX9_SAMPLER_INSTDONE * restrict values) 10960{ 10961 uint32_t * restrict dw = (uint32_t * restrict) dst; 10962 10963 dw[0] = 10964 __gen_uint(values->IMEDone, 0, 0) | 10965 __gen_uint(values->PL0Done, 1, 1) | 10966 __gen_uint(values->SO0Done, 2, 2) | 10967 __gen_uint(values->DG0Done, 3, 3) | 10968 __gen_uint(values->FT0Done, 4, 4) | 10969 __gen_uint(values->DM0Done, 5, 5) | 10970 __gen_uint(values->SCDone, 6, 6) | 10971 __gen_uint(values->FL0Done, 7, 7) | 10972 __gen_uint(values->QCDone, 8, 8) | 10973 __gen_uint(values->SVSMDone, 9, 9) | 10974 __gen_uint(values->SI0Done, 10, 10) | 10975 __gen_uint(values->MT0Done, 11, 11) | 10976 __gen_uint(values->AVSDone, 12, 12) | 10977 __gen_uint(values->IEFDone, 13, 13) | 10978 __gen_uint(values->CREDone, 14, 14) | 10979 __gen_uint(values->SVSMARB3, 15, 15) | 10980 __gen_uint(values->SVSMARB2, 16, 16) | 10981 __gen_uint(values->SVSMARB1, 17, 17) | 10982 __gen_uint(values->SVSMAdapter, 18, 18) | 10983 __gen_uint(values->BDMDone, 19, 19); 10984} 10985 10986#define GFX9_SC_INSTDONE_num 0x7100 10987#define GFX9_SC_INSTDONE_length 1 10988struct GFX9_SC_INSTDONE { 10989 bool SVLDone; 10990 bool WMFEDone; 10991 bool WMBEDone; 10992 bool HIZDone; 10993 bool STCDone; 10994 bool IZDone; 10995 bool SBEDone; 10996 bool RCZDone; 10997 bool RCCDone; 10998 bool RCPBEDone; 10999 bool RCPFEDone; 11000 bool DAPBDone; 11001 bool DAPRBEDone; 11002 bool SARBDone; 11003 bool DC0Done; 11004 bool DC1Done; 11005 bool DC2Done; 11006 bool DC3Done; 11007 bool GW0Done; 11008 bool GW1Done; 11009 bool GW2Done; 11010 bool GW3Done; 11011 bool TDCDone; 11012}; 11013 11014static inline __attribute__((always_inline)) void 11015GFX9_SC_INSTDONE_pack(__attribute__((unused)) __gen_user_data *data, 11016 __attribute__((unused)) void * restrict dst, 11017 __attribute__((unused)) const struct GFX9_SC_INSTDONE * restrict values) 11018{ 11019 uint32_t * restrict dw = (uint32_t * restrict) dst; 11020 11021 dw[0] = 11022 __gen_uint(values->SVLDone, 0, 0) | 11023 __gen_uint(values->WMFEDone, 1, 1) | 11024 __gen_uint(values->WMBEDone, 2, 2) | 11025 __gen_uint(values->HIZDone, 3, 3) | 11026 __gen_uint(values->STCDone, 4, 4) | 11027 __gen_uint(values->IZDone, 5, 5) | 11028 __gen_uint(values->SBEDone, 6, 6) | 11029 __gen_uint(values->RCZDone, 8, 8) | 11030 __gen_uint(values->RCCDone, 9, 9) | 11031 __gen_uint(values->RCPBEDone, 10, 10) | 11032 __gen_uint(values->RCPFEDone, 11, 11) | 11033 __gen_uint(values->DAPBDone, 12, 12) | 11034 __gen_uint(values->DAPRBEDone, 13, 13) | 11035 __gen_uint(values->SARBDone, 15, 15) | 11036 __gen_uint(values->DC0Done, 16, 16) | 11037 __gen_uint(values->DC1Done, 17, 17) | 11038 __gen_uint(values->DC2Done, 18, 18) | 11039 __gen_uint(values->DC3Done, 19, 19) | 11040 __gen_uint(values->GW0Done, 20, 20) | 11041 __gen_uint(values->GW1Done, 21, 21) | 11042 __gen_uint(values->GW2Done, 22, 22) | 11043 __gen_uint(values->GW3Done, 23, 23) | 11044 __gen_uint(values->TDCDone, 24, 24); 11045} 11046 11047#define GFX9_SLICE_COMMON_ECO_CHICKEN1_num 0x731c 11048#define GFX9_SLICE_COMMON_ECO_CHICKEN1_length 1 11049struct GFX9_SLICE_COMMON_ECO_CHICKEN1 { 11050 uint32_t GLKBarrierMode; 11051#define GLK_BARRIER_MODE_GPGPU 0 11052#define GLK_BARRIER_MODE_3D_HULL 1 11053 bool GLKBarrierModeMask; 11054}; 11055 11056static inline __attribute__((always_inline)) void 11057GFX9_SLICE_COMMON_ECO_CHICKEN1_pack(__attribute__((unused)) __gen_user_data *data, 11058 __attribute__((unused)) void * restrict dst, 11059 __attribute__((unused)) const struct GFX9_SLICE_COMMON_ECO_CHICKEN1 * restrict values) 11060{ 11061 uint32_t * restrict dw = (uint32_t * restrict) dst; 11062 11063 dw[0] = 11064 __gen_uint(values->GLKBarrierMode, 7, 7) | 11065 __gen_uint(values->GLKBarrierModeMask, 23, 23); 11066} 11067 11068#define GFX9_SO_NUM_PRIMS_WRITTEN0_num 0x5200 11069#define GFX9_SO_NUM_PRIMS_WRITTEN0_length 2 11070struct GFX9_SO_NUM_PRIMS_WRITTEN0 { 11071 uint64_t NumPrimsWrittenCount; 11072}; 11073 11074static inline __attribute__((always_inline)) void 11075GFX9_SO_NUM_PRIMS_WRITTEN0_pack(__attribute__((unused)) __gen_user_data *data, 11076 __attribute__((unused)) void * restrict dst, 11077 __attribute__((unused)) const struct GFX9_SO_NUM_PRIMS_WRITTEN0 * restrict values) 11078{ 11079 uint32_t * restrict dw = (uint32_t * restrict) dst; 11080 11081 const uint64_t v0 = 11082 __gen_uint(values->NumPrimsWrittenCount, 0, 63); 11083 dw[0] = v0; 11084 dw[1] = v0 >> 32; 11085} 11086 11087#define GFX9_SO_NUM_PRIMS_WRITTEN1_num 0x5208 11088#define GFX9_SO_NUM_PRIMS_WRITTEN1_length 2 11089struct GFX9_SO_NUM_PRIMS_WRITTEN1 { 11090 uint64_t NumPrimsWrittenCount; 11091}; 11092 11093static inline __attribute__((always_inline)) void 11094GFX9_SO_NUM_PRIMS_WRITTEN1_pack(__attribute__((unused)) __gen_user_data *data, 11095 __attribute__((unused)) void * restrict dst, 11096 __attribute__((unused)) const struct GFX9_SO_NUM_PRIMS_WRITTEN1 * restrict values) 11097{ 11098 uint32_t * restrict dw = (uint32_t * restrict) dst; 11099 11100 const uint64_t v0 = 11101 __gen_uint(values->NumPrimsWrittenCount, 0, 63); 11102 dw[0] = v0; 11103 dw[1] = v0 >> 32; 11104} 11105 11106#define GFX9_SO_NUM_PRIMS_WRITTEN2_num 0x5210 11107#define GFX9_SO_NUM_PRIMS_WRITTEN2_length 2 11108struct GFX9_SO_NUM_PRIMS_WRITTEN2 { 11109 uint64_t NumPrimsWrittenCount; 11110}; 11111 11112static inline __attribute__((always_inline)) void 11113GFX9_SO_NUM_PRIMS_WRITTEN2_pack(__attribute__((unused)) __gen_user_data *data, 11114 __attribute__((unused)) void * restrict dst, 11115 __attribute__((unused)) const struct GFX9_SO_NUM_PRIMS_WRITTEN2 * restrict values) 11116{ 11117 uint32_t * restrict dw = (uint32_t * restrict) dst; 11118 11119 const uint64_t v0 = 11120 __gen_uint(values->NumPrimsWrittenCount, 0, 63); 11121 dw[0] = v0; 11122 dw[1] = v0 >> 32; 11123} 11124 11125#define GFX9_SO_NUM_PRIMS_WRITTEN3_num 0x5218 11126#define GFX9_SO_NUM_PRIMS_WRITTEN3_length 2 11127struct GFX9_SO_NUM_PRIMS_WRITTEN3 { 11128 uint64_t NumPrimsWrittenCount; 11129}; 11130 11131static inline __attribute__((always_inline)) void 11132GFX9_SO_NUM_PRIMS_WRITTEN3_pack(__attribute__((unused)) __gen_user_data *data, 11133 __attribute__((unused)) void * restrict dst, 11134 __attribute__((unused)) const struct GFX9_SO_NUM_PRIMS_WRITTEN3 * restrict values) 11135{ 11136 uint32_t * restrict dw = (uint32_t * restrict) dst; 11137 11138 const uint64_t v0 = 11139 __gen_uint(values->NumPrimsWrittenCount, 0, 63); 11140 dw[0] = v0; 11141 dw[1] = v0 >> 32; 11142} 11143 11144#define GFX9_SO_PRIM_STORAGE_NEEDED0_num 0x5240 11145#define GFX9_SO_PRIM_STORAGE_NEEDED0_length 2 11146struct GFX9_SO_PRIM_STORAGE_NEEDED0 { 11147 uint64_t PrimStorageNeededCount; 11148}; 11149 11150static inline __attribute__((always_inline)) void 11151GFX9_SO_PRIM_STORAGE_NEEDED0_pack(__attribute__((unused)) __gen_user_data *data, 11152 __attribute__((unused)) void * restrict dst, 11153 __attribute__((unused)) const struct GFX9_SO_PRIM_STORAGE_NEEDED0 * restrict values) 11154{ 11155 uint32_t * restrict dw = (uint32_t * restrict) dst; 11156 11157 const uint64_t v0 = 11158 __gen_uint(values->PrimStorageNeededCount, 0, 63); 11159 dw[0] = v0; 11160 dw[1] = v0 >> 32; 11161} 11162 11163#define GFX9_SO_PRIM_STORAGE_NEEDED1_num 0x5248 11164#define GFX9_SO_PRIM_STORAGE_NEEDED1_length 2 11165struct GFX9_SO_PRIM_STORAGE_NEEDED1 { 11166 uint64_t PrimStorageNeededCount; 11167}; 11168 11169static inline __attribute__((always_inline)) void 11170GFX9_SO_PRIM_STORAGE_NEEDED1_pack(__attribute__((unused)) __gen_user_data *data, 11171 __attribute__((unused)) void * restrict dst, 11172 __attribute__((unused)) const struct GFX9_SO_PRIM_STORAGE_NEEDED1 * restrict values) 11173{ 11174 uint32_t * restrict dw = (uint32_t * restrict) dst; 11175 11176 const uint64_t v0 = 11177 __gen_uint(values->PrimStorageNeededCount, 0, 63); 11178 dw[0] = v0; 11179 dw[1] = v0 >> 32; 11180} 11181 11182#define GFX9_SO_PRIM_STORAGE_NEEDED2_num 0x5250 11183#define GFX9_SO_PRIM_STORAGE_NEEDED2_length 2 11184struct GFX9_SO_PRIM_STORAGE_NEEDED2 { 11185 uint64_t PrimStorageNeededCount; 11186}; 11187 11188static inline __attribute__((always_inline)) void 11189GFX9_SO_PRIM_STORAGE_NEEDED2_pack(__attribute__((unused)) __gen_user_data *data, 11190 __attribute__((unused)) void * restrict dst, 11191 __attribute__((unused)) const struct GFX9_SO_PRIM_STORAGE_NEEDED2 * restrict values) 11192{ 11193 uint32_t * restrict dw = (uint32_t * restrict) dst; 11194 11195 const uint64_t v0 = 11196 __gen_uint(values->PrimStorageNeededCount, 0, 63); 11197 dw[0] = v0; 11198 dw[1] = v0 >> 32; 11199} 11200 11201#define GFX9_SO_PRIM_STORAGE_NEEDED3_num 0x5258 11202#define GFX9_SO_PRIM_STORAGE_NEEDED3_length 2 11203struct GFX9_SO_PRIM_STORAGE_NEEDED3 { 11204 uint64_t PrimStorageNeededCount; 11205}; 11206 11207static inline __attribute__((always_inline)) void 11208GFX9_SO_PRIM_STORAGE_NEEDED3_pack(__attribute__((unused)) __gen_user_data *data, 11209 __attribute__((unused)) void * restrict dst, 11210 __attribute__((unused)) const struct GFX9_SO_PRIM_STORAGE_NEEDED3 * restrict values) 11211{ 11212 uint32_t * restrict dw = (uint32_t * restrict) dst; 11213 11214 const uint64_t v0 = 11215 __gen_uint(values->PrimStorageNeededCount, 0, 63); 11216 dw[0] = v0; 11217 dw[1] = v0 >> 32; 11218} 11219 11220#define GFX9_SO_WRITE_OFFSET0_num 0x5280 11221#define GFX9_SO_WRITE_OFFSET0_length 1 11222struct GFX9_SO_WRITE_OFFSET0 { 11223 uint64_t WriteOffset; 11224}; 11225 11226static inline __attribute__((always_inline)) void 11227GFX9_SO_WRITE_OFFSET0_pack(__attribute__((unused)) __gen_user_data *data, 11228 __attribute__((unused)) void * restrict dst, 11229 __attribute__((unused)) const struct GFX9_SO_WRITE_OFFSET0 * restrict values) 11230{ 11231 uint32_t * restrict dw = (uint32_t * restrict) dst; 11232 11233 dw[0] = 11234 __gen_offset(values->WriteOffset, 2, 31); 11235} 11236 11237#define GFX9_SO_WRITE_OFFSET1_num 0x5284 11238#define GFX9_SO_WRITE_OFFSET1_length 1 11239struct GFX9_SO_WRITE_OFFSET1 { 11240 uint64_t WriteOffset; 11241}; 11242 11243static inline __attribute__((always_inline)) void 11244GFX9_SO_WRITE_OFFSET1_pack(__attribute__((unused)) __gen_user_data *data, 11245 __attribute__((unused)) void * restrict dst, 11246 __attribute__((unused)) const struct GFX9_SO_WRITE_OFFSET1 * restrict values) 11247{ 11248 uint32_t * restrict dw = (uint32_t * restrict) dst; 11249 11250 dw[0] = 11251 __gen_offset(values->WriteOffset, 2, 31); 11252} 11253 11254#define GFX9_SO_WRITE_OFFSET2_num 0x5288 11255#define GFX9_SO_WRITE_OFFSET2_length 1 11256struct GFX9_SO_WRITE_OFFSET2 { 11257 uint64_t WriteOffset; 11258}; 11259 11260static inline __attribute__((always_inline)) void 11261GFX9_SO_WRITE_OFFSET2_pack(__attribute__((unused)) __gen_user_data *data, 11262 __attribute__((unused)) void * restrict dst, 11263 __attribute__((unused)) const struct GFX9_SO_WRITE_OFFSET2 * restrict values) 11264{ 11265 uint32_t * restrict dw = (uint32_t * restrict) dst; 11266 11267 dw[0] = 11268 __gen_offset(values->WriteOffset, 2, 31); 11269} 11270 11271#define GFX9_SO_WRITE_OFFSET3_num 0x528c 11272#define GFX9_SO_WRITE_OFFSET3_length 1 11273struct GFX9_SO_WRITE_OFFSET3 { 11274 uint64_t WriteOffset; 11275}; 11276 11277static inline __attribute__((always_inline)) void 11278GFX9_SO_WRITE_OFFSET3_pack(__attribute__((unused)) __gen_user_data *data, 11279 __attribute__((unused)) void * restrict dst, 11280 __attribute__((unused)) const struct GFX9_SO_WRITE_OFFSET3 * restrict values) 11281{ 11282 uint32_t * restrict dw = (uint32_t * restrict) dst; 11283 11284 dw[0] = 11285 __gen_offset(values->WriteOffset, 2, 31); 11286} 11287 11288#define GFX9_VCS2_RING_BUFFER_CTL_num 0x1203c 11289#define GFX9_VCS2_RING_BUFFER_CTL_length 1 11290struct GFX9_VCS2_RING_BUFFER_CTL { 11291 bool RingBufferEnable; 11292 uint32_t AutomaticReportHeadPointer; 11293#define MI_AUTOREPORT_OFF 0 11294#define MI_AUTOREPORT_64KB 1 11295#define MI_AUTOREPORT_4KB 2 11296#define MI_AUTOREPORT_128KB 3 11297 bool DisableRegisterAccesses; 11298 bool SemaphoreWait; 11299 bool RBWait; 11300 uint32_t BufferLengthinpages1; 11301}; 11302 11303static inline __attribute__((always_inline)) void 11304GFX9_VCS2_RING_BUFFER_CTL_pack(__attribute__((unused)) __gen_user_data *data, 11305 __attribute__((unused)) void * restrict dst, 11306 __attribute__((unused)) const struct GFX9_VCS2_RING_BUFFER_CTL * restrict values) 11307{ 11308 uint32_t * restrict dw = (uint32_t * restrict) dst; 11309 11310 dw[0] = 11311 __gen_uint(values->RingBufferEnable, 0, 0) | 11312 __gen_uint(values->AutomaticReportHeadPointer, 1, 2) | 11313 __gen_uint(values->DisableRegisterAccesses, 8, 8) | 11314 __gen_uint(values->SemaphoreWait, 10, 10) | 11315 __gen_uint(values->RBWait, 11, 11) | 11316 __gen_uint(values->BufferLengthinpages1, 12, 20); 11317} 11318 11319#define GFX9_VCS_ACTHD_UDW_num 0x1205c 11320#define GFX9_VCS_ACTHD_UDW_length 1 11321struct GFX9_VCS_ACTHD_UDW { 11322 uint32_t HeadPointerUpperDWORD; 11323}; 11324 11325static inline __attribute__((always_inline)) void 11326GFX9_VCS_ACTHD_UDW_pack(__attribute__((unused)) __gen_user_data *data, 11327 __attribute__((unused)) void * restrict dst, 11328 __attribute__((unused)) const struct GFX9_VCS_ACTHD_UDW * restrict values) 11329{ 11330 uint32_t * restrict dw = (uint32_t * restrict) dst; 11331 11332 dw[0] = 11333 __gen_uint(values->HeadPointerUpperDWORD, 0, 15); 11334} 11335 11336#define GFX9_VCS_INSTDONE_num 0x1206c 11337#define GFX9_VCS_INSTDONE_length 1 11338struct GFX9_VCS_INSTDONE { 11339 bool RingEnable; 11340 bool USBDone; 11341 bool QRCDone; 11342 bool SECDone; 11343 bool MPCDone; 11344 bool VFTDone; 11345 bool BSPDone; 11346 bool VLFDone; 11347 bool VOPDone; 11348 bool VMCDone; 11349 bool VIPDone; 11350 bool VITDone; 11351 bool VDSDone; 11352 bool VMXDone; 11353 bool VCPDone; 11354 bool VCDDone; 11355 bool VADDone; 11356 bool VMDDone; 11357 bool VISDone; 11358 bool VACDone; 11359 bool VAMDone; 11360 bool JPGDone; 11361 bool VBPDone; 11362 bool VHRDone; 11363 bool VCIDone; 11364 bool VCRDone; 11365 bool VINDone; 11366 bool VPRDone; 11367 bool VTQDone; 11368 bool Reserved; 11369 bool VCSDone; 11370 bool GACDone; 11371}; 11372 11373static inline __attribute__((always_inline)) void 11374GFX9_VCS_INSTDONE_pack(__attribute__((unused)) __gen_user_data *data, 11375 __attribute__((unused)) void * restrict dst, 11376 __attribute__((unused)) const struct GFX9_VCS_INSTDONE * restrict values) 11377{ 11378 uint32_t * restrict dw = (uint32_t * restrict) dst; 11379 11380 dw[0] = 11381 __gen_uint(values->RingEnable, 0, 0) | 11382 __gen_uint(values->USBDone, 1, 1) | 11383 __gen_uint(values->QRCDone, 2, 2) | 11384 __gen_uint(values->SECDone, 3, 3) | 11385 __gen_uint(values->MPCDone, 4, 4) | 11386 __gen_uint(values->VFTDone, 5, 5) | 11387 __gen_uint(values->BSPDone, 6, 6) | 11388 __gen_uint(values->VLFDone, 7, 7) | 11389 __gen_uint(values->VOPDone, 8, 8) | 11390 __gen_uint(values->VMCDone, 9, 9) | 11391 __gen_uint(values->VIPDone, 10, 10) | 11392 __gen_uint(values->VITDone, 11, 11) | 11393 __gen_uint(values->VDSDone, 12, 12) | 11394 __gen_uint(values->VMXDone, 13, 13) | 11395 __gen_uint(values->VCPDone, 14, 14) | 11396 __gen_uint(values->VCDDone, 15, 15) | 11397 __gen_uint(values->VADDone, 16, 16) | 11398 __gen_uint(values->VMDDone, 17, 17) | 11399 __gen_uint(values->VISDone, 18, 18) | 11400 __gen_uint(values->VACDone, 19, 19) | 11401 __gen_uint(values->VAMDone, 20, 20) | 11402 __gen_uint(values->JPGDone, 21, 21) | 11403 __gen_uint(values->VBPDone, 22, 22) | 11404 __gen_uint(values->VHRDone, 23, 23) | 11405 __gen_uint(values->VCIDone, 24, 24) | 11406 __gen_uint(values->VCRDone, 25, 25) | 11407 __gen_uint(values->VINDone, 26, 26) | 11408 __gen_uint(values->VPRDone, 27, 27) | 11409 __gen_uint(values->VTQDone, 28, 28) | 11410 __gen_uint(values->Reserved, 29, 29) | 11411 __gen_uint(values->VCSDone, 30, 30) | 11412 __gen_uint(values->GACDone, 31, 31); 11413} 11414 11415#define GFX9_VCS_RING_BUFFER_CTL_num 0x1203c 11416#define GFX9_VCS_RING_BUFFER_CTL_length 1 11417struct GFX9_VCS_RING_BUFFER_CTL { 11418 bool RingBufferEnable; 11419 uint32_t AutomaticReportHeadPointer; 11420#define MI_AUTOREPORT_OFF 0 11421#define MI_AUTOREPORT_64KB 1 11422#define MI_AUTOREPORT_4KB 2 11423#define MI_AUTOREPORT_128KB 3 11424 bool DisableRegisterAccesses; 11425 bool SemaphoreWait; 11426 bool RBWait; 11427 uint32_t BufferLengthinpages1; 11428}; 11429 11430static inline __attribute__((always_inline)) void 11431GFX9_VCS_RING_BUFFER_CTL_pack(__attribute__((unused)) __gen_user_data *data, 11432 __attribute__((unused)) void * restrict dst, 11433 __attribute__((unused)) const struct GFX9_VCS_RING_BUFFER_CTL * restrict values) 11434{ 11435 uint32_t * restrict dw = (uint32_t * restrict) dst; 11436 11437 dw[0] = 11438 __gen_uint(values->RingBufferEnable, 0, 0) | 11439 __gen_uint(values->AutomaticReportHeadPointer, 1, 2) | 11440 __gen_uint(values->DisableRegisterAccesses, 8, 8) | 11441 __gen_uint(values->SemaphoreWait, 10, 10) | 11442 __gen_uint(values->RBWait, 11, 11) | 11443 __gen_uint(values->BufferLengthinpages1, 12, 20); 11444} 11445 11446#define GFX9_VECS_ACTHD_UDW_num 0x1a05c 11447#define GFX9_VECS_ACTHD_UDW_length 1 11448struct GFX9_VECS_ACTHD_UDW { 11449 uint32_t HeadPointerUpperDWORD; 11450}; 11451 11452static inline __attribute__((always_inline)) void 11453GFX9_VECS_ACTHD_UDW_pack(__attribute__((unused)) __gen_user_data *data, 11454 __attribute__((unused)) void * restrict dst, 11455 __attribute__((unused)) const struct GFX9_VECS_ACTHD_UDW * restrict values) 11456{ 11457 uint32_t * restrict dw = (uint32_t * restrict) dst; 11458 11459 dw[0] = 11460 __gen_uint(values->HeadPointerUpperDWORD, 0, 15); 11461} 11462 11463#define GFX9_VECS_INSTDONE_num 0x1a06c 11464#define GFX9_VECS_INSTDONE_length 1 11465struct GFX9_VECS_INSTDONE { 11466 bool RingEnable; 11467 bool VECSDone; 11468 bool GAMDone; 11469}; 11470 11471static inline __attribute__((always_inline)) void 11472GFX9_VECS_INSTDONE_pack(__attribute__((unused)) __gen_user_data *data, 11473 __attribute__((unused)) void * restrict dst, 11474 __attribute__((unused)) const struct GFX9_VECS_INSTDONE * restrict values) 11475{ 11476 uint32_t * restrict dw = (uint32_t * restrict) dst; 11477 11478 dw[0] = 11479 __gen_uint(values->RingEnable, 0, 0) | 11480 __gen_uint(values->VECSDone, 30, 30) | 11481 __gen_uint(values->GAMDone, 31, 31); 11482} 11483 11484#define GFX9_VECS_RING_BUFFER_CTL_num 0x1a03c 11485#define GFX9_VECS_RING_BUFFER_CTL_length 1 11486struct GFX9_VECS_RING_BUFFER_CTL { 11487 bool RingBufferEnable; 11488 uint32_t AutomaticReportHeadPointer; 11489#define MI_AUTOREPORT_OFF 0 11490#define MI_AUTOREPORT_64KB 1 11491#define MI_AUTOREPORT_4KB 2 11492#define MI_AUTOREPORT_128KB 3 11493 bool DisableRegisterAccesses; 11494 bool SemaphoreWait; 11495 bool RBWait; 11496 uint32_t BufferLengthinpages1; 11497}; 11498 11499static inline __attribute__((always_inline)) void 11500GFX9_VECS_RING_BUFFER_CTL_pack(__attribute__((unused)) __gen_user_data *data, 11501 __attribute__((unused)) void * restrict dst, 11502 __attribute__((unused)) const struct GFX9_VECS_RING_BUFFER_CTL * restrict values) 11503{ 11504 uint32_t * restrict dw = (uint32_t * restrict) dst; 11505 11506 dw[0] = 11507 __gen_uint(values->RingBufferEnable, 0, 0) | 11508 __gen_uint(values->AutomaticReportHeadPointer, 1, 2) | 11509 __gen_uint(values->DisableRegisterAccesses, 8, 8) | 11510 __gen_uint(values->SemaphoreWait, 10, 10) | 11511 __gen_uint(values->RBWait, 11, 11) | 11512 __gen_uint(values->BufferLengthinpages1, 12, 20); 11513} 11514 11515#define GFX9_VS_INVOCATION_COUNT_num 0x2320 11516#define GFX9_VS_INVOCATION_COUNT_length 2 11517struct GFX9_VS_INVOCATION_COUNT { 11518 uint64_t VSInvocationCountReport; 11519}; 11520 11521static inline __attribute__((always_inline)) void 11522GFX9_VS_INVOCATION_COUNT_pack(__attribute__((unused)) __gen_user_data *data, 11523 __attribute__((unused)) void * restrict dst, 11524 __attribute__((unused)) const struct GFX9_VS_INVOCATION_COUNT * restrict values) 11525{ 11526 uint32_t * restrict dw = (uint32_t * restrict) dst; 11527 11528 const uint64_t v0 = 11529 __gen_uint(values->VSInvocationCountReport, 0, 63); 11530 dw[0] = v0; 11531 dw[1] = v0 >> 32; 11532} 11533 11534#endif /* GFX9_PACK_H */ 11535