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