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_shared_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: SSharedStateBindingTableState (BINDING_TABLE_STATE) 21 \*****************************************************************************/ 22 struct SSharedStateBindingTableState 23 { 24 // DWORD 0 25 union _DW0 26 { 27 struct _All 28 { 29 DWORD _Unused : BITFIELD_RANGE( 0,4 ); 30 DWORD SurfaceStatePointer : BITFIELD_RANGE( 5,31 ); // GTT[31:5] S3DStateSurfaceState* 31 } All; 32 33 DWORD Value; 34 } DW0; 35 }; 36 37 static_assert(SIZE32(SSharedStateBindingTableState) == 1); 38 39 /*****************************************************************************\ 40 STRUCT: SGfxSamplerIndirectState (SAMPLER_INDIRECT_STATE) 41 \*****************************************************************************/ 42 struct SGfxSamplerIndirectState 43 { 44 // DWORD 0 45 float BorderColorRed; 46 47 // DWORD 1 48 float BorderColorGreen; 49 50 // DWORD 2 51 float BorderColorBlue; 52 53 // DWORD 3 54 float BorderColorAlpha; 55 56 // DWORDs 4-11 should all be set to zero: 57 DWORD _Unused1; 58 DWORD _Unused2; 59 DWORD _Unused3; 60 DWORD _Unused4; 61 DWORD _Unused5; 62 DWORD _Unused6; 63 DWORD _Unused7; 64 DWORD _Unused8; 65 }; 66 static_assert(SIZE32(SGfxSamplerIndirectState) == 12); 67 68 /*****************************************************************************\ 69 STRUCT: SSharedStateSamplerState ( SAMPLER_STATE ) 70 \*****************************************************************************/ 71 struct SSharedStateSamplerState 72 { 73 // DWORD 0 74 union _DW0 75 { 76 struct _All 77 { 78 DWORD ShadowFunction : BITFIELD_RANGE( 0,2 ); // GFXSHAREDSTATE_PREFILTER_OPERATION 79 DWORD TextureLODBias : BITFIELD_RANGE( 3,13 ); // 11-bit signed (S4.6) [-16.0, 16.0) 80 DWORD MinModeFilter : BITFIELD_RANGE( 14,16 ); // GFXSHAREDSTATE_MAPFILTER 81 DWORD MagModeFilter : BITFIELD_RANGE( 17,19 ); // GFXSHAREDSTATE_MAPFILTER 82 DWORD MipModeFilter : BITFIELD_RANGE( 20,21 ); // GFXSHAREDSTATE_MIPFILTER 83 DWORD BaseMipLevel : BITFIELD_RANGE( 22,26 ); // U4.1 [0,13] 84 DWORD _Unused1 : BITFIELD_BIT( 27 ); 85 DWORD LODPreClampEnable : BITFIELD_BIT( 28 ); // bool 86 DWORD TextureBorderColorMode : BITFIELD_BIT( 29 ); // GFXSHAREDSTATE_DEFAULTCOLOR_MODE 87 DWORD _Unused2 : BITFIELD_BIT( 30 ); 88 DWORD SamplerDisable : BITFIELD_BIT( 31 ); // bool 89 } All; 90 91 struct _Gen7 92 { 93 DWORD _Unused1 : BITFIELD_BIT( 0 ); // Reserved 94 DWORD TextureLODBias : BITFIELD_RANGE( 1,13 ); // S4.2 2's comp 95 DWORD MinModeFilter : BITFIELD_RANGE( 14,16 ); // GFXSHAREDSTATE_MAPFILTER 96 DWORD MagModeFilter : BITFIELD_RANGE( 17,19 ); // GFXSHAREDSTATE_MAPFILTER 97 DWORD MipModeFilter : BITFIELD_RANGE( 20,21 ); // GFXSHAREDSTATE_MIPFILTER 98 DWORD BaseMipLevel : BITFIELD_RANGE( 22,26 ); // U4.1 [0,13] 99 DWORD _Unused2 : BITFIELD_BIT( 27 ); 100 DWORD LODPreClampEnable : BITFIELD_BIT( 28 ); // bool 101 DWORD TextureBorderColorMode : BITFIELD_BIT( 29 ); // GFXSHAREDSTATE_DEFAULTCOLOR_MODE 102 DWORD _Unused3 : BITFIELD_BIT( 30 ); 103 DWORD SamplerDisable : BITFIELD_BIT( 31 ); // bool 104 } Gen7; 105 106 struct _Gen9 107 { 108 DWORD AnisotropicAlgorithm : BITFIELD_BIT( 0 ); // 109 DWORD TextureLODBias : BITFIELD_RANGE( 1,13 ); // S4.2 2's comp 110 DWORD MinModeFilter : BITFIELD_RANGE( 14,16 ); // GFXSHAREDSTATE_MAPFILTER 111 DWORD MagModeFilter : BITFIELD_RANGE( 17,19 ); // GFXSHAREDSTATE_MAPFILTER 112 DWORD MipModeFilter : BITFIELD_RANGE( 20,21 ); // GFXSHAREDSTATE_MIPFILTER 113 DWORD CoarseLODQualityMode : BITFIELD_RANGE( 22,26 ); // U5 114 DWORD _Unused1 : BITFIELD_BIT( 27 ); 115 DWORD LODPreClampEnable : BITFIELD_BIT( 28 ); // bool 116 DWORD TextureBorderColorMode : BITFIELD_BIT( 29 ); // GFXSHAREDSTATE_DEFAULTCOLOR_MODE 117 DWORD _Unused2 : BITFIELD_BIT( 30 ); 118 DWORD SamplerDisable : BITFIELD_BIT( 31 ); // bool 119 } Gen9; 120 121 struct _Gen10 122 { 123 DWORD AnisotropicAlgorithm : BITFIELD_BIT( 0 ); // 124 DWORD TextureLODBias : BITFIELD_RANGE( 1,13 ); // S4.2 2's comp 125 DWORD MinModeFilter : BITFIELD_RANGE( 14,16 ); // GFXSHAREDSTATE_MAPFILTER 126 DWORD MagModeFilter : BITFIELD_RANGE( 17,19 ); // GFXSHAREDSTATE_MAPFILTER 127 DWORD MipModeFilter : BITFIELD_RANGE( 20,21 ); // GFXSHAREDSTATE_MIPFILTER 128 DWORD CoarseLODQualityMode : BITFIELD_RANGE( 22,26 ); // U5 129 DWORD LODPreClampEnable : BITFIELD_RANGE( 27,28 ); // bool 130 DWORD TextureBorderColorMode : BITFIELD_BIT( 29 ); // GFXSHAREDSTATE_DEFAULTCOLOR_MODE 131 DWORD CpsLODCompensation : BITFIELD_BIT( 30 ); // CPS LOD Compensation Enable 132 DWORD SamplerDisable : BITFIELD_BIT( 31 ); // bool 133 } Gen10; 134 135 DWORD Value; 136 } DW0; 137 138 // DWORD 1 139 union _DW1 140 { 141 struct _All 142 { 143 DWORD TCZAddressControlMode : BITFIELD_RANGE( 0,2 ); // GFXSHAREDSTATE_TEXCOORDMODE 144 DWORD TCYAddressControlMode : BITFIELD_RANGE( 3,5 ); // GFXSHAREDSTATE_TEXCOORDMODE 145 DWORD TCXAddressControlMode : BITFIELD_RANGE( 6,8 ); // GFXSHAREDSTATE_TEXCOORDMODE 146 DWORD CubeSurfaceControlMode : BITFIELD_BIT( 9 ); // GFXSHAREDSTATE_CUBESURFACECONTROLMODE 147 DWORD _Unused : BITFIELD_RANGE( 10,11 ); 148 DWORD MaxLOD : BITFIELD_RANGE( 12,21 ); // U4.6 in LOD units [0.0,13.0] 149 DWORD MinLOD : BITFIELD_RANGE( 22,31 ); // U4.6 in LOD units [0.0,13.0] 150 } All; 151 152 struct _Gen7 153 { 154 DWORD CubeSurfaceControlMode : BITFIELD_BIT( 0 ); // GFXSHAREDSTATE_CUBESURFACECONTROLMODE 155 DWORD ShadowFunction : BITFIELD_RANGE( 1,3 ); // GFXSHAREDSTATE_PREFILTER_OPERATION 156 DWORD _Unused : BITFIELD_RANGE( 4,7 ); // Reserved 157 DWORD MaxLOD : BITFIELD_RANGE( 8,19 ); // U4.8 158 DWORD MinLOD : BITFIELD_RANGE( 20,31 ); // U4.8 159 } Gen7; 160 161 struct _Gen8 162 { 163 DWORD ChromaKeyMode : BITFIELD_BIT( 4 ); // U1 164 DWORD ChromaKeyIndex : BITFIELD_RANGE( 5,6 ); // U2 165 DWORD ChromaKeyEnable : BITFIELD_BIT( 7 ); // bool 166 } Gen8; 167 168 DWORD Value; 169 } DW1; 170 171 // DWORD 2 172 union _DW2 173 { 174 struct _All 175 { 176 DWORD _Unused : BITFIELD_RANGE( 0,4 ); 177 DWORD BorderColorPointer : BITFIELD_RANGE( 5,31 ); // DynamicStateOffset[31:5] 178 } All; 179 180 union _Gen8 181 { 182 struct _All 183 { 184 DWORD LODClampMagnificationMode : BITFIELD_BIT( 0 ); // U1 185 DWORD FlexibleFilterVerticalAlignment : BITFIELD_BIT( 1 ); // U1 186 DWORD FlexibleFilterHorizontalAlignment : BITFIELD_BIT( 2 ); // U1 187 DWORD FlexibleFilterCoefficientSize : BITFIELD_BIT( 3 ); // U1 188 DWORD FlexibleFilterMode : BITFIELD_BIT( 4 ); // GFXSHAREDSTATE_FLEXFILTERMODE 189 DWORD _Unused1 : BITFIELD_BIT( 5 ); // Reserved 190 DWORD IndirectStatePointer : BITFIELD_RANGE( 6,23 ); // DynamicStateOffset[23:6] 191 DWORD _Unused2 : BITFIELD_RANGE( 24,31 ); 192 } All; 193 194 struct _FlexibleFilterSeparable 195 { 196 DWORD _Unused : BITFIELD_RANGE( 0,25 ); 197 DWORD SeparableFilterHeight : BITFIELD_RANGE( 26,27 ); // U2 198 DWORD SeparableFilterWidth : BITFIELD_RANGE( 28,29 ); // U2 199 DWORD SeparableFilterCoefficientTableSize : BITFIELD_RANGE( 30,31 ); // U2 200 } FlexibleFilterSeparable; 201 202 struct _FlexibleFilterNonSeparable 203 { 204 DWORD _Unused : BITFIELD_RANGE( 0,23 ); 205 DWORD NonSeparableFilterFootprintMask : BITFIELD_RANGE( 24,31 ); // Mask 206 } FlexibleFilterNonSeparable; 207 208 } Gen8; 209 210 struct _Gen10 211 { 212 DWORD LODClampMagnificationMode : BITFIELD_BIT( 0 ); // U1 213 DWORD _Unused : BITFIELD_RANGE( 1,4 ); 214 DWORD ForceGather4 : BITFIELD_BIT( 5 ); // 215 DWORD IndirectStatePointer : BITFIELD_RANGE( 6,23 ); // DynamicStateOffset[23:6] 216 DWORD _Unused2 : BITFIELD_RANGE( 24,31 ); 217 } Gen10; 218 219 DWORD Value; 220 } DW2; 221 222 // DWORD 3 223 union _DW3 224 { 225 struct _All 226 { 227 DWORD NonNormalizedCoordinatesEnable : BITFIELD_BIT( 1 ); // bool 228 DWORD _Unused1 : BITFIELD_RANGE( 1,12 ); // Reserved 229 DWORD RAddressMinFilterAddressRoundingEnable : BITFIELD_BIT( 13 ); // bool 230 DWORD RAddressMagFilterAddressRoundingEnable : BITFIELD_BIT( 14 ); // bool 231 DWORD VAddressMinFilterAddressRoundingEnable : BITFIELD_BIT( 15 ); // bool 232 DWORD VAddressMagFilterAddressRoundingEnable : BITFIELD_BIT( 16 ); // bool 233 DWORD UAddressMinFilterAddressRoundingEnable : BITFIELD_BIT( 17 ); // bool 234 DWORD UAddressMagFilterAddressRoundingEnable : BITFIELD_BIT( 18 ); // bool 235 DWORD MaximumAnisotropy : BITFIELD_RANGE( 19,21 ); // GFXSHAREDSTATE_ANISORATIO 236 DWORD ChromaKeyMode : BITFIELD_BIT( 22 ); // GFXSHAREDSTATE_CHROMAKEY_MODE 237 DWORD ChromaKeyIndex : BITFIELD_RANGE( 23,24 ); // U2 238 DWORD ChromaKeyEnable : BITFIELD_BIT( 25 ); // bool 239 DWORD _Unused2 : BITFIELD_RANGE( 26,31 ); // Reserved 240 } All; 241 242 struct _Gen7 243 { 244 DWORD TCZAddressControlMode : BITFIELD_RANGE( 0,2 ); // GFXSHAREDSTATE_TEXCOORDMODE 245 DWORD TCYAddressControlMode : BITFIELD_RANGE( 3,5 ); // GFXSHAREDSTATE_TEXCOORDMODE 246 DWORD TCXAddressControlMode : BITFIELD_RANGE( 6,8 ); // GFXSHAREDSTATE_TEXCOORDMODE 247 DWORD _Unused1 : BITFIELD_BIT( 9 ); // Reserved 248 DWORD NonNormalizedCoordinateEnable : BITFIELD_BIT( 10 ); // bool 249 DWORD TrilinearFilterQuality : BITFIELD_RANGE( 11,12 ); // GFXSHAREDSTATE_TRILINEAR_QUALITY 250 DWORD RAddressMinFilterAddressRoundingEnable : BITFIELD_BIT( 13 ); // bool 251 DWORD RAddressMagFilterAddressRoundingEnable : BITFIELD_BIT( 14 ); // bool 252 DWORD VAddressMinFilterAddressRoundingEnable : BITFIELD_BIT( 15 ); // bool 253 DWORD VAddressMagFilterAddressRoundingEnable : BITFIELD_BIT( 16 ); // bool 254 DWORD UAddressMinFilterAddressRoundingEnable : BITFIELD_BIT( 17 ); // bool 255 DWORD UAddressMagFilterAddressRoundingEnable : BITFIELD_BIT( 18 ); // bool 256 DWORD MaximumAnisotropy : BITFIELD_RANGE( 19,21 ); // GFXSHAREDSTATE_ANISORATIO 257 DWORD ChromaKeyMode : BITFIELD_BIT( 22 ); // GFXSHAREDSTATE_CHROMAKEY_MODE 258 DWORD ChromaKeyIndex : BITFIELD_RANGE( 23,24 ); // U2 259 DWORD ChromaKeyEnable : BITFIELD_BIT( 25 ); // bool 260 DWORD _Unused2 : BITFIELD_RANGE( 26,31 ); // Reserved 261 } Gen7; 262 263 struct _Gen8 264 { 265 DWORD _Unused : BITFIELD_RANGE( 22,23 ); // Reserved 266 DWORD NonSeparableFilterFootprintMask : BITFIELD_RANGE( 24,31 ); // Mask 267 268 } Gen8; 269 270 struct _Gen9 271 { 272 DWORD TCZAddressControlMode : BITFIELD_RANGE( 0,2 ); // GFXSHAREDSTATE_TEXCOORDMODE 273 DWORD TCYAddressControlMode : BITFIELD_RANGE( 3,5 ); // GFXSHAREDSTATE_TEXCOORDMODE 274 DWORD TCXAddressControlMode : BITFIELD_RANGE( 6,8 ); // GFXSHAREDSTATE_TEXCOORDMODE 275 DWORD ReductionTypeEnable : BITFIELD_BIT( 9 ); // bool 276 DWORD NonNormalizedCoordinateEnable : BITFIELD_BIT( 10 ); // bool 277 DWORD TrilinearFilterQuality : BITFIELD_RANGE( 11,12 ); // GFXSHAREDSTATE_TRILINEAR_QUALITY 278 DWORD RAddressMinFilterAddressRoundingEnable : BITFIELD_BIT( 13 ); // bool 279 DWORD RAddressMagFilterAddressRoundingEnable : BITFIELD_BIT( 14 ); // bool 280 DWORD VAddressMinFilterAddressRoundingEnable : BITFIELD_BIT( 15 ); // bool 281 DWORD VAddressMagFilterAddressRoundingEnable : BITFIELD_BIT( 16 ); // bool 282 DWORD UAddressMinFilterAddressRoundingEnable : BITFIELD_BIT( 17 ); // bool 283 DWORD UAddressMagFilterAddressRoundingEnable : BITFIELD_BIT( 18 ); // bool 284 DWORD MaximumAnisotropy : BITFIELD_RANGE( 19,21 ); // GFXSHAREDSTATE_ANISORATIO 285 DWORD ReductionType : BITFIELD_RANGE( 22,23 ); // GFXSHAREDSTATE_REDUCTION_TYPE 286 DWORD NonSeparableFilterFootprintMask : BITFIELD_RANGE( 24,31 ); // Mask 287 } Gen9; 288 289 union _Gen10 290 { 291 struct _All 292 { 293 DWORD TCZAddressControlMode : BITFIELD_RANGE( 0,2 ); // GFXSHAREDSTATE_TEXCOORDMODE 294 DWORD TCYAddressControlMode : BITFIELD_RANGE( 3,5 ); // GFXSHAREDSTATE_TEXCOORDMODE 295 DWORD TCXAddressControlMode : BITFIELD_RANGE( 6,8 ); // GFXSHAREDSTATE_TEXCOORDMODE 296 DWORD ReductionTypeEnable : BITFIELD_BIT( 9 ); // bool 297 DWORD NonNormalizedCoordinateEnable : BITFIELD_BIT( 10 ); // bool 298 DWORD TrilinearFilterQuality : BITFIELD_RANGE( 11,12 ); // GFXSHAREDSTATE_TRILINEAR_QUALITY 299 DWORD RAddressMinFilterAddressRoundingEnable : BITFIELD_BIT( 13 ); // bool 300 DWORD RAddressMagFilterAddressRoundingEnable : BITFIELD_BIT( 14 ); // bool 301 DWORD VAddressMinFilterAddressRoundingEnable : BITFIELD_BIT( 15 ); // bool 302 DWORD VAddressMagFilterAddressRoundingEnable : BITFIELD_BIT( 16 ); // bool 303 DWORD UAddressMinFilterAddressRoundingEnable : BITFIELD_BIT( 17 ); // bool 304 DWORD UAddressMagFilterAddressRoundingEnable : BITFIELD_BIT( 18 ); // bool 305 DWORD MaximumAnisotropy : BITFIELD_RANGE( 19,21 ); // GFXSHAREDSTATE_ANISORATIO 306 DWORD ReductionType : BITFIELD_RANGE( 22,23 ); // GFXSHAREDSTATE_REDUCTION_TYPE 307 DWORD NonSeparableFilterFootprintMask : BITFIELD_RANGE( 24,31 ); // Mask 308 } ALL; 309 310 struct _FlexibleFilterMinMagMode 311 { 312 DWORD FlexibleFilterDisableClamping : BITFIELD_BIT( 10 ); // 313 }FlexibleFilterMinMagMode; 314 } Gen10; 315 316 DWORD Value; 317 } DW3; 318 }; 319 320 static_assert(SIZE32(SSharedStateSamplerState) == 4); 321 322 /*****************************************************************************\ 323 STRUCT: SSharedStateSearchPathLUTState 324 \*****************************************************************************/ 325 struct SSharedStateSearchPathLUTState 326 { 327 // DWORD 0 328 union _DW0 329 { 330 struct _Bitfield 331 { 332 DWORD SearchPathLocation_X_0 : 4; 333 DWORD SearchPathLocation_Y_0 : 4; 334 DWORD SearchPathLocation_X_1 : 4; 335 DWORD SearchPathLocation_Y_1 : 4; 336 DWORD SearchPathLocation_X_2 : 4; 337 DWORD SearchPathLocation_Y_2 : 4; 338 DWORD SearchPathLocation_X_3 : 4; 339 DWORD SearchPathLocation_Y_3 : 4; 340 } BitField; 341 342 struct _Byte 343 { 344 BYTE Byte0; 345 BYTE Byte1; 346 BYTE Byte2; 347 BYTE Byte3; 348 } Byte; 349 350 DWORD Value; 351 } DW0; 352 }; 353 354 static_assert(SIZE32(SSharedStateSearchPathLUTState) == 1); 355 356 /*****************************************************************************\ 357 STRUCT: SSharedStateRDLUTSet 358 \*****************************************************************************/ 359 struct SSharedStateRDLUTSet 360 { 361 // DWORD 0 362 union _DW0 363 { 364 struct _Bitfield 365 { 366 DWORD LUT_MbMode_0 : 8; 367 DWORD LUT_MbMode_1 : 8; 368 DWORD LUT_MbMode_2 : 8; 369 DWORD LUT_MbMode_3 : 8; 370 } BitField; 371 372 DWORD Value; 373 } DW0; 374 375 // DWORD 1 376 union _DW1 377 { 378 struct _Bitfield 379 { 380 DWORD LUT_MbMode_4 : 8; 381 DWORD LUT_MbMode_5 : 8; 382 DWORD LUT_MbMode_6 : 8; 383 DWORD LUT_MbMode_7 : 8; 384 } BitField; 385 386 DWORD Value; 387 } DW1; 388 389 // DWORD 2 390 union _DW2 391 { 392 struct _Bitfield 393 { 394 DWORD LUT_MV_0 : 8; 395 DWORD LUT_MV_1 : 8; 396 DWORD LUT_MV_2 : 8; 397 DWORD LUT_MV_3 : 8; 398 } BitField; 399 400 DWORD Value; 401 } DW2; 402 403 // DWORD 3 404 union _DW3 405 { 406 struct _Bitfield 407 { 408 DWORD LUT_MV_4 : 8; 409 DWORD LUT_MV_5 : 8; 410 DWORD LUT_MV_6 : 8; 411 DWORD LUT_MV_7 : 8; 412 } BitField; 413 414 DWORD Value; 415 } DW3; 416 }; 417 418 static_assert(SIZE32(SSharedStateRDLUTSet) == 4); 419 420 /*****************************************************************************\ 421 STRUCT: SSharedStateVmeState ( VME_STATE ) 422 \*****************************************************************************/ 423 struct SSharedStateVmeState 424 { 425 // DWORD 0 - DWORD 13 426 SSharedStateSearchPathLUTState SearchPath[ g_cNumSearchPathStatesGen6 ]; 427 428 // DWORD 14 429 union _DW14 430 { 431 struct _Bitfield 432 { 433 DWORD LUT_MbMode_8_0 : 8; 434 DWORD LUT_MbMode_9_0 : 8; 435 DWORD LUT_MbMode_8_1 : 8; 436 DWORD LUT_MbMode_9_1 : 8; 437 } BitField; 438 439 DWORD Value; 440 } DW14; 441 442 // DWORD 15 443 union _DW15 444 { 445 struct _Bitfield 446 { 447 DWORD LUT_MbMode_8_2 : 8; 448 DWORD LUT_MbMode_9_2 : 8; 449 DWORD LUT_MbMode_8_3 : 8; 450 DWORD LUT_MbMode_9_3 : 8; 451 } BitField; 452 453 DWORD Value; 454 } DW15; 455 456 // DWORD 16 - DWORD 31 457 struct SSharedStateRDLUTSet RdLutSet[ g_cNumMBModeSetsGen6 ]; 458 }; 459 460 static_assert(SIZE32(SSharedStateVmeState) == 32); 461 462 /*****************************************************************************\ 463 STRUCT: SSamplerStateErodeDilateMinMaxFilter ( SAMPLER_STATE Erode/Dilate/MinMaxFilter ) 464 \*****************************************************************************/ 465 struct SSamplerStateErodeDilateMinMaxFilter 466 { 467 DWORD DW0; 468 DWORD DW1; 469 DWORD DW2; 470 DWORD DW3; 471 DWORD DW4; 472 DWORD DW5; 473 DWORD DW6; 474 DWORD DW7; 475 }; 476 477 static_assert(SIZE32(SSamplerStateErodeDilateMinMaxFilter) == 8); 478 479 /*****************************************************************************\ 480 STRUCT: SSharedStateSurfaceState ( SURFACE_STATE ) 481 \*****************************************************************************/ 482 struct SSharedStateSurfaceState 483 { 484 // DWORD 0 485 union _DW0 486 { 487 struct _All 488 { 489 DWORD CubeFaceEnablesPositiveZ : BITFIELD_BIT( 0 ); // bool 490 DWORD CubeFaceEnablesNegativeZ : BITFIELD_BIT( 1 ); // bool 491 DWORD CubeFaceEnablesPositiveY : BITFIELD_BIT( 2 ); // bool 492 DWORD CubeFaceEnablesNegativeY : BITFIELD_BIT( 3 ); // bool 493 DWORD CubeFaceEnablesPositiveX : BITFIELD_BIT( 4 ); // bool 494 DWORD CubeFaceEnablesNegativeX : BITFIELD_BIT( 5 ); // bool 495 DWORD MediaBoundaryPixelMode : BITFIELD_RANGE( 6,7 ); // GFXSHAREDSTATE_MEDIA_BOUNDARY_PIXEL_MODE 496 DWORD RenderCacheReadWriteMode : BITFIELD_BIT( 8 ); // GFXSHAREDSTATE_RENDER_CACHE_READ_WRITE_MODE 497 DWORD CubeMapCornerMode : BITFIELD_BIT( 9 ); // GFXSHAREDSTATE_CUBECORNERMODE 498 DWORD MipMapLayoutMode : BITFIELD_BIT( 10 ); // GFXSHAREDSTATE_SURFACE_MIPMAPLAYOUT 499 DWORD VerticalLineStrideOffset : BITFIELD_BIT( 11 ); // U1 500 DWORD VerticalLineStride : BITFIELD_BIT( 12 ); // U1 501 DWORD _Unused1 : BITFIELD_RANGE( 13,17 ); 502 DWORD SurfaceFormat : BITFIELD_RANGE( 18,26 ); // GFXSHAREDSTATE_SURFACEFORMAT 503 DWORD DataReturnFormat : BITFIELD_BIT( 27 ); // GFXSHAREDSTATE_SURFACERETURNFORMAT 504 DWORD _Unused2 : BITFIELD_BIT( 28 ); 505 DWORD SurfaceType : BITFIELD_RANGE( 29,31 ); // GFXSHAREDSTATE_SURFACETYPE 506 } All; 507 508 struct _Gen7 509 { 510 DWORD CubeFaceEnablesPositiveZ : BITFIELD_BIT( 0 ); // bool 511 DWORD CubeFaceEnablesNegativeZ : BITFIELD_BIT( 1 ); // bool 512 DWORD CubeFaceEnablesPositiveY : BITFIELD_BIT( 2 ); // bool 513 DWORD CubeFaceEnablesNegativeY : BITFIELD_BIT( 3 ); // bool 514 DWORD CubeFaceEnablesPositiveX : BITFIELD_BIT( 4 ); // bool 515 DWORD CubeFaceEnablesNegativeX : BITFIELD_BIT( 5 ); // bool 516 DWORD MediaBoundaryPixelMode : BITFIELD_RANGE( 6,7 ); // GFXSHAREDSTATE_MEDIA_BOUNDARY_PIXEL_MODE 517 DWORD RenderCacheReadWriteMode : BITFIELD_BIT( 8 ); // GFXSHAREDSTATE_RENDER_CACHE_READ_WRITE_MODE 518 DWORD _Unused1 : BITFIELD_BIT( 9 ); // Reserved 519 DWORD SurfaceArraySpacing : BITFIELD_BIT( 10 ); // GFXSHAREDSTATE_SURFACE_ARRAY_SPACING 520 DWORD VerticalLineStrideOffset : BITFIELD_BIT( 11 ); // U1 521 DWORD VerticalLineStride : BITFIELD_BIT( 12 ); // U1 522 DWORD TileWalk : BITFIELD_BIT( 13 ); // GFXSHAREDSTATE_TILEWALK 523 DWORD TiledSurface : BITFIELD_BIT( 14 ); // bool 524 DWORD _Unused2 : BITFIELD_RANGE( 15,17 ); 525 DWORD SurfaceFormat : BITFIELD_RANGE( 18,26 ); // GFXSHAREDSTATE_SURFACEFORMAT 526 DWORD _Unused3 : BITFIELD_BIT( 27 ); 527 DWORD SurfaceArray : BITFIELD_BIT( 28 ); // bool 528 DWORD SurfaceType : BITFIELD_RANGE( 29,31 ); // GFXSHAREDSTATE_SURFACETYPE 529 } Gen7; 530 531 struct _Gen7_Media 532 { 533 DWORD SurfaceBaseAddress; // GTT[31:0] 534 } Gen7Media; 535 536 struct _Gen8 537 { 538 DWORD CubeFaceEnablesPositiveZ : BITFIELD_BIT( 0 ); // bool 539 DWORD CubeFaceEnablesNegativeZ : BITFIELD_BIT( 1 ); // bool 540 DWORD CubeFaceEnablesPositiveY : BITFIELD_BIT( 2 ); // bool 541 DWORD CubeFaceEnablesNegativeY : BITFIELD_BIT( 3 ); // bool 542 DWORD CubeFaceEnablesPositiveX : BITFIELD_BIT( 4 ); // bool 543 DWORD CubeFaceEnablesNegativeX : BITFIELD_BIT( 5 ); // bool 544 DWORD MediaBoundaryPixelMode : BITFIELD_RANGE( 6,7 ); // GFXSHAREDSTATE_MEDIA_BOUNDARY_PIXEL_MODE 545 DWORD RenderCacheReadWriteMode : BITFIELD_BIT( 8 ); // GFXSHAREDSTATE_RENDER_CACHE_READ_WRITE_MODE 546 DWORD SurfaceArraySpacing : BITFIELD_BIT( 9 ); // U1 547 DWORD VerticalLineStrideOffset : BITFIELD_BIT( 10 ); // U1 548 DWORD VerticalLineStride : BITFIELD_BIT( 11 ); // U1 549 DWORD TileMode : BITFIELD_RANGE( 12,13 ); // GFXSHAREDSTATE_TILEMODE 550 DWORD SurfaceHorizontalAlignment : BITFIELD_RANGE( 14,15 ); // U2 551 DWORD SurfaceVerticalAlignment : BITFIELD_RANGE( 16,17 ); // U2 552 DWORD SurfaceFormat : BITFIELD_RANGE( 18,26 ); // GFXSHAREDSTATE_SURFACEFORMAT 553 DWORD _Unused : BITFIELD_BIT( 27 ); // Reserved 554 DWORD SurfaceArray : BITFIELD_BIT( 28 ); // bool 555 DWORD SurfaceType : BITFIELD_RANGE( 29,31 ); // GFXSHAREDSTATE_SURFACETYPE 556 } Gen8; 557 558 struct _Gen8_Media 559 { 560 DWORD Reserved : BITFIELD_RANGE( 0, 31 ); 561 } Gen8Media; 562 563 struct _Gen9 564 { 565 DWORD CubeFaceEnablesPositiveZ : BITFIELD_BIT( 0 ); // bool 566 DWORD CubeFaceEnablesNegativeZ : BITFIELD_BIT( 1 ); // bool 567 DWORD CubeFaceEnablesPositiveY : BITFIELD_BIT( 2 ); // bool 568 DWORD CubeFaceEnablesNegativeY : BITFIELD_BIT( 3 ); // bool 569 DWORD CubeFaceEnablesPositiveX : BITFIELD_BIT( 4 ); // bool 570 DWORD CubeFaceEnablesNegativeX : BITFIELD_BIT( 5 ); // bool 571 DWORD MediaBoundaryPixelMode : BITFIELD_RANGE( 6,7 ); // GFXSHAREDSTATE_MEDIA_BOUNDARY_PIXEL_MODE 572 DWORD RenderCacheReadWriteMode : BITFIELD_BIT( 8 ); // GFXSHAREDSTATE_RENDER_CACHE_READ_WRITE_MODE 573 DWORD SurfaceArraySpacing : BITFIELD_BIT( 9 ); // U1 574 DWORD VerticalLineStrideOffset : BITFIELD_BIT( 10 ); // U1 575 DWORD VerticalLineStride : BITFIELD_BIT( 11 ); // U1 576 DWORD TileMode : BITFIELD_RANGE( 12,13 ); // GFXSHAREDSTATE_TILEMODE 577 DWORD SurfaceHorizontalAlignment : BITFIELD_RANGE( 14,15 ); // U2 578 DWORD SurfaceVerticalAlignment : BITFIELD_RANGE( 16,17 ); // U2 579 DWORD SurfaceFormat : BITFIELD_RANGE( 18,26 ); // GFXSHAREDSTATE_SURFACEFORMAT 580 DWORD ASTCEnable : BITFIELD_BIT( 27 ); // bool 581 DWORD SurfaceArray : BITFIELD_BIT( 28 ); // bool 582 DWORD SurfaceType : BITFIELD_RANGE( 29,31 ); // GFXSHAREDSTATE_SURFACETYPE 583 } Gen9; 584 585 DWORD Value; 586 } DW0; 587 588 // DWORD 1 589 union _DW1 590 { 591 struct _All 592 { 593 DWORD SurfaceBaseAddress; 594 } All; 595 596 struct _Gen7_Media 597 { 598 DWORD UVPixelOffsetVDirection : BITFIELD_RANGE( 0, 1 ); // U0.2 599 DWORD PictureStructure : BITFIELD_RANGE( 2, 3 ); // ? 600 DWORD Width : BITFIELD_RANGE( 4,17 ); // U14 601 DWORD Height : BITFIELD_RANGE( 18,31 ); // U14 602 } Gen7Media; 603 604 struct _Gen8 605 { 606 DWORD SurfaceQPitch : BITFIELD_RANGE( 0,14 ); // QPitch[16:2] 607 DWORD _Unused1 : BITFIELD_RANGE( 15,23 ); // Reserved 608 DWORD SurfaceObjectAgeControl : BITFIELD_RANGE( 24,25 ); // GFXSTATE_SOURCE_AGE_CONTROL 609 DWORD SurfaceObjectEncryptedDataEnable : BITFIELD_BIT( 26 ); // bool 610 DWORD SurfaceObjectTargetCache : BITFIELD_RANGE( 27,28 ); // GFXSTATE_TARGET_CACHE 611 DWORD SurfaceObjectCacheabilityControl : BITFIELD_RANGE( 29,30 ); // GFXSTATE_CACHEABILITY_CONTROL 612 DWORD _Unused2 : BITFIELD_BIT( 31 ); // Reserved 613 } Gen8; 614 615 struct _Gen9 616 { 617 DWORD SurfaceQPitch : BITFIELD_RANGE( 0,14 ); // QPitch[16:2] 618 DWORD _Unused1 : BITFIELD_RANGE( 15,18 ); // Reserved 619 DWORD BaseMipLevel : BITFIELD_RANGE( 19,23 ); // 620 DWORD EncryptedDataEnable : BITFIELD_BIT( 24 ); // Reserved 621 DWORD MOCSTablesIndex : BITFIELD_RANGE( 25,30 ); // define the L3 and system cache memory properties 622 DWORD _Unused2 : BITFIELD_BIT( 31 ); // Reserved 623 } Gen9; 624 625 struct _Gen10 626 { 627 DWORD SurfaceQPitch : BITFIELD_RANGE( 0,14 ); // QPitch[16:2] 628 DWORD _Unused1 : BITFIELD_RANGE( 15,18 ); // Reserved 629 DWORD BaseMipLevel : BITFIELD_RANGE( 19,23 ); // 630 DWORD EncryptedDataEnable : BITFIELD_BIT( 24 ); // Reserved 631 DWORD MOCSTablesIndex : BITFIELD_RANGE( 25,30 ); // define the L3 and system cache memory properties 632 DWORD _Unused2 : BITFIELD_BIT( 31 ); // Reserved 633 } Gen10; 634 635 struct _Gen10_Media 636 { 637 DWORD UVPixelOffsetVDirection : BITFIELD_RANGE( 0, 1 ); // U0.2 638 DWORD PictureStructure : BITFIELD_RANGE( 2, 3 ); // ? 639 DWORD Width : BITFIELD_RANGE( 4,17 ); // U14 //width except if format is structure buffer :reading the Data base Structure buffer (or) Test Vector Structure Buffer (or) Index Table. 640 DWORD Height : BITFIELD_RANGE( 18,31 ); // U14 //height except if format is structure buffer :reading the Data base Structure buffer (or) Test Vector Structure Buffer (or) Index Table. 641 } Gen10Media; 642 643 DWORD Value; 644 } DW1; 645 646 // DWORD 2 647 union _DW2 648 { 649 struct _All 650 { 651 DWORD RenderTargetRotation : BITFIELD_RANGE( 0,1 ); // GFXSHAREDSTATE_RENDER_TARGET_ROTATION 652 DWORD MipCount : BITFIELD_RANGE( 2,5 ); // U4 in LOD units 653 DWORD Width : BITFIELD_RANGE( 6,18 ); // U13 654 DWORD Height : BITFIELD_RANGE( 19,31 ); // U13 655 } All; 656 657 struct _Gen7 658 { 659 DWORD Width : BITFIELD_RANGE( 0,13 ); // U14 660 DWORD _Unused1 : BITFIELD_RANGE( 14,15 ); // U2 661 DWORD Height : BITFIELD_RANGE( 16,29 ); // U14 662 DWORD _Unused2 : BITFIELD_RANGE( 30,31 ); 663 } Gen7; 664 665 struct _Gen7_Media 666 { 667 DWORD TiledSurface : BITFIELD_BIT( 0 ); // bool 668 DWORD TileWalk : BITFIELD_BIT( 1 ); // GFX3DSTATE_TILEWALK 669 DWORD HalfPitchForChroma : BITFIELD_BIT( 2 ); // bool 670 DWORD SurfacePitch : BITFIELD_RANGE( 3,20 ); // U18 671 DWORD _Unused1 : BITFIELD_BIT( 21 ); 672 DWORD SurfaceObjectControlState : BITFIELD_RANGE( 22,25 ); // ? 673 DWORD _Unused2 : BITFIELD_BIT( 26 ); 674 DWORD InterleaveChroma : BITFIELD_BIT( 27 ); // bool 675 DWORD SurfaceFormat : BITFIELD_RANGE( 28,31 ); // MEDIASTATE_SURFACEFORMAT 676 } Gen7Media; 677 678 struct _Gen8_Media 679 { 680 DWORD TiledSurface : BITFIELD_BIT( 0 ); // bool 681 DWORD TileWalk : BITFIELD_BIT( 1 ); // GFX3DSTATE_TILEWALK 682 DWORD HalfPitchForChroma : BITFIELD_BIT( 2 ); // bool 683 DWORD SurfacePitch : BITFIELD_RANGE( 3,20 ); // U18 684 DWORD AddressControl : BITFIELD_BIT( 21 ); // ? 685 DWORD _Unused : BITFIELD_RANGE( 22,25 ); 686 DWORD InterleaveChroma : BITFIELD_BIT( 26 ); // bool 687 DWORD SurfaceFormat : BITFIELD_RANGE( 27,31 ); // MEDIASTATE_SURFACEFORMAT 688 } Gen8Media; 689 690 struct _Gen9_Media 691 { 692 DWORD TiledSurface : BITFIELD_BIT( 0 ); // bool 693 DWORD TileWalk : BITFIELD_BIT( 1 ); // GFX3DSTATE_TILEWALK 694 DWORD HalfPitchForChroma : BITFIELD_BIT( 2 ); // bool 695 DWORD SurfacePitch : BITFIELD_RANGE( 3,20 ); // U18 696 DWORD AddressControl : BITFIELD_BIT( 21 ); // ? 697 DWORD MemoryCompressionEnable : BITFIELD_BIT( 22 ); // ? 698 DWORD MemoryCompressionMode : BITFIELD_BIT( 23 ); // ? 699 DWORD OffsetVDirection : BITFIELD_BIT( 24 ); // Cr(V)/Cb(U) Pixel Offset V Direction MSB 700 DWORD OffsetUDirection : BITFIELD_BIT( 25 ); // Cr(V)/Cb(U) Pixel Offset U Direction 701 DWORD InterleaveChroma : BITFIELD_BIT( 26 ); // bool 702 DWORD SurfaceFormat : BITFIELD_RANGE( 27,31 ); // MEDIASTATE_SURFACEFORMAT 703 } Gen9Media; 704 705 DWORD Value; 706 } DW2; 707 708 // DWORD 3 709 union _DW3 710 { 711 struct _All 712 { 713 DWORD TileWalk : BITFIELD_BIT( 0 ); // GFXSHAREDSTATE_TILEWALK 714 DWORD TiledSurface : BITFIELD_BIT( 1 ); // bool 715 DWORD _Unused1 : BITFIELD_BIT( 2 ); 716 DWORD SurfacePitch : BITFIELD_RANGE( 3,19 ); // U17 717 DWORD _Unused2 : BITFIELD_BIT( 20 ); 718 DWORD Depth : BITFIELD_RANGE( 21,31 ); // U11 719 } All; 720 721 struct _Gen7 722 { 723 DWORD SurfacePitch : BITFIELD_RANGE( 0,17 ); // U17 724 DWORD _Unused1 : BITFIELD_RANGE( 18,20 ); // Reserved 725 DWORD Depth : BITFIELD_RANGE( 21,31 ); // U11 726 } Gen7; 727 728 struct _Gen7_Media 729 { 730 DWORD YOffsetForU : BITFIELD_RANGE( 0,13 ); // U14 731 DWORD _Unused1 : BITFIELD_RANGE( 14,15 ); 732 DWORD XOffsetForU : BITFIELD_RANGE( 16,29 ); // U14 733 DWORD _Unused2 : BITFIELD_RANGE( 30,31 ); 734 } Gen7Media; 735 736 struct _Gen10 737 { 738 DWORD SurfacePitch : BITFIELD_RANGE( 0,17 ); // U17 739 DWORD _Unused1 : BITFIELD_RANGE( 18,19 ); // Reserved 740 DWORD TileAddressMappingMode : BITFIELD_BIT( 20 ); // 0: Gen9, 1: Gen10 741 DWORD Depth : BITFIELD_RANGE( 21,31 ); // U11 742 } Gen10; 743 744 DWORD Value; 745 } DW3; 746 747 // DWORD 4 748 union _DW4 749 { 750 struct _All 751 { 752 DWORD MultisamplePositionPaletteIndex : BITFIELD_RANGE( 0,2 ); // U3 753 DWORD _Unused1 : BITFIELD_BIT( 3 ); 754 DWORD NumMultisamples : BITFIELD_RANGE( 4,6 ); // GFXSHAREDSTATE_NUM_MULTISAMPLES 755 DWORD _Unused2 : BITFIELD_BIT( 7 ); 756 DWORD RenderTargetViewExtent : BITFIELD_RANGE( 8,16 ); // U9 757 DWORD MinimumArrayElement : BITFIELD_RANGE( 17,27 ); // U9 758 DWORD SurfaceMinLOD : BITFIELD_RANGE( 28,31 ); // U4 in LOD units 759 } All; 760 761 union _Gen7 762 { 763 struct _SurfaceAll 764 { 765 DWORD MultisamplePositionPaletteIndex : BITFIELD_RANGE( 0,2 ); // U3 766 DWORD NumMultisamples : BITFIELD_RANGE( 3,5 ); // GFXSHAREDSTATE_NUM_MULTISAMPLES 767 DWORD MultisampledSurfaceStorageFormat : BITFIELD_BIT( 6 ); // GFXSHAREDSTATE_MSFMT 768 DWORD RenderTargetViewExtent : BITFIELD_RANGE( 7,17 ); // U11 769 DWORD MinimumArrayElement : BITFIELD_RANGE( 18,28 ); // U11 770 DWORD RenderTargetRotation : BITFIELD_RANGE( 29,30 ); // U4 in LOD units 771 DWORD _Unused : BITFIELD_BIT( 31 ); // Reserved 772 } SurfaceAll; 773 774 struct _SurfaceStrBuf 775 { 776 DWORD MinimumArrayElement : BITFIELD_RANGE( 0,26 ); // U27 777 DWORD _Unused : BITFIELD_RANGE( 27,31 ); // Reserved 778 } SurfaceStrBuf; 779 } Gen7; 780 781 struct _Gen7_Media 782 { 783 DWORD YOffsetforV : BITFIELD_RANGE( 0,14 ); // U15 784 DWORD _Unused1 : BITFIELD_BIT( 15 ); 785 DWORD XOffsetforV : BITFIELD_RANGE( 16,29 ); // U14 786 DWORD _Unused2 : BITFIELD_RANGE( 30,31 ); 787 } Gen7Media; 788 789 union _Gen10 790 { 791 struct _SurfaceAll 792 { 793 DWORD MultisamplePositionPaletteIndex : BITFIELD_RANGE( 0,2 ); // U3 794 DWORD NumMultisamples : BITFIELD_RANGE( 3,5 ); // GFXSHAREDSTATE_NUM_MULTISAMPLES 795 DWORD MultisampledSurfaceStorageFormat : BITFIELD_BIT( 6 ); // GFXSHAREDSTATE_MSFMT 796 DWORD RenderTargetViewExtent : BITFIELD_RANGE( 7,17 ); // U11 797 DWORD MinimumArrayElement : BITFIELD_RANGE( 18,28 ); // U11 798 DWORD RenderTargetRotation : BITFIELD_RANGE( 29,30 ); // U4 in LOD units 799 DWORD ForceNonComparisonReductionType : BITFIELD_BIT( 31 ); 800 } SurfaceAll; 801 802 struct _SurfaceStrBuf 803 { 804 DWORD _Unused : BITFIELD_RANGE( 0,31 ); // Reserved 805 } SurfaceStrBuf; 806 } Gen10; 807 808 DWORD Value; 809 } DW4; 810 811 // DWORD 5 812 union _DW5 813 { 814 struct _All 815 { 816 DWORD _Unused : BITFIELD_RANGE( 0,15 ); 817 DWORD SurfaceCacheabilityControl : BITFIELD_RANGE( 16,17 ); // GFXSHAREDSTATE_CACHEABILITY_CONTROL 818 DWORD SurfaceGraphicsDataType : BITFIELD_BIT( 18 ); // GFXSHAREDSTATE_GRAPHICS_DATATYPE_SOURCE 819 DWORD SurfaceEncryptedDataEnable : BITFIELD_BIT( 19 ); // bool 820 DWORD YOffset : BITFIELD_RANGE( 20,23 ); // U9 821 DWORD SurfaceVerticalAlignment : BITFIELD_BIT( 24 ); // GFXSHAREDSTATE_SURFACE_VERTICAL_ALIGNMENT 822 DWORD XOffset : BITFIELD_RANGE( 25,31 ); // U4 in LOD units 823 } All; 824 825 struct _Gen7 826 { 827 DWORD MipCountLOD : BITFIELD_RANGE( 0,3 ); // U4 828 DWORD SurfaceMinLOD : BITFIELD_RANGE( 4,7 ); // U4 829 // bit 14 - Coherency Type (Gen7.5+) 830 // bit 15 - Stateless Data PortAccess Force Write Thru (Gen7.5+) 831 DWORD _Unused1 : BITFIELD_RANGE( 8,15 ); // Reserved 832 DWORD CacheabilityControlL3 : BITFIELD_BIT( 16 ); // GFXSHAREDSTATE_L3_CACHEABILITY_CONTROL 833 DWORD CacheabilityControlLLC : BITFIELD_BIT( 17 ); // GFXSHAREDSTATE_L3_CACHEABILITY_CONTROL 834 DWORD SurfaceGraphicsDataType : BITFIELD_BIT( 18 ); // GFXSHAREDSTATE_GRAPHICS_DATATYPE_SOURCE 835 DWORD SurfaceEncryptedDataEnable : BITFIELD_BIT( 19 ); // bool 836 DWORD YOffset : BITFIELD_RANGE( 20,23 ); // U9 837 DWORD _Unused2 : BITFIELD_BIT( 24 ); // Reserved 838 DWORD XOffset : BITFIELD_RANGE( 25,31 ); // U4 in LOD units 839 } Gen7; 840 841 struct _Gen7_Media 842 { 843 DWORD _Unused : BITFIELD_RANGE( 0,29 ); 844 DWORD VerticalLineStrideOffest : BITFIELD_BIT( 30 ); // U1, Gen7.5+ 845 DWORD VerticalLineStride : BITFIELD_BIT( 31 ); // U1, Gen7.5+ 846 } Gen7Media; 847 848 struct _Gen8 849 { 850 DWORD MipCountLOD : BITFIELD_RANGE( 0,3 ); // U4 851 DWORD SurfaceMinLOD : BITFIELD_RANGE( 4,7 ); // U4 852 // bit 14 - Coherency Type (Gen8+) 853 DWORD _Unused1 : BITFIELD_RANGE( 8,20 ); // Reserved 854 DWORD YOffset : BITFIELD_RANGE( 21,23 ); // U8 855 DWORD _Unused2 : BITFIELD_BIT( 24 ); // Reserved 856 DWORD XOffset : BITFIELD_RANGE( 25,31 ); // U4 in LOD units 857 } Gen8; 858 859 struct _Gen8_Media 860 { 861 DWORD SurfaceObjectControlState : BITFIELD_RANGE( 0, 6 ); // MEMORY_OBJECT_CONTROL_STATE 862 DWORD _Unused : BITFIELD_RANGE( 7,29 ); 863 DWORD VerticalLineStrideOffset : BITFIELD_BIT( 30 ); 864 DWORD VerticalLineStride : BITFIELD_BIT( 31 ); 865 } Gen8Media; 866 867 struct _Gen9 868 { 869 DWORD MipCountLOD : BITFIELD_RANGE( 0,3 ); // U4 870 DWORD SurfaceMinLOD : BITFIELD_RANGE( 4,7 ); // U4 871 DWORD MipTailStartLOD : BITFIELD_RANGE( 8, 11 ); // MipTailStartLOD 872 DWORD _Unused1 : BITFIELD_RANGE( 12, 13 ); // reserved 873 DWORD CoherencyType : BITFIELD_BIT( 14 ); // Coherency Type (Gen8+) 874 DWORD TiledResourceVerticalAlignment : BITFIELD_RANGE( 15, 16 ); // 875 DWORD TiledResourceHorizontalAlignment : BITFIELD_RANGE( 17, 18 ); // 876 DWORD TiledResourceEnable : BITFIELD_BIT( 19 ); // bool 877 DWORD _Unused2 : BITFIELD_BIT( 20 ); // Reserved 878 DWORD YOffset : BITFIELD_RANGE( 21,23 ); // U8 879 DWORD _Unused3 : BITFIELD_BIT( 24 ); // Reserved 880 DWORD XOffset : BITFIELD_RANGE( 25,31 ); // U4 in LOD units 881 } Gen9; 882 883 struct _Gen9_Media 884 { 885 DWORD SurfaceObjectControlState : BITFIELD_RANGE( 0, 6 ); // MEMORY_OBJECT_CONTROL_STATE 886 DWORD _Unused : BITFIELD_RANGE( 7,17 ); 887 DWORD TiledResourceMode : BITFIELD_RANGE( 18,19 ); 888 DWORD _Unused2 : BITFIELD_RANGE( 20,29 ); // Reserved 889 DWORD VerticalLineStrideOffset : BITFIELD_BIT( 30 ); 890 DWORD VerticalLineStride : BITFIELD_BIT( 31 ); 891 } Gen9Media; 892 893 struct _Gen10_Media 894 { 895 DWORD SurfaceObjectControlState : BITFIELD_RANGE( 0, 6 ); // MEMORY_OBJECT_CONTROL_STATE 896 DWORD _Unused : BITFIELD_RANGE( 7,17 ); 897 DWORD TiledResourceMode : BITFIELD_RANGE( 18,19 ); 898 DWORD Depth : BITFIELD_RANGE( 20,23 ); 899 DWORD _Unused2 : BITFIELD_RANGE( 24,29 ); // Reserved 900 DWORD VerticalLineStrideOffset : BITFIELD_BIT( 30 ); 901 DWORD VerticalLineStride : BITFIELD_BIT( 31 ); 902 } Gen10Media; 903 904 905 DWORD Value; 906 } DW5; 907 908 // DWORD 6 909 union _DW6 910 { 911 struct _All 912 { 913 DWORD Reserved : BITFIELD_RANGE( 0,31 ); // Reserved 914 } All; 915 916 union _Gen7 917 { 918 struct _SurfaceMCS 919 { 920 DWORD MCSEnable : BITFIELD_BIT( 0 ); // bool 921 DWORD _Unused : BITFIELD_RANGE( 1,2 ); // Reserved 922 DWORD MCSSurfacePitch : BITFIELD_RANGE( 3,11 ); // U9 923 DWORD MCSBaseAddress : BITFIELD_RANGE( 12,31 ); // GraphicsAddress[31:12] 924 } SurfaceMCS; 925 926 struct _SurfaceAppendCounter 927 { 928 DWORD AppendCounterEnable : BITFIELD_BIT( 0 ); // bool 929 DWORD _Unused : BITFIELD_RANGE( 2,5 ); 930 DWORD AppendCounterAddress : BITFIELD_RANGE( 6,31 ); // GraphicsAddress[31:12] 931 } SurfaceAppendCounter; 932 } Gen7; 933 934 struct _Gen8_Media 935 { 936 DWORD SurfaceBaseAddress : BITFIELD_RANGE( 0, 31 ); 937 } Gen8Media; 938 939 union _Gen9 940 { 941 struct _SurfacePlanar 942 { 943 DWORD YOffset : BITFIELD_RANGE( 0, 13 ); // U14 944 DWORD _Unused1 : BITFIELD_RANGE( 14, 15 ); // reserved 945 DWORD XOffset : BITFIELD_RANGE( 16, 29 ); // U14 946 DWORD _Unused2 : BITFIELD_RANGE( 30, 31 ); // reserved 947 } SurfacePlanar; 948 949 struct _SurfaceOther 950 { 951 DWORD AuxiliarySurfaceMode : BITFIELD_RANGE( 0, 1 ); // 952 DWORD RenderTargetCompressionEnable : BITFIELD_BIT( 2 ); // 953 DWORD AuxiliarySurfacePitch : BITFIELD_RANGE( 3, 11 ); // U9 954 DWORD _Unused1 : BITFIELD_RANGE( 12, 15 ); // reserved 955 DWORD AuxilarySurfaceQPitch : BITFIELD_RANGE( 16, 30 ); // 956 DWORD _Unused2 : BITFIELD_BIT( 31 ); // reserved 957 } SurfaceOther; 958 } Gen9; 959 960 DWORD Value; 961 } DW6; 962 963 // DWORD 7 964 union _DW7 965 { 966 struct _All 967 { 968 DWORD Reserved : BITFIELD_RANGE( 0,31 ); // Reserved 969 } All; 970 971 struct _Gen7 972 { 973 DWORD ResourceMinLOD : BITFIELD_RANGE( 0,11 ); // 4.8 974 DWORD _Unused : BITFIELD_RANGE( 12,27 ); // Reserved 975 DWORD ClearColorAlpha : BITFIELD_BIT( 28 ); // GFXSHAREDSTATE_CLEARCOLOR 976 DWORD ClearColorBlue : BITFIELD_BIT( 29 ); // GFXSHAREDSTATE_CLEARCOLOR 977 DWORD ClearColorGreen : BITFIELD_BIT( 30 ); // GFXSHAREDSTATE_CLEARCOLOR 978 DWORD ClearColorRed : BITFIELD_BIT( 31 ); // GFXSHAREDSTATE_CLEARCOLOR 979 } Gen7; 980 981 struct _Gen7_5 982 { 983 DWORD ResourceMinLOD : BITFIELD_RANGE( 0,11 ); // 4.8 984 DWORD _Unused : BITFIELD_RANGE( 12,15 ); 985 DWORD ShaderChannelSelectAlpha : BITFIELD_RANGE( 16,18 ); // GFXSHAREDSTATE_SHADERCHANNELSELECT 986 DWORD ShaderChannelSelectBlue : BITFIELD_RANGE( 19,21 ); // GFXSHAREDSTATE_SHADERCHANNELSELECT 987 DWORD ShaderChannelSelectGreen : BITFIELD_RANGE( 22,24 ); // GFXSHAREDSTATE_SHADERCHANNELSELECT 988 DWORD ShaderChannelSelectRed : BITFIELD_RANGE( 25,27 ); // GFXSHAREDSTATE_SHADERCHANNELSELECT 989 DWORD ClearColorAlpha : BITFIELD_BIT( 28 ); // GFXSHAREDSTATE_CLEARCOLOR 990 DWORD ClearColorBlue : BITFIELD_BIT( 29 ); // GFXSHAREDSTATE_CLEARCOLOR 991 DWORD ClearColorGreen : BITFIELD_BIT( 30 ); // GFXSHAREDSTATE_CLEARCOLOR 992 DWORD ClearColorRed : BITFIELD_BIT( 31 ); // GFXSHAREDSTATE_CLEARCOLOR 993 } Gen7_5; 994 995 struct _Gen8_Media 996 { 997 DWORD _Unused : BITFIELD_RANGE( 16, 31 ); 998 DWORD SurfaceBaseAddressHigh : BITFIELD_RANGE( 0, 15 ); 999 } Gen8Media; 1000 1001 struct _Gen9 1002 { 1003 DWORD ResourceMinLOD : BITFIELD_RANGE( 0,11 ); // 4.8 1004 DWORD _Unused1 : BITFIELD_RANGE( 12,15 ); 1005 DWORD ShaderChannelSelectAlpha : BITFIELD_RANGE( 16,18 ); // GFXSHAREDSTATE_SHADERCHANNELSELECT 1006 DWORD ShaderChannelSelectBlue : BITFIELD_RANGE( 19,21 ); // GFXSHAREDSTATE_SHADERCHANNELSELECT 1007 DWORD ShaderChannelSelectGreen : BITFIELD_RANGE( 22,24 ); // GFXSHAREDSTATE_SHADERCHANNELSELECT 1008 DWORD ShaderChannelSelectRed : BITFIELD_RANGE( 25,27 ); // GFXSHAREDSTATE_SHADERCHANNELSELECT 1009 DWORD _Unused2 : BITFIELD_RANGE( 28,31 ); // reserved 1010 } Gen9; 1011 1012 DWORD Value; 1013 } DW7; 1014 1015 union _DW8 1016 { 1017 struct _All 1018 { 1019 DWORD Reserved : BITFIELD_RANGE( 0,31 ); // Reserved 1020 } All; 1021 1022 struct _Gen8 1023 { 1024 DWORD SurfaceBaseAddress : BITFIELD_RANGE( 0,31 ); // GTT[31:0] 1025 } Gen8; 1026 1027 DWORD Value; 1028 } DW8; 1029 1030 union _DW9 1031 { 1032 struct _All 1033 { 1034 DWORD Reserved : BITFIELD_RANGE( 0,31 ); // Reserved 1035 } All; 1036 1037 struct _Gen8 1038 { 1039 DWORD Surface64bitBaseAddress : BITFIELD_RANGE( 0,15 ); // GTT[47:32] 1040 DWORD _Unused : BITFIELD_RANGE( 16,31 ); // Reserved 1041 } Gen8; 1042 1043 DWORD Value; 1044 } DW9; 1045 1046 union _DW10 1047 { 1048 struct _All 1049 { 1050 DWORD Reserved : BITFIELD_RANGE( 0,31 ); // Reserved 1051 } All; 1052 1053 struct _Gen8 1054 { 1055 DWORD AuxiliarySurfaceBaseAddress : BITFIELD_RANGE( 0,31 ); // GTT[31:0] 1056 } Gen8; 1057 1058 union _Gen9 1059 { 1060 struct _SurfacePlanar 1061 { 1062 DWORD QuiltWidth : BITFIELD_RANGE( 0, 4 ); // SKL U5 1063 DWORD QuiltHeight : BITFIELD_RANGE( 5, 9 ); // SKL U5 1064 DWORD _Unused : BITFIELD_RANGE( 10, 31 ); 1065 } SurfacePlanar; 1066 1067 struct _SurfaceOther 1068 { 1069 DWORD QuiltWidth : BITFIELD_RANGE( 0, 4 ); // SKL U5 1070 DWORD QuiltHeight : BITFIELD_RANGE( 5, 9 ); // SKL U5 1071 DWORD _Unused : BITFIELD_RANGE( 10, 11 ); 1072 DWORD AuxiliarySurfaceBaseAddress : BITFIELD_RANGE( 12, 31 ); // GTT[31:0] 1073 } SurfaceOther; 1074 } Gen9; 1075 DWORD Value; 1076 } DW10; 1077 1078 union _DW11 1079 { 1080 struct _All 1081 { 1082 DWORD Reserved : BITFIELD_RANGE( 0,31 ); // Reserved 1083 } All; 1084 1085 struct _Gen8 1086 { 1087 DWORD Auxiliary64bitBaseAddress : BITFIELD_RANGE( 0,15 ); // GTT[47:32] 1088 DWORD _Unused : BITFIELD_RANGE( 16,31 ); // Reserved 1089 } Gen8; 1090 1091 union _Gen9 1092 { 1093 struct _SurfacePlanar 1094 { 1095 DWORD YOffsetVplane : BITFIELD_RANGE( 0, 13); 1096 DWORD _Unused : BITFIELD_RANGE( 14,15); // reserved 1097 DWORD XOffsetVplane : BITFIELD_RANGE( 16,29); 1098 DWORD _Unused2 : BITFIELD_RANGE( 30,31); // reserved 1099 } SurfacePlanar; 1100 1101 struct _SurfaceOther 1102 { 1103 DWORD AuxiliarySurfaceBaseAddress : BITFIELD_RANGE( 0, 31 ); // GTT[32:63] 1104 } SurfaceOther; 1105 } Gen9; 1106 DWORD Value; 1107 } DW11; 1108 1109 union _DW12 1110 { 1111 struct _All 1112 { 1113 DWORD Reserved : BITFIELD_RANGE( 0,31 ); // Reserved 1114 } All; 1115 1116 struct _Gen8 1117 { 1118 DWORD HierarchicalDepthClearValue : BITFIELD_RANGE( 0,31 ); // float 1119 } Gen8; 1120 1121 struct _Gen9 1122 { 1123 DWORD RedClearColor : BITFIELD_RANGE( 0,31 ); // float 1124 } Gen9; 1125 1126 union _Gen10 1127 { 1128 struct _ClearValueAddressEnable 1129 { 1130 DWORD _Unused : BITFIELD_RANGE( 0, 5 ); // Reserved 1131 DWORD ClearColorAddress : BITFIELD_RANGE( 6,31 ); // GraphicsAddress[31:6] 1132 } ClearValueAddressEnable; 1133 1134 struct _ClearValueAddressDisble 1135 { 1136 DWORD RedClearColor : BITFIELD_RANGE( 0,31 ); // float 1137 } ClearValueAddressDisble; 1138 } Gen10; 1139 1140 DWORD Value; 1141 } DW12; 1142 1143 union _DW13 1144 { 1145 struct _All 1146 { 1147 DWORD Reserved : BITFIELD_RANGE( 0,31 ); // Reserved 1148 } All; 1149 1150 struct _Gen9 1151 { 1152 DWORD GreenClearColor : BITFIELD_RANGE( 0,31 ); // float 1153 } Gen9; 1154 1155 union _Gen10 1156 { 1157 struct _ClearValueAddressEnable 1158 { 1159 DWORD _Unused : BITFIELD_RANGE( 0, 15 ); // Reserved 1160 DWORD ClearColorAddressHigh : BITFIELD_RANGE( 16,31 ); // GraphicsAddress 1161 } ClearValueAddressEnable; 1162 1163 struct _ClearValueAddressDisble 1164 { 1165 DWORD GreenClearColor : BITFIELD_RANGE( 0,31 ); // float 1166 } ClearValueAddressDisble; 1167 } Gen10; 1168 1169 DWORD Value; 1170 } DW13; 1171 1172 union _DW14 1173 { 1174 struct _All 1175 { 1176 DWORD Reserved : BITFIELD_RANGE( 0,31 ); // Reserved 1177 } All; 1178 1179 struct _Gen9 1180 { 1181 DWORD BlueClearColor : BITFIELD_RANGE( 0,31 ); // float 1182 } Gen9; 1183 1184 union _Gen10 1185 { 1186 struct _ClearValueAddressEnable 1187 { 1188 DWORD _Unused : BITFIELD_RANGE( 0, 31 ); // Reserved 1189 } ClearValueAddressEnable; 1190 1191 struct _ClearValueAddressDisble 1192 { 1193 DWORD BlueClearColor : BITFIELD_RANGE( 0,31 ); // float 1194 } ClearValueAddressDisble; 1195 } Gen10; 1196 1197 DWORD Value; 1198 } DW14; 1199 1200 union _DW15 1201 { 1202 struct _All 1203 { 1204 DWORD Reserved : BITFIELD_RANGE( 0,31 ); // Reserved 1205 } All; 1206 1207 struct _Gen9 1208 { 1209 DWORD AlphaClearColor : BITFIELD_RANGE( 0,31 ); // float 1210 } Gen9; 1211 1212 union _Gen10 1213 { 1214 struct _ClearValueAddressEnable 1215 { 1216 DWORD _Unused : BITFIELD_RANGE( 0, 31 ); // Reserved 1217 } ClearValueAddressEnable; 1218 1219 struct _ClearValueAddressDisble 1220 { 1221 DWORD AlphaClearColor : BITFIELD_RANGE( 0,31 ); // float 1222 } ClearValueAddressDisble; 1223 } Gen10; 1224 1225 DWORD Value; 1226 } DW15; 1227 }; 1228 1229 static_assert(SIZE32(SSharedStateSurfaceState) == 16); 1230 1231 /*****************************************************************************\ 1232 UNION: SSurfaceStateBufferLength 1233 \*****************************************************************************/ 1234 union SSurfaceStateBufferLength 1235 { 1236 struct _All 1237 { 1238 DWORD Width : BITFIELD_RANGE( 0,6 ); // U7 1239 DWORD Height : BITFIELD_RANGE( 7,19 ); // U13 1240 DWORD Depth : BITFIELD_RANGE( 20,26 ); // U7 1241 DWORD _Unused : BITFIELD_RANGE( 27,31 ); 1242 } All; 1243 1244 DWORD Length; 1245 }; 1246 1247 static_assert(SIZE32(SSurfaceStateBufferLength) == 1); 1248 1249 } // namespace G6HWC 1250 1251 // Reset packing alignment to project default 1252 #pragma pack() 1253