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