1 /*========================== begin_copyright_notice ============================ 2 3 Copyright (C) 2017-2021 Intel Corporation 4 5 SPDX-License-Identifier: MIT 6 7 ============================= end_copyright_notice ===========================*/ 8 9 #pragma once 10 11 #include "cmd_media_enum_g8.h" 12 13 // Set packing alignment to a single byte 14 #pragma pack(1) 15 16 namespace G6HWC 17 { 18 19 /*****************************************************************************\ 20 STRUCT: SMediaStateInterfaceDescriptorData (INTERFACE_DESCRIPTOR_DATA) 21 \*****************************************************************************/ 22 struct SMediaStateInterfaceDescriptorData 23 { 24 // DWORD 0 25 union _DW0 26 { 27 struct _All 28 { 29 DWORD _Unused : BITFIELD_RANGE( 0, 5 ); 30 DWORD KernelStartPointer : BITFIELD_RANGE( 6, 31 ); // GTT[31:6] 31 } All; 32 33 DWORD Value; 34 } DW0; 35 36 // DWORD 1 37 union _DW1 38 { 39 struct _All 40 { 41 DWORD _Unused1 : BITFIELD_RANGE( 0, 6 ); 42 DWORD SoftwareExceptionEnable : BITFIELD_BIT( 7 ); // bool 43 DWORD _Unused2 : BITFIELD_RANGE( 8, 10 ); 44 DWORD MaskStackExceptionEnable : BITFIELD_BIT( 11 ); // bool 45 DWORD _Unused3 : BITFIELD_BIT( 12 ); 46 DWORD IllegalOpcodeExceptionEnable : BITFIELD_BIT( 13 ); // bool 47 DWORD _Unused4 : BITFIELD_RANGE( 14, 15 ); 48 DWORD FloatingPointMode : BITFIELD_BIT( 16 ); // GFXMEDIASTATE_FLOATING_POINT_MODE 49 DWORD ThreadPriority : BITFIELD_BIT( 17 ); // GFXMEDIASTATE_THREAD_PRIORITY 50 DWORD SingleProgramFlow : BITFIELD_BIT( 18 ); // GFXMEDIASTATE_SINGLE_PROGRAM_FLOW 51 DWORD _Unused5 : BITFIELD_BIT( 19 ); 52 DWORD _Unused6 : BITFIELD_RANGE( 20, 25 ); // U6 [0,63] 53 DWORD _Unused7 : BITFIELD_RANGE( 26, 31 ); // U6 [0,63] 54 } All; 55 56 struct _Gen8 57 { 58 DWORD Kernel64bitStartPointer : BITFIELD_RANGE( 0, 15 ); // GTT[47:32] 59 DWORD _Unused : BITFIELD_RANGE( 16, 31 ); // Reserved 60 } Gen8; 61 62 DWORD Value; 63 } DW1; 64 65 // DWORD 2 66 union _DW2 67 { 68 struct _All 69 { 70 DWORD _Unused : BITFIELD_RANGE( 0, 1 ); 71 DWORD SamplerCount : BITFIELD_RANGE( 2, 4 ); // U3 [0,4] 72 DWORD SamplerStatePointer : BITFIELD_RANGE( 5, 31 ); // GTT[31:5] 73 } All; 74 75 struct _Gen8 76 { 77 DWORD _Unused1 : BITFIELD_RANGE( 0, 6 ); 78 DWORD SoftwareExceptionEnable : BITFIELD_BIT( 7 ); // bool 79 DWORD _Unused2 : BITFIELD_RANGE( 8, 10 ); 80 DWORD MaskStackExceptionEnable : BITFIELD_BIT( 11 ); // bool 81 DWORD _Unused3 : BITFIELD_BIT( 12 ); 82 DWORD IllegalOpcodeExceptionEnable : BITFIELD_BIT( 13 ); // bool 83 DWORD _Unused4 : BITFIELD_RANGE( 14, 15 ); 84 DWORD FloatingPointMode : BITFIELD_BIT( 16 ); // GFXMEDIASTATE_FLOATING_POINT_MODE 85 DWORD ThreadPriority : BITFIELD_BIT( 17 ); // GFXMEDIASTATE_THREAD_PRIORITY 86 DWORD SingleProgramFlow : BITFIELD_BIT( 18 ); // GFXMEDIASTATE_SINGLE_PROGRAM_FLOW 87 DWORD DenormMode : BITFIELD_BIT( 19 ); // U1 [0,1] 88 DWORD _Unused5 : BITFIELD_RANGE( 20, 31 ); // Reserved 89 } Gen8; 90 91 DWORD Value; 92 } DW2; 93 94 // DWORD 3 95 union _DW3 96 { 97 struct _All 98 { 99 DWORD BindingTableEntryCount : BITFIELD_RANGE( 0, 4 ); // U5 [0,5] 100 DWORD BindingTablePointer : BITFIELD_RANGE( 5, 31 ); // GTT[31:5] 101 } All; 102 103 struct _Gen8 104 { 105 DWORD _Unused : BITFIELD_RANGE( 0, 1 ); // Reserved 106 DWORD SamplerCount : BITFIELD_RANGE( 2, 4 ); // U3 [0,4] 107 DWORD SamplerStatePointer : BITFIELD_RANGE( 5, 31 ); // GTT[31:5] 108 } Gen8; 109 110 DWORD Value; 111 } DW3; 112 113 // DWORD 4 114 union _DW4 115 { 116 struct _All 117 { 118 DWORD ConstantURBEntryReadOffset : BITFIELD_RANGE( 0, 15 ); 119 DWORD ConstantURBEntryReadLength : BITFIELD_RANGE( 16, 31 ); 120 } All; 121 122 struct _Gen8 123 { 124 DWORD BindingTableEntryCount : BITFIELD_RANGE( 0, 4 ); // U5 [0,31] 125 DWORD BindingTablePointer : BITFIELD_RANGE( 5, 15 ); // GTT[15:5] 126 DWORD _Unused : BITFIELD_RANGE( 16, 31 ); // Reserved 127 } Gen8; 128 129 DWORD Value; 130 } DW4; 131 132 // DWORD 5 133 union _DW5 134 { 135 struct _All 136 { 137 DWORD BarrierId : BITFIELD_RANGE( 0, 3 ); 138 DWORD _Unused : BITFIELD_RANGE( 4, 31); 139 } All; 140 141 struct _Gen7 142 { 143 DWORD NumberOfThreadsInThreadGroup : BITFIELD_RANGE( 0, 7 ); // U8 144 DWORD _Unused1 : BITFIELD_RANGE( 8, 15 ); 145 DWORD SharedLocalMemorySize : BITFIELD_RANGE( 16, 20 ); // U5 146 DWORD BarrierEnable : BITFIELD_BIT( 21 ); // bool 147 DWORD RoundingMode : BITFIELD_RANGE( 22, 23 ); // U2 148 DWORD _Unused2 : BITFIELD_RANGE( 24, 31 ); 149 } Gen7; 150 151 struct _Gen8 152 { 153 DWORD ConstantURBEntryReadOffset : BITFIELD_RANGE( 0, 15 ); 154 DWORD ConstantURBEntryReadLength : BITFIELD_RANGE( 16, 31 ); 155 } Gen8; 156 157 DWORD Value; 158 } DW5; 159 160 // DWORD 6 161 union _DW6 162 { 163 struct _Gen7_5 164 { 165 DWORD CrossThreadConstantDataReadLength : BITFIELD_RANGE( 0, 7 ); // U8 166 DWORD _Unused : BITFIELD_RANGE( 8, 31 ); 167 } Gen7_5; 168 169 struct _Gen8 170 { 171 DWORD NumberOfThreadsInThreadGroup : BITFIELD_RANGE( 0, 9 ); // U9 172 DWORD _Unused1 : BITFIELD_RANGE( 10, 14 ); // Reserved 173 DWORD GlobalBarrierEnable : BITFIELD_BIT( 15 ); // bool 174 DWORD SharedLocalMemorySize : BITFIELD_RANGE( 16, 20 ); // U5 175 DWORD BarrierEnable : BITFIELD_BIT( 21 ); // bool 176 DWORD RoundingMode : BITFIELD_RANGE( 22, 23 ); // U2 177 DWORD _Unused2 : BITFIELD_RANGE( 24, 31 ); // Reserved 178 } Gen8; 179 180 DWORD Value; 181 } DW6; 182 183 // DWORD 7 184 union _DW7 185 { 186 struct _Gen8 187 { 188 DWORD CrossThreadConstantDataReadLength : BITFIELD_RANGE( 0, 7 ); // U8 189 DWORD _Unused : BITFIELD_RANGE( 8, 31 ); // Reserved 190 } Gen8; 191 192 DWORD Value; 193 } DW7; 194 }; 195 196 static_assert(SIZE32(SMediaStateInterfaceDescriptorData) == 8); 197 198 /*****************************************************************************\ 199 STRUCT: SMediaStateMediaInterfaceDescriptorLoad (MEDIA_INTERFACE_DESCRIPTOR_LOAD) 200 \*****************************************************************************/ 201 struct SMediaStateMediaInterfaceDescriptorLoad 202 { 203 union _DW0 204 { 205 struct _All 206 { 207 DWORD Length : BITFIELD_RANGE( 0, 15 ); // OP_LENGTH (exclude dw0,dw1) 208 DWORD InstructionSubOpcode : BITFIELD_RANGE( 16, 23 ); // GFX_MEDIA_PIPELINED_SUBOPCODE 209 DWORD InstructionOpcode : BITFIELD_RANGE( 24, 26 ); // GFX_OPCODE 210 DWORD InstructionSubType : BITFIELD_RANGE( 27, 28 ); // INSTRUCTION_SUBTYPE 211 DWORD InstructionType : BITFIELD_RANGE( 29, 31 ); // INSTRUCTION_TYPE 212 } All; 213 214 DWORD Value; 215 } DW0; 216 217 // DWORD 1 218 union _DW1 219 { 220 DWORD Value; 221 } DW1; 222 223 // DWORD 2 224 union _DW2 225 { 226 struct _All 227 { 228 DWORD InterfaceDescriptorTotalLength : BITFIELD_RANGE( 0, 16 ); 229 DWORD _Unused : BITFIELD_RANGE( 17, 31 ); 230 } All; 231 232 DWORD Value; 233 } DW2; 234 235 // DWORD 3 236 union _DW3 237 { 238 struct _All 239 { 240 DWORD InterfaceDescriptorDataStartAddress : BITFIELD_RANGE( 0, 31 ); 241 } All; 242 243 DWORD Value; 244 } DW3; 245 }; 246 247 static_assert(SIZE32(SMediaStateMediaInterfaceDescriptorLoad) == 4); 248 249 /*****************************************************************************\ 250 STRUCT: SMediaStateMediaVFEState (MEDIA_VFE_STATE) 251 \*****************************************************************************/ 252 struct SMediaStateMediaVFEState 253 { 254 // DWORD 0 255 union _DW0 256 { 257 struct _All 258 { 259 DWORD Length : BITFIELD_RANGE( 0, 15 ); // OP_LENGTH (exclude dw0,dw1) 260 DWORD InstructionSubOpcode : BITFIELD_RANGE( 16, 23 ); // GFX_MEDIA_PIPELINED_SUBOPCODE 261 DWORD InstructionOpcode : BITFIELD_RANGE( 24, 26 ); // GFX_OPCODE 262 DWORD InstructionSubType : BITFIELD_RANGE( 27, 28 ); // INSTRUCTION_SUBTYPE 263 DWORD InstructionType : BITFIELD_RANGE( 29, 31 ); // INSTRUCTION_TYPE 264 } All; 265 266 DWORD Value; 267 } DW0; 268 269 // DWORD 1 270 union _DW1 271 { 272 struct _All 273 { 274 DWORD PerThreadScratchSpace : BITFIELD_RANGE( 0, 3 ); // U4 [0, 11] -> [1k, 12k] 275 DWORD StackSize : BITFIELD_RANGE( 4, 7 ); // U4 [0, 11] -> [1k, 2MB] 276 DWORD _Unused : BITFIELD_RANGE( 8, 9 ); // reserved 277 DWORD ScratchSpaceBasePointer : BITFIELD_RANGE( 10, 31 ); // GTT[31:10] 278 } All; 279 280 DWORD Value; 281 } DW1; 282 283 // DWORD 2 284 union _DW2 285 { 286 struct _All 287 { 288 DWORD DebugCounterControl : BITFIELD_RANGE( 0, 1 ); // GFXMEDIASTATE_DEBUG_COUNTER_CONTROL 289 DWORD _Unused : BITFIELD_RANGE( 2, 4 ); 290 DWORD FastPreempt : BITFIELD_BIT( 5 ); // bool 291 DWORD BypassGatewayControl : BITFIELD_BIT( 6 ); // bool 292 DWORD ResetGatewayTimer : BITFIELD_BIT( 7 ); // bool 293 DWORD NumberOfURBEntries : BITFIELD_RANGE( 8, 15 ); // U8 [0,64] 294 DWORD MaximumNumberOfThreads : BITFIELD_RANGE( 16, 31 ); // U16 = thread count -1 295 } All; 296 297 struct _Gen7 298 { 299 DWORD DebugCounterControl : BITFIELD_RANGE( 0, 1 ); // GFXMEDIA_DEBUG_COUNTER_CONTROL 300 DWORD GPGPUMode : BITFIELD_BIT( 2 ); // GFXMEDIA_GPGPU_MODE 301 DWORD GatewayMMIOAccessControl : BITFIELD_RANGE( 3, 4 ); // GFXMEDIA_MMIO_ACCESS_CONTROL 302 DWORD FastPreemptEnable : BITFIELD_BIT( 5 ); // bool 303 DWORD BypassGatewayControl : BITFIELD_BIT( 6 ); 304 DWORD ResetGatewayTimer : BITFIELD_BIT( 7 ); 305 DWORD NumberofURBEntries : BITFIELD_RANGE( 8, 15 ); // U8 306 DWORD MaximumNumberOfThreads : BITFIELD_RANGE( 16, 31 ); // U4 307 } Gen7; 308 309 struct _Gen8 310 { 311 DWORD ScratchSpace64bitBasePointer : BITFIELD_RANGE( 0, 15 ); // GTT[47:32] 312 DWORD _Unused : BITFIELD_RANGE( 16, 31 ); // reserved 313 } Gen8; 314 315 DWORD Value; 316 } DW2; 317 318 // DWORD 3 319 union _DW3 320 { 321 struct _All 322 { 323 DWORD _Unused : BITFIELD_RANGE( 0, 7 ); 324 DWORD ObjectId : BITFIELD_RANGE( 8, 31 ); 325 } All; 326 327 struct _Gen8 328 { 329 DWORD DebugCounterControl : BITFIELD_RANGE( 0, 1 ); // GFXMEDIA_DEBUG_COUNTER_CONTROL 330 DWORD GPGPUMode : BITFIELD_BIT( 2 ); // GPGPUMode 331 DWORD GatewayMMIOAccessControl : BITFIELD_RANGE( 3, 4 ); // GFXMEDIA_MMIO_ACCESS_CONTROL 332 DWORD FastPreemptEnable : BITFIELD_BIT( 5 ); // bool 333 DWORD BypassGatewayControl : BITFIELD_BIT( 6 ); 334 DWORD ResetGatewayTimer : BITFIELD_BIT( 7 ); 335 DWORD NumberofURBEntries : BITFIELD_RANGE( 8, 15 ); // U8 336 DWORD MaximumNumberOfThreads : BITFIELD_RANGE( 16, 31 ); // U4 337 } Gen8; 338 339 struct _Gen9 340 { 341 DWORD DebugCounterControl : BITFIELD_RANGE( 0, 1 ); // GFXMEDIA_DEBUG_COUNTER_CONTROL 342 DWORD SLMGranularity : BITFIELD_BIT( 2 ); // GFXMEDIASTATE_SLMGranularity 343 DWORD GatewayMMIOAccessControl : BITFIELD_RANGE( 3, 4 ); // GFXMEDIA_MMIO_ACCESS_CONTROL 344 DWORD _Unused : BITFIELD_BIT( 5 ); // reserved 345 DWORD BypassGatewayControl : BITFIELD_BIT( 6 ); 346 DWORD ResetGatewayTimer : BITFIELD_BIT( 7 ); 347 DWORD NumberofURBEntries : BITFIELD_RANGE( 8, 15 ); // U8 348 DWORD MaximumNumberOfThreads : BITFIELD_RANGE( 16, 31 ); // U4 349 } Gen9; 350 351 DWORD Value; 352 } DW3; 353 354 // DWORD 4 355 union _DW4 356 { 357 struct _All 358 { 359 DWORD CURBEAllocationSize : BITFIELD_RANGE( 0, 15 ); // U9 [0, 2048] 360 DWORD URBEntryAllocationSize : BITFIELD_RANGE( 16, 31 ); // U9 [0, 2048] 361 } All; 362 363 struct _Gen8 364 { 365 DWORD _Unused : BITFIELD_RANGE( 0, 7 ); // reserved 366 DWORD ObjectID : BITFIELD_RANGE( 8, 31 ); 367 } Gen8; 368 369 struct _Gen10 370 { 371 DWORD SliceDisable : BITFIELD_RANGE( 0, 1 ); 372 DWORD FlushOnBarriers : BITFIELD_RANGE( 2, 3 ); 373 DWORD _Unused : BITFIELD_RANGE( 4, 7 ); // reserved 374 DWORD ObjectID : BITFIELD_RANGE( 8, 31 ); 375 } Gen10; 376 377 DWORD Value; 378 } DW4; 379 380 // DWORD 5 381 union _DW5 382 { 383 struct _All 384 { 385 DWORD ScoreboardMask : BITFIELD_RANGE( 0, 7 ); // 8 bits for score 0 to 7 386 DWORD _Unused : BITFIELD_RANGE( 8, 29 ); 387 DWORD ScoreBoardType : BITFIELD_BIT( 30 ); // GFXMEDIASTATE_SCOREBOARD_TYPE 388 DWORD ScoreBoardEnable : BITFIELD_BIT( 31 ); // bool 389 } All; 390 391 struct _Gen8 392 { 393 DWORD CURBEAllocationSize : BITFIELD_RANGE( 0, 15 ); // U9 [0, 2048] 394 DWORD URBEntryAllocationSize : BITFIELD_RANGE( 16, 31 ); // U9 [0, 2048] 395 } Gen8; 396 397 DWORD Value; 398 } DW5; 399 400 // DWORD 6 401 union _DW6 402 { 403 struct _All 404 { 405 DWORD ScoreboardDeltaX0 : BITFIELD_RANGE( 0, 3 ); // s3 406 DWORD ScoreboardDeltaY0 : BITFIELD_RANGE( 4, 7 ); // s3 407 DWORD ScoreboardDeltaX1 : BITFIELD_RANGE( 8, 11 ); // s3 408 DWORD ScoreboardDeltaY1 : BITFIELD_RANGE( 12, 15 ); // s3 409 DWORD ScoreboardDeltaX2 : BITFIELD_RANGE( 16, 19 ); // s3 410 DWORD ScoreboardDeltaY2 : BITFIELD_RANGE( 20, 23 ); // s3 411 DWORD ScoreboardDeltaX3 : BITFIELD_RANGE( 24, 27 ); // s3 412 DWORD ScoreboardDeltaY3 : BITFIELD_RANGE( 28, 31 ); // s3 413 } All; 414 415 struct _Gen8 416 { 417 DWORD ScoreboardMask : BITFIELD_RANGE( 0, 7 ); // 8 bits for score 0 to 7 418 DWORD _Unused : BITFIELD_RANGE( 8, 29 ); 419 DWORD ScoreBoardType : BITFIELD_BIT( 30 ); // GFXMEDIASTATE_SCOREBOARD_TYPE 420 DWORD ScoreBoardEnable : BITFIELD_BIT( 31 ); // bool 421 } Gen8; 422 423 struct _Gen10 424 { 425 DWORD ScoreboardMask : BITFIELD_RANGE( 0, 7 ); // 8 bits for score 0 to 7 426 DWORD NumMediaObjPerPreEmptionCheckpoint : BITFIELD_RANGE( 8, 15 ); // how many MEDIA_OBJECT commands are executed between checkpoints for pre-emption. 427 DWORD _Unused : BITFIELD_RANGE( 16, 29 ); 428 DWORD ScoreBoardType : BITFIELD_BIT( 30 ); // GFXMEDIASTATE_SCOREBOARD_TYPE 429 DWORD ScoreBoardEnable : BITFIELD_BIT( 31 ); // bool 430 } Gen10; 431 432 DWORD Value; 433 } DW6; 434 435 // DWORD 7 436 union _DW7 437 { 438 struct _All 439 { 440 DWORD ScoreboardDeltaX4 : BITFIELD_RANGE( 0, 3 ); // s3 441 DWORD ScoreboardDeltaY4 : BITFIELD_RANGE( 4, 7 ); // s3 442 DWORD ScoreboardDeltaX5 : BITFIELD_RANGE( 8, 11 ); // s3 443 DWORD ScoreboardDeltaY5 : BITFIELD_RANGE( 12, 15 ); // s3 444 DWORD ScoreboardDeltaX6 : BITFIELD_RANGE( 16, 19 ); // s3 445 DWORD ScoreboardDeltaY6 : BITFIELD_RANGE( 20, 23 ); // s3 446 DWORD ScoreboardDeltaX7 : BITFIELD_RANGE( 24, 27 ); // s3 447 DWORD ScoreboardDeltaY7 : BITFIELD_RANGE( 28, 31 ); // s3 448 } All; 449 450 struct _Gen8 451 { 452 DWORD ScoreboardDeltaX0 : BITFIELD_RANGE( 0, 3 ); // s3 453 DWORD ScoreboardDeltaY0 : BITFIELD_RANGE( 4, 7 ); // s3 454 DWORD ScoreboardDeltaX1 : BITFIELD_RANGE( 8, 11 ); // s3 455 DWORD ScoreboardDeltaY1 : BITFIELD_RANGE( 12, 15 ); // s3 456 DWORD ScoreboardDeltaX2 : BITFIELD_RANGE( 16, 19 ); // s3 457 DWORD ScoreboardDeltaY2 : BITFIELD_RANGE( 20, 23 ); // s3 458 DWORD ScoreboardDeltaX3 : BITFIELD_RANGE( 24, 27 ); // s3 459 DWORD ScoreboardDeltaY3 : BITFIELD_RANGE( 28, 31 ); // s3 460 } Gen8; 461 462 DWORD Value; 463 } DW7; 464 465 // DWORD 8 466 union _DW8 467 { 468 struct _Gen8 469 { 470 DWORD ScoreboardDeltaX4 : BITFIELD_RANGE( 0, 3 ); // s3 471 DWORD ScoreboardDeltaY4 : BITFIELD_RANGE( 4, 7 ); // s3 472 DWORD ScoreboardDeltaX5 : BITFIELD_RANGE( 8, 11 ); // s3 473 DWORD ScoreboardDeltaY5 : BITFIELD_RANGE( 12, 15 ); // s3 474 DWORD ScoreboardDeltaX6 : BITFIELD_RANGE( 16, 19 ); // s3 475 DWORD ScoreboardDeltaY6 : BITFIELD_RANGE( 20, 23 ); // s3 476 DWORD ScoreboardDeltaX7 : BITFIELD_RANGE( 24, 27 ); // s3 477 DWORD ScoreboardDeltaY7 : BITFIELD_RANGE( 28, 31 ); // s3 478 } Gen8; 479 480 DWORD Value; 481 } DW8; 482 }; 483 484 static_assert(SIZE32(SMediaStateMediaVFEState) == 9); 485 486 /*****************************************************************************\ 487 STRUCT: SMediaStateMediaCURBELoad (MEDIA_CURBE_LOAD) 488 \*****************************************************************************/ 489 struct SMediaStateMediaCURBELoad 490 { 491 // DWORD 0 492 union _DW0 493 { 494 struct _All 495 { 496 DWORD Length : BITFIELD_RANGE( 0, 15 ); // OP_LENGTH (exclude dw0,dw1) 497 DWORD InstructionSubOpcode : BITFIELD_RANGE( 16, 23 ); // GFX_MEDIA_PIPELINED_SUBOPCODE 498 DWORD InstructionOpcode : BITFIELD_RANGE( 24, 26 ); // GFX_OPCODE 499 DWORD InstructionSubType : BITFIELD_RANGE( 27, 28 ); // INSTRUCTION_SUBTYPE 500 DWORD InstructionType : BITFIELD_RANGE( 29, 31 ); // INSTRUCTION_TYPE 501 } All; 502 503 DWORD Value; 504 } DW0; 505 506 // DWORD 1 507 union _DW1 508 { 509 DWORD Value; 510 } DW1; 511 512 // DWORD 2 513 union _DW2 514 { 515 struct _All 516 { 517 DWORD CURBETotalDataLength : BITFIELD_RANGE( 0, 16 ); // U17 518 DWORD _Unused : BITFIELD_RANGE( 17, 31 ); 519 } All; 520 521 DWORD Value; 522 } DW2; 523 524 // DWORD 3 525 union _DW3 526 { 527 struct _All 528 { 529 DWORD CURBEDataStartAddress : BITFIELD_RANGE( 0, 31 ); // U17 530 } All; 531 532 DWORD Value; 533 } DW3; 534 }; 535 536 static_assert(SIZE32(SMediaStateMediaCURBELoad) == 4); 537 538 /*****************************************************************************\ 539 STRUCT: SMediaStateMediaStateFlush (MEDIA_STATE_FLUSH) 540 \*****************************************************************************/ 541 struct SMediaStateMediaStateFlush 542 { 543 // DWORD 0 544 union _DW0 545 { 546 struct _All 547 { 548 DWORD Length : BITFIELD_RANGE( 0, 15); // OP_LENGTH (exclude dw0,dw1) 549 DWORD InstructionSubOpcode : BITFIELD_RANGE( 16, 23); // GFX_MEDIA_PIPELINED_SUBOPCODE 550 DWORD InstructionOpcode : BITFIELD_RANGE( 24, 26); // GFX_OPCODE 551 DWORD InstructionSubType : BITFIELD_RANGE( 27, 28); // INSTRUCTION_SUBTYPE 552 DWORD InstructionType : BITFIELD_RANGE( 29, 31); // INSTRUCTION_TYPE 553 } All; 554 555 DWORD Value; 556 } DW0; 557 558 // DWORD 1 559 union _DW1 560 { 561 struct _All 562 { 563 DWORD BarrierMask : BITFIELD_RANGE( 0, 15 ); // One bit for each barrier 564 DWORD ThreadCountWaterMark : BITFIELD_RANGE( 16, 23 ); // U8 565 DWORD _Unused : BITFIELD_RANGE( 24, 31 ); 566 } All; 567 568 struct _Gen7 569 { 570 DWORD InterfaceDescriptorOffset : BITFIELD_RANGE( 0, 5 ); // U6 571 DWORD ThreadCountWaterMark : BITFIELD_BIT( 6 ); // one bit specify if stall waiting resources 572 DWORD _Unused : BITFIELD_RANGE( 7, 31 ); 573 } Gen7; 574 575 DWORD Value; 576 } DW1; 577 }; 578 579 static_assert(SIZE32(SMediaStateMediaStateFlush) == 2); 580 581 /*****************************************************************************\ 582 STRUCT: SMediaStateGPGPUWalker (GPGPU_WALKER) 583 \*****************************************************************************/ 584 struct SMediaStateGPGPUWalker 585 { 586 // DWORD 0 587 union _DW0 588 { 589 struct _All 590 { 591 DWORD Length : BITFIELD_RANGE( 0, 7 ); // OP_LENGTH (exclude dw0,dw1) 592 DWORD PredicateEnable : BITFIELD_BIT( 8 ); // bool 593 DWORD _Unused1 : BITFIELD_BIT( 9 ); 594 DWORD IndirectParameterEnable : BITFIELD_BIT( 10 ); // bool 595 DWORD _Unused2 : BITFIELD_RANGE( 11, 15 ); 596 DWORD InstructionSubOpcodeA : BITFIELD_RANGE( 16, 23 ); // GFX_MEDIA_NONPIPELINED_SUBOPCODE_A 597 DWORD InstructionOpcode : BITFIELD_RANGE( 24, 26 ); // GFX_OPCODE 598 DWORD InstructionSubType : BITFIELD_RANGE( 27, 28 ); // INSTRUCTION_SUBTYPE 599 DWORD InstructionType : BITFIELD_RANGE( 29, 31 ); // INSTRUCTION_TYPE 600 } All; 601 602 DWORD Value; 603 } DW0; 604 605 // DWORD 1 606 union _DW1 607 { 608 struct _All 609 { 610 DWORD InterfaceDescriptorOffset : BITFIELD_RANGE( 0, 5 ); // U5 611 DWORD _Unused : BITFIELD_RANGE( 6, 7 ); 612 DWORD ObjectId : BITFIELD_RANGE( 8, 31 ); // U8 613 } All; 614 615 DWORD Value; 616 } DW1; 617 618 // DWORD 2 619 union _DW2 620 { 621 struct _All 622 { 623 DWORD ThreadWidthCounterMaximum : BITFIELD_RANGE( 0, 5 ); 624 DWORD _Unused1 : BITFIELD_RANGE( 6, 7 ); 625 DWORD ThreadHeightCounterMaximum : BITFIELD_RANGE( 8, 13 ); 626 DWORD _Unused2 : BITFIELD_RANGE( 14, 15 ); 627 DWORD ThreadDepthCounterMaximum : BITFIELD_RANGE( 16, 21 ); 628 DWORD _Unused3 : BITFIELD_RANGE( 22, 29 ); 629 DWORD SIMDSize : BITFIELD_RANGE( 30, 31 ); // GFXMEDIASTATE_GPGPU_WALKER_SIMD_SIZE 630 } All; 631 632 struct _Gen8 633 { 634 DWORD IndirectDataLength : BITFIELD_RANGE( 0, 16 ); // U17 in bytes 635 DWORD _Unused : BITFIELD_RANGE( 17, 31 ); // Reserved 636 } Gen8; 637 638 DWORD Value; 639 } DW2; 640 641 // DWORD 3 642 union _DW3 643 { 644 struct _All 645 { 646 DWORD ThreadGroupIdStartingX : BITFIELD_RANGE( 0, 31 ); // U31 647 } All; 648 649 struct _Gen8 650 { 651 DWORD IndirectDataStartAddress : BITFIELD_RANGE( 0, 31 ); // 64-byte aligned address 652 } Gen8; 653 654 DWORD Value; 655 } DW3; 656 657 // DWORD 4 658 union _DW4 659 { 660 struct _All 661 { 662 DWORD ThreadGroupIdDimensionX : BITFIELD_RANGE( 0, 31 ); 663 } All; 664 665 struct _Gen8 666 { 667 DWORD ThreadWidthCounterMaximum : BITFIELD_RANGE( 0, 5 ); 668 DWORD _Unused1 : BITFIELD_RANGE( 6, 7 ); // Reserved 669 DWORD ThreadHeightCounterMaximum : BITFIELD_RANGE( 8, 13 ); 670 DWORD _Unused2 : BITFIELD_RANGE( 14, 15 ); // Reserved 671 DWORD ThreadDepthCounterMaximum : BITFIELD_RANGE( 16, 21 ); 672 DWORD _Unused3 : BITFIELD_RANGE( 22, 29 ); // Reserved 673 DWORD SIMDSize : BITFIELD_RANGE( 30, 31 ); // GFXMEDIASTATE_GPGPU_WALKER_SIMD_SIZE 674 } Gen8; 675 676 DWORD Value; 677 } DW4; 678 679 // DWORD 5 680 union _DW5 681 { 682 struct _All 683 { 684 DWORD ThreadGroupIdStartingY : BITFIELD_RANGE( 0, 31 ); 685 } All; 686 687 struct _Gen8 688 { 689 DWORD ThreadGroupIdStartingX : BITFIELD_RANGE( 0, 31 ); 690 } Gen8; 691 692 DWORD Value; 693 } DW5; 694 695 // DWORD 6 696 union _DW6 697 { 698 struct _All 699 { 700 DWORD ThreadGroupIdDimensionY : BITFIELD_RANGE( 0, 31 ); 701 } All; 702 703 struct _Gen8 704 { 705 DWORD ThreadGroupIdResumeX : BITFIELD_RANGE( 0, 31 ); 706 } Gen8; 707 708 DWORD Value; 709 } DW6; 710 711 // DWORD 7 712 union _DW7 713 { 714 struct _All 715 { 716 DWORD ThreadGroupIdStartingZ : BITFIELD_RANGE( 0, 31 ); 717 } All; 718 719 struct _Gen8 720 { 721 DWORD ThreadGroupIdDimensionX : BITFIELD_RANGE( 0, 31 ); 722 } Gen8; 723 724 DWORD Value; 725 } DW7; 726 727 // DWORD 8 728 union _DW8 729 { 730 struct _All 731 { 732 DWORD ThreadGroupIdDimensionZ : BITFIELD_RANGE( 0, 31 ); 733 } All; 734 735 struct _Gen8 736 { 737 DWORD ThreadGroupIdStartingY : BITFIELD_RANGE( 0, 31 ); 738 } Gen8; 739 740 DWORD Value; 741 } DW8; 742 743 // DWORD 9 744 union _DW9 745 { 746 struct _All 747 { 748 DWORD RightExecutionMask : BITFIELD_RANGE( 0, 31 ); 749 } All; 750 751 struct _Gen8 752 { 753 DWORD ThreadGroupIdResumeY : BITFIELD_RANGE( 0, 31 ); 754 } Gen8; 755 756 DWORD Value; 757 } DW9; 758 759 // DWORD 10 760 union _DW10 761 { 762 struct _All 763 { 764 DWORD BottomExecutionMask : BITFIELD_RANGE( 0, 31 ); 765 } All; 766 767 struct _Gen8 768 { 769 DWORD ThreadGroupIdDimensionY : BITFIELD_RANGE( 0, 31 ); 770 } Gen8; 771 772 DWORD Value; 773 } DW10; 774 775 // DWORD 11 776 union _DW11 777 { 778 struct _Gen8 779 { 780 DWORD ThreadGroupIdStartingResumeZ : BITFIELD_RANGE( 0, 31 ); 781 } Gen8; 782 783 DWORD Value; 784 } DW11; 785 786 // DWORD 12 787 union _DW12 788 { 789 struct _Gen8 790 { 791 DWORD ThreadGroupIdDimensionZ : BITFIELD_RANGE( 0, 31 ); 792 } Gen8; 793 794 DWORD Value; 795 } DW12; 796 797 // DWORD 13 798 union _DW13 799 { 800 struct _Gen8 801 { 802 DWORD RightExecutionMask : BITFIELD_RANGE( 0, 31 ); 803 } Gen8; 804 805 DWORD Value; 806 } DW13; 807 808 // DWORD 14 809 union _DW14 810 { 811 struct _Gen8 812 { 813 DWORD BottomExecutionMask : BITFIELD_RANGE( 0, 31 ); 814 } Gen8; 815 816 DWORD Value; 817 } DW14; 818 }; 819 820 static_assert(SIZE32(SMediaStateGPGPUWalker) == 15); 821 822 } // namespace G6HWC 823 824 // Reset packing alignment to project default 825 #pragma pack() 826