Path: blob/master/thirdparty/directx_headers/include/directx/d3dx12_pipeline_state_stream.h
22057 views
//*********************************************************1//2// Copyright (c) Microsoft Corporation.3// Licensed under the MIT License (MIT).4//5//*********************************************************67#pragma once89#ifndef __cplusplus10#error D3DX12 requires C++11#endif1213#include "d3dx12_default.h"14#include "d3d12.h"15#include "d3dx12_core.h"1617//------------------------------------------------------------------------------------------------18// Pipeline State Stream Helpers19//------------------------------------------------------------------------------------------------2021//------------------------------------------------------------------------------------------------22// Stream Subobjects, i.e. elements of a stream2324struct DefaultSampleMask { operator UINT() noexcept { return UINT_MAX; } };25struct DefaultSampleDesc { operator DXGI_SAMPLE_DESC() noexcept { return DXGI_SAMPLE_DESC{1, 0}; } };2627#ifdef _MSC_VER28#pragma warning(push)29#pragma warning(disable : 4324)30#endif31template <typename InnerStructType, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE Type, typename DefaultArg = InnerStructType>32class alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT33{34private:35D3D12_PIPELINE_STATE_SUBOBJECT_TYPE pssType;36InnerStructType pssInner;37public:38CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT() noexcept : pssType(Type), pssInner(DefaultArg()) {}39CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT(InnerStructType const& i) noexcept : pssType(Type), pssInner(i) {}40CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT& operator=(InnerStructType const& i) noexcept { pssType = Type; pssInner = i; return *this; }41operator InnerStructType const&() const noexcept { return pssInner; }42operator InnerStructType&() noexcept { return pssInner; }43InnerStructType* operator&() noexcept { return &pssInner; }44InnerStructType const* operator&() const noexcept { return &pssInner; }45};46#ifdef _MSC_VER47#pragma warning(pop)48#endif49typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PIPELINE_STATE_FLAGS, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS> CD3DX12_PIPELINE_STATE_STREAM_FLAGS;50typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK> CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK;51typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< ID3D12RootSignature*, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE> CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE;52typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INPUT_LAYOUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT> CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT;53typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INDEX_BUFFER_STRIP_CUT_VALUE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE> CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE;54typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PRIMITIVE_TOPOLOGY_TYPE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY> CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY;55typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS> CD3DX12_PIPELINE_STATE_STREAM_VS;56typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS> CD3DX12_PIPELINE_STATE_STREAM_GS;57typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_STREAM_OUTPUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT> CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT;58typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS> CD3DX12_PIPELINE_STATE_STREAM_HS;59typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS> CD3DX12_PIPELINE_STATE_STREAM_DS;60typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS> CD3DX12_PIPELINE_STATE_STREAM_PS;61typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_AS> CD3DX12_PIPELINE_STATE_STREAM_AS;62typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MS> CD3DX12_PIPELINE_STATE_STREAM_MS;63typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS> CD3DX12_PIPELINE_STATE_STREAM_CS;64typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_BLEND_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC;65typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL;66typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC1, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1;67#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)68typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC2, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL2;69#endif70typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_FORMAT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT;71typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER;72#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)73typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC1, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER1, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER1;74#endif75#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610)76typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC2, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER2, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER2;77#endif78typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_RT_FORMAT_ARRAY, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS> CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS;79typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_SAMPLE_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC, DefaultSampleDesc> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC;80typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK, DefaultSampleMask> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK;81typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_CACHED_PIPELINE_STATE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO> CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO;82typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_VIEW_INSTANCING_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING;83#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 618)84typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT<CD3DX12_SERIALIZED_ROOT_SIGNATURE_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SERIALIZED_ROOT_SIGNATURE> CD3DX12_PIPELINE_STATE_STREAM_SERIALIZED_ROOT_SIGNATURE;85#endif8687//------------------------------------------------------------------------------------------------88// Stream Parser Helpers8990struct ID3DX12PipelineParserCallbacks91{92// Subobject Callbacks93virtual void FlagsCb(D3D12_PIPELINE_STATE_FLAGS) {}94virtual void NodeMaskCb(UINT) {}95virtual void RootSignatureCb(ID3D12RootSignature*) {}96virtual void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC&) {}97virtual void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE) {}98virtual void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE) {}99virtual void VSCb(const D3D12_SHADER_BYTECODE&) {}100virtual void GSCb(const D3D12_SHADER_BYTECODE&) {}101virtual void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC&) {}102virtual void HSCb(const D3D12_SHADER_BYTECODE&) {}103virtual void DSCb(const D3D12_SHADER_BYTECODE&) {}104virtual void PSCb(const D3D12_SHADER_BYTECODE&) {}105virtual void CSCb(const D3D12_SHADER_BYTECODE&) {}106virtual void ASCb(const D3D12_SHADER_BYTECODE&) {}107virtual void MSCb(const D3D12_SHADER_BYTECODE&) {}108virtual void BlendStateCb(const D3D12_BLEND_DESC&) {}109virtual void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC&) {}110virtual void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1&) {}111#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)112virtual void DepthStencilState2Cb(const D3D12_DEPTH_STENCIL_DESC2&) {}113#endif114virtual void DSVFormatCb(DXGI_FORMAT) {}115virtual void RasterizerStateCb(const D3D12_RASTERIZER_DESC&) {}116#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)117virtual void RasterizerState1Cb(const D3D12_RASTERIZER_DESC1&) {}118#endif119#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610)120virtual void RasterizerState2Cb(const D3D12_RASTERIZER_DESC2&) {}121#endif122virtual void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY&) {}123virtual void SampleDescCb(const DXGI_SAMPLE_DESC&) {}124virtual void SampleMaskCb(UINT) {}125virtual void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC&) {}126virtual void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE&) {}127#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 618)128virtual void SerializedRootSignatureCb(const D3D12_SERIALIZED_ROOT_SIGNATURE_DESC&) {}129#endif130131// Error Callbacks132virtual void ErrorBadInputParameter(UINT /*ParameterIndex*/) {}133virtual void ErrorDuplicateSubobject(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE /*DuplicateType*/) {}134virtual void ErrorUnknownSubobject(UINT /*UnknownTypeValue*/) {}135#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 613)136virtual void FinalizeCb() {}137#endif138139virtual ~ID3DX12PipelineParserCallbacks() = default;140};141142struct D3DX12_MESH_SHADER_PIPELINE_STATE_DESC143{144ID3D12RootSignature* pRootSignature;145D3D12_SHADER_BYTECODE AS;146D3D12_SHADER_BYTECODE MS;147D3D12_SHADER_BYTECODE PS;148D3D12_BLEND_DESC BlendState;149UINT SampleMask;150D3D12_RASTERIZER_DESC RasterizerState;151D3D12_DEPTH_STENCIL_DESC DepthStencilState;152D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType;153UINT NumRenderTargets;154DXGI_FORMAT RTVFormats[ D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT ];155DXGI_FORMAT DSVFormat;156DXGI_SAMPLE_DESC SampleDesc;157UINT NodeMask;158D3D12_CACHED_PIPELINE_STATE CachedPSO;159D3D12_PIPELINE_STATE_FLAGS Flags;160};161162#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 618)163struct CD3DX12_PIPELINE_STATE_STREAM6164{165CD3DX12_PIPELINE_STATE_STREAM6() = default;166// Mesh and amplification shaders must be set manually, since they do not have representation in D3D12_GRAPHICS_PIPELINE_STATE_DESC167CD3DX12_PIPELINE_STATE_STREAM6(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept168: Flags(Desc.Flags)169, NodeMask(Desc.NodeMask)170, pRootSignature(Desc.pRootSignature)171, InputLayout(Desc.InputLayout)172, IBStripCutValue(Desc.IBStripCutValue)173, PrimitiveTopologyType(Desc.PrimitiveTopologyType)174, VS(Desc.VS)175, GS(Desc.GS)176, StreamOutput(Desc.StreamOutput)177, HS(Desc.HS)178, DS(Desc.DS)179, PS(Desc.PS)180, BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))181, DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(Desc.DepthStencilState))182, DSVFormat(Desc.DSVFormat)183, RasterizerState(CD3DX12_RASTERIZER_DESC2(Desc.RasterizerState))184, RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))185, SampleDesc(Desc.SampleDesc)186, SampleMask(Desc.SampleMask)187, CachedPSO(Desc.CachedPSO)188, ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))189, SerializedRootSignature(CD3DX12_SERIALIZED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT()))190{191}192CD3DX12_PIPELINE_STATE_STREAM6(const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept193: Flags(Desc.Flags)194, NodeMask(Desc.NodeMask)195, pRootSignature(Desc.pRootSignature)196, PrimitiveTopologyType(Desc.PrimitiveTopologyType)197, PS(Desc.PS)198, AS(Desc.AS)199, MS(Desc.MS)200, BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))201, DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(Desc.DepthStencilState))202, DSVFormat(Desc.DSVFormat)203, RasterizerState(CD3DX12_RASTERIZER_DESC2(Desc.RasterizerState))204, RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))205, SampleDesc(Desc.SampleDesc)206, SampleMask(Desc.SampleMask)207, CachedPSO(Desc.CachedPSO)208, ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))209, SerializedRootSignature(CD3DX12_SERIALIZED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT()))210{211}212CD3DX12_PIPELINE_STATE_STREAM6(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept213: Flags(Desc.Flags)214, NodeMask(Desc.NodeMask)215, pRootSignature(Desc.pRootSignature)216, CS(CD3DX12_SHADER_BYTECODE(Desc.CS))217, CachedPSO(Desc.CachedPSO)218, SerializedRootSignature(CD3DX12_SERIALIZED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT()))219{220static_cast<D3D12_DEPTH_STENCIL_DESC2&>(DepthStencilState).DepthEnable = false;221}222CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;223CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask;224CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature;225CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout;226CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue;227CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType;228CD3DX12_PIPELINE_STATE_STREAM_VS VS;229CD3DX12_PIPELINE_STATE_STREAM_GS GS;230CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput;231CD3DX12_PIPELINE_STATE_STREAM_HS HS;232CD3DX12_PIPELINE_STATE_STREAM_DS DS;233CD3DX12_PIPELINE_STATE_STREAM_PS PS;234CD3DX12_PIPELINE_STATE_STREAM_AS AS;235CD3DX12_PIPELINE_STATE_STREAM_MS MS;236CD3DX12_PIPELINE_STATE_STREAM_CS CS;237CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState;238CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL2 DepthStencilState;239CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat;240CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER2 RasterizerState;241CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats;242CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc;243CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask;244CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO;245CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc;246CD3DX12_PIPELINE_STATE_STREAM_SERIALIZED_ROOT_SIGNATURE SerializedRootSignature;247248D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept249{250D3D12_GRAPHICS_PIPELINE_STATE_DESC D;251D.Flags = this->Flags;252D.NodeMask = this->NodeMask;253D.pRootSignature = this->pRootSignature;254D.InputLayout = this->InputLayout;255D.IBStripCutValue = this->IBStripCutValue;256D.PrimitiveTopologyType = this->PrimitiveTopologyType;257D.VS = this->VS;258D.GS = this->GS;259D.StreamOutput = this->StreamOutput;260D.HS = this->HS;261D.DS = this->DS;262D.PS = this->PS;263D.BlendState = this->BlendState;264D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(D3D12_DEPTH_STENCIL_DESC2(this->DepthStencilState));265D.DSVFormat = this->DSVFormat;266D.RasterizerState = CD3DX12_RASTERIZER_DESC2(D3D12_RASTERIZER_DESC2(this->RasterizerState));267D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets;268memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats));269D.SampleDesc = this->SampleDesc;270D.SampleMask = this->SampleMask;271D.CachedPSO = this->CachedPSO;272return D;273}274D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const noexcept275{276D3D12_COMPUTE_PIPELINE_STATE_DESC D;277D.Flags = this->Flags;278D.NodeMask = this->NodeMask;279D.pRootSignature = this->pRootSignature;280D.CS = this->CS;281D.CachedPSO = this->CachedPSO;282return D;283}284};285#endif286287#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610)288// Use CD3DX12_PIPELINE_STATE_STREAM5 for D3D12_RASTERIZER_DESC2 when CheckFeatureSupport returns true for Options19::RasterizerDesc2Supported is true289// Use CD3DX12_PIPELINE_STATE_STREAM4 for D3D12_RASTERIZER_DESC1 when CheckFeatureSupport returns true for Options16::DynamicDepthBiasSupported is true290// Use CD3DX12_PIPELINE_STATE_STREAM3 for D3D12_DEPTH_STENCIL_DESC2 when CheckFeatureSupport returns true for Options14::IndependentFrontAndBackStencilSupported is true291// Use CD3DX12_PIPELINE_STATE_STREAM2 for OS Build 19041+ (where there is a new mesh shader pipeline).292// Use CD3DX12_PIPELINE_STATE_STREAM1 for OS Build 16299+ (where there is a new view instancing subobject).293// Use CD3DX12_PIPELINE_STATE_STREAM for OS Build 15063+ support.294struct CD3DX12_PIPELINE_STATE_STREAM5295{296CD3DX12_PIPELINE_STATE_STREAM5() = default;297// Mesh and amplification shaders must be set manually, since they do not have representation in D3D12_GRAPHICS_PIPELINE_STATE_DESC298CD3DX12_PIPELINE_STATE_STREAM5(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept299: Flags(Desc.Flags)300, NodeMask(Desc.NodeMask)301, pRootSignature(Desc.pRootSignature)302, InputLayout(Desc.InputLayout)303, IBStripCutValue(Desc.IBStripCutValue)304, PrimitiveTopologyType(Desc.PrimitiveTopologyType)305, VS(Desc.VS)306, GS(Desc.GS)307, StreamOutput(Desc.StreamOutput)308, HS(Desc.HS)309, DS(Desc.DS)310, PS(Desc.PS)311, BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))312, DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(Desc.DepthStencilState))313, DSVFormat(Desc.DSVFormat)314, RasterizerState(CD3DX12_RASTERIZER_DESC2(Desc.RasterizerState))315, RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))316, SampleDesc(Desc.SampleDesc)317, SampleMask(Desc.SampleMask)318, CachedPSO(Desc.CachedPSO)319, ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))320{}321CD3DX12_PIPELINE_STATE_STREAM5(const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept322: Flags(Desc.Flags)323, NodeMask(Desc.NodeMask)324, pRootSignature(Desc.pRootSignature)325, PrimitiveTopologyType(Desc.PrimitiveTopologyType)326, PS(Desc.PS)327, AS(Desc.AS)328, MS(Desc.MS)329, BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))330, DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(Desc.DepthStencilState))331, DSVFormat(Desc.DSVFormat)332, RasterizerState(CD3DX12_RASTERIZER_DESC2(Desc.RasterizerState))333, RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))334, SampleDesc(Desc.SampleDesc)335, SampleMask(Desc.SampleMask)336, CachedPSO(Desc.CachedPSO)337, ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))338{}339CD3DX12_PIPELINE_STATE_STREAM5(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept340: Flags(Desc.Flags)341, NodeMask(Desc.NodeMask)342, pRootSignature(Desc.pRootSignature)343, CS(CD3DX12_SHADER_BYTECODE(Desc.CS))344, CachedPSO(Desc.CachedPSO)345{346static_cast<D3D12_DEPTH_STENCIL_DESC2&>(DepthStencilState).DepthEnable = false;347}348CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;349CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask;350CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature;351CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout;352CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue;353CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType;354CD3DX12_PIPELINE_STATE_STREAM_VS VS;355CD3DX12_PIPELINE_STATE_STREAM_GS GS;356CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput;357CD3DX12_PIPELINE_STATE_STREAM_HS HS;358CD3DX12_PIPELINE_STATE_STREAM_DS DS;359CD3DX12_PIPELINE_STATE_STREAM_PS PS;360CD3DX12_PIPELINE_STATE_STREAM_AS AS;361CD3DX12_PIPELINE_STATE_STREAM_MS MS;362CD3DX12_PIPELINE_STATE_STREAM_CS CS;363CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState;364CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL2 DepthStencilState;365CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat;366CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER2 RasterizerState;367CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats;368CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc;369CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask;370CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO;371CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc;372373D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept374{375D3D12_GRAPHICS_PIPELINE_STATE_DESC D;376D.Flags = this->Flags;377D.NodeMask = this->NodeMask;378D.pRootSignature = this->pRootSignature;379D.InputLayout = this->InputLayout;380D.IBStripCutValue = this->IBStripCutValue;381D.PrimitiveTopologyType = this->PrimitiveTopologyType;382D.VS = this->VS;383D.GS = this->GS;384D.StreamOutput = this->StreamOutput;385D.HS = this->HS;386D.DS = this->DS;387D.PS = this->PS;388D.BlendState = this->BlendState;389D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(D3D12_DEPTH_STENCIL_DESC2(this->DepthStencilState));390D.DSVFormat = this->DSVFormat;391D.RasterizerState = CD3DX12_RASTERIZER_DESC2(D3D12_RASTERIZER_DESC2(this->RasterizerState));392D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets;393memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats));394D.SampleDesc = this->SampleDesc;395D.SampleMask = this->SampleMask;396D.CachedPSO = this->CachedPSO;397return D;398}399D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const noexcept400{401D3D12_COMPUTE_PIPELINE_STATE_DESC D;402D.Flags = this->Flags;403D.NodeMask = this->NodeMask;404D.pRootSignature = this->pRootSignature;405D.CS = this->CS;406D.CachedPSO = this->CachedPSO;407return D;408}409};410#endif // D3D12_SDK_VERSION >= 610411412#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)413// Use CD3DX12_PIPELINE_STATE_STREAM4 for D3D12_RASTERIZER_DESC1 when CheckFeatureSupport returns true for Options16::DynamicDepthBiasSupported is true414// Use CD3DX12_PIPELINE_STATE_STREAM3 for D3D12_DEPTH_STENCIL_DESC2 when CheckFeatureSupport returns true for Options14::IndependentFrontAndBackStencilSupported is true415// Use CD3DX12_PIPELINE_STATE_STREAM2 for OS Build 19041+ (where there is a new mesh shader pipeline).416// Use CD3DX12_PIPELINE_STATE_STREAM1 for OS Build 16299+ (where there is a new view instancing subobject).417// Use CD3DX12_PIPELINE_STATE_STREAM for OS Build 15063+ support.418struct CD3DX12_PIPELINE_STATE_STREAM4419{420CD3DX12_PIPELINE_STATE_STREAM4() = default;421// Mesh and amplification shaders must be set manually, since they do not have representation in D3D12_GRAPHICS_PIPELINE_STATE_DESC422CD3DX12_PIPELINE_STATE_STREAM4(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept423: Flags(Desc.Flags)424, NodeMask(Desc.NodeMask)425, pRootSignature(Desc.pRootSignature)426, InputLayout(Desc.InputLayout)427, IBStripCutValue(Desc.IBStripCutValue)428, PrimitiveTopologyType(Desc.PrimitiveTopologyType)429, VS(Desc.VS)430, GS(Desc.GS)431, StreamOutput(Desc.StreamOutput)432, HS(Desc.HS)433, DS(Desc.DS)434, PS(Desc.PS)435, BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))436, DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(Desc.DepthStencilState))437, DSVFormat(Desc.DSVFormat)438, RasterizerState(CD3DX12_RASTERIZER_DESC1(Desc.RasterizerState))439, RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))440, SampleDesc(Desc.SampleDesc)441, SampleMask(Desc.SampleMask)442, CachedPSO(Desc.CachedPSO)443, ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))444{}445CD3DX12_PIPELINE_STATE_STREAM4(const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept446: Flags(Desc.Flags)447, NodeMask(Desc.NodeMask)448, pRootSignature(Desc.pRootSignature)449, PrimitiveTopologyType(Desc.PrimitiveTopologyType)450, PS(Desc.PS)451, AS(Desc.AS)452, MS(Desc.MS)453, BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))454, DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(Desc.DepthStencilState))455, DSVFormat(Desc.DSVFormat)456, RasterizerState(CD3DX12_RASTERIZER_DESC1(Desc.RasterizerState))457, RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))458, SampleDesc(Desc.SampleDesc)459, SampleMask(Desc.SampleMask)460, CachedPSO(Desc.CachedPSO)461, ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))462{}463CD3DX12_PIPELINE_STATE_STREAM4(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept464: Flags(Desc.Flags)465, NodeMask(Desc.NodeMask)466, pRootSignature(Desc.pRootSignature)467, CS(CD3DX12_SHADER_BYTECODE(Desc.CS))468, CachedPSO(Desc.CachedPSO)469{470static_cast<D3D12_DEPTH_STENCIL_DESC2&>(DepthStencilState).DepthEnable = false;471}472CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;473CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask;474CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature;475CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout;476CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue;477CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType;478CD3DX12_PIPELINE_STATE_STREAM_VS VS;479CD3DX12_PIPELINE_STATE_STREAM_GS GS;480CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput;481CD3DX12_PIPELINE_STATE_STREAM_HS HS;482CD3DX12_PIPELINE_STATE_STREAM_DS DS;483CD3DX12_PIPELINE_STATE_STREAM_PS PS;484CD3DX12_PIPELINE_STATE_STREAM_AS AS;485CD3DX12_PIPELINE_STATE_STREAM_MS MS;486CD3DX12_PIPELINE_STATE_STREAM_CS CS;487CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState;488CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL2 DepthStencilState;489CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat;490CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER1 RasterizerState;491CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats;492CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc;493CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask;494CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO;495CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc;496497D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept498{499D3D12_GRAPHICS_PIPELINE_STATE_DESC D;500D.Flags = this->Flags;501D.NodeMask = this->NodeMask;502D.pRootSignature = this->pRootSignature;503D.InputLayout = this->InputLayout;504D.IBStripCutValue = this->IBStripCutValue;505D.PrimitiveTopologyType = this->PrimitiveTopologyType;506D.VS = this->VS;507D.GS = this->GS;508D.StreamOutput = this->StreamOutput;509D.HS = this->HS;510D.DS = this->DS;511D.PS = this->PS;512D.BlendState = this->BlendState;513D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(D3D12_DEPTH_STENCIL_DESC2(this->DepthStencilState));514D.DSVFormat = this->DSVFormat;515D.RasterizerState = CD3DX12_RASTERIZER_DESC1(D3D12_RASTERIZER_DESC1(this->RasterizerState));516D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets;517memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats));518D.SampleDesc = this->SampleDesc;519D.SampleMask = this->SampleMask;520D.CachedPSO = this->CachedPSO;521return D;522}523D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const noexcept524{525D3D12_COMPUTE_PIPELINE_STATE_DESC D;526D.Flags = this->Flags;527D.NodeMask = this->NodeMask;528D.pRootSignature = this->pRootSignature;529D.CS = this->CS;530D.CachedPSO = this->CachedPSO;531return D;532}533};534#endif // D3D12_SDK_VERSION >= 608535536#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)537// Use CD3DX12_PIPELINE_STATE_STREAM3 for D3D12_DEPTH_STENCIL_DESC2 when CheckFeatureSupport returns true for Options14::IndependentFrontAndBackStencilSupported is true538// Use CD3DX12_PIPELINE_STATE_STREAM2 for OS Build 19041+ (where there is a new mesh shader pipeline).539// Use CD3DX12_PIPELINE_STATE_STREAM1 for OS Build 16299+ (where there is a new view instancing subobject).540// Use CD3DX12_PIPELINE_STATE_STREAM for OS Build 15063+ support.541struct CD3DX12_PIPELINE_STATE_STREAM3542{543CD3DX12_PIPELINE_STATE_STREAM3() = default;544// Mesh and amplification shaders must be set manually, since they do not have representation in D3D12_GRAPHICS_PIPELINE_STATE_DESC545CD3DX12_PIPELINE_STATE_STREAM3(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept546: Flags(Desc.Flags)547, NodeMask(Desc.NodeMask)548, pRootSignature(Desc.pRootSignature)549, InputLayout(Desc.InputLayout)550, IBStripCutValue(Desc.IBStripCutValue)551, PrimitiveTopologyType(Desc.PrimitiveTopologyType)552, VS(Desc.VS)553, GS(Desc.GS)554, StreamOutput(Desc.StreamOutput)555, HS(Desc.HS)556, DS(Desc.DS)557, PS(Desc.PS)558, BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))559, DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(Desc.DepthStencilState))560, DSVFormat(Desc.DSVFormat)561, RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState))562, RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))563, SampleDesc(Desc.SampleDesc)564, SampleMask(Desc.SampleMask)565, CachedPSO(Desc.CachedPSO)566, ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))567{}568CD3DX12_PIPELINE_STATE_STREAM3(const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept569: Flags(Desc.Flags)570, NodeMask(Desc.NodeMask)571, pRootSignature(Desc.pRootSignature)572, PrimitiveTopologyType(Desc.PrimitiveTopologyType)573, PS(Desc.PS)574, AS(Desc.AS)575, MS(Desc.MS)576, BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))577, DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(Desc.DepthStencilState))578, DSVFormat(Desc.DSVFormat)579, RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState))580, RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))581, SampleDesc(Desc.SampleDesc)582, SampleMask(Desc.SampleMask)583, CachedPSO(Desc.CachedPSO)584, ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))585{}586CD3DX12_PIPELINE_STATE_STREAM3(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept587: Flags(Desc.Flags)588, NodeMask(Desc.NodeMask)589, pRootSignature(Desc.pRootSignature)590, CS(CD3DX12_SHADER_BYTECODE(Desc.CS))591, CachedPSO(Desc.CachedPSO)592{593static_cast<D3D12_DEPTH_STENCIL_DESC2&>(DepthStencilState).DepthEnable = false;594}595CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;596CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask;597CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature;598CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout;599CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue;600CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType;601CD3DX12_PIPELINE_STATE_STREAM_VS VS;602CD3DX12_PIPELINE_STATE_STREAM_GS GS;603CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput;604CD3DX12_PIPELINE_STATE_STREAM_HS HS;605CD3DX12_PIPELINE_STATE_STREAM_DS DS;606CD3DX12_PIPELINE_STATE_STREAM_PS PS;607CD3DX12_PIPELINE_STATE_STREAM_AS AS;608CD3DX12_PIPELINE_STATE_STREAM_MS MS;609CD3DX12_PIPELINE_STATE_STREAM_CS CS;610CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState;611CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL2 DepthStencilState;612CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat;613CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState;614CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats;615CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc;616CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask;617CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO;618CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc;619620D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept621{622D3D12_GRAPHICS_PIPELINE_STATE_DESC D;623D.Flags = this->Flags;624D.NodeMask = this->NodeMask;625D.pRootSignature = this->pRootSignature;626D.InputLayout = this->InputLayout;627D.IBStripCutValue = this->IBStripCutValue;628D.PrimitiveTopologyType = this->PrimitiveTopologyType;629D.VS = this->VS;630D.GS = this->GS;631D.StreamOutput = this->StreamOutput;632D.HS = this->HS;633D.DS = this->DS;634D.PS = this->PS;635D.BlendState = this->BlendState;636D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(D3D12_DEPTH_STENCIL_DESC2(this->DepthStencilState));637D.DSVFormat = this->DSVFormat;638D.RasterizerState = this->RasterizerState;639D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets;640memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats));641D.SampleDesc = this->SampleDesc;642D.SampleMask = this->SampleMask;643D.CachedPSO = this->CachedPSO;644return D;645}646D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const noexcept647{648D3D12_COMPUTE_PIPELINE_STATE_DESC D;649D.Flags = this->Flags;650D.NodeMask = this->NodeMask;651D.pRootSignature = this->pRootSignature;652D.CS = this->CS;653D.CachedPSO = this->CachedPSO;654return D;655}656};657#endif // D3D12_SDK_VERSION >= 606658659// CD3DX12_PIPELINE_STATE_STREAM2 Works on OS Build 19041+ (where there is a new mesh shader pipeline).660// Use CD3DX12_PIPELINE_STATE_STREAM1 for OS Build 16299+ (where there is a new view instancing subobject).661// Use CD3DX12_PIPELINE_STATE_STREAM for OS Build 15063+ support.662struct CD3DX12_PIPELINE_STATE_STREAM2663{664CD3DX12_PIPELINE_STATE_STREAM2() = default;665// Mesh and amplification shaders must be set manually, since they do not have representation in D3D12_GRAPHICS_PIPELINE_STATE_DESC666CD3DX12_PIPELINE_STATE_STREAM2(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept667: Flags(Desc.Flags)668, NodeMask(Desc.NodeMask)669, pRootSignature(Desc.pRootSignature)670, InputLayout(Desc.InputLayout)671, IBStripCutValue(Desc.IBStripCutValue)672, PrimitiveTopologyType(Desc.PrimitiveTopologyType)673, VS(Desc.VS)674, GS(Desc.GS)675, StreamOutput(Desc.StreamOutput)676, HS(Desc.HS)677, DS(Desc.DS)678, PS(Desc.PS)679, BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))680, DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState))681, DSVFormat(Desc.DSVFormat)682, RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState))683, RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))684, SampleDesc(Desc.SampleDesc)685, SampleMask(Desc.SampleMask)686, CachedPSO(Desc.CachedPSO)687, ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))688{}689CD3DX12_PIPELINE_STATE_STREAM2(const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept690: Flags(Desc.Flags)691, NodeMask(Desc.NodeMask)692, pRootSignature(Desc.pRootSignature)693, PrimitiveTopologyType(Desc.PrimitiveTopologyType)694, PS(Desc.PS)695, AS(Desc.AS)696, MS(Desc.MS)697, BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))698, DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState))699, DSVFormat(Desc.DSVFormat)700, RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState))701, RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))702, SampleDesc(Desc.SampleDesc)703, SampleMask(Desc.SampleMask)704, CachedPSO(Desc.CachedPSO)705, ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))706{}707CD3DX12_PIPELINE_STATE_STREAM2(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept708: Flags(Desc.Flags)709, NodeMask(Desc.NodeMask)710, pRootSignature(Desc.pRootSignature)711, CS(CD3DX12_SHADER_BYTECODE(Desc.CS))712, CachedPSO(Desc.CachedPSO)713{714static_cast<D3D12_DEPTH_STENCIL_DESC1&>(DepthStencilState).DepthEnable = false;715}716CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;717CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask;718CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature;719CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout;720CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue;721CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType;722CD3DX12_PIPELINE_STATE_STREAM_VS VS;723CD3DX12_PIPELINE_STATE_STREAM_GS GS;724CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput;725CD3DX12_PIPELINE_STATE_STREAM_HS HS;726CD3DX12_PIPELINE_STATE_STREAM_DS DS;727CD3DX12_PIPELINE_STATE_STREAM_PS PS;728CD3DX12_PIPELINE_STATE_STREAM_AS AS;729CD3DX12_PIPELINE_STATE_STREAM_MS MS;730CD3DX12_PIPELINE_STATE_STREAM_CS CS;731CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState;732CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState;733CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat;734CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState;735CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats;736CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc;737CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask;738CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO;739CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc;740D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept741{742D3D12_GRAPHICS_PIPELINE_STATE_DESC D;743D.Flags = this->Flags;744D.NodeMask = this->NodeMask;745D.pRootSignature = this->pRootSignature;746D.InputLayout = this->InputLayout;747D.IBStripCutValue = this->IBStripCutValue;748D.PrimitiveTopologyType = this->PrimitiveTopologyType;749D.VS = this->VS;750D.GS = this->GS;751D.StreamOutput = this->StreamOutput;752D.HS = this->HS;753D.DS = this->DS;754D.PS = this->PS;755D.BlendState = this->BlendState;756D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState));757D.DSVFormat = this->DSVFormat;758D.RasterizerState = this->RasterizerState;759D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets;760memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats));761D.SampleDesc = this->SampleDesc;762D.SampleMask = this->SampleMask;763D.CachedPSO = this->CachedPSO;764return D;765}766D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const noexcept767{768D3D12_COMPUTE_PIPELINE_STATE_DESC D;769D.Flags = this->Flags;770D.NodeMask = this->NodeMask;771D.pRootSignature = this->pRootSignature;772D.CS = this->CS;773D.CachedPSO = this->CachedPSO;774return D;775}776};777778// CD3DX12_PIPELINE_STATE_STREAM1 Works on OS Build 16299+ (where there is a new view instancing subobject).779// Use CD3DX12_PIPELINE_STATE_STREAM for OS Build 15063+ support.780struct CD3DX12_PIPELINE_STATE_STREAM1781{782CD3DX12_PIPELINE_STATE_STREAM1() = default;783// Mesh and amplification shaders must be set manually, since they do not have representation in D3D12_GRAPHICS_PIPELINE_STATE_DESC784CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept785: Flags(Desc.Flags)786, NodeMask(Desc.NodeMask)787, pRootSignature(Desc.pRootSignature)788, InputLayout(Desc.InputLayout)789, IBStripCutValue(Desc.IBStripCutValue)790, PrimitiveTopologyType(Desc.PrimitiveTopologyType)791, VS(Desc.VS)792, GS(Desc.GS)793, StreamOutput(Desc.StreamOutput)794, HS(Desc.HS)795, DS(Desc.DS)796, PS(Desc.PS)797, BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))798, DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState))799, DSVFormat(Desc.DSVFormat)800, RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState))801, RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))802, SampleDesc(Desc.SampleDesc)803, SampleMask(Desc.SampleMask)804, CachedPSO(Desc.CachedPSO)805, ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))806{}807CD3DX12_PIPELINE_STATE_STREAM1(const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept808: Flags(Desc.Flags)809, NodeMask(Desc.NodeMask)810, pRootSignature(Desc.pRootSignature)811, PrimitiveTopologyType(Desc.PrimitiveTopologyType)812, PS(Desc.PS)813, BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))814, DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState))815, DSVFormat(Desc.DSVFormat)816, RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState))817, RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))818, SampleDesc(Desc.SampleDesc)819, SampleMask(Desc.SampleMask)820, CachedPSO(Desc.CachedPSO)821, ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))822{}823CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept824: Flags(Desc.Flags)825, NodeMask(Desc.NodeMask)826, pRootSignature(Desc.pRootSignature)827, CS(CD3DX12_SHADER_BYTECODE(Desc.CS))828, CachedPSO(Desc.CachedPSO)829{830static_cast<D3D12_DEPTH_STENCIL_DESC1&>(DepthStencilState).DepthEnable = false;831}832CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;833CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask;834CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature;835CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout;836CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue;837CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType;838CD3DX12_PIPELINE_STATE_STREAM_VS VS;839CD3DX12_PIPELINE_STATE_STREAM_GS GS;840CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput;841CD3DX12_PIPELINE_STATE_STREAM_HS HS;842CD3DX12_PIPELINE_STATE_STREAM_DS DS;843CD3DX12_PIPELINE_STATE_STREAM_PS PS;844CD3DX12_PIPELINE_STATE_STREAM_CS CS;845CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState;846CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState;847CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat;848CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState;849CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats;850CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc;851CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask;852CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO;853CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc;854D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept855{856D3D12_GRAPHICS_PIPELINE_STATE_DESC D;857D.Flags = this->Flags;858D.NodeMask = this->NodeMask;859D.pRootSignature = this->pRootSignature;860D.InputLayout = this->InputLayout;861D.IBStripCutValue = this->IBStripCutValue;862D.PrimitiveTopologyType = this->PrimitiveTopologyType;863D.VS = this->VS;864D.GS = this->GS;865D.StreamOutput = this->StreamOutput;866D.HS = this->HS;867D.DS = this->DS;868D.PS = this->PS;869D.BlendState = this->BlendState;870D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState));871D.DSVFormat = this->DSVFormat;872D.RasterizerState = this->RasterizerState;873D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets;874memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats));875D.SampleDesc = this->SampleDesc;876D.SampleMask = this->SampleMask;877D.CachedPSO = this->CachedPSO;878return D;879}880D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const noexcept881{882D3D12_COMPUTE_PIPELINE_STATE_DESC D;883D.Flags = this->Flags;884D.NodeMask = this->NodeMask;885D.pRootSignature = this->pRootSignature;886D.CS = this->CS;887D.CachedPSO = this->CachedPSO;888return D;889}890};891892893struct CD3DX12_PIPELINE_MESH_STATE_STREAM894{895CD3DX12_PIPELINE_MESH_STATE_STREAM() = default;896CD3DX12_PIPELINE_MESH_STATE_STREAM(const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept897: Flags(Desc.Flags)898, NodeMask(Desc.NodeMask)899, pRootSignature(Desc.pRootSignature)900, PrimitiveTopologyType(Desc.PrimitiveTopologyType)901, PS(Desc.PS)902, AS(Desc.AS)903, MS(Desc.MS)904, BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))905, DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState))906, DSVFormat(Desc.DSVFormat)907, RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState))908, RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))909, SampleDesc(Desc.SampleDesc)910, SampleMask(Desc.SampleMask)911, CachedPSO(Desc.CachedPSO)912, ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))913{}914CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;915CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask;916CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature;917CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType;918CD3DX12_PIPELINE_STATE_STREAM_PS PS;919CD3DX12_PIPELINE_STATE_STREAM_AS AS;920CD3DX12_PIPELINE_STATE_STREAM_MS MS;921CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState;922CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState;923CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat;924CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState;925CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats;926CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc;927CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask;928CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO;929CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc;930D3DX12_MESH_SHADER_PIPELINE_STATE_DESC MeshShaderDescV0() const noexcept931{932D3DX12_MESH_SHADER_PIPELINE_STATE_DESC D;933D.Flags = this->Flags;934D.NodeMask = this->NodeMask;935D.pRootSignature = this->pRootSignature;936D.PrimitiveTopologyType = this->PrimitiveTopologyType;937D.PS = this->PS;938D.AS = this->AS;939D.MS = this->MS;940D.BlendState = this->BlendState;941D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState));942D.DSVFormat = this->DSVFormat;943D.RasterizerState = this->RasterizerState;944D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets;945memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats));946D.SampleDesc = this->SampleDesc;947D.SampleMask = this->SampleMask;948D.CachedPSO = this->CachedPSO;949return D;950}951};952953// CD3DX12_PIPELINE_STATE_STREAM works on OS Build 15063+ but does not support new subobject(s) added in OS Build 16299+.954// See CD3DX12_PIPELINE_STATE_STREAM1 for instance.955struct CD3DX12_PIPELINE_STATE_STREAM956{957CD3DX12_PIPELINE_STATE_STREAM() = default;958CD3DX12_PIPELINE_STATE_STREAM(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept959: Flags(Desc.Flags)960, NodeMask(Desc.NodeMask)961, pRootSignature(Desc.pRootSignature)962, InputLayout(Desc.InputLayout)963, IBStripCutValue(Desc.IBStripCutValue)964, PrimitiveTopologyType(Desc.PrimitiveTopologyType)965, VS(Desc.VS)966, GS(Desc.GS)967, StreamOutput(Desc.StreamOutput)968, HS(Desc.HS)969, DS(Desc.DS)970, PS(Desc.PS)971, BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))972, DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState))973, DSVFormat(Desc.DSVFormat)974, RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState))975, RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))976, SampleDesc(Desc.SampleDesc)977, SampleMask(Desc.SampleMask)978, CachedPSO(Desc.CachedPSO)979{}980CD3DX12_PIPELINE_STATE_STREAM(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept981: Flags(Desc.Flags)982, NodeMask(Desc.NodeMask)983, pRootSignature(Desc.pRootSignature)984, CS(CD3DX12_SHADER_BYTECODE(Desc.CS))985, CachedPSO(Desc.CachedPSO)986{}987CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;988CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask;989CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature;990CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout;991CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue;992CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType;993CD3DX12_PIPELINE_STATE_STREAM_VS VS;994CD3DX12_PIPELINE_STATE_STREAM_GS GS;995CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput;996CD3DX12_PIPELINE_STATE_STREAM_HS HS;997CD3DX12_PIPELINE_STATE_STREAM_DS DS;998CD3DX12_PIPELINE_STATE_STREAM_PS PS;999CD3DX12_PIPELINE_STATE_STREAM_CS CS;1000CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState;1001CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState;1002CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat;1003CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState;1004CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats;1005CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc;1006CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask;1007CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO;1008D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept1009{1010D3D12_GRAPHICS_PIPELINE_STATE_DESC D;1011D.Flags = this->Flags;1012D.NodeMask = this->NodeMask;1013D.pRootSignature = this->pRootSignature;1014D.InputLayout = this->InputLayout;1015D.IBStripCutValue = this->IBStripCutValue;1016D.PrimitiveTopologyType = this->PrimitiveTopologyType;1017D.VS = this->VS;1018D.GS = this->GS;1019D.StreamOutput = this->StreamOutput;1020D.HS = this->HS;1021D.DS = this->DS;1022D.PS = this->PS;1023D.BlendState = this->BlendState;1024D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState));1025D.DSVFormat = this->DSVFormat;1026D.RasterizerState = this->RasterizerState;1027D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets;1028memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats));1029D.SampleDesc = this->SampleDesc;1030D.SampleMask = this->SampleMask;1031D.CachedPSO = this->CachedPSO;1032return D;1033}1034D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const noexcept1035{1036D3D12_COMPUTE_PIPELINE_STATE_DESC D;1037D.Flags = this->Flags;1038D.NodeMask = this->NodeMask;1039D.pRootSignature = this->pRootSignature;1040D.CS = this->CS;1041D.CachedPSO = this->CachedPSO;1042return D;1043}1044};104510461047struct CD3DX12_PIPELINE_STATE_STREAM2_PARSE_HELPER : public ID3DX12PipelineParserCallbacks1048{1049CD3DX12_PIPELINE_STATE_STREAM2 PipelineStream;1050CD3DX12_PIPELINE_STATE_STREAM2_PARSE_HELPER() noexcept1051: SeenDSS(false)1052{1053// Adjust defaults to account for absent members.1054PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;10551056// Depth disabled if no DSV format specified.1057static_cast<D3D12_DEPTH_STENCIL_DESC1&>(PipelineStream.DepthStencilState).DepthEnable = false;1058}10591060// ID3DX12PipelineParserCallbacks1061void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override {PipelineStream.Flags = Flags;}1062void NodeMaskCb(UINT NodeMask) override {PipelineStream.NodeMask = NodeMask;}1063void RootSignatureCb(ID3D12RootSignature* pRootSignature) override {PipelineStream.pRootSignature = pRootSignature;}1064void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override {PipelineStream.InputLayout = InputLayout;}1065void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override {PipelineStream.IBStripCutValue = IBStripCutValue;}1066void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override {PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;}1067void VSCb(const D3D12_SHADER_BYTECODE& VS) override {PipelineStream.VS = VS;}1068void GSCb(const D3D12_SHADER_BYTECODE& GS) override {PipelineStream.GS = GS;}1069void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override {PipelineStream.StreamOutput = StreamOutput;}1070void HSCb(const D3D12_SHADER_BYTECODE& HS) override {PipelineStream.HS = HS;}1071void DSCb(const D3D12_SHADER_BYTECODE& DS) override {PipelineStream.DS = DS;}1072void PSCb(const D3D12_SHADER_BYTECODE& PS) override {PipelineStream.PS = PS;}1073void CSCb(const D3D12_SHADER_BYTECODE& CS) override {PipelineStream.CS = CS;}1074void ASCb(const D3D12_SHADER_BYTECODE& AS) override {PipelineStream.AS = AS;}1075void MSCb(const D3D12_SHADER_BYTECODE& MS) override {PipelineStream.MS = MS;}1076void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override {PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState);}1077void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override1078{1079PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState);1080SeenDSS = true;1081}1082void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override1083{1084PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState);1085SeenDSS = true;1086}1087void DSVFormatCb(DXGI_FORMAT DSVFormat) override1088{1089PipelineStream.DSVFormat = DSVFormat;1090if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN)1091{1092// Re-enable depth for the default state.1093static_cast<D3D12_DEPTH_STENCIL_DESC1&>(PipelineStream.DepthStencilState).DepthEnable = true;1094}1095}1096void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override {PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC(RasterizerState);}1097void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override {PipelineStream.RTVFormats = RTVFormats;}1098void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override {PipelineStream.SampleDesc = SampleDesc;}1099void SampleMaskCb(UINT SampleMask) override {PipelineStream.SampleMask = SampleMask;}1100void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override {PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc);}1101void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override {PipelineStream.CachedPSO = CachedPSO;}11021103private:1104bool SeenDSS;1105};11061107#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)1108struct CD3DX12_PIPELINE_STATE_STREAM3_PARSE_HELPER : public ID3DX12PipelineParserCallbacks1109{1110CD3DX12_PIPELINE_STATE_STREAM3 PipelineStream;1111CD3DX12_PIPELINE_STATE_STREAM3_PARSE_HELPER() noexcept1112: SeenDSS(false)1113{1114// Adjust defaults to account for absent members.1115PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;11161117// Depth disabled if no DSV format specified.1118static_cast<D3D12_DEPTH_STENCIL_DESC2&>(PipelineStream.DepthStencilState).DepthEnable = false;1119}11201121// ID3DX12PipelineParserCallbacks1122void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override { PipelineStream.Flags = Flags; }1123void NodeMaskCb(UINT NodeMask) override { PipelineStream.NodeMask = NodeMask; }1124void RootSignatureCb(ID3D12RootSignature* pRootSignature) override { PipelineStream.pRootSignature = pRootSignature; }1125void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override { PipelineStream.InputLayout = InputLayout; }1126void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override { PipelineStream.IBStripCutValue = IBStripCutValue; }1127void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override { PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType; }1128void VSCb(const D3D12_SHADER_BYTECODE& VS) override { PipelineStream.VS = VS; }1129void GSCb(const D3D12_SHADER_BYTECODE& GS) override { PipelineStream.GS = GS; }1130void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override { PipelineStream.StreamOutput = StreamOutput; }1131void HSCb(const D3D12_SHADER_BYTECODE& HS) override { PipelineStream.HS = HS; }1132void DSCb(const D3D12_SHADER_BYTECODE& DS) override { PipelineStream.DS = DS; }1133void PSCb(const D3D12_SHADER_BYTECODE& PS) override { PipelineStream.PS = PS; }1134void CSCb(const D3D12_SHADER_BYTECODE& CS) override { PipelineStream.CS = CS; }1135void ASCb(const D3D12_SHADER_BYTECODE& AS) override { PipelineStream.AS = AS; }1136void MSCb(const D3D12_SHADER_BYTECODE& MS) override { PipelineStream.MS = MS; }1137void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override { PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState); }1138void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override1139{1140PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);1141SeenDSS = true;1142}1143void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override1144{1145PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);1146SeenDSS = true;1147}1148void DepthStencilState2Cb(const D3D12_DEPTH_STENCIL_DESC2& DepthStencilState) override1149{1150PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);1151SeenDSS = true;1152}1153void DSVFormatCb(DXGI_FORMAT DSVFormat) override1154{1155PipelineStream.DSVFormat = DSVFormat;1156if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN)1157{1158// Re-enable depth for the default state.1159static_cast<D3D12_DEPTH_STENCIL_DESC2&>(PipelineStream.DepthStencilState).DepthEnable = true;1160}1161}1162void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC(RasterizerState); }1163void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override { PipelineStream.RTVFormats = RTVFormats; }1164void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override { PipelineStream.SampleDesc = SampleDesc; }1165void SampleMaskCb(UINT SampleMask) override { PipelineStream.SampleMask = SampleMask; }1166void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override { PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc); }1167void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override { PipelineStream.CachedPSO = CachedPSO; }11681169private:1170bool SeenDSS;1171};1172#endif // D3D12_SDK_VERSION >= 60611731174#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)1175struct CD3DX12_PIPELINE_STATE_STREAM4_PARSE_HELPER : public ID3DX12PipelineParserCallbacks1176{1177CD3DX12_PIPELINE_STATE_STREAM4 PipelineStream;1178CD3DX12_PIPELINE_STATE_STREAM4_PARSE_HELPER() noexcept1179: SeenDSS(false)1180{1181// Adjust defaults to account for absent members.1182PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;11831184// Depth disabled if no DSV format specified.1185static_cast<D3D12_DEPTH_STENCIL_DESC2&>(PipelineStream.DepthStencilState).DepthEnable = false;1186}11871188// ID3DX12PipelineParserCallbacks1189void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override { PipelineStream.Flags = Flags; }1190void NodeMaskCb(UINT NodeMask) override { PipelineStream.NodeMask = NodeMask; }1191void RootSignatureCb(ID3D12RootSignature* pRootSignature) override { PipelineStream.pRootSignature = pRootSignature; }1192void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override { PipelineStream.InputLayout = InputLayout; }1193void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override { PipelineStream.IBStripCutValue = IBStripCutValue; }1194void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override { PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType; }1195void VSCb(const D3D12_SHADER_BYTECODE& VS) override { PipelineStream.VS = VS; }1196void GSCb(const D3D12_SHADER_BYTECODE& GS) override { PipelineStream.GS = GS; }1197void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override { PipelineStream.StreamOutput = StreamOutput; }1198void HSCb(const D3D12_SHADER_BYTECODE& HS) override { PipelineStream.HS = HS; }1199void DSCb(const D3D12_SHADER_BYTECODE& DS) override { PipelineStream.DS = DS; }1200void PSCb(const D3D12_SHADER_BYTECODE& PS) override { PipelineStream.PS = PS; }1201void CSCb(const D3D12_SHADER_BYTECODE& CS) override { PipelineStream.CS = CS; }1202void ASCb(const D3D12_SHADER_BYTECODE& AS) override { PipelineStream.AS = AS; }1203void MSCb(const D3D12_SHADER_BYTECODE& MS) override { PipelineStream.MS = MS; }1204void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override { PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState); }1205void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override1206{1207PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);1208SeenDSS = true;1209}1210void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override1211{1212PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);1213SeenDSS = true;1214}1215void DepthStencilState2Cb(const D3D12_DEPTH_STENCIL_DESC2& DepthStencilState) override1216{1217PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);1218SeenDSS = true;1219}1220void DSVFormatCb(DXGI_FORMAT DSVFormat) override1221{1222PipelineStream.DSVFormat = DSVFormat;1223if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN)1224{1225// Re-enable depth for the default state.1226static_cast<D3D12_DEPTH_STENCIL_DESC2&>(PipelineStream.DepthStencilState).DepthEnable = true;1227}1228}1229void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC1(RasterizerState); }1230void RasterizerState1Cb(const D3D12_RASTERIZER_DESC1& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC1(RasterizerState); }1231void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override { PipelineStream.RTVFormats = RTVFormats; }1232void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override { PipelineStream.SampleDesc = SampleDesc; }1233void SampleMaskCb(UINT SampleMask) override { PipelineStream.SampleMask = SampleMask; }1234void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override { PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc); }1235void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override { PipelineStream.CachedPSO = CachedPSO; }12361237private:1238bool SeenDSS;1239};1240#endif // D3D12_SDK_VERSION >= 60812411242#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 613)1243// This SDK 613 version has better primitive topology default handling than the v610 equivalent below.1244struct CD3DX12_PIPELINE_STATE_STREAM5_PARSE_HELPER : public ID3DX12PipelineParserCallbacks1245{1246CD3DX12_PIPELINE_STATE_STREAM5 PipelineStream;1247CD3DX12_PIPELINE_STATE_STREAM5_PARSE_HELPER() noexcept1248: SeenDSS(false),1249SeenMS(false),1250SeenTopology(false)1251{1252// Adjust defaults to account for absent members.1253PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;12541255// Depth disabled if no DSV format specified.1256static_cast<D3D12_DEPTH_STENCIL_DESC2&>(PipelineStream.DepthStencilState).DepthEnable = false;1257}12581259// ID3DX12PipelineParserCallbacks1260void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override { PipelineStream.Flags = Flags; }1261void NodeMaskCb(UINT NodeMask) override { PipelineStream.NodeMask = NodeMask; }1262void RootSignatureCb(ID3D12RootSignature* pRootSignature) override { PipelineStream.pRootSignature = pRootSignature; }1263void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override { PipelineStream.InputLayout = InputLayout; }1264void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override { PipelineStream.IBStripCutValue = IBStripCutValue; }1265void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override1266{1267PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;1268SeenTopology = true;1269}1270void VSCb(const D3D12_SHADER_BYTECODE& VS) override { PipelineStream.VS = VS; }1271void GSCb(const D3D12_SHADER_BYTECODE& GS) override { PipelineStream.GS = GS; }1272void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override { PipelineStream.StreamOutput = StreamOutput; }1273void HSCb(const D3D12_SHADER_BYTECODE& HS) override { PipelineStream.HS = HS; }1274void DSCb(const D3D12_SHADER_BYTECODE& DS) override { PipelineStream.DS = DS; }1275void PSCb(const D3D12_SHADER_BYTECODE& PS) override { PipelineStream.PS = PS; }1276void CSCb(const D3D12_SHADER_BYTECODE& CS) override { PipelineStream.CS = CS; }1277void ASCb(const D3D12_SHADER_BYTECODE& AS) override { PipelineStream.AS = AS; }1278void MSCb(const D3D12_SHADER_BYTECODE& MS) override { PipelineStream.MS = MS; SeenMS = true; }1279void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override { PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState); }1280void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override1281{1282PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);1283SeenDSS = true;1284}1285void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override1286{1287PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);1288SeenDSS = true;1289}1290void DepthStencilState2Cb(const D3D12_DEPTH_STENCIL_DESC2& DepthStencilState) override1291{1292PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);1293SeenDSS = true;1294}1295void DSVFormatCb(DXGI_FORMAT DSVFormat) override {PipelineStream.DSVFormat = DSVFormat;}1296void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); }1297void RasterizerState1Cb(const D3D12_RASTERIZER_DESC1& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); }1298void RasterizerState2Cb(const D3D12_RASTERIZER_DESC2& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); }1299void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override { PipelineStream.RTVFormats = RTVFormats; }1300void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override { PipelineStream.SampleDesc = SampleDesc; }1301void SampleMaskCb(UINT SampleMask) override { PipelineStream.SampleMask = SampleMask; }1302void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override { PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc); }1303void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override { PipelineStream.CachedPSO = CachedPSO; }1304void FinalizeCb() override1305{1306if (!SeenDSS && PipelineStream.DSVFormat != DXGI_FORMAT_UNKNOWN)1307{1308// Re-enable depth for the default state.1309static_cast<D3D12_DEPTH_STENCIL_DESC2&>(PipelineStream.DepthStencilState).DepthEnable = true;1310}1311if (!SeenTopology && SeenMS)1312{1313PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED;1314}1315}13161317private:1318bool SeenDSS;1319bool SeenMS;1320bool SeenTopology;1321};1322#elif defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610)1323struct CD3DX12_PIPELINE_STATE_STREAM5_PARSE_HELPER : public ID3DX12PipelineParserCallbacks1324{1325CD3DX12_PIPELINE_STATE_STREAM5 PipelineStream;1326CD3DX12_PIPELINE_STATE_STREAM5_PARSE_HELPER() noexcept1327: SeenDSS(false)1328{1329// Adjust defaults to account for absent members.1330PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;13311332// Depth disabled if no DSV format specified.1333static_cast<D3D12_DEPTH_STENCIL_DESC2&>(PipelineStream.DepthStencilState).DepthEnable = false;1334}13351336// ID3DX12PipelineParserCallbacks1337void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override { PipelineStream.Flags = Flags; }1338void NodeMaskCb(UINT NodeMask) override { PipelineStream.NodeMask = NodeMask; }1339void RootSignatureCb(ID3D12RootSignature* pRootSignature) override { PipelineStream.pRootSignature = pRootSignature; }1340void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override { PipelineStream.InputLayout = InputLayout; }1341void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override { PipelineStream.IBStripCutValue = IBStripCutValue; }1342void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override { PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType; }1343void VSCb(const D3D12_SHADER_BYTECODE& VS) override { PipelineStream.VS = VS; }1344void GSCb(const D3D12_SHADER_BYTECODE& GS) override { PipelineStream.GS = GS; }1345void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override { PipelineStream.StreamOutput = StreamOutput; }1346void HSCb(const D3D12_SHADER_BYTECODE& HS) override { PipelineStream.HS = HS; }1347void DSCb(const D3D12_SHADER_BYTECODE& DS) override { PipelineStream.DS = DS; }1348void PSCb(const D3D12_SHADER_BYTECODE& PS) override { PipelineStream.PS = PS; }1349void CSCb(const D3D12_SHADER_BYTECODE& CS) override { PipelineStream.CS = CS; }1350void ASCb(const D3D12_SHADER_BYTECODE& AS) override { PipelineStream.AS = AS; }1351void MSCb(const D3D12_SHADER_BYTECODE& MS) override { PipelineStream.MS = MS; }1352void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override { PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState); }1353void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override1354{1355PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);1356SeenDSS = true;1357}1358void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override1359{1360PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);1361SeenDSS = true;1362}1363void DepthStencilState2Cb(const D3D12_DEPTH_STENCIL_DESC2& DepthStencilState) override1364{1365PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);1366SeenDSS = true;1367}1368void DSVFormatCb(DXGI_FORMAT DSVFormat) override1369{1370PipelineStream.DSVFormat = DSVFormat;1371if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN)1372{1373// Re-enable depth for the default state.1374static_cast<D3D12_DEPTH_STENCIL_DESC2&>(PipelineStream.DepthStencilState).DepthEnable = true;1375}1376}1377void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); }1378void RasterizerState1Cb(const D3D12_RASTERIZER_DESC1& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); }1379void RasterizerState2Cb(const D3D12_RASTERIZER_DESC2& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); }1380void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override { PipelineStream.RTVFormats = RTVFormats; }1381void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override { PipelineStream.SampleDesc = SampleDesc; }1382void SampleMaskCb(UINT SampleMask) override { PipelineStream.SampleMask = SampleMask; }1383void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override { PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc); }1384void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override { PipelineStream.CachedPSO = CachedPSO; }13851386private:1387bool SeenDSS;1388};1389#endif // D3D12_SDK_VERSION >= 61013901391#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 618)1392struct CD3DX12_PIPELINE_STATE_STREAM6_PARSE_HELPER : public ID3DX12PipelineParserCallbacks1393{1394CD3DX12_PIPELINE_STATE_STREAM6 PipelineStream;1395CD3DX12_PIPELINE_STATE_STREAM6_PARSE_HELPER() noexcept1396: SeenDSS(false),1397SeenMS(false),1398SeenTopology(false)1399{1400// Adjust defaults to account for absent members.1401PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;14021403// Depth disabled if no DSV format specified.1404static_cast<D3D12_DEPTH_STENCIL_DESC2&>(PipelineStream.DepthStencilState).DepthEnable = false;1405}14061407// ID3DX12PipelineParserCallbacks1408void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override { PipelineStream.Flags = Flags; }1409void NodeMaskCb(UINT NodeMask) override { PipelineStream.NodeMask = NodeMask; }1410void RootSignatureCb(ID3D12RootSignature* pRootSignature) override { PipelineStream.pRootSignature = pRootSignature; }1411void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override { PipelineStream.InputLayout = InputLayout; }1412void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override { PipelineStream.IBStripCutValue = IBStripCutValue; }1413void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override1414{1415PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;1416SeenTopology = true;1417}1418void VSCb(const D3D12_SHADER_BYTECODE& VS) override { PipelineStream.VS = VS; }1419void GSCb(const D3D12_SHADER_BYTECODE& GS) override { PipelineStream.GS = GS; }1420void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override { PipelineStream.StreamOutput = StreamOutput; }1421void HSCb(const D3D12_SHADER_BYTECODE& HS) override { PipelineStream.HS = HS; }1422void DSCb(const D3D12_SHADER_BYTECODE& DS) override { PipelineStream.DS = DS; }1423void PSCb(const D3D12_SHADER_BYTECODE& PS) override { PipelineStream.PS = PS; }1424void CSCb(const D3D12_SHADER_BYTECODE& CS) override { PipelineStream.CS = CS; }1425void ASCb(const D3D12_SHADER_BYTECODE& AS) override { PipelineStream.AS = AS; }1426void MSCb(const D3D12_SHADER_BYTECODE& MS) override { PipelineStream.MS = MS; SeenMS = true; }1427void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override { PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState); }1428void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override1429{1430PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);1431SeenDSS = true;1432}1433void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override1434{1435PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);1436SeenDSS = true;1437}1438void DepthStencilState2Cb(const D3D12_DEPTH_STENCIL_DESC2& DepthStencilState) override1439{1440PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);1441SeenDSS = true;1442}1443void DSVFormatCb(DXGI_FORMAT DSVFormat) override { PipelineStream.DSVFormat = DSVFormat; }1444void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); }1445void RasterizerState1Cb(const D3D12_RASTERIZER_DESC1& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); }1446void RasterizerState2Cb(const D3D12_RASTERIZER_DESC2& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); }1447void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override { PipelineStream.RTVFormats = RTVFormats; }1448void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override { PipelineStream.SampleDesc = SampleDesc; }1449void SampleMaskCb(UINT SampleMask) override { PipelineStream.SampleMask = SampleMask; }1450void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override { PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc); }1451void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override { PipelineStream.CachedPSO = CachedPSO; }1452void FinalizeCb() override1453{1454if (!SeenDSS && PipelineStream.DSVFormat != DXGI_FORMAT_UNKNOWN)1455{1456// Re-enable depth for the default state.1457static_cast<D3D12_DEPTH_STENCIL_DESC2&>(PipelineStream.DepthStencilState).DepthEnable = true;1458}1459if (!SeenTopology && SeenMS)1460{1461PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED;1462}1463}1464void SerializedRootSignatureCb(const D3D12_SERIALIZED_ROOT_SIGNATURE_DESC& SerializedRootSignature) override { PipelineStream.SerializedRootSignature = CD3DX12_SERIALIZED_ROOT_SIGNATURE_DESC(SerializedRootSignature); }14651466private:1467bool SeenDSS;1468bool SeenMS;1469bool SeenTopology;1470};1471#endif // D3D12_SDK_VERSION >= 61814721473struct CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER : public ID3DX12PipelineParserCallbacks1474{1475CD3DX12_PIPELINE_STATE_STREAM1 PipelineStream;1476CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER() noexcept1477: SeenDSS(false)1478{1479// Adjust defaults to account for absent members.1480PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;14811482// Depth disabled if no DSV format specified.1483static_cast<D3D12_DEPTH_STENCIL_DESC1&>(PipelineStream.DepthStencilState).DepthEnable = false;1484}14851486// ID3DX12PipelineParserCallbacks1487void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override {PipelineStream.Flags = Flags;}1488void NodeMaskCb(UINT NodeMask) override {PipelineStream.NodeMask = NodeMask;}1489void RootSignatureCb(ID3D12RootSignature* pRootSignature) override {PipelineStream.pRootSignature = pRootSignature;}1490void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override {PipelineStream.InputLayout = InputLayout;}1491void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override {PipelineStream.IBStripCutValue = IBStripCutValue;}1492void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override {PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;}1493void VSCb(const D3D12_SHADER_BYTECODE& VS) override {PipelineStream.VS = VS;}1494void GSCb(const D3D12_SHADER_BYTECODE& GS) override {PipelineStream.GS = GS;}1495void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override {PipelineStream.StreamOutput = StreamOutput;}1496void HSCb(const D3D12_SHADER_BYTECODE& HS) override {PipelineStream.HS = HS;}1497void DSCb(const D3D12_SHADER_BYTECODE& DS) override {PipelineStream.DS = DS;}1498void PSCb(const D3D12_SHADER_BYTECODE& PS) override {PipelineStream.PS = PS;}1499void CSCb(const D3D12_SHADER_BYTECODE& CS) override {PipelineStream.CS = CS;}1500void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override {PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState);}1501void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override1502{1503PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState);1504SeenDSS = true;1505}1506void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override1507{1508PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState);1509SeenDSS = true;1510}1511void DSVFormatCb(DXGI_FORMAT DSVFormat) override1512{1513PipelineStream.DSVFormat = DSVFormat;1514if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN)1515{1516// Re-enable depth for the default state.1517static_cast<D3D12_DEPTH_STENCIL_DESC1&>(PipelineStream.DepthStencilState).DepthEnable = true;1518}1519}1520void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override {PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC(RasterizerState);}1521void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override {PipelineStream.RTVFormats = RTVFormats;}1522void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override {PipelineStream.SampleDesc = SampleDesc;}1523void SampleMaskCb(UINT SampleMask) override {PipelineStream.SampleMask = SampleMask;}1524void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override {PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc);}1525void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override {PipelineStream.CachedPSO = CachedPSO;}15261527private:1528bool SeenDSS;1529};153015311532inline D3D12_PIPELINE_STATE_SUBOBJECT_TYPE D3DX12GetBaseSubobjectType(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE SubobjectType) noexcept1533{1534switch (SubobjectType)1535{1536case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1:1537return D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL;1538#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)1539case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2:1540return D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL;1541#endif1542#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)1543case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER1:1544return D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER;1545#endif1546default:1547return SubobjectType;1548}1549}15501551inline HRESULT D3DX12ParsePipelineStream(const D3D12_PIPELINE_STATE_STREAM_DESC& Desc, ID3DX12PipelineParserCallbacks* pCallbacks)1552{1553if (pCallbacks == nullptr)1554{1555return E_INVALIDARG;1556}15571558if (Desc.SizeInBytes == 0 || Desc.pPipelineStateSubobjectStream == nullptr)1559{1560pCallbacks->ErrorBadInputParameter(1); // first parameter issue1561return E_INVALIDARG;1562}15631564bool SubobjectSeen[D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID] = {};1565for (SIZE_T CurOffset = 0, SizeOfSubobject = 0; CurOffset < Desc.SizeInBytes; CurOffset += SizeOfSubobject)1566{1567BYTE* pStream = static_cast<BYTE*>(Desc.pPipelineStateSubobjectStream)+CurOffset;1568auto SubobjectType = *reinterpret_cast<D3D12_PIPELINE_STATE_SUBOBJECT_TYPE*>(pStream);1569if (SubobjectType < 0 || SubobjectType >= D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID)1570{1571pCallbacks->ErrorUnknownSubobject(SubobjectType);1572return E_INVALIDARG;1573}1574if (SubobjectSeen[D3DX12GetBaseSubobjectType(SubobjectType)])1575{1576pCallbacks->ErrorDuplicateSubobject(SubobjectType);1577return E_INVALIDARG; // disallow subobject duplicates in a stream1578}1579SubobjectSeen[SubobjectType] = true;1580switch (SubobjectType)1581{1582case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE:1583pCallbacks->RootSignatureCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::pRootSignature)*>(pStream));1584SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::pRootSignature);1585break;1586case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS:1587pCallbacks->VSCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::VS)*>(pStream));1588SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::VS);1589break;1590case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS:1591pCallbacks->PSCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::PS)*>(pStream));1592SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PS);1593break;1594case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS:1595pCallbacks->DSCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::DS)*>(pStream));1596SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DS);1597break;1598case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS:1599pCallbacks->HSCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::HS)*>(pStream));1600SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::HS);1601break;1602case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS:1603pCallbacks->GSCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::GS)*>(pStream));1604SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::GS);1605break;1606case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS:1607pCallbacks->CSCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::CS)*>(pStream));1608SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CS);1609break;1610case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_AS:1611pCallbacks->ASCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM2::AS)*>(pStream));1612SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM2::AS);1613break;1614case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MS:1615pCallbacks->MSCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM2::MS)*>(pStream));1616SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM2::MS);1617break;1618case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT:1619pCallbacks->StreamOutputCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::StreamOutput)*>(pStream));1620SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::StreamOutput);1621break;1622case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND:1623pCallbacks->BlendStateCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::BlendState)*>(pStream));1624SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::BlendState);1625break;1626case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK:1627pCallbacks->SampleMaskCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::SampleMask)*>(pStream));1628SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleMask);1629break;1630case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER:1631pCallbacks->RasterizerStateCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::RasterizerState)*>(pStream));1632SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RasterizerState);1633break;1634#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)1635case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER1:1636pCallbacks->RasterizerState1Cb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM4::RasterizerState)*>(pStream));1637SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM4::RasterizerState);1638break;1639#endif1640#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610)1641case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER2:1642pCallbacks->RasterizerState2Cb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM5::RasterizerState)*>(pStream));1643SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM5::RasterizerState);1644break;1645#endif1646case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL:1647pCallbacks->DepthStencilStateCb(*reinterpret_cast<CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL*>(pStream));1648SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL);1649break;1650case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1:1651pCallbacks->DepthStencilState1Cb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::DepthStencilState)*>(pStream));1652SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DepthStencilState);1653break;1654#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)1655case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2:1656pCallbacks->DepthStencilState2Cb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM3::DepthStencilState)*>(pStream));1657SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM3::DepthStencilState);1658break;1659#endif1660case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT:1661pCallbacks->InputLayoutCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::InputLayout)*>(pStream));1662SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::InputLayout);1663break;1664case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE:1665pCallbacks->IBStripCutValueCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::IBStripCutValue)*>(pStream));1666SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::IBStripCutValue);1667break;1668case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY:1669pCallbacks->PrimitiveTopologyTypeCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::PrimitiveTopologyType)*>(pStream));1670SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PrimitiveTopologyType);1671break;1672case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS:1673pCallbacks->RTVFormatsCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::RTVFormats)*>(pStream));1674SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RTVFormats);1675break;1676case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT:1677pCallbacks->DSVFormatCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::DSVFormat)*>(pStream));1678SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DSVFormat);1679break;1680case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC:1681pCallbacks->SampleDescCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::SampleDesc)*>(pStream));1682SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleDesc);1683break;1684case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK:1685pCallbacks->NodeMaskCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::NodeMask)*>(pStream));1686SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::NodeMask);1687break;1688case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO:1689pCallbacks->CachedPSOCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::CachedPSO)*>(pStream));1690SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CachedPSO);1691break;1692case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS:1693pCallbacks->FlagsCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::Flags)*>(pStream));1694SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::Flags);1695break;1696case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING:1697pCallbacks->ViewInstancingCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM1::ViewInstancingDesc)*>(pStream));1698SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM1::ViewInstancingDesc);1699break;1700#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 618)1701case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SERIALIZED_ROOT_SIGNATURE:1702pCallbacks->SerializedRootSignatureCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM6::SerializedRootSignature)*>(pStream));1703SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM6::SerializedRootSignature);1704break;1705#endif1706default:1707pCallbacks->ErrorUnknownSubobject(SubobjectType);1708return E_INVALIDARG;1709}1710}1711#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 613)1712pCallbacks->FinalizeCb();1713#endif17141715return S_OK;1716}1717171817191720