yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f65d756bf
master
1#pragma once 2 3// 4// The CD3DX12_PIPELINE_STATE_STREAM2 struct and dependencies extracted from 5// `d3dx12_pipeline_state_stream.h`. Attribution Microsoft. 6// 7 8#include "d3d12-sal-defs.h" 9 10#include <climits> 11#include <d3d12.h> 12#include <dxgi1_4.h> 13 14struct CD3DX12_DEFAULT 15{ 16}; 17 18//------------------------------------------------------------------------------------------------ 19struct CD3DX12_DEPTH_STENCIL_DESC :public D3D12_DEPTH_STENCIL_DESC 20{ 21CD3DX12_DEPTH_STENCIL_DESC ()= default ; 22explicit CD3DX12_DEPTH_STENCIL_DESC (const D3D12_DEPTH_STENCIL_DESC & o )noexcept 23 :D3D12_DEPTH_STENCIL_DESC (o ) 24 { 25 } 26explicit CD3DX12_DEPTH_STENCIL_DESC (CD3DX12_DEFAULT )noexcept 27 { 28DepthEnable = TRUE; 29DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL ; 30DepthFunc = D3D12_COMPARISON_FUNC_LESS ; 31StencilEnable = FALSE; 32StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK ; 33StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK ; 34const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp = { 35D3D12_STENCIL_OP_KEEP , 36D3D12_STENCIL_OP_KEEP , 37D3D12_STENCIL_OP_KEEP , 38D3D12_COMPARISON_FUNC_ALWAYS }; 39FrontFace = defaultStencilOp ; 40BackFace = defaultStencilOp ; 41 } 42explicit CD3DX12_DEPTH_STENCIL_DESC ( 43BOOL depthEnable , 44D3D12_DEPTH_WRITE_MASK depthWriteMask , 45D3D12_COMPARISON_FUNC depthFunc , 46BOOL stencilEnable , 47UINT8 stencilReadMask , 48UINT8 stencilWriteMask , 49D3D12_STENCIL_OP frontStencilFailOp , 50D3D12_STENCIL_OP frontStencilDepthFailOp , 51D3D12_STENCIL_OP frontStencilPassOp , 52D3D12_COMPARISON_FUNC frontStencilFunc , 53D3D12_STENCIL_OP backStencilFailOp , 54D3D12_STENCIL_OP backStencilDepthFailOp , 55D3D12_STENCIL_OP backStencilPassOp , 56D3D12_COMPARISON_FUNC backStencilFunc )noexcept 57 { 58DepthEnable = depthEnable ; 59DepthWriteMask = depthWriteMask ; 60DepthFunc = depthFunc ; 61StencilEnable = stencilEnable ; 62StencilReadMask = stencilReadMask ; 63StencilWriteMask = stencilWriteMask ; 64FrontFace .StencilFailOp = frontStencilFailOp ; 65FrontFace .StencilDepthFailOp = frontStencilDepthFailOp ; 66FrontFace .StencilPassOp = frontStencilPassOp ; 67FrontFace .StencilFunc = frontStencilFunc ; 68BackFace .StencilFailOp = backStencilFailOp ; 69BackFace .StencilDepthFailOp = backStencilDepthFailOp ; 70BackFace .StencilPassOp = backStencilPassOp ; 71BackFace .StencilFunc = backStencilFunc ; 72 } 73}; 74 75//------------------------------------------------------------------------------------------------ 76struct CD3DX12_DEPTH_STENCIL_DESC1 :public D3D12_DEPTH_STENCIL_DESC1 77{ 78CD3DX12_DEPTH_STENCIL_DESC1 ()= default ; 79explicit CD3DX12_DEPTH_STENCIL_DESC1 (const D3D12_DEPTH_STENCIL_DESC1 & o )noexcept 80 :D3D12_DEPTH_STENCIL_DESC1 (o ) 81 { 82 } 83explicit CD3DX12_DEPTH_STENCIL_DESC1 (const D3D12_DEPTH_STENCIL_DESC & o )noexcept 84 { 85DepthEnable = o .DepthEnable ; 86DepthWriteMask = o .DepthWriteMask ; 87DepthFunc = o .DepthFunc ; 88StencilEnable = o .StencilEnable ; 89StencilReadMask = o .StencilReadMask ; 90StencilWriteMask = o .StencilWriteMask ; 91FrontFace .StencilFailOp = o .FrontFace .StencilFailOp ; 92FrontFace .StencilDepthFailOp = o .FrontFace .StencilDepthFailOp ; 93FrontFace .StencilPassOp = o .FrontFace .StencilPassOp ; 94FrontFace .StencilFunc = o .FrontFace .StencilFunc ; 95BackFace .StencilFailOp = o .BackFace .StencilFailOp ; 96BackFace .StencilDepthFailOp = o .BackFace .StencilDepthFailOp ; 97BackFace .StencilPassOp = o .BackFace .StencilPassOp ; 98BackFace .StencilFunc = o .BackFace .StencilFunc ; 99DepthBoundsTestEnable = FALSE; 100 } 101explicit CD3DX12_DEPTH_STENCIL_DESC1 (CD3DX12_DEFAULT )noexcept 102 { 103DepthEnable = TRUE; 104DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL ; 105DepthFunc = D3D12_COMPARISON_FUNC_LESS ; 106StencilEnable = FALSE; 107StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK ; 108StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK ; 109const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp = { 110D3D12_STENCIL_OP_KEEP , 111D3D12_STENCIL_OP_KEEP , 112D3D12_STENCIL_OP_KEEP , 113D3D12_COMPARISON_FUNC_ALWAYS }; 114FrontFace = defaultStencilOp ; 115BackFace = defaultStencilOp ; 116DepthBoundsTestEnable = FALSE; 117 } 118explicit CD3DX12_DEPTH_STENCIL_DESC1 ( 119BOOL depthEnable , 120D3D12_DEPTH_WRITE_MASK depthWriteMask , 121D3D12_COMPARISON_FUNC depthFunc , 122BOOL stencilEnable , 123UINT8 stencilReadMask , 124UINT8 stencilWriteMask , 125D3D12_STENCIL_OP frontStencilFailOp , 126D3D12_STENCIL_OP frontStencilDepthFailOp , 127D3D12_STENCIL_OP frontStencilPassOp , 128D3D12_COMPARISON_FUNC frontStencilFunc , 129D3D12_STENCIL_OP backStencilFailOp , 130D3D12_STENCIL_OP backStencilDepthFailOp , 131D3D12_STENCIL_OP backStencilPassOp , 132D3D12_COMPARISON_FUNC backStencilFunc , 133BOOL depthBoundsTestEnable )noexcept 134 { 135DepthEnable = depthEnable ; 136DepthWriteMask = depthWriteMask ; 137DepthFunc = depthFunc ; 138StencilEnable = stencilEnable ; 139StencilReadMask = stencilReadMask ; 140StencilWriteMask = stencilWriteMask ; 141FrontFace .StencilFailOp = frontStencilFailOp ; 142FrontFace .StencilDepthFailOp = frontStencilDepthFailOp ; 143FrontFace .StencilPassOp = frontStencilPassOp ; 144FrontFace .StencilFunc = frontStencilFunc ; 145BackFace .StencilFailOp = backStencilFailOp ; 146BackFace .StencilDepthFailOp = backStencilDepthFailOp ; 147BackFace .StencilPassOp = backStencilPassOp ; 148BackFace .StencilFunc = backStencilFunc ; 149DepthBoundsTestEnable = depthBoundsTestEnable ; 150 } 151operator D3D12_DEPTH_STENCIL_DESC ()const noexcept 152 { 153D3D12_DEPTH_STENCIL_DESC D ; 154D .DepthEnable = DepthEnable ; 155D .DepthWriteMask = DepthWriteMask ; 156D .DepthFunc = DepthFunc ; 157D .StencilEnable = StencilEnable ; 158D .StencilReadMask = StencilReadMask ; 159D .StencilWriteMask = StencilWriteMask ; 160D .FrontFace .StencilFailOp = FrontFace .StencilFailOp ; 161D .FrontFace .StencilDepthFailOp = FrontFace .StencilDepthFailOp ; 162D .FrontFace .StencilPassOp = FrontFace .StencilPassOp ; 163D .FrontFace .StencilFunc = FrontFace .StencilFunc ; 164D .BackFace .StencilFailOp = BackFace .StencilFailOp ; 165D .BackFace .StencilDepthFailOp = BackFace .StencilDepthFailOp ; 166D .BackFace .StencilPassOp = BackFace .StencilPassOp ; 167D .BackFace .StencilFunc = BackFace .StencilFunc ; 168return D ; 169 } 170}; 171 172//------------------------------------------------------------------------------------------------ 173struct CD3DX12_BLEND_DESC :public D3D12_BLEND_DESC 174{ 175CD3DX12_BLEND_DESC ()= default ; 176explicit CD3DX12_BLEND_DESC (const D3D12_BLEND_DESC & o )noexcept 177 :D3D12_BLEND_DESC (o ) 178 { 179 } 180explicit CD3DX12_BLEND_DESC (CD3DX12_DEFAULT )noexcept 181 { 182AlphaToCoverageEnable = FALSE; 183IndependentBlendEnable = FALSE; 184const D3D12_RENDER_TARGET_BLEND_DESC defaultRenderTargetBlendDesc = { 185 FALSE, 186 FALSE, 187D3D12_BLEND_ONE , 188D3D12_BLEND_ZERO , 189D3D12_BLEND_OP_ADD , 190D3D12_BLEND_ONE , 191D3D12_BLEND_ZERO , 192D3D12_BLEND_OP_ADD , 193D3D12_LOGIC_OP_NOOP , 194D3D12_COLOR_WRITE_ENABLE_ALL , 195 }; 196for (UINT i = 0 ;i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT ;++ i ) 197RenderTarget [i ]= defaultRenderTargetBlendDesc ; 198 } 199}; 200 201//------------------------------------------------------------------------------------------------ 202struct CD3DX12_RASTERIZER_DESC :public D3D12_RASTERIZER_DESC 203{ 204CD3DX12_RASTERIZER_DESC ()= default ; 205explicit CD3DX12_RASTERIZER_DESC (const D3D12_RASTERIZER_DESC & o )noexcept 206 :D3D12_RASTERIZER_DESC (o ) 207 { 208 } 209explicit CD3DX12_RASTERIZER_DESC (CD3DX12_DEFAULT )noexcept 210 { 211FillMode = D3D12_FILL_MODE_SOLID ; 212CullMode = D3D12_CULL_MODE_BACK ; 213FrontCounterClockwise = FALSE; 214DepthBias = D3D12_DEFAULT_DEPTH_BIAS ; 215DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP ; 216SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS ; 217DepthClipEnable = TRUE; 218MultisampleEnable = FALSE; 219AntialiasedLineEnable = FALSE; 220ForcedSampleCount = 0 ; 221ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF ; 222 } 223explicit CD3DX12_RASTERIZER_DESC ( 224D3D12_FILL_MODE fillMode , 225D3D12_CULL_MODE cullMode , 226BOOL frontCounterClockwise , 227INT depthBias , 228FLOAT depthBiasClamp , 229FLOAT slopeScaledDepthBias , 230BOOL depthClipEnable , 231BOOL multisampleEnable , 232BOOL antialiasedLineEnable , 233UINT forcedSampleCount , 234D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster )noexcept 235 { 236FillMode = fillMode ; 237CullMode = cullMode ; 238FrontCounterClockwise = frontCounterClockwise ; 239DepthBias = depthBias ; 240DepthBiasClamp = depthBiasClamp ; 241SlopeScaledDepthBias = slopeScaledDepthBias ; 242DepthClipEnable = depthClipEnable ; 243MultisampleEnable = multisampleEnable ; 244AntialiasedLineEnable = antialiasedLineEnable ; 245ForcedSampleCount = forcedSampleCount ; 246ConservativeRaster = conservativeRaster ; 247 } 248}; 249 250//------------------------------------------------------------------------------------------------ 251struct CD3DX12_VIEW_INSTANCING_DESC :public D3D12_VIEW_INSTANCING_DESC 252{ 253CD3DX12_VIEW_INSTANCING_DESC ()= default ; 254explicit CD3DX12_VIEW_INSTANCING_DESC (const D3D12_VIEW_INSTANCING_DESC & o )noexcept 255 :D3D12_VIEW_INSTANCING_DESC (o ) 256 { 257 } 258explicit CD3DX12_VIEW_INSTANCING_DESC (CD3DX12_DEFAULT )noexcept 259 { 260ViewInstanceCount = 0 ; 261pViewInstanceLocations = nullptr ; 262Flags = D3D12_VIEW_INSTANCING_FLAG_NONE ; 263 } 264explicit CD3DX12_VIEW_INSTANCING_DESC ( 265UINT InViewInstanceCount , 266const D3D12_VIEW_INSTANCE_LOCATION * InViewInstanceLocations , 267D3D12_VIEW_INSTANCING_FLAGS InFlags )noexcept 268 { 269ViewInstanceCount = InViewInstanceCount ; 270pViewInstanceLocations = InViewInstanceLocations ; 271Flags = InFlags ; 272 } 273}; 274 275//------------------------------------------------------------------------------------------------ 276struct CD3DX12_RT_FORMAT_ARRAY :public D3D12_RT_FORMAT_ARRAY 277{ 278CD3DX12_RT_FORMAT_ARRAY ()= default ; 279explicit CD3DX12_RT_FORMAT_ARRAY (const D3D12_RT_FORMAT_ARRAY & o )noexcept 280 :D3D12_RT_FORMAT_ARRAY (o ) 281 { 282 } 283explicit CD3DX12_RT_FORMAT_ARRAY ( 284_In_reads_ (NumFormats )const DXGI_FORMAT * pFormats , 285UINT NumFormats )noexcept 286 { 287NumRenderTargets = NumFormats ; 288memcpy (RTFormats ,pFormats ,sizeof (RTFormats )); 289// assumes ARRAY_SIZE(pFormats) == ARRAY_SIZE(RTFormats) 290 } 291}; 292 293//------------------------------------------------------------------------------------------------ 294struct CD3DX12_SHADER_BYTECODE :public D3D12_SHADER_BYTECODE 295{ 296CD3DX12_SHADER_BYTECODE ()= default ; 297explicit CD3DX12_SHADER_BYTECODE (const D3D12_SHADER_BYTECODE & o )noexcept 298 :D3D12_SHADER_BYTECODE (o ) 299 { 300 } 301CD3DX12_SHADER_BYTECODE (_In_ ID3DBlob * pShaderBlob )noexcept 302 { 303pShaderBytecode = pShaderBlob -> GetBufferPointer (); 304BytecodeLength = pShaderBlob -> GetBufferSize (); 305 } 306CD3DX12_SHADER_BYTECODE (const void * _pShaderBytecode ,SIZE_T bytecodeLength )noexcept 307 { 308pShaderBytecode = _pShaderBytecode ; 309BytecodeLength = bytecodeLength ; 310 } 311}; 312 313struct DefaultSampleMask 314{ 315operator UINT ()noexcept {return UINT_MAX ; } 316}; 317struct DefaultSampleDesc 318{ 319operator DXGI_SAMPLE_DESC ()noexcept {return DXGI_SAMPLE_DESC {1 ,0 }; } 320}; 321 322#ifdef _MSC_VER 323#pragma warning(push) 324#pragma warning(disable : 4324) 325#endif 326template < 327typename InnerStructType , 328D3D12_PIPELINE_STATE_SUBOBJECT_TYPE Type , 329typename DefaultArg = InnerStructType > 330class alignas (void * )CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT 331{ 332private : 333D3D12_PIPELINE_STATE_SUBOBJECT_TYPE pssType ; 334InnerStructType pssInner ; 335 336public : 337CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT ()noexcept 338 :pssType (Type ),pssInner (DefaultArg ()) 339 { 340 } 341CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (InnerStructType const & i )noexcept 342 :pssType (Type ),pssInner (i ) 343 { 344 } 345CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT & operator = (InnerStructType const & i )noexcept 346 { 347pssType = Type ; 348pssInner = i ; 349return * this ; 350 } 351operator InnerStructType const & ()const noexcept {return pssInner ; } 352operator InnerStructType & ()noexcept {return pssInner ; } 353InnerStructType * operator & ()noexcept {return & pssInner ; } 354InnerStructType const * operator & ()const noexcept {return & pssInner ; } 355}; 356#ifdef _MSC_VER 357#pragma warning (pop ) 358#endif 359 360typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 361D3D12_PIPELINE_STATE_FLAGS , 362D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS > 363CD3DX12_PIPELINE_STATE_STREAM_FLAGS ; 364typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < UINT ,D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK > 365CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK ; 366typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 367ID3D12RootSignature * , 368D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE > 369CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE ; 370typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 371D3D12_INPUT_LAYOUT_DESC , 372D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT > 373CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT ; 374typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 375D3D12_INDEX_BUFFER_STRIP_CUT_VALUE , 376D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE > 377CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE ; 378typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 379D3D12_PRIMITIVE_TOPOLOGY_TYPE , 380D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY > 381CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY ; 382typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 383D3D12_SHADER_BYTECODE , 384D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS > 385CD3DX12_PIPELINE_STATE_STREAM_VS ; 386typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 387D3D12_SHADER_BYTECODE , 388D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS > 389CD3DX12_PIPELINE_STATE_STREAM_GS ; 390typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 391D3D12_STREAM_OUTPUT_DESC , 392D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT > 393CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT ; 394typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 395D3D12_SHADER_BYTECODE , 396D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS > 397CD3DX12_PIPELINE_STATE_STREAM_HS ; 398typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 399D3D12_SHADER_BYTECODE , 400D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS > 401CD3DX12_PIPELINE_STATE_STREAM_DS ; 402typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 403D3D12_SHADER_BYTECODE , 404D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS > 405CD3DX12_PIPELINE_STATE_STREAM_PS ; 406typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 407D3D12_SHADER_BYTECODE , 408D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_AS > 409CD3DX12_PIPELINE_STATE_STREAM_AS ; 410typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 411D3D12_SHADER_BYTECODE , 412D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MS > 413CD3DX12_PIPELINE_STATE_STREAM_MS ; 414typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 415D3D12_SHADER_BYTECODE , 416D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS > 417CD3DX12_PIPELINE_STATE_STREAM_CS ; 418typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 419CD3DX12_BLEND_DESC , 420D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND , 421CD3DX12_DEFAULT > 422CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC ; 423typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 424CD3DX12_DEPTH_STENCIL_DESC , 425D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL , 426CD3DX12_DEFAULT > 427CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL ; 428typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 429CD3DX12_DEPTH_STENCIL_DESC1 , 430D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1 , 431CD3DX12_DEFAULT > 432CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 ; 433typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 434DXGI_FORMAT , 435D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT > 436CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT ; 437typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 438CD3DX12_RASTERIZER_DESC , 439D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER , 440CD3DX12_DEFAULT > 441CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER ; 442typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 443D3D12_RT_FORMAT_ARRAY , 444D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS > 445CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS ; 446typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 447DXGI_SAMPLE_DESC , 448D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC , 449DefaultSampleDesc > 450CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC ; 451typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 452UINT , 453D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK , 454DefaultSampleMask > 455CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK ; 456typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 457D3D12_CACHED_PIPELINE_STATE , 458D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO > 459CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO ; 460typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT < 461CD3DX12_VIEW_INSTANCING_DESC , 462D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING , 463CD3DX12_DEFAULT > 464CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ; 465 466struct D3DX12_MESH_SHADER_PIPELINE_STATE_DESC 467{ 468ID3D12RootSignature * pRootSignature ; 469D3D12_SHADER_BYTECODE AS ; 470D3D12_SHADER_BYTECODE MS ; 471D3D12_SHADER_BYTECODE PS ; 472D3D12_BLEND_DESC BlendState ; 473UINT SampleMask ; 474D3D12_RASTERIZER_DESC RasterizerState ; 475D3D12_DEPTH_STENCIL_DESC DepthStencilState ; 476D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType ; 477UINT NumRenderTargets ; 478DXGI_FORMAT RTVFormats [D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT ]; 479DXGI_FORMAT DSVFormat ; 480DXGI_SAMPLE_DESC SampleDesc ; 481UINT NodeMask ; 482D3D12_CACHED_PIPELINE_STATE CachedPSO ; 483D3D12_PIPELINE_STATE_FLAGS Flags ; 484}; 485 486// CD3DX12_PIPELINE_STATE_STREAM2 Works on OS Build 19041+ (where there is a new mesh shader 487// pipeline). Use CD3DX12_PIPELINE_STATE_STREAM1 for OS Build 16299+ (where there is a new view 488// instancing subobject). Use CD3DX12_PIPELINE_STATE_STREAM for OS Build 15063+ support. 489struct CD3DX12_PIPELINE_STATE_STREAM2 490{ 491CD3DX12_PIPELINE_STATE_STREAM2 ()= default ; 492// Mesh and amplification shaders must be set manually, since they do not have representation in 493// D3D12_GRAPHICS_PIPELINE_STATE_DESC 494CD3DX12_PIPELINE_STATE_STREAM2 (const D3D12_GRAPHICS_PIPELINE_STATE_DESC & Desc )noexcept 495 :Flags (Desc .Flags ) 496 ,NodeMask (Desc .NodeMask ) 497 ,pRootSignature (Desc .pRootSignature ) 498 ,InputLayout (Desc .InputLayout ) 499 ,IBStripCutValue (Desc .IBStripCutValue ) 500 ,PrimitiveTopologyType (Desc .PrimitiveTopologyType ) 501 ,VS (Desc .VS ) 502 ,GS (Desc .GS ) 503 ,StreamOutput (Desc .StreamOutput ) 504 ,HS (Desc .HS ) 505 ,DS (Desc .DS ) 506 ,PS (Desc .PS ) 507 ,BlendState (CD3DX12_BLEND_DESC (Desc .BlendState )) 508 ,DepthStencilState (CD3DX12_DEPTH_STENCIL_DESC1 (Desc .DepthStencilState )) 509 ,DSVFormat (Desc .DSVFormat ) 510 ,RasterizerState (CD3DX12_RASTERIZER_DESC (Desc .RasterizerState )) 511 ,RTVFormats (CD3DX12_RT_FORMAT_ARRAY (Desc .RTVFormats ,Desc .NumRenderTargets )) 512 ,SampleDesc (Desc .SampleDesc ) 513 ,SampleMask (Desc .SampleMask ) 514 ,CachedPSO (Desc .CachedPSO ) 515 ,ViewInstancingDesc (CD3DX12_VIEW_INSTANCING_DESC (CD3DX12_DEFAULT ())) 516 { 517 } 518CD3DX12_PIPELINE_STATE_STREAM2 (const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC & Desc )noexcept 519 :Flags (Desc .Flags ) 520 ,NodeMask (Desc .NodeMask ) 521 ,pRootSignature (Desc .pRootSignature ) 522 ,PrimitiveTopologyType (Desc .PrimitiveTopologyType ) 523 ,PS (Desc .PS ) 524 ,AS (Desc .AS ) 525 ,MS (Desc .MS ) 526 ,BlendState (CD3DX12_BLEND_DESC (Desc .BlendState )) 527 ,DepthStencilState (CD3DX12_DEPTH_STENCIL_DESC1 (Desc .DepthStencilState )) 528 ,DSVFormat (Desc .DSVFormat ) 529 ,RasterizerState (CD3DX12_RASTERIZER_DESC (Desc .RasterizerState )) 530 ,RTVFormats (CD3DX12_RT_FORMAT_ARRAY (Desc .RTVFormats ,Desc .NumRenderTargets )) 531 ,SampleDesc (Desc .SampleDesc ) 532 ,SampleMask (Desc .SampleMask ) 533 ,CachedPSO (Desc .CachedPSO ) 534 ,ViewInstancingDesc (CD3DX12_VIEW_INSTANCING_DESC (CD3DX12_DEFAULT ())) 535 { 536 } 537CD3DX12_PIPELINE_STATE_STREAM2 (const D3D12_COMPUTE_PIPELINE_STATE_DESC & Desc )noexcept 538 :Flags (Desc .Flags ) 539 ,NodeMask (Desc .NodeMask ) 540 ,pRootSignature (Desc .pRootSignature ) 541 ,CS (CD3DX12_SHADER_BYTECODE (Desc .CS )) 542 ,CachedPSO (Desc .CachedPSO ) 543 { 544static_cast < D3D12_DEPTH_STENCIL_DESC1 &> (DepthStencilState ).DepthEnable = false; 545 } 546CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags ; 547CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask ; 548CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature ; 549CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout ; 550CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue ; 551CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType ; 552CD3DX12_PIPELINE_STATE_STREAM_VS VS ; 553CD3DX12_PIPELINE_STATE_STREAM_GS GS ; 554CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput ; 555CD3DX12_PIPELINE_STATE_STREAM_HS HS ; 556CD3DX12_PIPELINE_STATE_STREAM_DS DS ; 557CD3DX12_PIPELINE_STATE_STREAM_PS PS ; 558CD3DX12_PIPELINE_STATE_STREAM_AS AS ; 559CD3DX12_PIPELINE_STATE_STREAM_MS MS ; 560CD3DX12_PIPELINE_STATE_STREAM_CS CS ; 561CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState ; 562CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState ; 563CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat ; 564CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState ; 565CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats ; 566CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc ; 567CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask ; 568CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO ; 569CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc ; 570D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0 ()const noexcept 571 { 572D3D12_GRAPHICS_PIPELINE_STATE_DESC D ; 573D .Flags = this -> Flags ; 574D .NodeMask = this -> NodeMask ; 575D .pRootSignature = this -> pRootSignature ; 576D .InputLayout = this -> InputLayout ; 577D .IBStripCutValue = this -> IBStripCutValue ; 578D .PrimitiveTopologyType = this -> PrimitiveTopologyType ; 579D .VS = this -> VS ; 580D .GS = this -> GS ; 581D .StreamOutput = this -> StreamOutput ; 582D .HS = this -> HS ; 583D .DS = this -> DS ; 584D .PS = this -> PS ; 585D .BlendState = this -> BlendState ; 586D .DepthStencilState = 587CD3DX12_DEPTH_STENCIL_DESC1 (D3D12_DEPTH_STENCIL_DESC1 (this -> DepthStencilState )); 588D .DSVFormat = this -> DSVFormat ; 589D .RasterizerState = this -> RasterizerState ; 590D .NumRenderTargets = D3D12_RT_FORMAT_ARRAY (this -> RTVFormats ).NumRenderTargets ; 591memcpy ( 592D .RTVFormats , 593D3D12_RT_FORMAT_ARRAY (this -> RTVFormats ).RTFormats , 594sizeof (D .RTVFormats )); 595D .SampleDesc = this -> SampleDesc ; 596D .SampleMask = this -> SampleMask ; 597D .CachedPSO = this -> CachedPSO ; 598return D ; 599 } 600D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0 ()const noexcept 601 { 602D3D12_COMPUTE_PIPELINE_STATE_DESC D ; 603D .Flags = this -> Flags ; 604D .NodeMask = this -> NodeMask ; 605D .pRootSignature = this -> pRootSignature ; 606D .CS = this -> CS ; 607D .CachedPSO = this -> CachedPSO ; 608return D ; 609 } 610};