13#if defined( __cplusplus )
16#pragma clang diagnostic push
17#pragma clang diagnostic ignored "-Wfloat-equal"
18#pragma clang diagnostic ignored "-Wunknown-warning-option"
19#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
22struct CD3DX12_DEFAULT {};
23extern const DECLSPEC_SELECTANY CD3DX12_DEFAULT D3D12_DEFAULT;
26inline bool operator==(
const D3D12_VIEWPORT& l,
const D3D12_VIEWPORT& r )
noexcept
28 return l.TopLeftX == r.TopLeftX && l.TopLeftY == r.TopLeftY && l.Width == r.Width &&
29 l.Height == r.Height && l.MinDepth == r.MinDepth && l.MaxDepth == r.MaxDepth;
33inline bool operator!=(
const D3D12_VIEWPORT& l,
const D3D12_VIEWPORT& r )
noexcept
34{
return !( l == r ); }
37struct CD3DX12_RECT :
public D3D12_RECT
39 CD3DX12_RECT() =
default;
40 explicit CD3DX12_RECT(
const D3D12_RECT& o ) noexcept :
43 explicit CD3DX12_RECT(
47 LONG Bottom )
noexcept
57struct CD3DX12_VIEWPORT :
public D3D12_VIEWPORT
59 CD3DX12_VIEWPORT() =
default;
60 explicit CD3DX12_VIEWPORT(
const D3D12_VIEWPORT& o ) noexcept :
63 explicit CD3DX12_VIEWPORT(
68 FLOAT minDepth = D3D12_MIN_DEPTH,
69 FLOAT maxDepth = D3D12_MAX_DEPTH )
noexcept
78 explicit CD3DX12_VIEWPORT(
79 _In_ ID3D12Resource* pResource,
81 FLOAT topLeftX = 0.0f,
82 FLOAT topLeftY = 0.0f,
83 FLOAT minDepth = D3D12_MIN_DEPTH,
84 FLOAT maxDepth = D3D12_MAX_DEPTH )
noexcept
86#if defined(_MSC_VER) || !defined(_WIN32)
87 const auto Desc = pResource->GetDesc();
89 D3D12_RESOURCE_DESC tmpDesc;
90 const auto& Desc = *pResource->GetDesc(&tmpDesc);
92 const UINT64 SubresourceWidth = Desc.Width >> mipSlice;
93 const UINT64 SubresourceHeight = Desc.Height >> mipSlice;
94 switch (Desc.Dimension)
96 case D3D12_RESOURCE_DIMENSION_BUFFER:
99 Width = float(Desc.Width) - topLeftX;
102 case D3D12_RESOURCE_DIMENSION_TEXTURE1D:
105 Width = (SubresourceWidth ? float(SubresourceWidth) : 1.0f) - topLeftX;
108 case D3D12_RESOURCE_DIMENSION_TEXTURE2D:
109 case D3D12_RESOURCE_DIMENSION_TEXTURE3D:
112 Width = (SubresourceWidth ? float(SubresourceWidth) : 1.0f) - topLeftX;
113 Height = (SubresourceHeight ? float(SubresourceHeight) : 1.0f) - topLeftY;
124struct CD3DX12_BOX :
public D3D12_BOX
126 CD3DX12_BOX() =
default;
127 explicit CD3DX12_BOX(
const D3D12_BOX& o ) noexcept :
130 explicit CD3DX12_BOX(
132 LONG Right )
noexcept
134 left =
static_cast<UINT
>(
Left);
137 right =
static_cast<UINT
>(
Right);
141 explicit CD3DX12_BOX(
145 LONG Bottom )
noexcept
147 left =
static_cast<UINT
>(
Left);
148 top =
static_cast<UINT
>(
Top);
150 right =
static_cast<UINT
>(
Right);
151 bottom =
static_cast<UINT
>(
Bottom);
154 explicit CD3DX12_BOX(
162 left =
static_cast<UINT
>(
Left);
163 top =
static_cast<UINT
>(
Top);
164 front =
static_cast<UINT
>(
Front);
165 right =
static_cast<UINT
>(
Right);
166 bottom =
static_cast<UINT
>(
Bottom);
167 back =
static_cast<UINT
>(
Back);
170inline bool operator==(
const D3D12_BOX& l,
const D3D12_BOX& r )
noexcept
172 return l.left == r.left && l.top == r.top && l.front == r.front &&
173 l.right == r.right && l.bottom == r.bottom && l.back == r.back;
175inline bool operator!=(
const D3D12_BOX& l,
const D3D12_BOX& r )
noexcept
176{
return !( l == r ); }
179struct CD3DX12_DEPTH_STENCIL_DESC :
public D3D12_DEPTH_STENCIL_DESC
181 CD3DX12_DEPTH_STENCIL_DESC() =
default;
182 explicit CD3DX12_DEPTH_STENCIL_DESC(
const D3D12_DEPTH_STENCIL_DESC& o ) noexcept :
183 D3D12_DEPTH_STENCIL_DESC( o )
185 explicit CD3DX12_DEPTH_STENCIL_DESC( CD3DX12_DEFAULT )
noexcept
188 DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL;
189 DepthFunc = D3D12_COMPARISON_FUNC_LESS;
190 StencilEnable = FALSE;
191 StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK;
192 StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK;
193 const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp =
194 { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS };
195 FrontFace = defaultStencilOp;
196 BackFace = defaultStencilOp;
198 explicit CD3DX12_DEPTH_STENCIL_DESC(
200 D3D12_DEPTH_WRITE_MASK depthWriteMask,
201 D3D12_COMPARISON_FUNC depthFunc,
203 UINT8 stencilReadMask,
204 UINT8 stencilWriteMask,
205 D3D12_STENCIL_OP frontStencilFailOp,
206 D3D12_STENCIL_OP frontStencilDepthFailOp,
207 D3D12_STENCIL_OP frontStencilPassOp,
208 D3D12_COMPARISON_FUNC frontStencilFunc,
209 D3D12_STENCIL_OP backStencilFailOp,
210 D3D12_STENCIL_OP backStencilDepthFailOp,
211 D3D12_STENCIL_OP backStencilPassOp,
212 D3D12_COMPARISON_FUNC backStencilFunc )
noexcept
214 DepthEnable = depthEnable;
215 DepthWriteMask = depthWriteMask;
216 DepthFunc = depthFunc;
217 StencilEnable = stencilEnable;
218 StencilReadMask = stencilReadMask;
219 StencilWriteMask = stencilWriteMask;
220 FrontFace.StencilFailOp = frontStencilFailOp;
221 FrontFace.StencilDepthFailOp = frontStencilDepthFailOp;
222 FrontFace.StencilPassOp = frontStencilPassOp;
223 FrontFace.StencilFunc = frontStencilFunc;
224 BackFace.StencilFailOp = backStencilFailOp;
225 BackFace.StencilDepthFailOp = backStencilDepthFailOp;
226 BackFace.StencilPassOp = backStencilPassOp;
227 BackFace.StencilFunc = backStencilFunc;
232struct CD3DX12_DEPTH_STENCIL_DESC1 :
public D3D12_DEPTH_STENCIL_DESC1
234 CD3DX12_DEPTH_STENCIL_DESC1() =
default;
235 explicit CD3DX12_DEPTH_STENCIL_DESC1(
const D3D12_DEPTH_STENCIL_DESC1& o ) noexcept :
236 D3D12_DEPTH_STENCIL_DESC1( o )
238 explicit CD3DX12_DEPTH_STENCIL_DESC1(
const D3D12_DEPTH_STENCIL_DESC& o )
noexcept
240 DepthEnable = o.DepthEnable;
241 DepthWriteMask = o.DepthWriteMask;
242 DepthFunc = o.DepthFunc;
243 StencilEnable = o.StencilEnable;
244 StencilReadMask = o.StencilReadMask;
245 StencilWriteMask = o.StencilWriteMask;
246 FrontFace.StencilFailOp = o.FrontFace.StencilFailOp;
247 FrontFace.StencilDepthFailOp = o.FrontFace.StencilDepthFailOp;
248 FrontFace.StencilPassOp = o.FrontFace.StencilPassOp;
249 FrontFace.StencilFunc = o.FrontFace.StencilFunc;
250 BackFace.StencilFailOp = o.BackFace.StencilFailOp;
251 BackFace.StencilDepthFailOp = o.BackFace.StencilDepthFailOp;
252 BackFace.StencilPassOp = o.BackFace.StencilPassOp;
253 BackFace.StencilFunc = o.BackFace.StencilFunc;
254 DepthBoundsTestEnable = FALSE;
256 explicit CD3DX12_DEPTH_STENCIL_DESC1( CD3DX12_DEFAULT )
noexcept
259 DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL;
260 DepthFunc = D3D12_COMPARISON_FUNC_LESS;
261 StencilEnable = FALSE;
262 StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK;
263 StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK;
264 const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp =
265 { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS };
266 FrontFace = defaultStencilOp;
267 BackFace = defaultStencilOp;
268 DepthBoundsTestEnable = FALSE;
270 explicit CD3DX12_DEPTH_STENCIL_DESC1(
272 D3D12_DEPTH_WRITE_MASK depthWriteMask,
273 D3D12_COMPARISON_FUNC depthFunc,
275 UINT8 stencilReadMask,
276 UINT8 stencilWriteMask,
277 D3D12_STENCIL_OP frontStencilFailOp,
278 D3D12_STENCIL_OP frontStencilDepthFailOp,
279 D3D12_STENCIL_OP frontStencilPassOp,
280 D3D12_COMPARISON_FUNC frontStencilFunc,
281 D3D12_STENCIL_OP backStencilFailOp,
282 D3D12_STENCIL_OP backStencilDepthFailOp,
283 D3D12_STENCIL_OP backStencilPassOp,
284 D3D12_COMPARISON_FUNC backStencilFunc,
285 BOOL depthBoundsTestEnable )
noexcept
287 DepthEnable = depthEnable;
288 DepthWriteMask = depthWriteMask;
289 DepthFunc = depthFunc;
290 StencilEnable = stencilEnable;
291 StencilReadMask = stencilReadMask;
292 StencilWriteMask = stencilWriteMask;
293 FrontFace.StencilFailOp = frontStencilFailOp;
294 FrontFace.StencilDepthFailOp = frontStencilDepthFailOp;
295 FrontFace.StencilPassOp = frontStencilPassOp;
296 FrontFace.StencilFunc = frontStencilFunc;
297 BackFace.StencilFailOp = backStencilFailOp;
298 BackFace.StencilDepthFailOp = backStencilDepthFailOp;
299 BackFace.StencilPassOp = backStencilPassOp;
300 BackFace.StencilFunc = backStencilFunc;
301 DepthBoundsTestEnable = depthBoundsTestEnable;
303 operator D3D12_DEPTH_STENCIL_DESC() const noexcept
305 D3D12_DEPTH_STENCIL_DESC D;
306 D.DepthEnable = DepthEnable;
307 D.DepthWriteMask = DepthWriteMask;
308 D.DepthFunc = DepthFunc;
309 D.StencilEnable = StencilEnable;
310 D.StencilReadMask = StencilReadMask;
311 D.StencilWriteMask = StencilWriteMask;
312 D.FrontFace.StencilFailOp = FrontFace.StencilFailOp;
313 D.FrontFace.StencilDepthFailOp = FrontFace.StencilDepthFailOp;
314 D.FrontFace.StencilPassOp = FrontFace.StencilPassOp;
315 D.FrontFace.StencilFunc = FrontFace.StencilFunc;
316 D.BackFace.StencilFailOp = BackFace.StencilFailOp;
317 D.BackFace.StencilDepthFailOp = BackFace.StencilDepthFailOp;
318 D.BackFace.StencilPassOp = BackFace.StencilPassOp;
319 D.BackFace.StencilFunc = BackFace.StencilFunc;
325#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)
326struct CD3DX12_DEPTH_STENCIL_DESC2 :
public D3D12_DEPTH_STENCIL_DESC2
328 CD3DX12_DEPTH_STENCIL_DESC2() =
default;
329 explicit CD3DX12_DEPTH_STENCIL_DESC2(
const D3D12_DEPTH_STENCIL_DESC2& o ) noexcept :
330 D3D12_DEPTH_STENCIL_DESC2( o )
332 explicit CD3DX12_DEPTH_STENCIL_DESC2(
const D3D12_DEPTH_STENCIL_DESC1& o )
noexcept
334 DepthEnable = o.DepthEnable;
335 DepthWriteMask = o.DepthWriteMask;
336 DepthFunc = o.DepthFunc;
337 StencilEnable = o.StencilEnable;
338 FrontFace.StencilFailOp = o.FrontFace.StencilFailOp;
339 FrontFace.StencilDepthFailOp = o.FrontFace.StencilDepthFailOp;
340 FrontFace.StencilPassOp = o.FrontFace.StencilPassOp;
341 FrontFace.StencilFunc = o.FrontFace.StencilFunc;
342 FrontFace.StencilReadMask = o.StencilReadMask;
343 FrontFace.StencilWriteMask = o.StencilWriteMask;
345 BackFace.StencilFailOp = o.BackFace.StencilFailOp;
346 BackFace.StencilDepthFailOp = o.BackFace.StencilDepthFailOp;
347 BackFace.StencilPassOp = o.BackFace.StencilPassOp;
348 BackFace.StencilFunc = o.BackFace.StencilFunc;
349 BackFace.StencilReadMask = o.StencilReadMask;
350 BackFace.StencilWriteMask = o.StencilWriteMask;
351 DepthBoundsTestEnable = o.DepthBoundsTestEnable;
353 explicit CD3DX12_DEPTH_STENCIL_DESC2(
const D3D12_DEPTH_STENCIL_DESC& o )
noexcept
355 DepthEnable = o.DepthEnable;
356 DepthWriteMask = o.DepthWriteMask;
357 DepthFunc = o.DepthFunc;
358 StencilEnable = o.StencilEnable;
360 FrontFace.StencilFailOp = o.FrontFace.StencilFailOp;
361 FrontFace.StencilDepthFailOp = o.FrontFace.StencilDepthFailOp;
362 FrontFace.StencilPassOp = o.FrontFace.StencilPassOp;
363 FrontFace.StencilFunc = o.FrontFace.StencilFunc;
364 FrontFace.StencilReadMask = o.StencilReadMask;
365 FrontFace.StencilWriteMask = o.StencilWriteMask;
367 BackFace.StencilFailOp = o.BackFace.StencilFailOp;
368 BackFace.StencilDepthFailOp = o.BackFace.StencilDepthFailOp;
369 BackFace.StencilPassOp = o.BackFace.StencilPassOp;
370 BackFace.StencilFunc = o.BackFace.StencilFunc;
371 BackFace.StencilReadMask = o.StencilReadMask;
372 BackFace.StencilWriteMask = o.StencilWriteMask;
374 DepthBoundsTestEnable = FALSE;
376 explicit CD3DX12_DEPTH_STENCIL_DESC2( CD3DX12_DEFAULT )
noexcept
379 DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL;
380 DepthFunc = D3D12_COMPARISON_FUNC_LESS;
381 StencilEnable = FALSE;
382 const D3D12_DEPTH_STENCILOP_DESC1 defaultStencilOp =
383 { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS, D3D12_DEFAULT_STENCIL_READ_MASK, D3D12_DEFAULT_STENCIL_WRITE_MASK };
384 FrontFace = defaultStencilOp;
385 BackFace = defaultStencilOp;
386 DepthBoundsTestEnable = FALSE;
388 explicit CD3DX12_DEPTH_STENCIL_DESC2(
390 D3D12_DEPTH_WRITE_MASK depthWriteMask,
391 D3D12_COMPARISON_FUNC depthFunc,
393 D3D12_STENCIL_OP frontStencilFailOp,
394 D3D12_STENCIL_OP frontStencilDepthFailOp,
395 D3D12_STENCIL_OP frontStencilPassOp,
396 D3D12_COMPARISON_FUNC frontStencilFunc,
397 UINT8 frontStencilReadMask,
398 UINT8 frontStencilWriteMask,
399 D3D12_STENCIL_OP backStencilFailOp,
400 D3D12_STENCIL_OP backStencilDepthFailOp,
401 D3D12_STENCIL_OP backStencilPassOp,
402 D3D12_COMPARISON_FUNC backStencilFunc,
403 UINT8 backStencilReadMask,
404 UINT8 backStencilWriteMask,
405 BOOL depthBoundsTestEnable )
noexcept
407 DepthEnable = depthEnable;
408 DepthWriteMask = depthWriteMask;
409 DepthFunc = depthFunc;
410 StencilEnable = stencilEnable;
412 FrontFace.StencilFailOp = frontStencilFailOp;
413 FrontFace.StencilDepthFailOp = frontStencilDepthFailOp;
414 FrontFace.StencilPassOp = frontStencilPassOp;
415 FrontFace.StencilFunc = frontStencilFunc;
416 FrontFace.StencilReadMask = frontStencilReadMask;
417 FrontFace.StencilWriteMask = frontStencilWriteMask;
419 BackFace.StencilFailOp = backStencilFailOp;
420 BackFace.StencilDepthFailOp = backStencilDepthFailOp;
421 BackFace.StencilPassOp = backStencilPassOp;
422 BackFace.StencilFunc = backStencilFunc;
423 BackFace.StencilReadMask = backStencilReadMask;
424 BackFace.StencilWriteMask = backStencilWriteMask;
426 DepthBoundsTestEnable = depthBoundsTestEnable;
429 operator D3D12_DEPTH_STENCIL_DESC() const noexcept
431 D3D12_DEPTH_STENCIL_DESC D;
432 D.DepthEnable = DepthEnable;
433 D.DepthWriteMask = DepthWriteMask;
434 D.DepthFunc = DepthFunc;
435 D.StencilEnable = StencilEnable;
436 D.StencilReadMask = FrontFace.StencilReadMask;
437 D.StencilWriteMask = FrontFace.StencilWriteMask;
438 D.FrontFace.StencilFailOp = FrontFace.StencilFailOp;
439 D.FrontFace.StencilDepthFailOp = FrontFace.StencilDepthFailOp;
440 D.FrontFace.StencilPassOp = FrontFace.StencilPassOp;
441 D.FrontFace.StencilFunc = FrontFace.StencilFunc;
442 D.BackFace.StencilFailOp = BackFace.StencilFailOp;
443 D.BackFace.StencilDepthFailOp = BackFace.StencilDepthFailOp;
444 D.BackFace.StencilPassOp = BackFace.StencilPassOp;
445 D.BackFace.StencilFunc = BackFace.StencilFunc;
452struct CD3DX12_BLEND_DESC :
public D3D12_BLEND_DESC
454 CD3DX12_BLEND_DESC() =
default;
455 explicit CD3DX12_BLEND_DESC(
const D3D12_BLEND_DESC& o ) noexcept :
456 D3D12_BLEND_DESC( o )
458 explicit CD3DX12_BLEND_DESC( CD3DX12_DEFAULT )
noexcept
460 AlphaToCoverageEnable = FALSE;
461 IndependentBlendEnable = FALSE;
462 const D3D12_RENDER_TARGET_BLEND_DESC defaultRenderTargetBlendDesc =
465 D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD,
466 D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD,
468 D3D12_COLOR_WRITE_ENABLE_ALL,
470 for (UINT i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
471 RenderTarget[ i ] = defaultRenderTargetBlendDesc;
476struct CD3DX12_RASTERIZER_DESC :
public D3D12_RASTERIZER_DESC
478 CD3DX12_RASTERIZER_DESC() =
default;
479 explicit CD3DX12_RASTERIZER_DESC(
const D3D12_RASTERIZER_DESC& o ) noexcept :
480 D3D12_RASTERIZER_DESC( o )
482 explicit CD3DX12_RASTERIZER_DESC( CD3DX12_DEFAULT )
noexcept
486 FrontCounterClockwise = FALSE;
487 DepthBias = D3D12_DEFAULT_DEPTH_BIAS;
488 DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP;
489 SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS;
490 DepthClipEnable = TRUE;
491 MultisampleEnable = FALSE;
492 AntialiasedLineEnable = FALSE;
493 ForcedSampleCount = 0;
494 ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF;
496 explicit CD3DX12_RASTERIZER_DESC(
497 D3D12_FILL_MODE fillMode,
498 D3D12_CULL_MODE cullMode,
499 BOOL frontCounterClockwise,
501 FLOAT depthBiasClamp,
502 FLOAT slopeScaledDepthBias,
503 BOOL depthClipEnable,
504 BOOL multisampleEnable,
505 BOOL antialiasedLineEnable,
506 UINT forcedSampleCount,
507 D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster)
noexcept
511 FrontCounterClockwise = frontCounterClockwise;
512 DepthBias = depthBias;
513 DepthBiasClamp = depthBiasClamp;
514 SlopeScaledDepthBias = slopeScaledDepthBias;
515 DepthClipEnable = depthClipEnable;
516 MultisampleEnable = multisampleEnable;
517 AntialiasedLineEnable = antialiasedLineEnable;
518 ForcedSampleCount = forcedSampleCount;
519 ConservativeRaster = conservativeRaster;
524#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)
525struct CD3DX12_RASTERIZER_DESC1 :
public D3D12_RASTERIZER_DESC1
527 CD3DX12_RASTERIZER_DESC1() =
default;
528 explicit CD3DX12_RASTERIZER_DESC1(
const D3D12_RASTERIZER_DESC1& o) noexcept :
529 D3D12_RASTERIZER_DESC1(o)
533 explicit CD3DX12_RASTERIZER_DESC1(
const D3D12_RASTERIZER_DESC& o)
noexcept
537 FrontCounterClockwise = o.FrontCounterClockwise;
538 DepthBias =
static_cast<FLOAT
>(o.DepthBias);
539 DepthBiasClamp = o.DepthBiasClamp;
540 SlopeScaledDepthBias = o.SlopeScaledDepthBias;
541 DepthClipEnable = o.DepthClipEnable;
542 MultisampleEnable = o.MultisampleEnable;
543 AntialiasedLineEnable = o.AntialiasedLineEnable;
544 ForcedSampleCount = o.ForcedSampleCount;
545 ConservativeRaster = o.ConservativeRaster;
547 explicit CD3DX12_RASTERIZER_DESC1(CD3DX12_DEFAULT)
noexcept
551 FrontCounterClockwise = FALSE;
552 DepthBias = D3D12_DEFAULT_DEPTH_BIAS;
553 DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP;
554 SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS;
555 DepthClipEnable = TRUE;
556 MultisampleEnable = FALSE;
557 AntialiasedLineEnable = FALSE;
558 ForcedSampleCount = 0;
559 ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF;
561 explicit CD3DX12_RASTERIZER_DESC1(
562 D3D12_FILL_MODE fillMode,
563 D3D12_CULL_MODE cullMode,
564 BOOL frontCounterClockwise,
566 FLOAT depthBiasClamp,
567 FLOAT slopeScaledDepthBias,
568 BOOL depthClipEnable,
569 BOOL multisampleEnable,
570 BOOL antialiasedLineEnable,
571 UINT forcedSampleCount,
572 D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster)
noexcept
576 FrontCounterClockwise = frontCounterClockwise;
577 DepthBias = depthBias;
578 DepthBiasClamp = depthBiasClamp;
579 SlopeScaledDepthBias = slopeScaledDepthBias;
580 DepthClipEnable = depthClipEnable;
581 MultisampleEnable = multisampleEnable;
582 AntialiasedLineEnable = antialiasedLineEnable;
583 ForcedSampleCount = forcedSampleCount;
584 ConservativeRaster = conservativeRaster;
588 operator D3D12_RASTERIZER_DESC() const noexcept
590 D3D12_RASTERIZER_DESC o;
594 o.FrontCounterClockwise = FrontCounterClockwise;
595 o.DepthBias =
static_cast<INT
>(DepthBias);
596 o.DepthBiasClamp = DepthBiasClamp;
597 o.SlopeScaledDepthBias = SlopeScaledDepthBias;
598 o.DepthClipEnable = DepthClipEnable;
599 o.MultisampleEnable = MultisampleEnable;
600 o.AntialiasedLineEnable = AntialiasedLineEnable;
601 o.ForcedSampleCount = ForcedSampleCount;
602 o.ConservativeRaster = ConservativeRaster;
610#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610)
611struct CD3DX12_RASTERIZER_DESC2 :
public D3D12_RASTERIZER_DESC2
613 CD3DX12_RASTERIZER_DESC2() =
default;
614 explicit CD3DX12_RASTERIZER_DESC2(
const D3D12_RASTERIZER_DESC2& o) noexcept :
615 D3D12_RASTERIZER_DESC2(o)
619 explicit CD3DX12_RASTERIZER_DESC2(
const D3D12_RASTERIZER_DESC1& o)
noexcept
623 FrontCounterClockwise = o.FrontCounterClockwise;
624 DepthBias = o.DepthBias;
625 DepthBiasClamp = o.DepthBiasClamp;
626 SlopeScaledDepthBias = o.SlopeScaledDepthBias;
627 DepthClipEnable = o.DepthClipEnable;
628 LineRasterizationMode = D3D12_LINE_RASTERIZATION_MODE_ALIASED;
629 if (o.MultisampleEnable)
631 LineRasterizationMode = D3D12_LINE_RASTERIZATION_MODE_QUADRILATERAL_WIDE;
633 else if (o.AntialiasedLineEnable)
635 LineRasterizationMode = D3D12_LINE_RASTERIZATION_MODE_ALPHA_ANTIALIASED;
637 ForcedSampleCount = o.ForcedSampleCount;
638 ConservativeRaster = o.ConservativeRaster;
640 explicit CD3DX12_RASTERIZER_DESC2(
const D3D12_RASTERIZER_DESC& o) noexcept
641 : CD3DX12_RASTERIZER_DESC2(CD3DX12_RASTERIZER_DESC1(o))
644 explicit CD3DX12_RASTERIZER_DESC2(CD3DX12_DEFAULT)
noexcept
648 FrontCounterClockwise = FALSE;
649 DepthBias = D3D12_DEFAULT_DEPTH_BIAS;
650 DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP;
651 SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS;
652 DepthClipEnable = TRUE;
653 LineRasterizationMode = D3D12_LINE_RASTERIZATION_MODE_ALIASED;
654 ForcedSampleCount = 0;
655 ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF;
657 explicit CD3DX12_RASTERIZER_DESC2(
658 D3D12_FILL_MODE fillMode,
659 D3D12_CULL_MODE cullMode,
660 BOOL frontCounterClockwise,
662 FLOAT depthBiasClamp,
663 FLOAT slopeScaledDepthBias,
664 BOOL depthClipEnable,
665 D3D12_LINE_RASTERIZATION_MODE lineRasterizationMode,
666 UINT forcedSampleCount,
667 D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster)
noexcept
671 FrontCounterClockwise = frontCounterClockwise;
672 DepthBias = depthBias;
673 DepthBiasClamp = depthBiasClamp;
674 SlopeScaledDepthBias = slopeScaledDepthBias;
675 DepthClipEnable = depthClipEnable;
676 LineRasterizationMode = lineRasterizationMode;
677 ForcedSampleCount = forcedSampleCount;
678 ConservativeRaster = conservativeRaster;
682 operator D3D12_RASTERIZER_DESC1() const noexcept
684 D3D12_RASTERIZER_DESC1 o;
688 o.FrontCounterClockwise = FrontCounterClockwise;
689 o.DepthBias = DepthBias;
690 o.DepthBiasClamp = DepthBiasClamp;
691 o.SlopeScaledDepthBias = SlopeScaledDepthBias;
692 o.DepthClipEnable = DepthClipEnable;
693 o.MultisampleEnable = FALSE;
694 o.AntialiasedLineEnable = FALSE;
695 if (LineRasterizationMode == D3D12_LINE_RASTERIZATION_MODE_ALPHA_ANTIALIASED)
697 o.AntialiasedLineEnable = TRUE;
699 else if (LineRasterizationMode != D3D12_LINE_RASTERIZATION_MODE_ALIASED)
701 o.MultisampleEnable = TRUE;
703 o.ForcedSampleCount = ForcedSampleCount;
704 o.ConservativeRaster = ConservativeRaster;
708 operator D3D12_RASTERIZER_DESC() const noexcept
710 return static_cast<D3D12_RASTERIZER_DESC
>(CD3DX12_RASTERIZER_DESC1(
static_cast<D3D12_RASTERIZER_DESC1
>(*
this)));
716struct CD3DX12_RESOURCE_ALLOCATION_INFO :
public D3D12_RESOURCE_ALLOCATION_INFO
718 CD3DX12_RESOURCE_ALLOCATION_INFO() =
default;
719 explicit CD3DX12_RESOURCE_ALLOCATION_INFO(
const D3D12_RESOURCE_ALLOCATION_INFO& o ) noexcept :
720 D3D12_RESOURCE_ALLOCATION_INFO( o )
722 CD3DX12_RESOURCE_ALLOCATION_INFO(
724 UINT64 alignment )
noexcept
727 Alignment = alignment;
732struct CD3DX12_HEAP_PROPERTIES :
public D3D12_HEAP_PROPERTIES
734 CD3DX12_HEAP_PROPERTIES() =
default;
735 explicit CD3DX12_HEAP_PROPERTIES(
const D3D12_HEAP_PROPERTIES &o) noexcept :
736 D3D12_HEAP_PROPERTIES(o)
738 CD3DX12_HEAP_PROPERTIES(
739 D3D12_CPU_PAGE_PROPERTY cpuPageProperty,
740 D3D12_MEMORY_POOL memoryPoolPreference,
741 UINT creationNodeMask = 1,
742 UINT nodeMask = 1 ) noexcept
744 Type = D3D12_HEAP_TYPE_CUSTOM;
745 CPUPageProperty = cpuPageProperty;
746 MemoryPoolPreference = memoryPoolPreference;
747 CreationNodeMask = creationNodeMask;
748 VisibleNodeMask = nodeMask;
750 explicit CD3DX12_HEAP_PROPERTIES(
751 D3D12_HEAP_TYPE type,
752 UINT creationNodeMask = 1,
753 UINT nodeMask = 1 ) noexcept
756 CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN;
757 MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN;
758 CreationNodeMask = creationNodeMask;
759 VisibleNodeMask = nodeMask;
761 bool IsCPUAccessible() const noexcept
763 return Type == D3D12_HEAP_TYPE_UPLOAD ||
Type == D3D12_HEAP_TYPE_READBACK
764#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
765 ||
Type == D3D12_HEAP_TYPE_GPU_UPLOAD
767 || (
Type == D3D12_HEAP_TYPE_CUSTOM &&
768 (CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE || CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_BACK));
771inline bool operator==(
const D3D12_HEAP_PROPERTIES& l,
const D3D12_HEAP_PROPERTIES& r )
noexcept
773 return l.Type == r.Type && l.CPUPageProperty == r.CPUPageProperty &&
774 l.MemoryPoolPreference == r.MemoryPoolPreference &&
775 l.CreationNodeMask == r.CreationNodeMask &&
776 l.VisibleNodeMask == r.VisibleNodeMask;
778inline bool operator!=(
const D3D12_HEAP_PROPERTIES& l,
const D3D12_HEAP_PROPERTIES& r )
noexcept
779{
return !( l == r ); }
782struct CD3DX12_HEAP_DESC :
public D3D12_HEAP_DESC
784 CD3DX12_HEAP_DESC() =
default;
785 explicit CD3DX12_HEAP_DESC(
const D3D12_HEAP_DESC &o) noexcept :
790 D3D12_HEAP_PROPERTIES properties,
792 D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE )
noexcept
795 Properties = properties;
796 Alignment = alignment;
801 D3D12_HEAP_TYPE type,
803 D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE )
noexcept
806 Properties = CD3DX12_HEAP_PROPERTIES( type );
807 Alignment = alignment;
812 D3D12_CPU_PAGE_PROPERTY cpuPageProperty,
813 D3D12_MEMORY_POOL memoryPoolPreference,
815 D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE )
noexcept
818 Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference );
819 Alignment = alignment;
823 const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo,
824 D3D12_HEAP_PROPERTIES properties,
825 D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE )
noexcept
827 SizeInBytes = resAllocInfo.SizeInBytes;
828 Properties = properties;
829 Alignment = resAllocInfo.Alignment;
833 const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo,
834 D3D12_HEAP_TYPE type,
835 D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE )
noexcept
837 SizeInBytes = resAllocInfo.SizeInBytes;
838 Properties = CD3DX12_HEAP_PROPERTIES( type );
839 Alignment = resAllocInfo.Alignment;
843 const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo,
844 D3D12_CPU_PAGE_PROPERTY cpuPageProperty,
845 D3D12_MEMORY_POOL memoryPoolPreference,
846 D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE )
noexcept
848 SizeInBytes = resAllocInfo.SizeInBytes;
849 Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference );
850 Alignment = resAllocInfo.Alignment;
853 bool IsCPUAccessible() const noexcept
854 {
return static_cast< const CD3DX12_HEAP_PROPERTIES*
>( &Properties )->IsCPUAccessible(); }
856inline bool operator==(
const D3D12_HEAP_DESC& l,
const D3D12_HEAP_DESC& r )
noexcept
858 return l.SizeInBytes == r.SizeInBytes &&
859 l.Properties == r.Properties &&
860 l.Alignment == r.Alignment &&
863inline bool operator!=(
const D3D12_HEAP_DESC& l,
const D3D12_HEAP_DESC& r )
noexcept
864{
return !( l == r ); }
867struct CD3DX12_CLEAR_VALUE :
public D3D12_CLEAR_VALUE
869 CD3DX12_CLEAR_VALUE() =
default;
870 explicit CD3DX12_CLEAR_VALUE(
const D3D12_CLEAR_VALUE &o) noexcept :
875 const FLOAT color[4] )
noexcept
878 memcpy( Color, color,
sizeof( Color ) );
883 UINT8 stencil )
noexcept
886 memset( &Color, 0,
sizeof( Color ) );
894inline bool operator==(
const D3D12_CLEAR_VALUE &a,
const D3D12_CLEAR_VALUE &b)
noexcept
896 if (a.Format != b.Format)
return false;
897 if (a.Format == DXGI_FORMAT_D24_UNORM_S8_UINT
898 || a.Format == DXGI_FORMAT_D16_UNORM
899 || a.Format == DXGI_FORMAT_D32_FLOAT
900 || a.Format == DXGI_FORMAT_D32_FLOAT_S8X24_UINT)
902 return (a.DepthStencil.Depth == b.DepthStencil.Depth) &&
903 (a.DepthStencil.Stencil == b.DepthStencil.Stencil);
905 return (a.Color[0] == b.Color[0]) &&
906 (a.Color[1] == b.Color[1]) &&
907 (a.Color[2] == b.Color[2]) &&
908 (a.Color[3] == b.Color[3]);
913struct CD3DX12_RANGE :
public D3D12_RANGE
915 CD3DX12_RANGE() =
default;
916 explicit CD3DX12_RANGE(
const D3D12_RANGE &o) noexcept :
921 SIZE_T end )
noexcept
929struct CD3DX12_RANGE_UINT64 :
public D3D12_RANGE_UINT64
931 CD3DX12_RANGE_UINT64() =
default;
932 explicit CD3DX12_RANGE_UINT64(
const D3D12_RANGE_UINT64 &o) noexcept :
933 D3D12_RANGE_UINT64(o)
935 CD3DX12_RANGE_UINT64(
945struct CD3DX12_SUBRESOURCE_RANGE_UINT64 :
public D3D12_SUBRESOURCE_RANGE_UINT64
947 CD3DX12_SUBRESOURCE_RANGE_UINT64() =
default;
948 explicit CD3DX12_SUBRESOURCE_RANGE_UINT64(
const D3D12_SUBRESOURCE_RANGE_UINT64 &o) noexcept :
949 D3D12_SUBRESOURCE_RANGE_UINT64(o)
951 CD3DX12_SUBRESOURCE_RANGE_UINT64(
953 const D3D12_RANGE_UINT64& range )
noexcept
955 Subresource = subresource;
958 CD3DX12_SUBRESOURCE_RANGE_UINT64(
963 Subresource = subresource;
970struct CD3DX12_SHADER_BYTECODE :
public D3D12_SHADER_BYTECODE
972 CD3DX12_SHADER_BYTECODE() =
default;
973 explicit CD3DX12_SHADER_BYTECODE(
const D3D12_SHADER_BYTECODE &o) noexcept :
974 D3D12_SHADER_BYTECODE(o)
976 CD3DX12_SHADER_BYTECODE(
977 _In_ ID3DBlob* pShaderBlob )
noexcept
979 pShaderBytecode = pShaderBlob->GetBufferPointer();
980 BytecodeLength = pShaderBlob->GetBufferSize();
982 CD3DX12_SHADER_BYTECODE(
983 const void* _pShaderBytecode,
984 SIZE_T bytecodeLength )
noexcept
986 pShaderBytecode = _pShaderBytecode;
987 BytecodeLength = bytecodeLength;
992struct CD3DX12_TILED_RESOURCE_COORDINATE :
public D3D12_TILED_RESOURCE_COORDINATE
994 CD3DX12_TILED_RESOURCE_COORDINATE() =
default;
995 explicit CD3DX12_TILED_RESOURCE_COORDINATE(
const D3D12_TILED_RESOURCE_COORDINATE &o) noexcept :
996 D3D12_TILED_RESOURCE_COORDINATE(o)
998 CD3DX12_TILED_RESOURCE_COORDINATE(
1002 UINT subresource )
noexcept
1007 Subresource = subresource;
1012struct CD3DX12_TILE_REGION_SIZE :
public D3D12_TILE_REGION_SIZE
1014 CD3DX12_TILE_REGION_SIZE() =
default;
1015 explicit CD3DX12_TILE_REGION_SIZE(
const D3D12_TILE_REGION_SIZE &o) noexcept :
1016 D3D12_TILE_REGION_SIZE(o)
1018 CD3DX12_TILE_REGION_SIZE(
1025 NumTiles = numTiles;
1034struct CD3DX12_SUBRESOURCE_TILING :
public D3D12_SUBRESOURCE_TILING
1036 CD3DX12_SUBRESOURCE_TILING() =
default;
1037 explicit CD3DX12_SUBRESOURCE_TILING(
const D3D12_SUBRESOURCE_TILING &o) noexcept :
1038 D3D12_SUBRESOURCE_TILING(o)
1040 CD3DX12_SUBRESOURCE_TILING(
1044 UINT startTileIndexInOverallResource )
noexcept
1046 WidthInTiles = widthInTiles;
1047 HeightInTiles = heightInTiles;
1048 DepthInTiles = depthInTiles;
1049 StartTileIndexInOverallResource = startTileIndexInOverallResource;
1054struct CD3DX12_TILE_SHAPE :
public D3D12_TILE_SHAPE
1056 CD3DX12_TILE_SHAPE() =
default;
1057 explicit CD3DX12_TILE_SHAPE(
const D3D12_TILE_SHAPE &o) noexcept :
1062 UINT heightInTexels,
1063 UINT depthInTexels )
noexcept
1065 WidthInTexels = widthInTexels;
1066 HeightInTexels = heightInTexels;
1067 DepthInTexels = depthInTexels;
1072struct CD3DX12_RESOURCE_BARRIER :
public D3D12_RESOURCE_BARRIER
1074 CD3DX12_RESOURCE_BARRIER() =
default;
1075 explicit CD3DX12_RESOURCE_BARRIER(
const D3D12_RESOURCE_BARRIER &o) noexcept :
1076 D3D12_RESOURCE_BARRIER(o)
1078 static inline CD3DX12_RESOURCE_BARRIER Transition(
1079 _In_ ID3D12Resource* pResource,
1080 D3D12_RESOURCE_STATES stateBefore,
1081 D3D12_RESOURCE_STATES stateAfter,
1082 UINT subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES,
1083 D3D12_RESOURCE_BARRIER_FLAGS flags = D3D12_RESOURCE_BARRIER_FLAG_NONE)
noexcept
1085 CD3DX12_RESOURCE_BARRIER result = {};
1086 D3D12_RESOURCE_BARRIER &barrier = result;
1087 result.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
1088 result.Flags = flags;
1089 barrier.Transition.pResource = pResource;
1090 barrier.Transition.StateBefore = stateBefore;
1091 barrier.Transition.StateAfter = stateAfter;
1092 barrier.Transition.Subresource = subresource;
1095 static inline CD3DX12_RESOURCE_BARRIER Aliasing(
1096 _In_opt_ ID3D12Resource* pResourceBefore,
1097 _In_opt_ ID3D12Resource* pResourceAfter)
noexcept
1099 CD3DX12_RESOURCE_BARRIER result = {};
1100 D3D12_RESOURCE_BARRIER &barrier = result;
1101 result.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING;
1102 barrier.Aliasing.pResourceBefore = pResourceBefore;
1103 barrier.Aliasing.pResourceAfter = pResourceAfter;
1106 static inline CD3DX12_RESOURCE_BARRIER UAV(
1107 _In_opt_ ID3D12Resource* pResource)
noexcept
1109 CD3DX12_RESOURCE_BARRIER result = {};
1110 D3D12_RESOURCE_BARRIER &barrier = result;
1111 result.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV;
1112 barrier.UAV.pResource = pResource;
1118struct CD3DX12_PACKED_MIP_INFO :
public D3D12_PACKED_MIP_INFO
1120 CD3DX12_PACKED_MIP_INFO() =
default;
1121 explicit CD3DX12_PACKED_MIP_INFO(
const D3D12_PACKED_MIP_INFO &o) noexcept :
1122 D3D12_PACKED_MIP_INFO(o)
1124 CD3DX12_PACKED_MIP_INFO(
1125 UINT8 numStandardMips,
1126 UINT8 numPackedMips,
1127 UINT numTilesForPackedMips,
1128 UINT startTileIndexInOverallResource )
noexcept
1130 NumStandardMips = numStandardMips;
1131 NumPackedMips = numPackedMips;
1132 NumTilesForPackedMips = numTilesForPackedMips;
1133 StartTileIndexInOverallResource = startTileIndexInOverallResource;
1138struct CD3DX12_SUBRESOURCE_FOOTPRINT :
public D3D12_SUBRESOURCE_FOOTPRINT
1140 CD3DX12_SUBRESOURCE_FOOTPRINT() =
default;
1141 explicit CD3DX12_SUBRESOURCE_FOOTPRINT(
const D3D12_SUBRESOURCE_FOOTPRINT &o) noexcept :
1142 D3D12_SUBRESOURCE_FOOTPRINT(o)
1144 CD3DX12_SUBRESOURCE_FOOTPRINT(
1149 UINT rowPitch )
noexcept
1155 RowPitch = rowPitch;
1157 explicit CD3DX12_SUBRESOURCE_FOOTPRINT(
1158 const D3D12_RESOURCE_DESC& resDesc,
1159 UINT rowPitch )
noexcept
1162 Width = UINT( resDesc.Width );
1164 Depth = (resDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? resDesc.DepthOrArraySize : 1u);
1165 RowPitch = rowPitch;
1170struct CD3DX12_TEXTURE_COPY_LOCATION :
public D3D12_TEXTURE_COPY_LOCATION
1172 CD3DX12_TEXTURE_COPY_LOCATION() =
default;
1173 explicit CD3DX12_TEXTURE_COPY_LOCATION(
const D3D12_TEXTURE_COPY_LOCATION &o) noexcept :
1174 D3D12_TEXTURE_COPY_LOCATION(o)
1176 CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes)
noexcept
1179 Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;
1180 PlacedFootprint = {};
1182 CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, D3D12_PLACED_SUBRESOURCE_FOOTPRINT
const& Footprint)
noexcept
1185 Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT;
1186 PlacedFootprint = Footprint;
1188 CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, UINT Sub)
noexcept
1191 Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;
1192 PlacedFootprint = {};
1193 SubresourceIndex = Sub;
1198struct CD3DX12_DESCRIPTOR_RANGE :
public D3D12_DESCRIPTOR_RANGE
1200 CD3DX12_DESCRIPTOR_RANGE() =
default;
1201 explicit CD3DX12_DESCRIPTOR_RANGE(
const D3D12_DESCRIPTOR_RANGE &o) noexcept :
1202 D3D12_DESCRIPTOR_RANGE(o)
1204 CD3DX12_DESCRIPTOR_RANGE(
1205 D3D12_DESCRIPTOR_RANGE_TYPE rangeType,
1206 UINT numDescriptors,
1207 UINT baseShaderRegister,
1208 UINT registerSpace = 0,
1209 UINT offsetInDescriptorsFromTableStart =
1210 D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND)
noexcept
1212 Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart);
1216 D3D12_DESCRIPTOR_RANGE_TYPE rangeType,
1217 UINT numDescriptors,
1218 UINT baseShaderRegister,
1219 UINT registerSpace = 0,
1220 UINT offsetInDescriptorsFromTableStart =
1221 D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND)
noexcept
1223 Init(*
this, rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart);
1226 static inline void Init(
1227 _Out_ D3D12_DESCRIPTOR_RANGE &range,
1228 D3D12_DESCRIPTOR_RANGE_TYPE rangeType,
1229 UINT numDescriptors,
1230 UINT baseShaderRegister,
1231 UINT registerSpace = 0,
1232 UINT offsetInDescriptorsFromTableStart =
1233 D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND)
noexcept
1235 range.RangeType = rangeType;
1236 range.NumDescriptors = numDescriptors;
1237 range.BaseShaderRegister = baseShaderRegister;
1238 range.RegisterSpace = registerSpace;
1239 range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart;
1244struct CD3DX12_ROOT_DESCRIPTOR_TABLE :
public D3D12_ROOT_DESCRIPTOR_TABLE
1246 CD3DX12_ROOT_DESCRIPTOR_TABLE() =
default;
1247 explicit CD3DX12_ROOT_DESCRIPTOR_TABLE(
const D3D12_ROOT_DESCRIPTOR_TABLE &o) noexcept :
1248 D3D12_ROOT_DESCRIPTOR_TABLE(o)
1250 CD3DX12_ROOT_DESCRIPTOR_TABLE(
1251 UINT numDescriptorRanges,
1252 _In_reads_opt_(numDescriptorRanges)
const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges)
noexcept
1254 Init(numDescriptorRanges, _pDescriptorRanges);
1258 UINT numDescriptorRanges,
1259 _In_reads_opt_(numDescriptorRanges)
const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges)
noexcept
1261 Init(*
this, numDescriptorRanges, _pDescriptorRanges);
1264 static inline void Init(
1265 _Out_ D3D12_ROOT_DESCRIPTOR_TABLE &rootDescriptorTable,
1266 UINT numDescriptorRanges,
1267 _In_reads_opt_(numDescriptorRanges)
const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges)
noexcept
1269 rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges;
1270 rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges;
1275struct CD3DX12_ROOT_CONSTANTS :
public D3D12_ROOT_CONSTANTS
1277 CD3DX12_ROOT_CONSTANTS() =
default;
1278 explicit CD3DX12_ROOT_CONSTANTS(
const D3D12_ROOT_CONSTANTS &o) noexcept :
1279 D3D12_ROOT_CONSTANTS(o)
1281 CD3DX12_ROOT_CONSTANTS(
1282 UINT num32BitValues,
1283 UINT shaderRegister,
1284 UINT registerSpace = 0) noexcept
1286 Init(num32BitValues, shaderRegister, registerSpace);
1290 UINT num32BitValues,
1291 UINT shaderRegister,
1292 UINT registerSpace = 0) noexcept
1294 Init(*
this, num32BitValues, shaderRegister, registerSpace);
1297 static inline void Init(
1298 _Out_ D3D12_ROOT_CONSTANTS &rootConstants,
1299 UINT num32BitValues,
1300 UINT shaderRegister,
1301 UINT registerSpace = 0) noexcept
1303 rootConstants.Num32BitValues = num32BitValues;
1304 rootConstants.ShaderRegister = shaderRegister;
1305 rootConstants.RegisterSpace = registerSpace;
1310struct CD3DX12_ROOT_DESCRIPTOR :
public D3D12_ROOT_DESCRIPTOR
1312 CD3DX12_ROOT_DESCRIPTOR() =
default;
1313 explicit CD3DX12_ROOT_DESCRIPTOR(
const D3D12_ROOT_DESCRIPTOR &o) noexcept :
1314 D3D12_ROOT_DESCRIPTOR(o)
1316 CD3DX12_ROOT_DESCRIPTOR(
1317 UINT shaderRegister,
1318 UINT registerSpace = 0) noexcept
1320 Init(shaderRegister, registerSpace);
1324 UINT shaderRegister,
1325 UINT registerSpace = 0) noexcept
1327 Init(*
this, shaderRegister, registerSpace);
1330 static inline void Init(_Out_ D3D12_ROOT_DESCRIPTOR &table, UINT shaderRegister, UINT registerSpace = 0) noexcept
1332 table.ShaderRegister = shaderRegister;
1333 table.RegisterSpace = registerSpace;
1338struct CD3DX12_ROOT_PARAMETER :
public D3D12_ROOT_PARAMETER
1340 CD3DX12_ROOT_PARAMETER() =
default;
1341 explicit CD3DX12_ROOT_PARAMETER(
const D3D12_ROOT_PARAMETER &o) noexcept :
1342 D3D12_ROOT_PARAMETER(o)
1345 static inline void InitAsDescriptorTable(
1346 _Out_ D3D12_ROOT_PARAMETER &rootParam,
1347 UINT numDescriptorRanges,
1348 _In_reads_(numDescriptorRanges)
const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges,
1349 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1351 rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
1352 rootParam.ShaderVisibility = visibility;
1353 CD3DX12_ROOT_DESCRIPTOR_TABLE::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges);
1356 static inline void InitAsConstants(
1357 _Out_ D3D12_ROOT_PARAMETER &rootParam,
1358 UINT num32BitValues,
1359 UINT shaderRegister,
1360 UINT registerSpace = 0,
1361 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1363 rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS;
1364 rootParam.ShaderVisibility = visibility;
1365 CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace);
1368 static inline void InitAsConstantBufferView(
1369 _Out_ D3D12_ROOT_PARAMETER &rootParam,
1370 UINT shaderRegister,
1371 UINT registerSpace = 0,
1372 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1374 rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV;
1375 rootParam.ShaderVisibility = visibility;
1376 CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace);
1379 static inline void InitAsShaderResourceView(
1380 _Out_ D3D12_ROOT_PARAMETER &rootParam,
1381 UINT shaderRegister,
1382 UINT registerSpace = 0,
1383 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1385 rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV;
1386 rootParam.ShaderVisibility = visibility;
1387 CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace);
1390 static inline void InitAsUnorderedAccessView(
1391 _Out_ D3D12_ROOT_PARAMETER &rootParam,
1392 UINT shaderRegister,
1393 UINT registerSpace = 0,
1394 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1396 rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV;
1397 rootParam.ShaderVisibility = visibility;
1398 CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace);
1401 inline void InitAsDescriptorTable(
1402 UINT numDescriptorRanges,
1403 _In_reads_(numDescriptorRanges)
const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges,
1404 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1406 InitAsDescriptorTable(*
this, numDescriptorRanges, pDescriptorRanges, visibility);
1409 inline void InitAsConstants(
1410 UINT num32BitValues,
1411 UINT shaderRegister,
1412 UINT registerSpace = 0,
1413 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1415 InitAsConstants(*
this, num32BitValues, shaderRegister, registerSpace, visibility);
1418 inline void InitAsConstantBufferView(
1419 UINT shaderRegister,
1420 UINT registerSpace = 0,
1421 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1423 InitAsConstantBufferView(*
this, shaderRegister, registerSpace, visibility);
1426 inline void InitAsShaderResourceView(
1427 UINT shaderRegister,
1428 UINT registerSpace = 0,
1429 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1431 InitAsShaderResourceView(*
this, shaderRegister, registerSpace, visibility);
1434 inline void InitAsUnorderedAccessView(
1435 UINT shaderRegister,
1436 UINT registerSpace = 0,
1437 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1439 InitAsUnorderedAccessView(*
this, shaderRegister, registerSpace, visibility);
1444struct CD3DX12_STATIC_SAMPLER_DESC :
public D3D12_STATIC_SAMPLER_DESC
1446 CD3DX12_STATIC_SAMPLER_DESC() =
default;
1447 explicit CD3DX12_STATIC_SAMPLER_DESC(
const D3D12_STATIC_SAMPLER_DESC &o) noexcept :
1448 D3D12_STATIC_SAMPLER_DESC(o)
1450 CD3DX12_STATIC_SAMPLER_DESC(
1451 UINT shaderRegister,
1452 D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC,
1453 D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
1454 D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
1455 D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
1456 FLOAT mipLODBias = 0,
1457 UINT maxAnisotropy = 16,
1458 D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL,
1459 D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE,
1461 FLOAT maxLOD = D3D12_FLOAT32_MAX,
1462 D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL,
1463 UINT registerSpace = 0) noexcept
1481 static inline void Init(
1482 _Out_ D3D12_STATIC_SAMPLER_DESC &samplerDesc,
1483 UINT shaderRegister,
1484 D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC,
1485 D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
1486 D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
1487 D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
1488 FLOAT mipLODBias = 0,
1489 UINT maxAnisotropy = 16,
1490 D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL,
1491 D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE,
1493 FLOAT maxLOD = D3D12_FLOAT32_MAX,
1494 D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL,
1495 UINT registerSpace = 0) noexcept
1497 samplerDesc.ShaderRegister = shaderRegister;
1498 samplerDesc.Filter = filter;
1499 samplerDesc.AddressU = addressU;
1500 samplerDesc.AddressV = addressV;
1501 samplerDesc.AddressW = addressW;
1502 samplerDesc.MipLODBias = mipLODBias;
1503 samplerDesc.MaxAnisotropy = maxAnisotropy;
1504 samplerDesc.ComparisonFunc = comparisonFunc;
1505 samplerDesc.BorderColor = borderColor;
1506 samplerDesc.MinLOD = minLOD;
1507 samplerDesc.MaxLOD = maxLOD;
1508 samplerDesc.ShaderVisibility = shaderVisibility;
1509 samplerDesc.RegisterSpace = registerSpace;
1512 UINT shaderRegister,
1513 D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC,
1514 D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
1515 D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
1516 D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
1517 FLOAT mipLODBias = 0,
1518 UINT maxAnisotropy = 16,
1519 D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL,
1520 D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE,
1522 FLOAT maxLOD = D3D12_FLOAT32_MAX,
1523 D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL,
1524 UINT registerSpace = 0) noexcept
1545#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
1546struct CD3DX12_STATIC_SAMPLER_DESC1 :
public D3D12_STATIC_SAMPLER_DESC1
1548 CD3DX12_STATIC_SAMPLER_DESC1() =
default;
1549 explicit CD3DX12_STATIC_SAMPLER_DESC1(
const D3D12_STATIC_SAMPLER_DESC &o)
noexcept
1551 memcpy(
this, &o,
sizeof(D3D12_STATIC_SAMPLER_DESC));
1552 Flags = D3D12_SAMPLER_FLAGS::D3D12_SAMPLER_FLAG_NONE;
1554 explicit CD3DX12_STATIC_SAMPLER_DESC1(
const D3D12_STATIC_SAMPLER_DESC1 & o) noexcept :
1555 D3D12_STATIC_SAMPLER_DESC1(o)
1557 CD3DX12_STATIC_SAMPLER_DESC1(
1558 UINT shaderRegister,
1559 D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC,
1560 D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
1561 D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
1562 D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
1563 FLOAT mipLODBias = 0,
1564 UINT maxAnisotropy = 16,
1565 D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL,
1566 D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE,
1568 FLOAT maxLOD = D3D12_FLOAT32_MAX,
1569 D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL,
1570 UINT registerSpace = 0,
1571 D3D12_SAMPLER_FLAGS flags = D3D12_SAMPLER_FLAGS::D3D12_SAMPLER_FLAG_NONE)
noexcept
1590 static inline void Init(
1591 _Out_ D3D12_STATIC_SAMPLER_DESC1 &samplerDesc,
1592 UINT shaderRegister,
1593 D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC,
1594 D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
1595 D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
1596 D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
1597 FLOAT mipLODBias = 0,
1598 UINT maxAnisotropy = 16,
1599 D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL,
1600 D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE,
1602 FLOAT maxLOD = D3D12_FLOAT32_MAX,
1603 D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL,
1604 UINT registerSpace = 0,
1605 D3D12_SAMPLER_FLAGS flags = D3D12_SAMPLER_FLAGS::D3D12_SAMPLER_FLAG_NONE)
noexcept
1607 samplerDesc.ShaderRegister = shaderRegister;
1608 samplerDesc.Filter = filter;
1609 samplerDesc.AddressU = addressU;
1610 samplerDesc.AddressV = addressV;
1611 samplerDesc.AddressW = addressW;
1612 samplerDesc.MipLODBias = mipLODBias;
1613 samplerDesc.MaxAnisotropy = maxAnisotropy;
1614 samplerDesc.ComparisonFunc = comparisonFunc;
1615 samplerDesc.BorderColor = borderColor;
1616 samplerDesc.MinLOD = minLOD;
1617 samplerDesc.MaxLOD = maxLOD;
1618 samplerDesc.ShaderVisibility = shaderVisibility;
1619 samplerDesc.RegisterSpace = registerSpace;
1620 samplerDesc.Flags = flags;
1623 UINT shaderRegister,
1624 D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC,
1625 D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
1626 D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
1627 D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
1628 FLOAT mipLODBias = 0,
1629 UINT maxAnisotropy = 16,
1630 D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL,
1631 D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE,
1633 FLOAT maxLOD = D3D12_FLOAT32_MAX,
1634 D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL,
1635 UINT registerSpace = 0,
1636 D3D12_SAMPLER_FLAGS flags = D3D12_SAMPLER_FLAGS::D3D12_SAMPLER_FLAG_NONE)
noexcept
1659struct CD3DX12_ROOT_SIGNATURE_DESC :
public D3D12_ROOT_SIGNATURE_DESC
1661 CD3DX12_ROOT_SIGNATURE_DESC() =
default;
1662 explicit CD3DX12_ROOT_SIGNATURE_DESC(
const D3D12_ROOT_SIGNATURE_DESC &o) noexcept :
1663 D3D12_ROOT_SIGNATURE_DESC(o)
1665 CD3DX12_ROOT_SIGNATURE_DESC(
1667 _In_reads_opt_(numParameters)
const D3D12_ROOT_PARAMETER* _pParameters,
1668 UINT numStaticSamplers = 0,
1669 _In_reads_opt_(numStaticSamplers)
const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers =
nullptr,
1670 D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
noexcept
1672 Init(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags);
1674 CD3DX12_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT)
noexcept
1676 Init(0,
nullptr, 0,
nullptr, D3D12_ROOT_SIGNATURE_FLAG_NONE);
1681 _In_reads_opt_(numParameters)
const D3D12_ROOT_PARAMETER* _pParameters,
1682 UINT numStaticSamplers = 0,
1683 _In_reads_opt_(numStaticSamplers)
const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers =
nullptr,
1684 D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
noexcept
1686 Init(*
this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags);
1689 static inline void Init(
1690 _Out_ D3D12_ROOT_SIGNATURE_DESC &desc,
1692 _In_reads_opt_(numParameters)
const D3D12_ROOT_PARAMETER* _pParameters,
1693 UINT numStaticSamplers = 0,
1694 _In_reads_opt_(numStaticSamplers)
const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers =
nullptr,
1695 D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
noexcept
1697 desc.NumParameters = numParameters;
1698 desc.pParameters = _pParameters;
1699 desc.NumStaticSamplers = numStaticSamplers;
1700 desc.pStaticSamplers = _pStaticSamplers;
1706struct CD3DX12_DESCRIPTOR_RANGE1 :
public D3D12_DESCRIPTOR_RANGE1
1708 CD3DX12_DESCRIPTOR_RANGE1() =
default;
1709 explicit CD3DX12_DESCRIPTOR_RANGE1(
const D3D12_DESCRIPTOR_RANGE1 &o) noexcept :
1710 D3D12_DESCRIPTOR_RANGE1(o)
1712 CD3DX12_DESCRIPTOR_RANGE1(
1713 D3D12_DESCRIPTOR_RANGE_TYPE rangeType,
1714 UINT numDescriptors,
1715 UINT baseShaderRegister,
1716 UINT registerSpace = 0,
1717 D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE,
1718 UINT offsetInDescriptorsFromTableStart =
1719 D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND)
noexcept
1721 Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart);
1725 D3D12_DESCRIPTOR_RANGE_TYPE rangeType,
1726 UINT numDescriptors,
1727 UINT baseShaderRegister,
1728 UINT registerSpace = 0,
1729 D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE,
1730 UINT offsetInDescriptorsFromTableStart =
1731 D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND)
noexcept
1733 Init(*
this, rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart);
1736 static inline void Init(
1737 _Out_ D3D12_DESCRIPTOR_RANGE1 &range,
1738 D3D12_DESCRIPTOR_RANGE_TYPE rangeType,
1739 UINT numDescriptors,
1740 UINT baseShaderRegister,
1741 UINT registerSpace = 0,
1742 D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE,
1743 UINT offsetInDescriptorsFromTableStart =
1744 D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND)
noexcept
1746 range.RangeType = rangeType;
1747 range.NumDescriptors = numDescriptors;
1748 range.BaseShaderRegister = baseShaderRegister;
1749 range.RegisterSpace = registerSpace;
1750 range.Flags = flags;
1751 range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart;
1756struct CD3DX12_ROOT_DESCRIPTOR_TABLE1 :
public D3D12_ROOT_DESCRIPTOR_TABLE1
1758 CD3DX12_ROOT_DESCRIPTOR_TABLE1() =
default;
1759 explicit CD3DX12_ROOT_DESCRIPTOR_TABLE1(
const D3D12_ROOT_DESCRIPTOR_TABLE1 &o) noexcept :
1760 D3D12_ROOT_DESCRIPTOR_TABLE1(o)
1762 CD3DX12_ROOT_DESCRIPTOR_TABLE1(
1763 UINT numDescriptorRanges,
1764 _In_reads_opt_(numDescriptorRanges)
const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges)
noexcept
1766 Init(numDescriptorRanges, _pDescriptorRanges);
1770 UINT numDescriptorRanges,
1771 _In_reads_opt_(numDescriptorRanges)
const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges)
noexcept
1773 Init(*
this, numDescriptorRanges, _pDescriptorRanges);
1776 static inline void Init(
1777 _Out_ D3D12_ROOT_DESCRIPTOR_TABLE1 &rootDescriptorTable,
1778 UINT numDescriptorRanges,
1779 _In_reads_opt_(numDescriptorRanges)
const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges)
noexcept
1781 rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges;
1782 rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges;
1787struct CD3DX12_ROOT_DESCRIPTOR1 :
public D3D12_ROOT_DESCRIPTOR1
1789 CD3DX12_ROOT_DESCRIPTOR1() =
default;
1790 explicit CD3DX12_ROOT_DESCRIPTOR1(
const D3D12_ROOT_DESCRIPTOR1 &o) noexcept :
1791 D3D12_ROOT_DESCRIPTOR1(o)
1793 CD3DX12_ROOT_DESCRIPTOR1(
1794 UINT shaderRegister,
1795 UINT registerSpace = 0,
1796 D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE)
noexcept
1798 Init(shaderRegister, registerSpace, flags);
1802 UINT shaderRegister,
1803 UINT registerSpace = 0,
1804 D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE)
noexcept
1806 Init(*
this, shaderRegister, registerSpace, flags);
1809 static inline void Init(
1810 _Out_ D3D12_ROOT_DESCRIPTOR1 &table,
1811 UINT shaderRegister,
1812 UINT registerSpace = 0,
1813 D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE)
noexcept
1815 table.ShaderRegister = shaderRegister;
1816 table.RegisterSpace = registerSpace;
1817 table.Flags = flags;
1822struct CD3DX12_ROOT_PARAMETER1 :
public D3D12_ROOT_PARAMETER1
1824 CD3DX12_ROOT_PARAMETER1() =
default;
1825 explicit CD3DX12_ROOT_PARAMETER1(
const D3D12_ROOT_PARAMETER1 &o) noexcept :
1826 D3D12_ROOT_PARAMETER1(o)
1829 static inline void InitAsDescriptorTable(
1830 _Out_ D3D12_ROOT_PARAMETER1 &rootParam,
1831 UINT numDescriptorRanges,
1832 _In_reads_(numDescriptorRanges)
const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges,
1833 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1835 rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
1836 rootParam.ShaderVisibility = visibility;
1837 CD3DX12_ROOT_DESCRIPTOR_TABLE1::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges);
1840 static inline void InitAsConstants(
1841 _Out_ D3D12_ROOT_PARAMETER1 &rootParam,
1842 UINT num32BitValues,
1843 UINT shaderRegister,
1844 UINT registerSpace = 0,
1845 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1847 rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS;
1848 rootParam.ShaderVisibility = visibility;
1849 CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace);
1852 static inline void InitAsConstantBufferView(
1853 _Out_ D3D12_ROOT_PARAMETER1 &rootParam,
1854 UINT shaderRegister,
1855 UINT registerSpace = 0,
1856 D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE,
1857 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1859 rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV;
1860 rootParam.ShaderVisibility = visibility;
1861 CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags);
1864 static inline void InitAsShaderResourceView(
1865 _Out_ D3D12_ROOT_PARAMETER1 &rootParam,
1866 UINT shaderRegister,
1867 UINT registerSpace = 0,
1868 D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE,
1869 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1871 rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV;
1872 rootParam.ShaderVisibility = visibility;
1873 CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags);
1876 static inline void InitAsUnorderedAccessView(
1877 _Out_ D3D12_ROOT_PARAMETER1 &rootParam,
1878 UINT shaderRegister,
1879 UINT registerSpace = 0,
1880 D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE,
1881 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1883 rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV;
1884 rootParam.ShaderVisibility = visibility;
1885 CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags);
1888 inline void InitAsDescriptorTable(
1889 UINT numDescriptorRanges,
1890 _In_reads_(numDescriptorRanges)
const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges,
1891 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1893 InitAsDescriptorTable(*
this, numDescriptorRanges, pDescriptorRanges, visibility);
1896 inline void InitAsConstants(
1897 UINT num32BitValues,
1898 UINT shaderRegister,
1899 UINT registerSpace = 0,
1900 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1902 InitAsConstants(*
this, num32BitValues, shaderRegister, registerSpace, visibility);
1905 inline void InitAsConstantBufferView(
1906 UINT shaderRegister,
1907 UINT registerSpace = 0,
1908 D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE,
1909 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1911 InitAsConstantBufferView(*
this, shaderRegister, registerSpace, flags, visibility);
1914 inline void InitAsShaderResourceView(
1915 UINT shaderRegister,
1916 UINT registerSpace = 0,
1917 D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE,
1918 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1920 InitAsShaderResourceView(*
this, shaderRegister, registerSpace, flags, visibility);
1923 inline void InitAsUnorderedAccessView(
1924 UINT shaderRegister,
1925 UINT registerSpace = 0,
1926 D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE,
1927 D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
noexcept
1929 InitAsUnorderedAccessView(*
this, shaderRegister, registerSpace, flags, visibility);
1934struct CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC :
public D3D12_VERSIONED_ROOT_SIGNATURE_DESC
1936 CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC() =
default;
1937 explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(
const D3D12_VERSIONED_ROOT_SIGNATURE_DESC &o) noexcept :
1938 D3D12_VERSIONED_ROOT_SIGNATURE_DESC(o)
1940 explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(
const D3D12_ROOT_SIGNATURE_DESC &o)
noexcept
1942 Version = D3D_ROOT_SIGNATURE_VERSION_1_0;
1945 explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(
const D3D12_ROOT_SIGNATURE_DESC1 &o)
noexcept
1947 Version = D3D_ROOT_SIGNATURE_VERSION_1_1;
1950#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
1951 explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(
const D3D12_ROOT_SIGNATURE_DESC2& o)
noexcept
1953 Version = D3D_ROOT_SIGNATURE_VERSION_1_2;
1957 CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(
1959 _In_reads_opt_(numParameters)
const D3D12_ROOT_PARAMETER* _pParameters,
1960 UINT numStaticSamplers = 0,
1961 _In_reads_opt_(numStaticSamplers)
const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers =
nullptr,
1962 D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
noexcept
1964 Init_1_0(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags);
1966 CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(
1968 _In_reads_opt_(numParameters)
const D3D12_ROOT_PARAMETER1* _pParameters,
1969 UINT numStaticSamplers = 0,
1970 _In_reads_opt_(numStaticSamplers)
const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers =
nullptr,
1971 D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
noexcept
1973 Init_1_1(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags);
1975 CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT)
noexcept
1977 Init_1_1(0,
nullptr, 0,
nullptr, D3D12_ROOT_SIGNATURE_FLAG_NONE);
1980 inline void Init_1_0(
1982 _In_reads_opt_(numParameters)
const D3D12_ROOT_PARAMETER* _pParameters,
1983 UINT numStaticSamplers = 0,
1984 _In_reads_opt_(numStaticSamplers)
const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers =
nullptr,
1985 D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
noexcept
1987 Init_1_0(*
this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags);
1990 static inline void Init_1_0(
1991 _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc,
1993 _In_reads_opt_(numParameters)
const D3D12_ROOT_PARAMETER* _pParameters,
1994 UINT numStaticSamplers = 0,
1995 _In_reads_opt_(numStaticSamplers)
const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers =
nullptr,
1996 D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
noexcept
1998 desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_0;
1999 desc.Desc_1_0.NumParameters = numParameters;
2000 desc.Desc_1_0.pParameters = _pParameters;
2001 desc.Desc_1_0.NumStaticSamplers = numStaticSamplers;
2002 desc.Desc_1_0.pStaticSamplers = _pStaticSamplers;
2003 desc.Desc_1_0.Flags = flags;
2006 inline void Init_1_1(
2008 _In_reads_opt_(numParameters)
const D3D12_ROOT_PARAMETER1* _pParameters,
2009 UINT numStaticSamplers = 0,
2010 _In_reads_opt_(numStaticSamplers)
const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers =
nullptr,
2011 D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
noexcept
2013 Init_1_1(*
this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags);
2016 static inline void Init_1_1(
2017 _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc,
2019 _In_reads_opt_(numParameters)
const D3D12_ROOT_PARAMETER1* _pParameters,
2020 UINT numStaticSamplers = 0,
2021 _In_reads_opt_(numStaticSamplers)
const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers =
nullptr,
2022 D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
noexcept
2024 desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_1;
2025 desc.Desc_1_1.NumParameters = numParameters;
2026 desc.Desc_1_1.pParameters = _pParameters;
2027 desc.Desc_1_1.NumStaticSamplers = numStaticSamplers;
2028 desc.Desc_1_1.pStaticSamplers = _pStaticSamplers;
2029 desc.Desc_1_1.Flags = flags;
2032#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
2033 static inline void Init_1_2(
2034 _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC& desc,
2036 _In_reads_opt_(numParameters)
const D3D12_ROOT_PARAMETER1* _pParameters,
2037 UINT numStaticSamplers = 0,
2038 _In_reads_opt_(numStaticSamplers)
const D3D12_STATIC_SAMPLER_DESC1* _pStaticSamplers =
nullptr,
2039 D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
noexcept
2041 desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_2;
2042 desc.Desc_1_2.NumParameters = numParameters;
2043 desc.Desc_1_2.pParameters = _pParameters;
2044 desc.Desc_1_2.NumStaticSamplers = numStaticSamplers;
2045 desc.Desc_1_2.pStaticSamplers = _pStaticSamplers;
2046 desc.Desc_1_2.Flags = flags;
2052struct CD3DX12_CPU_DESCRIPTOR_HANDLE :
public D3D12_CPU_DESCRIPTOR_HANDLE
2054 CD3DX12_CPU_DESCRIPTOR_HANDLE() =
default;
2055 explicit CD3DX12_CPU_DESCRIPTOR_HANDLE(
const D3D12_CPU_DESCRIPTOR_HANDLE &o) noexcept :
2056 D3D12_CPU_DESCRIPTOR_HANDLE(o)
2058 CD3DX12_CPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT)
noexcept { ptr = 0; }
2059 CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_
const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize)
noexcept
2061 InitOffsetted(other, offsetScaledByIncrementSize);
2063 CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_
const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize)
noexcept
2065 InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize);
2067 CD3DX12_CPU_DESCRIPTOR_HANDLE&
Offset(INT offsetInDescriptors, UINT descriptorIncrementSize)
noexcept
2069 ptr = SIZE_T(
INT64(ptr) +
INT64(offsetInDescriptors) *
INT64(descriptorIncrementSize));
2072 CD3DX12_CPU_DESCRIPTOR_HANDLE&
Offset(INT offsetScaledByIncrementSize)
noexcept
2074 ptr = SIZE_T(
INT64(ptr) +
INT64(offsetScaledByIncrementSize));
2077 bool operator==(_In_
const D3D12_CPU_DESCRIPTOR_HANDLE& other)
const noexcept
2079 return (ptr == other.ptr);
2081 bool operator!=(_In_
const D3D12_CPU_DESCRIPTOR_HANDLE& other)
const noexcept
2083 return (ptr != other.ptr);
2085 CD3DX12_CPU_DESCRIPTOR_HANDLE &operator=(
const D3D12_CPU_DESCRIPTOR_HANDLE &other)
noexcept
2091 inline void InitOffsetted(_In_
const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize)
noexcept
2093 InitOffsetted(*
this, base, offsetScaledByIncrementSize);
2096 inline void InitOffsetted(_In_
const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize)
noexcept
2098 InitOffsetted(*
this, base, offsetInDescriptors, descriptorIncrementSize);
2101 static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_
const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize)
noexcept
2103 handle.ptr = SIZE_T(
INT64(base.ptr) +
INT64(offsetScaledByIncrementSize));
2106 static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_
const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize)
noexcept
2108 handle.ptr = SIZE_T(
INT64(base.ptr) +
INT64(offsetInDescriptors) *
INT64(descriptorIncrementSize));
2113struct CD3DX12_GPU_DESCRIPTOR_HANDLE :
public D3D12_GPU_DESCRIPTOR_HANDLE
2115 CD3DX12_GPU_DESCRIPTOR_HANDLE() =
default;
2116 explicit CD3DX12_GPU_DESCRIPTOR_HANDLE(
const D3D12_GPU_DESCRIPTOR_HANDLE &o) noexcept :
2117 D3D12_GPU_DESCRIPTOR_HANDLE(o)
2119 CD3DX12_GPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT)
noexcept { ptr = 0; }
2120 CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_
const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize)
noexcept
2122 InitOffsetted(other, offsetScaledByIncrementSize);
2124 CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_
const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize)
noexcept
2126 InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize);
2128 CD3DX12_GPU_DESCRIPTOR_HANDLE&
Offset(INT offsetInDescriptors, UINT descriptorIncrementSize)
noexcept
2133 CD3DX12_GPU_DESCRIPTOR_HANDLE&
Offset(INT offsetScaledByIncrementSize)
noexcept
2138 inline bool operator==(_In_
const D3D12_GPU_DESCRIPTOR_HANDLE& other)
const noexcept
2140 return (ptr == other.ptr);
2142 inline bool operator!=(_In_
const D3D12_GPU_DESCRIPTOR_HANDLE& other)
const noexcept
2144 return (ptr != other.ptr);
2146 CD3DX12_GPU_DESCRIPTOR_HANDLE &operator=(
const D3D12_GPU_DESCRIPTOR_HANDLE &other)
noexcept
2152 inline void InitOffsetted(_In_
const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize)
noexcept
2154 InitOffsetted(*
this, base, offsetScaledByIncrementSize);
2157 inline void InitOffsetted(_In_
const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize)
noexcept
2159 InitOffsetted(*
this, base, offsetInDescriptors, descriptorIncrementSize);
2162 static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_
const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize)
noexcept
2167 static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_
const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize)
noexcept
2174constexpr UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT PlaneSlice, UINT MipLevels, UINT ArraySize )
noexcept
2176 return MipSlice + ArraySlice * MipLevels + PlaneSlice * MipLevels * ArraySize;
2180inline UINT8 D3D12GetFormatPlaneCount(
2181 _In_ ID3D12Device* pDevice,
2185 D3D12_FEATURE_DATA_FORMAT_INFO formatInfo = {
Format, 0 };
2186 if (FAILED(pDevice->CheckFeatureSupport(D3D12_FEATURE_FORMAT_INFO, &formatInfo,
sizeof(formatInfo))))
2190 return formatInfo.PlaneCount;
2194struct CD3DX12_RESOURCE_DESC :
public D3D12_RESOURCE_DESC
2196 CD3DX12_RESOURCE_DESC() =
default;
2197 explicit CD3DX12_RESOURCE_DESC(
const D3D12_RESOURCE_DESC& o ) noexcept :
2198 D3D12_RESOURCE_DESC( o )
2200 CD3DX12_RESOURCE_DESC(
2201 D3D12_RESOURCE_DIMENSION dimension,
2210 D3D12_TEXTURE_LAYOUT layout,
2211 D3D12_RESOURCE_FLAGS flags )
noexcept
2214 Alignment = alignment;
2217 DepthOrArraySize = depthOrArraySize;
2218 MipLevels = mipLevels;
2220 SampleDesc.Count = sampleCount;
2221 SampleDesc.Quality = sampleQuality;
2225 static inline CD3DX12_RESOURCE_DESC
Buffer(
2226 const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo,
2227 D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE )
noexcept
2229 return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, resAllocInfo.Alignment, resAllocInfo.SizeInBytes,
2230 1, 1, 1, DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags );
2232 static inline CD3DX12_RESOURCE_DESC
Buffer(
2234 D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE,
2235 UINT64 alignment = 0 ) noexcept
2237 return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, alignment, width, 1, 1, 1,
2238 DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags );
2240 static inline CD3DX12_RESOURCE_DESC Tex1D(
2245 D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE,
2246 D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN,
2247 UINT64 alignment = 0 ) noexcept
2249 return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE1D, alignment, width, 1, arraySize,
2250 mipLevels, format, 1, 0, layout, flags );
2252 static inline CD3DX12_RESOURCE_DESC Tex2D(
2258 UINT sampleCount = 1,
2259 UINT sampleQuality = 0,
2260 D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE,
2261 D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN,
2262 UINT64 alignment = 0 ) noexcept
2264 return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE2D, alignment, width, height, arraySize,
2265 mipLevels, format, sampleCount, sampleQuality, layout, flags );
2267 static inline CD3DX12_RESOURCE_DESC Tex3D(
2273 D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE,
2274 D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN,
2275 UINT64 alignment = 0 ) noexcept
2277 return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE3D, alignment, width, height, depth,
2278 mipLevels, format, 1, 0, layout, flags );
2281 {
return (Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1u); }
2282 inline UINT16 ArraySize() const noexcept
2283 {
return (Dimension != D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1u); }
2284 inline UINT8 PlaneCount(_In_ ID3D12Device* pDevice)
const noexcept
2285 {
return D3D12GetFormatPlaneCount(pDevice, Format); }
2286 inline UINT Subresources(_In_ ID3D12Device* pDevice)
const noexcept
2287 {
return static_cast<UINT
>(MipLevels) * ArraySize() * PlaneCount(pDevice); }
2288 inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSlice)
noexcept
2289 {
return D3D12CalcSubresource(MipSlice, ArraySlice, PlaneSlice, MipLevels, ArraySize()); }
2291inline bool operator==(
const D3D12_RESOURCE_DESC& l,
const D3D12_RESOURCE_DESC& r )
noexcept
2293 return l.Dimension == r.Dimension &&
2294 l.Alignment == r.Alignment &&
2295 l.Width == r.Width &&
2296 l.Height == r.Height &&
2297 l.DepthOrArraySize == r.DepthOrArraySize &&
2298 l.MipLevels == r.MipLevels &&
2299 l.Format == r.Format &&
2300 l.SampleDesc.Count == r.SampleDesc.Count &&
2301 l.SampleDesc.Quality == r.SampleDesc.Quality &&
2302 l.Layout == r.Layout &&
2305inline bool operator!=(
const D3D12_RESOURCE_DESC& l,
const D3D12_RESOURCE_DESC& r )
noexcept
2306{
return !( l == r ); }
2309struct CD3DX12_RESOURCE_DESC1 :
public D3D12_RESOURCE_DESC1
2311 CD3DX12_RESOURCE_DESC1() =
default;
2312 explicit CD3DX12_RESOURCE_DESC1(
const D3D12_RESOURCE_DESC1& o ) noexcept :
2313 D3D12_RESOURCE_DESC1( o )
2315 explicit CD3DX12_RESOURCE_DESC1(
const D3D12_RESOURCE_DESC& o )
noexcept
2318 Alignment = o.Alignment;
2321 DepthOrArraySize = o.DepthOrArraySize;
2322 MipLevels = o.MipLevels;
2324 SampleDesc = o.SampleDesc;
2327 SamplerFeedbackMipRegion = {};
2329 CD3DX12_RESOURCE_DESC1(
2330 D3D12_RESOURCE_DIMENSION dimension,
2339 D3D12_TEXTURE_LAYOUT layout,
2340 D3D12_RESOURCE_FLAGS flags,
2341 UINT samplerFeedbackMipRegionWidth = 0,
2342 UINT samplerFeedbackMipRegionHeight = 0,
2343 UINT samplerFeedbackMipRegionDepth = 0) noexcept
2346 Alignment = alignment;
2349 DepthOrArraySize = depthOrArraySize;
2350 MipLevels = mipLevels;
2352 SampleDesc.Count = sampleCount;
2353 SampleDesc.Quality = sampleQuality;
2356 SamplerFeedbackMipRegion.Width = samplerFeedbackMipRegionWidth;
2357 SamplerFeedbackMipRegion.Height = samplerFeedbackMipRegionHeight;
2358 SamplerFeedbackMipRegion.Depth = samplerFeedbackMipRegionDepth;
2360 static inline CD3DX12_RESOURCE_DESC1
Buffer(
2361 const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo,
2362 D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE )
noexcept
2364 return CD3DX12_RESOURCE_DESC1( D3D12_RESOURCE_DIMENSION_BUFFER, resAllocInfo.Alignment, resAllocInfo.SizeInBytes,
2365 1, 1, 1, DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags, 0, 0, 0 );
2367 static inline CD3DX12_RESOURCE_DESC1
Buffer(
2369 D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE,
2370 UINT64 alignment = 0 ) noexcept
2372 return CD3DX12_RESOURCE_DESC1( D3D12_RESOURCE_DIMENSION_BUFFER, alignment, width, 1, 1, 1,
2373 DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags, 0, 0, 0 );
2375 static inline CD3DX12_RESOURCE_DESC1 Tex1D(
2380 D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE,
2381 D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN,
2382 UINT64 alignment = 0 ) noexcept
2384 return CD3DX12_RESOURCE_DESC1( D3D12_RESOURCE_DIMENSION_TEXTURE1D, alignment, width, 1, arraySize,
2385 mipLevels, format, 1, 0, layout, flags, 0, 0, 0 );
2387 static inline CD3DX12_RESOURCE_DESC1 Tex2D(
2393 UINT sampleCount = 1,
2394 UINT sampleQuality = 0,
2395 D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE,
2396 D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN,
2398 UINT samplerFeedbackMipRegionWidth = 0,
2399 UINT samplerFeedbackMipRegionHeight = 0,
2400 UINT samplerFeedbackMipRegionDepth = 0) noexcept
2402 return CD3DX12_RESOURCE_DESC1( D3D12_RESOURCE_DIMENSION_TEXTURE2D, alignment, width, height, arraySize,
2403 mipLevels, format, sampleCount, sampleQuality, layout, flags, samplerFeedbackMipRegionWidth,
2404 samplerFeedbackMipRegionHeight, samplerFeedbackMipRegionDepth );
2406 static inline CD3DX12_RESOURCE_DESC1 Tex3D(
2412 D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE,
2413 D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN,
2414 UINT64 alignment = 0 ) noexcept
2416 return CD3DX12_RESOURCE_DESC1( D3D12_RESOURCE_DIMENSION_TEXTURE3D, alignment, width, height, depth,
2417 mipLevels, format, 1, 0, layout, flags, 0, 0, 0 );
2420 {
return (Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1u); }
2421 inline UINT16 ArraySize() const noexcept
2422 {
return (Dimension != D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1u); }
2423 inline UINT8 PlaneCount(_In_ ID3D12Device* pDevice)
const noexcept
2424 {
return D3D12GetFormatPlaneCount(pDevice, Format); }
2425 inline UINT Subresources(_In_ ID3D12Device* pDevice)
const noexcept
2426 {
return static_cast<UINT
>(MipLevels) * ArraySize() * PlaneCount(pDevice); }
2427 inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSlice)
noexcept
2428 {
return D3D12CalcSubresource(MipSlice, ArraySlice, PlaneSlice, MipLevels, ArraySize()); }
2430inline bool operator==(
const D3D12_RESOURCE_DESC1& l,
const D3D12_RESOURCE_DESC1& r )
noexcept
2432 return l.Dimension == r.Dimension &&
2433 l.Alignment == r.Alignment &&
2434 l.Width == r.Width &&
2435 l.Height == r.Height &&
2436 l.DepthOrArraySize == r.DepthOrArraySize &&
2437 l.MipLevels == r.MipLevels &&
2438 l.Format == r.Format &&
2439 l.SampleDesc.Count == r.SampleDesc.Count &&
2440 l.SampleDesc.Quality == r.SampleDesc.Quality &&
2441 l.Layout == r.Layout &&
2442 l.Flags == r.Flags &&
2443 l.SamplerFeedbackMipRegion.Width == r.SamplerFeedbackMipRegion.Width &&
2444 l.SamplerFeedbackMipRegion.Height == r.SamplerFeedbackMipRegion.Height &&
2445 l.SamplerFeedbackMipRegion.Depth == r.SamplerFeedbackMipRegion.Depth;
2447inline bool operator!=(
const D3D12_RESOURCE_DESC1& l,
const D3D12_RESOURCE_DESC1& r )
noexcept
2448{
return !( l == r ); }
2451struct CD3DX12_VIEW_INSTANCING_DESC :
public D3D12_VIEW_INSTANCING_DESC
2453 CD3DX12_VIEW_INSTANCING_DESC() =
default;
2454 explicit CD3DX12_VIEW_INSTANCING_DESC(
const D3D12_VIEW_INSTANCING_DESC& o ) noexcept :
2455 D3D12_VIEW_INSTANCING_DESC( o )
2457 explicit CD3DX12_VIEW_INSTANCING_DESC( CD3DX12_DEFAULT )
noexcept
2459 ViewInstanceCount = 0;
2460 pViewInstanceLocations =
nullptr;
2461 Flags = D3D12_VIEW_INSTANCING_FLAG_NONE;
2463 explicit CD3DX12_VIEW_INSTANCING_DESC(
2464 UINT InViewInstanceCount,
2465 const D3D12_VIEW_INSTANCE_LOCATION* InViewInstanceLocations,
2466 D3D12_VIEW_INSTANCING_FLAGS InFlags)
noexcept
2468 ViewInstanceCount = InViewInstanceCount;
2469 pViewInstanceLocations = InViewInstanceLocations;
2475template <
typename T,
typename U,
typename V>
2476inline void D3D12DecomposeSubresource( UINT Subresource, UINT MipLevels, UINT ArraySize, _Out_ T& MipSlice, _Out_ U& ArraySlice, _Out_
V& PlaneSlice )
noexcept
2478 MipSlice =
static_cast<T
>(Subresource % MipLevels);
2479 ArraySlice =
static_cast<U
>((Subresource / MipLevels) % ArraySize);
2480 PlaneSlice =
static_cast<V>(Subresource / (MipLevels * ArraySize));
2486inline void MemcpySubresource(
2487 _In_
const D3D12_MEMCPY_DEST* pDest,
2488 _In_
const D3D12_SUBRESOURCE_DATA* pSrc,
2489 SIZE_T RowSizeInBytes,
2491 UINT NumSlices)
noexcept
2493 for (UINT z = 0; z < NumSlices; ++z)
2495 auto pDestSlice =
static_cast<BYTE*
>(pDest->pData) + pDest->SlicePitch * z;
2496 auto pSrcSlice =
static_cast<const BYTE*
>(pSrc->pData) + pSrc->SlicePitch * LONG_PTR(z);
2497 for (UINT y = 0; y < NumRows; ++y)
2499 memcpy(pDestSlice + pDest->RowPitch * y,
2500 pSrcSlice + pSrc->RowPitch * LONG_PTR(y),
2508inline void MemcpySubresource(
2509 _In_
const D3D12_MEMCPY_DEST* pDest,
2510 _In_
const void* pResourceData,
2511 _In_
const D3D12_SUBRESOURCE_INFO* pSrc,
2512 SIZE_T RowSizeInBytes,
2514 UINT NumSlices)
noexcept
2516 for (UINT z = 0; z < NumSlices; ++z)
2518 auto pDestSlice =
static_cast<BYTE*
>(pDest->pData) + pDest->SlicePitch * z;
2519 auto pSrcSlice = (
static_cast<const BYTE*
>(pResourceData) + pSrc->Offset) + pSrc->DepthPitch * ULONG_PTR(z);
2520 for (UINT y = 0; y < NumRows; ++y)
2522 memcpy(pDestSlice + pDest->RowPitch * y,
2523 pSrcSlice + pSrc->RowPitch * ULONG_PTR(y),
2531inline UINT64 GetRequiredIntermediateSize(
2532 _In_ ID3D12Resource* pDestinationResource,
2533 _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource,
2534 _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources)
noexcept
2536#if defined(_MSC_VER) || !defined(_WIN32)
2537 const auto Desc = pDestinationResource->GetDesc();
2539 D3D12_RESOURCE_DESC tmpDesc;
2540 const auto& Desc = *pDestinationResource->GetDesc(&tmpDesc);
2544 ID3D12Device* pDevice =
nullptr;
2545 pDestinationResource->GetDevice(IID_ID3D12Device,
reinterpret_cast<void**
>(&pDevice));
2546 pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, 0,
nullptr,
nullptr,
nullptr, &RequiredSize);
2549 return RequiredSize;
2554inline UINT64 UpdateSubresources(
2555 _In_ ID3D12GraphicsCommandList* pCmdList,
2556 _In_ ID3D12Resource* pDestinationResource,
2557 _In_ ID3D12Resource* pIntermediate,
2558 _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource,
2559 _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources,
2561 _In_reads_(NumSubresources)
const D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts,
2562 _In_reads_(NumSubresources)
const UINT* pNumRows,
2563 _In_reads_(NumSubresources)
const UINT64* pRowSizesInBytes,
2564 _In_reads_(NumSubresources)
const D3D12_SUBRESOURCE_DATA* pSrcData)
noexcept
2567#if defined(_MSC_VER) || !defined(_WIN32)
2568 const auto IntermediateDesc = pIntermediate->GetDesc();
2569 const auto DestinationDesc = pDestinationResource->GetDesc();
2571 D3D12_RESOURCE_DESC tmpDesc1, tmpDesc2;
2572 const auto& IntermediateDesc = *pIntermediate->GetDesc(&tmpDesc1);
2573 const auto& DestinationDesc = *pDestinationResource->GetDesc(&tmpDesc2);
2575 if (IntermediateDesc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER ||
2576 IntermediateDesc.Width < RequiredSize + pLayouts[0].Offset ||
2577 RequiredSize > SIZE_T(-1) ||
2578 (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER &&
2579 (FirstSubresource != 0 || NumSubresources != 1)))
2585 HRESULT hr = pIntermediate->Map(0,
nullptr,
reinterpret_cast<void**
>(&pData));
2591 for (UINT i = 0; i < NumSubresources; ++i)
2593 if (pRowSizesInBytes[i] > SIZE_T(-1))
return 0;
2594 D3D12_MEMCPY_DEST DestData = { pData + pLayouts[i].Offset, pLayouts[i].Footprint.RowPitch, SIZE_T(pLayouts[i].Footprint.RowPitch) * SIZE_T(pNumRows[i]) };
2595 MemcpySubresource(&DestData, &pSrcData[i],
static_cast<SIZE_T
>(pRowSizesInBytes[i]), pNumRows[i], pLayouts[i].Footprint.Depth);
2597 pIntermediate->Unmap(0,
nullptr);
2599 if (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER)
2601 pCmdList->CopyBufferRegion(
2602 pDestinationResource, 0, pIntermediate, pLayouts[0].Offset, pLayouts[0].Footprint.Width);
2606 for (UINT i = 0; i < NumSubresources; ++i)
2608 const CD3DX12_TEXTURE_COPY_LOCATION Dst(pDestinationResource, i + FirstSubresource);
2609 const CD3DX12_TEXTURE_COPY_LOCATION Src(pIntermediate, pLayouts[i]);
2610 pCmdList->CopyTextureRegion(&Dst, 0, 0, 0, &Src,
nullptr);
2613 return RequiredSize;
2618inline UINT64 UpdateSubresources(
2619 _In_ ID3D12GraphicsCommandList* pCmdList,
2620 _In_ ID3D12Resource* pDestinationResource,
2621 _In_ ID3D12Resource* pIntermediate,
2622 _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource,
2623 _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources,
2625 _In_reads_(NumSubresources)
const D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts,
2626 _In_reads_(NumSubresources)
const UINT* pNumRows,
2627 _In_reads_(NumSubresources)
const UINT64* pRowSizesInBytes,
2628 _In_
const void* pResourceData,
2629 _In_reads_(NumSubresources)
const D3D12_SUBRESOURCE_INFO* pSrcData)
noexcept
2632#if defined(_MSC_VER) || !defined(_WIN32)
2633 const auto IntermediateDesc = pIntermediate->GetDesc();
2634 const auto DestinationDesc = pDestinationResource->GetDesc();
2636 D3D12_RESOURCE_DESC tmpDesc1, tmpDesc2;
2637 const auto& IntermediateDesc = *pIntermediate->GetDesc(&tmpDesc1);
2638 const auto& DestinationDesc = *pDestinationResource->GetDesc(&tmpDesc2);
2640 if (IntermediateDesc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER ||
2641 IntermediateDesc.Width < RequiredSize + pLayouts[0].Offset ||
2642 RequiredSize > SIZE_T(-1) ||
2643 (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER &&
2644 (FirstSubresource != 0 || NumSubresources != 1)))
2650 HRESULT hr = pIntermediate->Map(0,
nullptr,
reinterpret_cast<void**
>(&pData));
2656 for (UINT i = 0; i < NumSubresources; ++i)
2658 if (pRowSizesInBytes[i] > SIZE_T(-1))
return 0;
2659 D3D12_MEMCPY_DEST DestData = { pData + pLayouts[i].Offset, pLayouts[i].Footprint.RowPitch, SIZE_T(pLayouts[i].Footprint.RowPitch) * SIZE_T(pNumRows[i]) };
2660 MemcpySubresource(&DestData, pResourceData, &pSrcData[i],
static_cast<SIZE_T
>(pRowSizesInBytes[i]), pNumRows[i], pLayouts[i].Footprint.Depth);
2662 pIntermediate->Unmap(0,
nullptr);
2664 if (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER)
2666 pCmdList->CopyBufferRegion(
2667 pDestinationResource, 0, pIntermediate, pLayouts[0].Offset, pLayouts[0].Footprint.Width);
2671 for (UINT i = 0; i < NumSubresources; ++i)
2673 const CD3DX12_TEXTURE_COPY_LOCATION Dst(pDestinationResource, i + FirstSubresource);
2674 const CD3DX12_TEXTURE_COPY_LOCATION Src(pIntermediate, pLayouts[i]);
2675 pCmdList->CopyTextureRegion(&Dst, 0, 0, 0, &Src,
nullptr);
2678 return RequiredSize;
2683inline UINT64 UpdateSubresources(
2684 _In_ ID3D12GraphicsCommandList* pCmdList,
2685 _In_ ID3D12Resource* pDestinationResource,
2686 _In_ ID3D12Resource* pIntermediate,
2687 UINT64 IntermediateOffset,
2688 _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource,
2689 _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources,
2690 _In_reads_(NumSubresources)
const D3D12_SUBRESOURCE_DATA* pSrcData)
noexcept
2693 const auto MemToAlloc =
static_cast<UINT64>(
sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) +
sizeof(UINT) +
sizeof(
UINT64)) * NumSubresources;
2698 void* pMem = HeapAlloc(GetProcessHeap(), 0,
static_cast<SIZE_T
>(MemToAlloc));
2699 if (pMem ==
nullptr)
2703 auto pLayouts =
static_cast<D3D12_PLACED_SUBRESOURCE_FOOTPRINT*
>(pMem);
2704 auto pRowSizesInBytes =
reinterpret_cast<UINT64*
>(pLayouts + NumSubresources);
2705 auto pNumRows =
reinterpret_cast<UINT*
>(pRowSizesInBytes + NumSubresources);
2707#if defined(_MSC_VER) || !defined(_WIN32)
2708 const auto Desc = pDestinationResource->GetDesc();
2710 D3D12_RESOURCE_DESC tmpDesc;
2711 const auto& Desc = *pDestinationResource->GetDesc(&tmpDesc);
2713 ID3D12Device* pDevice =
nullptr;
2714 pDestinationResource->GetDevice(IID_ID3D12Device,
reinterpret_cast<void**
>(&pDevice));
2715 pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, pLayouts, pNumRows, pRowSizesInBytes, &RequiredSize);
2718 const UINT64 Result = UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, pLayouts, pNumRows, pRowSizesInBytes, pSrcData);
2719 HeapFree(GetProcessHeap(), 0, pMem);
2725inline UINT64 UpdateSubresources(
2726 _In_ ID3D12GraphicsCommandList* pCmdList,
2727 _In_ ID3D12Resource* pDestinationResource,
2728 _In_ ID3D12Resource* pIntermediate,
2729 UINT64 IntermediateOffset,
2730 _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource,
2731 _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources,
2732 _In_
const void* pResourceData,
2733 _In_reads_(NumSubresources)
const D3D12_SUBRESOURCE_INFO* pSrcData)
noexcept
2736 const auto MemToAlloc =
static_cast<UINT64>(
sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) +
sizeof(UINT) +
sizeof(
UINT64)) * NumSubresources;
2741 void* pMem = HeapAlloc(GetProcessHeap(), 0,
static_cast<SIZE_T
>(MemToAlloc));
2742 if (pMem ==
nullptr)
2746 auto pLayouts =
static_cast<D3D12_PLACED_SUBRESOURCE_FOOTPRINT*
>(pMem);
2747 auto pRowSizesInBytes =
reinterpret_cast<UINT64*
>(pLayouts + NumSubresources);
2748 auto pNumRows =
reinterpret_cast<UINT*
>(pRowSizesInBytes + NumSubresources);
2750#if defined(_MSC_VER) || !defined(_WIN32)
2751 const auto Desc = pDestinationResource->GetDesc();
2753 D3D12_RESOURCE_DESC tmpDesc;
2754 const auto& Desc = *pDestinationResource->GetDesc(&tmpDesc);
2756 ID3D12Device* pDevice =
nullptr;
2757 pDestinationResource->GetDevice(IID_ID3D12Device,
reinterpret_cast<void**
>(&pDevice));
2758 pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, pLayouts, pNumRows, pRowSizesInBytes, &RequiredSize);
2761 const UINT64 Result = UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, pLayouts, pNumRows, pRowSizesInBytes, pResourceData, pSrcData);
2762 HeapFree(GetProcessHeap(), 0, pMem);
2768template <UINT MaxSubresources>
2769inline UINT64 UpdateSubresources(
2770 _In_ ID3D12GraphicsCommandList* pCmdList,
2771 _In_ ID3D12Resource* pDestinationResource,
2772 _In_ ID3D12Resource* pIntermediate,
2773 UINT64 IntermediateOffset,
2774 _In_range_(0,MaxSubresources) UINT FirstSubresource,
2775 _In_range_(1,MaxSubresources-FirstSubresource) UINT NumSubresources,
2776 _In_reads_(NumSubresources)
const D3D12_SUBRESOURCE_DATA* pSrcData)
noexcept
2779 D3D12_PLACED_SUBRESOURCE_FOOTPRINT Layouts[MaxSubresources];
2780 UINT NumRows[MaxSubresources];
2781 UINT64 RowSizesInBytes[MaxSubresources];
2783#if defined(_MSC_VER) || !defined(_WIN32)
2784 const auto Desc = pDestinationResource->GetDesc();
2786 D3D12_RESOURCE_DESC tmpDesc;
2787 const auto& Desc = *pDestinationResource->GetDesc(&tmpDesc);
2789 ID3D12Device* pDevice =
nullptr;
2790 pDestinationResource->GetDevice(IID_ID3D12Device,
reinterpret_cast<void**
>(&pDevice));
2791 pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, Layouts, NumRows, RowSizesInBytes, &RequiredSize);
2794 return UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, Layouts, NumRows, RowSizesInBytes, pSrcData);
2799template <UINT MaxSubresources>
2800inline UINT64 UpdateSubresources(
2801 _In_ ID3D12GraphicsCommandList* pCmdList,
2802 _In_ ID3D12Resource* pDestinationResource,
2803 _In_ ID3D12Resource* pIntermediate,
2804 UINT64 IntermediateOffset,
2805 _In_range_(0,MaxSubresources) UINT FirstSubresource,
2806 _In_range_(1,MaxSubresources-FirstSubresource) UINT NumSubresources,
2807 _In_
const void* pResourceData,
2808 _In_reads_(NumSubresources)
const D3D12_SUBRESOURCE_INFO* pSrcData)
noexcept
2811 D3D12_PLACED_SUBRESOURCE_FOOTPRINT Layouts[MaxSubresources];
2812 UINT NumRows[MaxSubresources];
2813 UINT64 RowSizesInBytes[MaxSubresources];
2815#if defined(_MSC_VER) || !defined(_WIN32)
2816 const auto Desc = pDestinationResource->GetDesc();
2818 D3D12_RESOURCE_DESC tmpDesc;
2819 const auto& Desc = *pDestinationResource->GetDesc(&tmpDesc);
2821 ID3D12Device* pDevice =
nullptr;
2822 pDestinationResource->GetDevice(IID_ID3D12Device,
reinterpret_cast<void**
>(&pDevice));
2823 pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, Layouts, NumRows, RowSizesInBytes, &RequiredSize);
2826 return UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, Layouts, NumRows, RowSizesInBytes, pResourceData, pSrcData);
2830constexpr bool D3D12IsLayoutOpaque( D3D12_TEXTURE_LAYOUT Layout )
noexcept
2831{
return Layout == D3D12_TEXTURE_LAYOUT_UNKNOWN ||
Layout == D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE; }
2834#ifndef D3DX12_ASSERT
2836 #define D3DX12_ASSERT(x) assert(x)
2838 #define D3DX12_ASSERT(x)
2842template<
typename T >
2843inline T D3DX12Align(T uValue, T uAlign)
2846 D3DX12_ASSERT(0 == (uAlign & (uAlign - 1)));
2847 T uMask = uAlign - 1;
2848 T uResult = (uValue + uMask) & ~uMask;
2849 D3DX12_ASSERT(uResult >= uValue);
2850 D3DX12_ASSERT(0 == (uResult % uAlign));
2855template<
typename T >
2856inline T D3DX12AlignAtLeast(T uValue, T uAlign)
2858 T aligned = D3DX12Align(uValue, uAlign);
2859 return aligned > uAlign ? aligned : uAlign;
2865template <
typename t_CommandListType>
2866inline ID3D12CommandList *
const * CommandListCast(t_CommandListType *
const * pp)
noexcept
2872 return reinterpret_cast<ID3D12CommandList *
const *
>(pp);
2881#pragma clang diagnostic push
2882#pragma clang diagnostic ignored "-Wcovered-switch-default"
2885inline HRESULT D3DX12SerializeVersionedRootSignature(
2886 _In_
const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignatureDesc,
2887 D3D_ROOT_SIGNATURE_VERSION MaxVersion,
2888 _Outptr_ ID3DBlob** ppBlob,
2889 _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob)
noexcept
2891 if (ppErrorBlob !=
nullptr)
2893 *ppErrorBlob =
nullptr;
2898 case D3D_ROOT_SIGNATURE_VERSION_1_0:
2899 switch (pRootSignatureDesc->Version)
2901 case D3D_ROOT_SIGNATURE_VERSION_1_0:
2902 return D3D12SerializeRootSignature(&pRootSignatureDesc->Desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob);
2904 case D3D_ROOT_SIGNATURE_VERSION_1_1:
2905#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
2906 case D3D_ROOT_SIGNATURE_VERSION_1_2:
2910 const D3D12_ROOT_SIGNATURE_DESC1& desc_1_1 = pRootSignatureDesc->Desc_1_1;
2912 const SIZE_T ParametersSize =
sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters;
2913 void* pParameters = (ParametersSize > 0) ? HeapAlloc(GetProcessHeap(), 0, ParametersSize) : nullptr;
2914 if (ParametersSize > 0 && pParameters ==
nullptr)
2918 auto pParameters_1_0 =
static_cast<D3D12_ROOT_PARAMETER*
>(pParameters);
2922 for (UINT n = 0; n < desc_1_1.NumParameters; n++)
2924 __analysis_assume(ParametersSize ==
sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters);
2925 pParameters_1_0[n].ParameterType = desc_1_1.pParameters[n].ParameterType;
2926 pParameters_1_0[n].ShaderVisibility = desc_1_1.pParameters[n].ShaderVisibility;
2928 switch (desc_1_1.pParameters[n].ParameterType)
2930 case D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS:
2931 pParameters_1_0[n].Constants.Num32BitValues = desc_1_1.pParameters[n].Constants.Num32BitValues;
2932 pParameters_1_0[n].Constants.RegisterSpace = desc_1_1.pParameters[n].Constants.RegisterSpace;
2933 pParameters_1_0[n].Constants.ShaderRegister = desc_1_1.pParameters[n].Constants.ShaderRegister;
2936 case D3D12_ROOT_PARAMETER_TYPE_CBV:
2937 case D3D12_ROOT_PARAMETER_TYPE_SRV:
2938 case D3D12_ROOT_PARAMETER_TYPE_UAV:
2939 pParameters_1_0[n].Descriptor.RegisterSpace = desc_1_1.pParameters[n].Descriptor.RegisterSpace;
2940 pParameters_1_0[n].Descriptor.ShaderRegister = desc_1_1.pParameters[n].Descriptor.ShaderRegister;
2943 case D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE:
2945 const D3D12_ROOT_DESCRIPTOR_TABLE1& table_1_1 = desc_1_1.pParameters[n].DescriptorTable;
2947 const SIZE_T DescriptorRangesSize =
sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges;
2948 void* pDescriptorRanges = (DescriptorRangesSize > 0 && SUCCEEDED(hr)) ? HeapAlloc(GetProcessHeap(), 0, DescriptorRangesSize) : nullptr;
2949 if (DescriptorRangesSize > 0 && pDescriptorRanges ==
nullptr)
2953 auto pDescriptorRanges_1_0 =
static_cast<D3D12_DESCRIPTOR_RANGE*
>(pDescriptorRanges);
2957 for (UINT x = 0; x < table_1_1.NumDescriptorRanges; x++)
2959 __analysis_assume(DescriptorRangesSize ==
sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges);
2960 pDescriptorRanges_1_0[x].BaseShaderRegister = table_1_1.pDescriptorRanges[x].BaseShaderRegister;
2961 pDescriptorRanges_1_0[x].NumDescriptors = table_1_1.pDescriptorRanges[x].NumDescriptors;
2962 pDescriptorRanges_1_0[x].OffsetInDescriptorsFromTableStart = table_1_1.pDescriptorRanges[x].OffsetInDescriptorsFromTableStart;
2963 pDescriptorRanges_1_0[x].RangeType = table_1_1.pDescriptorRanges[x].RangeType;
2964 pDescriptorRanges_1_0[x].RegisterSpace = table_1_1.pDescriptorRanges[x].RegisterSpace;
2968 D3D12_ROOT_DESCRIPTOR_TABLE& table_1_0 = pParameters_1_0[n].DescriptorTable;
2969 table_1_0.NumDescriptorRanges = table_1_1.NumDescriptorRanges;
2970 table_1_0.pDescriptorRanges = pDescriptorRanges_1_0;
2980 D3D12_STATIC_SAMPLER_DESC* pStaticSamplers =
nullptr;
2981#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
2982 if (desc_1_1.NumStaticSamplers > 0 && pRootSignatureDesc->Version == D3D_ROOT_SIGNATURE_VERSION_1_2)
2984 const SIZE_T SamplersSize =
sizeof(D3D12_STATIC_SAMPLER_DESC) * desc_1_1.NumStaticSamplers;
2985 pStaticSamplers =
static_cast<D3D12_STATIC_SAMPLER_DESC*
>(HeapAlloc(GetProcessHeap(), 0, SamplersSize));
2987 if (pStaticSamplers ==
nullptr)
2993 const D3D12_ROOT_SIGNATURE_DESC2& desc_1_2 = pRootSignatureDesc->Desc_1_2;
2994 for (UINT n = 0; n < desc_1_1.NumStaticSamplers; ++n)
2996 if ((desc_1_2.pStaticSamplers[n].Flags & ~D3D12_SAMPLER_FLAG_UINT_BORDER_COLOR) != 0)
3001 memcpy(pStaticSamplers + n, desc_1_2.pStaticSamplers + n,
sizeof(D3D12_STATIC_SAMPLER_DESC));
3009 const CD3DX12_ROOT_SIGNATURE_DESC desc_1_0(desc_1_1.NumParameters, pParameters_1_0, desc_1_1.NumStaticSamplers, pStaticSamplers ==
nullptr ? desc_1_1.pStaticSamplers : pStaticSamplers, desc_1_1.Flags);
3010 hr = D3D12SerializeRootSignature(&desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob);
3015 for (UINT n = 0; n < desc_1_1.NumParameters; n++)
3017 if (desc_1_1.pParameters[n].ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE)
3019 auto pDescriptorRanges_1_0 = pParameters_1_0[n].DescriptorTable.pDescriptorRanges;
3020 HeapFree(GetProcessHeap(), 0,
reinterpret_cast<void*
>(
const_cast<D3D12_DESCRIPTOR_RANGE*
>(pDescriptorRanges_1_0)));
3023 HeapFree(GetProcessHeap(), 0, pParameters);
3026 if (pStaticSamplers)
3028 HeapFree(GetProcessHeap(), 0, pStaticSamplers);
3039 case D3D_ROOT_SIGNATURE_VERSION_1_1:
3040 switch (pRootSignatureDesc->Version)
3042 case D3D_ROOT_SIGNATURE_VERSION_1_0:
3043 case D3D_ROOT_SIGNATURE_VERSION_1_1:
3044 return D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob);
3046#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
3047 case D3D_ROOT_SIGNATURE_VERSION_1_2:
3050 const D3D12_ROOT_SIGNATURE_DESC1& desc_1_1 = pRootSignatureDesc->Desc_1_1;
3052 D3D12_STATIC_SAMPLER_DESC* pStaticSamplers =
nullptr;
3053 if (desc_1_1.NumStaticSamplers > 0)
3055 const SIZE_T SamplersSize =
sizeof(D3D12_STATIC_SAMPLER_DESC) * desc_1_1.NumStaticSamplers;
3056 pStaticSamplers =
static_cast<D3D12_STATIC_SAMPLER_DESC*
>(HeapAlloc(GetProcessHeap(), 0, SamplersSize));
3058 if (pStaticSamplers ==
nullptr)
3064 const D3D12_ROOT_SIGNATURE_DESC2& desc_1_2 = pRootSignatureDesc->Desc_1_2;
3065 for (UINT n = 0; n < desc_1_1.NumStaticSamplers; ++n)
3067 if ((desc_1_2.pStaticSamplers[n].Flags & ~D3D12_SAMPLER_FLAG_UINT_BORDER_COLOR) != 0)
3072 memcpy(pStaticSamplers + n, desc_1_2.pStaticSamplers + n,
sizeof(D3D12_STATIC_SAMPLER_DESC));
3079 const CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC desc(desc_1_1.NumParameters, desc_1_1.pParameters, desc_1_1.NumStaticSamplers, pStaticSamplers ==
nullptr ? desc_1_1.pStaticSamplers : pStaticSamplers, desc_1_1.Flags);
3080 hr = D3D12SerializeVersionedRootSignature(&desc, ppBlob, ppErrorBlob);
3083 if (pStaticSamplers)
3085 HeapFree(GetProcessHeap(), 0, pStaticSamplers);
3097#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
3098 case D3D_ROOT_SIGNATURE_VERSION_1_2:
3101 return D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob);
3104 return E_INVALIDARG;
3108#pragma clang diagnostic pop
3112struct CD3DX12_RT_FORMAT_ARRAY :
public D3D12_RT_FORMAT_ARRAY
3114 CD3DX12_RT_FORMAT_ARRAY() =
default;
3115 explicit CD3DX12_RT_FORMAT_ARRAY(
const D3D12_RT_FORMAT_ARRAY& o) noexcept
3116 : D3D12_RT_FORMAT_ARRAY(o)
3118 explicit CD3DX12_RT_FORMAT_ARRAY(_In_reads_(NumFormats)
const DXGI_FORMAT* pFormats, UINT NumFormats)
noexcept
3120 NumRenderTargets = NumFormats;
3121 memcpy(RTFormats, pFormats,
sizeof(RTFormats));
3133struct DefaultSampleMask {
operator UINT() noexcept {
return UINT_MAX; } };
3134struct DefaultSampleDesc {
operator DXGI_SAMPLE_DESC() noexcept {
return DXGI_SAMPLE_DESC{1, 0}; } };
3137#pragma warning(push)
3138#pragma warning(disable : 4324)
3140template <
typename InnerStructType, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE Type,
typename DefaultArg = InnerStructType>
3141class alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT
3144 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE pssType;
3145 InnerStructType pssInner;
3147 CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT() noexcept : pssType(Type), pssInner(DefaultArg()) {}
3148 CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT(InnerStructType
const& i) noexcept : pssType(Type), pssInner(i) {}
3149 CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT& operator=(InnerStructType
const& i)
noexcept { pssType =
Type; pssInner = i;
return *
this; }
3150 operator InnerStructType
const&()
const noexcept {
return pssInner; }
3151 operator InnerStructType&()
noexcept {
return pssInner; }
3152 InnerStructType* operator&() noexcept {
return &pssInner; }
3153 InnerStructType
const* operator&() const noexcept {
return &pssInner; }
3158typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PIPELINE_STATE_FLAGS, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS> CD3DX12_PIPELINE_STATE_STREAM_FLAGS;
3159typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK> CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK;
3160typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< ID3D12RootSignature*, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE> CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE;
3161typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INPUT_LAYOUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT> CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT;
3162typedef 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;
3163typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PRIMITIVE_TOPOLOGY_TYPE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY> CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY;
3164typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS> CD3DX12_PIPELINE_STATE_STREAM_VS;
3165typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS> CD3DX12_PIPELINE_STATE_STREAM_GS;
3166typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_STREAM_OUTPUT_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT> CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT;
3167typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS> CD3DX12_PIPELINE_STATE_STREAM_HS;
3168typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS> CD3DX12_PIPELINE_STATE_STREAM_DS;
3169typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS> CD3DX12_PIPELINE_STATE_STREAM_PS;
3170typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_AS> CD3DX12_PIPELINE_STATE_STREAM_AS;
3171typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MS> CD3DX12_PIPELINE_STATE_STREAM_MS;
3172typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS> CD3DX12_PIPELINE_STATE_STREAM_CS;
3173typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_BLEND_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC;
3174typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL;
3175typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC1, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1;
3176#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)
3177typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC2, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL2;
3179typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_FORMAT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT;
3180typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER;
3181#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)
3182typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC1, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER1, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER1;
3184#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610)
3185typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC2, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER2, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER2;
3187typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_RT_FORMAT_ARRAY, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS> CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS;
3188typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_SAMPLE_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC, DefaultSampleDesc> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC;
3189typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK, DefaultSampleMask> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK;
3190typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_CACHED_PIPELINE_STATE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO> CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO;
3191typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_VIEW_INSTANCING_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING;
3196struct ID3DX12PipelineParserCallbacks
3199 virtual void FlagsCb(D3D12_PIPELINE_STATE_FLAGS) {}
3200 virtual void NodeMaskCb(UINT) {}
3201 virtual void RootSignatureCb(ID3D12RootSignature*) {}
3202 virtual void InputLayoutCb(
const D3D12_INPUT_LAYOUT_DESC&) {}
3203 virtual void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE) {}
3204 virtual void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE) {}
3205 virtual void VSCb(
const D3D12_SHADER_BYTECODE&) {}
3206 virtual void GSCb(
const D3D12_SHADER_BYTECODE&) {}
3207 virtual void StreamOutputCb(
const D3D12_STREAM_OUTPUT_DESC&) {}
3208 virtual void HSCb(
const D3D12_SHADER_BYTECODE&) {}
3209 virtual void DSCb(
const D3D12_SHADER_BYTECODE&) {}
3210 virtual void PSCb(
const D3D12_SHADER_BYTECODE&) {}
3211 virtual void CSCb(
const D3D12_SHADER_BYTECODE&) {}
3212 virtual void ASCb(
const D3D12_SHADER_BYTECODE&) {}
3213 virtual void MSCb(
const D3D12_SHADER_BYTECODE&) {}
3214 virtual void BlendStateCb(
const D3D12_BLEND_DESC&) {}
3215 virtual void DepthStencilStateCb(
const D3D12_DEPTH_STENCIL_DESC&) {}
3216 virtual void DepthStencilState1Cb(
const D3D12_DEPTH_STENCIL_DESC1&) {}
3217#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)
3218 virtual void DepthStencilState2Cb(
const D3D12_DEPTH_STENCIL_DESC2&) {}
3220 virtual void DSVFormatCb(DXGI_FORMAT) {}
3221 virtual void RasterizerStateCb(
const D3D12_RASTERIZER_DESC&) {}
3222#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)
3223 virtual void RasterizerState1Cb(
const D3D12_RASTERIZER_DESC1&) {}
3225#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610)
3226 virtual void RasterizerState2Cb(
const D3D12_RASTERIZER_DESC2&) {}
3228 virtual void RTVFormatsCb(
const D3D12_RT_FORMAT_ARRAY&) {}
3229 virtual void SampleDescCb(
const DXGI_SAMPLE_DESC&) {}
3230 virtual void SampleMaskCb(UINT) {}
3231 virtual void ViewInstancingCb(
const D3D12_VIEW_INSTANCING_DESC&) {}
3232 virtual void CachedPSOCb(
const D3D12_CACHED_PIPELINE_STATE&) {}
3235 virtual void ErrorBadInputParameter(UINT ) {}
3236 virtual void ErrorDuplicateSubobject(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE ) {}
3237 virtual void ErrorUnknownSubobject(UINT ) {}
3238#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 613)
3239 virtual void FinalizeCb() {}
3242 virtual ~ID3DX12PipelineParserCallbacks() =
default;
3245struct D3DX12_MESH_SHADER_PIPELINE_STATE_DESC
3247 ID3D12RootSignature* pRootSignature;
3248 D3D12_SHADER_BYTECODE AS;
3249 D3D12_SHADER_BYTECODE MS;
3250 D3D12_SHADER_BYTECODE PS;
3251 D3D12_BLEND_DESC BlendState;
3253 D3D12_RASTERIZER_DESC RasterizerState;
3254 D3D12_DEPTH_STENCIL_DESC DepthStencilState;
3255 D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType;
3256 UINT NumRenderTargets;
3257 DXGI_FORMAT RTVFormats[ D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT ];
3258 DXGI_FORMAT DSVFormat;
3259 DXGI_SAMPLE_DESC SampleDesc;
3261 D3D12_CACHED_PIPELINE_STATE CachedPSO;
3262 D3D12_PIPELINE_STATE_FLAGS Flags;
3265#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610)
3272struct CD3DX12_PIPELINE_STATE_STREAM5
3274 CD3DX12_PIPELINE_STATE_STREAM5() =
default;
3276 CD3DX12_PIPELINE_STATE_STREAM5(
const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept
3278 , NodeMask(Desc.NodeMask)
3279 , pRootSignature(Desc.pRootSignature)
3280 , InputLayout(Desc.InputLayout)
3281 , IBStripCutValue(Desc.IBStripCutValue)
3282 , PrimitiveTopologyType(Desc.PrimitiveTopologyType)
3289 , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))
3290 , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(Desc.DepthStencilState))
3291 , DSVFormat(Desc.DSVFormat)
3292 , RasterizerState(CD3DX12_RASTERIZER_DESC2(Desc.RasterizerState))
3293 , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))
3294 , SampleDesc(Desc.SampleDesc)
3295 , SampleMask(Desc.SampleMask)
3296 , CachedPSO(Desc.CachedPSO)
3297 , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))
3299 CD3DX12_PIPELINE_STATE_STREAM5(
const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept
3301 , NodeMask(Desc.NodeMask)
3302 , pRootSignature(Desc.pRootSignature)
3303 , PrimitiveTopologyType(Desc.PrimitiveTopologyType)
3307 , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))
3308 , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(Desc.DepthStencilState))
3309 , DSVFormat(Desc.DSVFormat)
3310 , RasterizerState(CD3DX12_RASTERIZER_DESC2(Desc.RasterizerState))
3311 , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))
3312 , SampleDesc(Desc.SampleDesc)
3313 , SampleMask(Desc.SampleMask)
3314 , CachedPSO(Desc.CachedPSO)
3315 , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))
3317 CD3DX12_PIPELINE_STATE_STREAM5(
const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept
3319 , NodeMask(Desc.NodeMask)
3320 , pRootSignature(Desc.pRootSignature)
3321 , CS(CD3DX12_SHADER_BYTECODE(Desc.CS))
3322 , CachedPSO(Desc.CachedPSO)
3324 static_cast<D3D12_DEPTH_STENCIL_DESC2&
>(DepthStencilState).DepthEnable =
false;
3326 CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;
3327 CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask;
3328 CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature;
3329 CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout;
3330 CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue;
3331 CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType;
3332 CD3DX12_PIPELINE_STATE_STREAM_VS VS;
3333 CD3DX12_PIPELINE_STATE_STREAM_GS GS;
3334 CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT
StreamOutput;
3335 CD3DX12_PIPELINE_STATE_STREAM_HS HS;
3336 CD3DX12_PIPELINE_STATE_STREAM_DS DS;
3337 CD3DX12_PIPELINE_STATE_STREAM_PS PS;
3338 CD3DX12_PIPELINE_STATE_STREAM_AS AS;
3339 CD3DX12_PIPELINE_STATE_STREAM_MS MS;
3340 CD3DX12_PIPELINE_STATE_STREAM_CS CS;
3341 CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState;
3342 CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL2 DepthStencilState;
3343 CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat;
3344 CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER2 RasterizerState;
3345 CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats;
3346 CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc;
3347 CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask;
3348 CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO;
3349 CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc;
3351 D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept
3353 D3D12_GRAPHICS_PIPELINE_STATE_DESC D;
3354 D.Flags = this->Flags;
3355 D.NodeMask = this->NodeMask;
3356 D.pRootSignature = this->pRootSignature;
3357 D.InputLayout = this->InputLayout;
3358 D.IBStripCutValue = this->IBStripCutValue;
3359 D.PrimitiveTopologyType = this->PrimitiveTopologyType;
3362 D.StreamOutput = this->StreamOutput;
3366 D.BlendState = this->BlendState;
3367 D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(D3D12_DEPTH_STENCIL_DESC2(this->DepthStencilState));
3368 D.DSVFormat = this->DSVFormat;
3369 D.RasterizerState = CD3DX12_RASTERIZER_DESC2(D3D12_RASTERIZER_DESC2(this->RasterizerState));
3370 D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets;
3371 memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats,
sizeof(D.RTVFormats));
3372 D.SampleDesc = this->SampleDesc;
3373 D.SampleMask = this->SampleMask;
3374 D.CachedPSO = this->CachedPSO;
3377 D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const noexcept
3379 D3D12_COMPUTE_PIPELINE_STATE_DESC D;
3380 D.Flags = this->Flags;
3381 D.NodeMask = this->NodeMask;
3382 D.pRootSignature = this->pRootSignature;
3384 D.CachedPSO = this->CachedPSO;
3390#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)
3396struct CD3DX12_PIPELINE_STATE_STREAM4
3398 CD3DX12_PIPELINE_STATE_STREAM4() =
default;
3400 CD3DX12_PIPELINE_STATE_STREAM4(
const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept
3402 , NodeMask(Desc.NodeMask)
3403 , pRootSignature(Desc.pRootSignature)
3404 , InputLayout(Desc.InputLayout)
3405 , IBStripCutValue(Desc.IBStripCutValue)
3406 , PrimitiveTopologyType(Desc.PrimitiveTopologyType)
3413 , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))
3414 , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(Desc.DepthStencilState))
3415 , DSVFormat(Desc.DSVFormat)
3416 , RasterizerState(CD3DX12_RASTERIZER_DESC1(Desc.RasterizerState))
3417 , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))
3418 , SampleDesc(Desc.SampleDesc)
3419 , SampleMask(Desc.SampleMask)
3420 , CachedPSO(Desc.CachedPSO)
3421 , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))
3423 CD3DX12_PIPELINE_STATE_STREAM4(
const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept
3425 , NodeMask(Desc.NodeMask)
3426 , pRootSignature(Desc.pRootSignature)
3427 , PrimitiveTopologyType(Desc.PrimitiveTopologyType)
3431 , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))
3432 , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(Desc.DepthStencilState))
3433 , DSVFormat(Desc.DSVFormat)
3434 , RasterizerState(CD3DX12_RASTERIZER_DESC1(Desc.RasterizerState))
3435 , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))
3436 , SampleDesc(Desc.SampleDesc)
3437 , SampleMask(Desc.SampleMask)
3438 , CachedPSO(Desc.CachedPSO)
3439 , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))
3441 CD3DX12_PIPELINE_STATE_STREAM4(
const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept
3443 , NodeMask(Desc.NodeMask)
3444 , pRootSignature(Desc.pRootSignature)
3445 , CS(CD3DX12_SHADER_BYTECODE(Desc.CS))
3446 , CachedPSO(Desc.CachedPSO)
3448 static_cast<D3D12_DEPTH_STENCIL_DESC2&
>(DepthStencilState).DepthEnable =
false;
3450 CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;
3451 CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask;
3452 CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature;
3453 CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout;
3454 CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue;
3455 CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType;
3456 CD3DX12_PIPELINE_STATE_STREAM_VS VS;
3457 CD3DX12_PIPELINE_STATE_STREAM_GS GS;
3458 CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT
StreamOutput;
3459 CD3DX12_PIPELINE_STATE_STREAM_HS HS;
3460 CD3DX12_PIPELINE_STATE_STREAM_DS DS;
3461 CD3DX12_PIPELINE_STATE_STREAM_PS PS;
3462 CD3DX12_PIPELINE_STATE_STREAM_AS AS;
3463 CD3DX12_PIPELINE_STATE_STREAM_MS MS;
3464 CD3DX12_PIPELINE_STATE_STREAM_CS CS;
3465 CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState;
3466 CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL2 DepthStencilState;
3467 CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat;
3468 CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER1 RasterizerState;
3469 CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats;
3470 CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc;
3471 CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask;
3472 CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO;
3473 CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc;
3475 D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept
3477 D3D12_GRAPHICS_PIPELINE_STATE_DESC D;
3478 D.Flags = this->Flags;
3479 D.NodeMask = this->NodeMask;
3480 D.pRootSignature = this->pRootSignature;
3481 D.InputLayout = this->InputLayout;
3482 D.IBStripCutValue = this->IBStripCutValue;
3483 D.PrimitiveTopologyType = this->PrimitiveTopologyType;
3486 D.StreamOutput = this->StreamOutput;
3490 D.BlendState = this->BlendState;
3491 D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(D3D12_DEPTH_STENCIL_DESC2(this->DepthStencilState));
3492 D.DSVFormat = this->DSVFormat;
3493 D.RasterizerState = CD3DX12_RASTERIZER_DESC1(D3D12_RASTERIZER_DESC1(this->RasterizerState));
3494 D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets;
3495 memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats,
sizeof(D.RTVFormats));
3496 D.SampleDesc = this->SampleDesc;
3497 D.SampleMask = this->SampleMask;
3498 D.CachedPSO = this->CachedPSO;
3501 D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const noexcept
3503 D3D12_COMPUTE_PIPELINE_STATE_DESC D;
3504 D.Flags = this->Flags;
3505 D.NodeMask = this->NodeMask;
3506 D.pRootSignature = this->pRootSignature;
3508 D.CachedPSO = this->CachedPSO;
3514#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)
3519struct CD3DX12_PIPELINE_STATE_STREAM3
3521 CD3DX12_PIPELINE_STATE_STREAM3() =
default;
3523 CD3DX12_PIPELINE_STATE_STREAM3(
const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept
3525 , NodeMask(Desc.NodeMask)
3526 , pRootSignature(Desc.pRootSignature)
3527 , InputLayout(Desc.InputLayout)
3528 , IBStripCutValue(Desc.IBStripCutValue)
3529 , PrimitiveTopologyType(Desc.PrimitiveTopologyType)
3536 , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))
3537 , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(Desc.DepthStencilState))
3538 , DSVFormat(Desc.DSVFormat)
3539 , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState))
3540 , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))
3541 , SampleDesc(Desc.SampleDesc)
3542 , SampleMask(Desc.SampleMask)
3543 , CachedPSO(Desc.CachedPSO)
3544 , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))
3546 CD3DX12_PIPELINE_STATE_STREAM3(
const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept
3548 , NodeMask(Desc.NodeMask)
3549 , pRootSignature(Desc.pRootSignature)
3550 , PrimitiveTopologyType(Desc.PrimitiveTopologyType)
3554 , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))
3555 , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(Desc.DepthStencilState))
3556 , DSVFormat(Desc.DSVFormat)
3557 , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState))
3558 , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))
3559 , SampleDesc(Desc.SampleDesc)
3560 , SampleMask(Desc.SampleMask)
3561 , CachedPSO(Desc.CachedPSO)
3562 , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))
3564 CD3DX12_PIPELINE_STATE_STREAM3(
const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept
3566 , NodeMask(Desc.NodeMask)
3567 , pRootSignature(Desc.pRootSignature)
3568 , CS(CD3DX12_SHADER_BYTECODE(Desc.CS))
3569 , CachedPSO(Desc.CachedPSO)
3571 static_cast<D3D12_DEPTH_STENCIL_DESC2&
>(DepthStencilState).DepthEnable =
false;
3573 CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;
3574 CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask;
3575 CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature;
3576 CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout;
3577 CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue;
3578 CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType;
3579 CD3DX12_PIPELINE_STATE_STREAM_VS VS;
3580 CD3DX12_PIPELINE_STATE_STREAM_GS GS;
3581 CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT
StreamOutput;
3582 CD3DX12_PIPELINE_STATE_STREAM_HS HS;
3583 CD3DX12_PIPELINE_STATE_STREAM_DS DS;
3584 CD3DX12_PIPELINE_STATE_STREAM_PS PS;
3585 CD3DX12_PIPELINE_STATE_STREAM_AS AS;
3586 CD3DX12_PIPELINE_STATE_STREAM_MS MS;
3587 CD3DX12_PIPELINE_STATE_STREAM_CS CS;
3588 CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState;
3589 CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL2 DepthStencilState;
3590 CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat;
3591 CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState;
3592 CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats;
3593 CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc;
3594 CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask;
3595 CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO;
3596 CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc;
3598 D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept
3600 D3D12_GRAPHICS_PIPELINE_STATE_DESC D;
3601 D.Flags = this->Flags;
3602 D.NodeMask = this->NodeMask;
3603 D.pRootSignature = this->pRootSignature;
3604 D.InputLayout = this->InputLayout;
3605 D.IBStripCutValue = this->IBStripCutValue;
3606 D.PrimitiveTopologyType = this->PrimitiveTopologyType;
3609 D.StreamOutput = this->StreamOutput;
3613 D.BlendState = this->BlendState;
3614 D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(D3D12_DEPTH_STENCIL_DESC2(this->DepthStencilState));
3615 D.DSVFormat = this->DSVFormat;
3616 D.RasterizerState = this->RasterizerState;
3617 D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets;
3618 memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats,
sizeof(D.RTVFormats));
3619 D.SampleDesc = this->SampleDesc;
3620 D.SampleMask = this->SampleMask;
3621 D.CachedPSO = this->CachedPSO;
3624 D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const noexcept
3626 D3D12_COMPUTE_PIPELINE_STATE_DESC D;
3627 D.Flags = this->Flags;
3628 D.NodeMask = this->NodeMask;
3629 D.pRootSignature = this->pRootSignature;
3631 D.CachedPSO = this->CachedPSO;
3640struct CD3DX12_PIPELINE_STATE_STREAM2
3642 CD3DX12_PIPELINE_STATE_STREAM2() =
default;
3644 CD3DX12_PIPELINE_STATE_STREAM2(
const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept
3646 , NodeMask(Desc.NodeMask)
3647 , pRootSignature(Desc.pRootSignature)
3648 , InputLayout(Desc.InputLayout)
3649 , IBStripCutValue(Desc.IBStripCutValue)
3650 , PrimitiveTopologyType(Desc.PrimitiveTopologyType)
3657 , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))
3658 , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState))
3659 , DSVFormat(Desc.DSVFormat)
3660 , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState))
3661 , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))
3662 , SampleDesc(Desc.SampleDesc)
3663 , SampleMask(Desc.SampleMask)
3664 , CachedPSO(Desc.CachedPSO)
3665 , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))
3667 CD3DX12_PIPELINE_STATE_STREAM2(
const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept
3669 , NodeMask(Desc.NodeMask)
3670 , pRootSignature(Desc.pRootSignature)
3671 , PrimitiveTopologyType(Desc.PrimitiveTopologyType)
3675 , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))
3676 , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState))
3677 , DSVFormat(Desc.DSVFormat)
3678 , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState))
3679 , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))
3680 , SampleDesc(Desc.SampleDesc)
3681 , SampleMask(Desc.SampleMask)
3682 , CachedPSO(Desc.CachedPSO)
3683 , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))
3685 CD3DX12_PIPELINE_STATE_STREAM2(
const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept
3687 , NodeMask(Desc.NodeMask)
3688 , pRootSignature(Desc.pRootSignature)
3689 , CS(CD3DX12_SHADER_BYTECODE(Desc.CS))
3690 , CachedPSO(Desc.CachedPSO)
3692 static_cast<D3D12_DEPTH_STENCIL_DESC1&
>(DepthStencilState).DepthEnable =
false;
3694 CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;
3695 CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask;
3696 CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature;
3697 CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout;
3698 CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue;
3699 CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType;
3700 CD3DX12_PIPELINE_STATE_STREAM_VS VS;
3701 CD3DX12_PIPELINE_STATE_STREAM_GS GS;
3702 CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT
StreamOutput;
3703 CD3DX12_PIPELINE_STATE_STREAM_HS HS;
3704 CD3DX12_PIPELINE_STATE_STREAM_DS DS;
3705 CD3DX12_PIPELINE_STATE_STREAM_PS PS;
3706 CD3DX12_PIPELINE_STATE_STREAM_AS AS;
3707 CD3DX12_PIPELINE_STATE_STREAM_MS MS;
3708 CD3DX12_PIPELINE_STATE_STREAM_CS CS;
3709 CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState;
3710 CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState;
3711 CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat;
3712 CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState;
3713 CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats;
3714 CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc;
3715 CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask;
3716 CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO;
3717 CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc;
3718 D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept
3720 D3D12_GRAPHICS_PIPELINE_STATE_DESC D;
3721 D.Flags = this->Flags;
3722 D.NodeMask = this->NodeMask;
3723 D.pRootSignature = this->pRootSignature;
3724 D.InputLayout = this->InputLayout;
3725 D.IBStripCutValue = this->IBStripCutValue;
3726 D.PrimitiveTopologyType = this->PrimitiveTopologyType;
3729 D.StreamOutput = this->StreamOutput;
3733 D.BlendState = this->BlendState;
3734 D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState));
3735 D.DSVFormat = this->DSVFormat;
3736 D.RasterizerState = this->RasterizerState;
3737 D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets;
3738 memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats,
sizeof(D.RTVFormats));
3739 D.SampleDesc = this->SampleDesc;
3740 D.SampleMask = this->SampleMask;
3741 D.CachedPSO = this->CachedPSO;
3744 D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const noexcept
3746 D3D12_COMPUTE_PIPELINE_STATE_DESC D;
3747 D.Flags = this->Flags;
3748 D.NodeMask = this->NodeMask;
3749 D.pRootSignature = this->pRootSignature;
3751 D.CachedPSO = this->CachedPSO;
3758struct CD3DX12_PIPELINE_STATE_STREAM1
3760 CD3DX12_PIPELINE_STATE_STREAM1() =
default;
3762 CD3DX12_PIPELINE_STATE_STREAM1(
const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept
3764 , NodeMask(Desc.NodeMask)
3765 , pRootSignature(Desc.pRootSignature)
3766 , InputLayout(Desc.InputLayout)
3767 , IBStripCutValue(Desc.IBStripCutValue)
3768 , PrimitiveTopologyType(Desc.PrimitiveTopologyType)
3775 , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))
3776 , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState))
3777 , DSVFormat(Desc.DSVFormat)
3778 , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState))
3779 , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))
3780 , SampleDesc(Desc.SampleDesc)
3781 , SampleMask(Desc.SampleMask)
3782 , CachedPSO(Desc.CachedPSO)
3783 , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))
3785 CD3DX12_PIPELINE_STATE_STREAM1(
const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept
3787 , NodeMask(Desc.NodeMask)
3788 , pRootSignature(Desc.pRootSignature)
3789 , PrimitiveTopologyType(Desc.PrimitiveTopologyType)
3791 , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))
3792 , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState))
3793 , DSVFormat(Desc.DSVFormat)
3794 , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState))
3795 , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))
3796 , SampleDesc(Desc.SampleDesc)
3797 , SampleMask(Desc.SampleMask)
3798 , CachedPSO(Desc.CachedPSO)
3799 , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))
3801 CD3DX12_PIPELINE_STATE_STREAM1(
const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept
3803 , NodeMask(Desc.NodeMask)
3804 , pRootSignature(Desc.pRootSignature)
3805 , CS(CD3DX12_SHADER_BYTECODE(Desc.CS))
3806 , CachedPSO(Desc.CachedPSO)
3808 static_cast<D3D12_DEPTH_STENCIL_DESC1&
>(DepthStencilState).DepthEnable =
false;
3810 CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;
3811 CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask;
3812 CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature;
3813 CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout;
3814 CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue;
3815 CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType;
3816 CD3DX12_PIPELINE_STATE_STREAM_VS VS;
3817 CD3DX12_PIPELINE_STATE_STREAM_GS GS;
3818 CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT
StreamOutput;
3819 CD3DX12_PIPELINE_STATE_STREAM_HS HS;
3820 CD3DX12_PIPELINE_STATE_STREAM_DS DS;
3821 CD3DX12_PIPELINE_STATE_STREAM_PS PS;
3822 CD3DX12_PIPELINE_STATE_STREAM_CS CS;
3823 CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState;
3824 CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState;
3825 CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat;
3826 CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState;
3827 CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats;
3828 CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc;
3829 CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask;
3830 CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO;
3831 CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc;
3832 D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept
3834 D3D12_GRAPHICS_PIPELINE_STATE_DESC D;
3835 D.Flags = this->Flags;
3836 D.NodeMask = this->NodeMask;
3837 D.pRootSignature = this->pRootSignature;
3838 D.InputLayout = this->InputLayout;
3839 D.IBStripCutValue = this->IBStripCutValue;
3840 D.PrimitiveTopologyType = this->PrimitiveTopologyType;
3843 D.StreamOutput = this->StreamOutput;
3847 D.BlendState = this->BlendState;
3848 D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState));
3849 D.DSVFormat = this->DSVFormat;
3850 D.RasterizerState = this->RasterizerState;
3851 D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets;
3852 memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats,
sizeof(D.RTVFormats));
3853 D.SampleDesc = this->SampleDesc;
3854 D.SampleMask = this->SampleMask;
3855 D.CachedPSO = this->CachedPSO;
3858 D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const noexcept
3860 D3D12_COMPUTE_PIPELINE_STATE_DESC D;
3861 D.Flags = this->Flags;
3862 D.NodeMask = this->NodeMask;
3863 D.pRootSignature = this->pRootSignature;
3865 D.CachedPSO = this->CachedPSO;
3871struct CD3DX12_PIPELINE_MESH_STATE_STREAM
3873 CD3DX12_PIPELINE_MESH_STATE_STREAM() =
default;
3874 CD3DX12_PIPELINE_MESH_STATE_STREAM(
const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept
3876 , NodeMask(Desc.NodeMask)
3877 , pRootSignature(Desc.pRootSignature)
3878 , PrimitiveTopologyType(Desc.PrimitiveTopologyType)
3882 , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))
3883 , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState))
3884 , DSVFormat(Desc.DSVFormat)
3885 , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState))
3886 , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))
3887 , SampleDesc(Desc.SampleDesc)
3888 , SampleMask(Desc.SampleMask)
3889 , CachedPSO(Desc.CachedPSO)
3890 , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT()))
3892 CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;
3893 CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask;
3894 CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature;
3895 CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType;
3896 CD3DX12_PIPELINE_STATE_STREAM_PS PS;
3897 CD3DX12_PIPELINE_STATE_STREAM_AS AS;
3898 CD3DX12_PIPELINE_STATE_STREAM_MS MS;
3899 CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState;
3900 CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState;
3901 CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat;
3902 CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState;
3903 CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats;
3904 CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc;
3905 CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask;
3906 CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO;
3907 CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc;
3908 D3DX12_MESH_SHADER_PIPELINE_STATE_DESC MeshShaderDescV0() const noexcept
3910 D3DX12_MESH_SHADER_PIPELINE_STATE_DESC D;
3911 D.Flags = this->Flags;
3912 D.NodeMask = this->NodeMask;
3913 D.pRootSignature = this->pRootSignature;
3914 D.PrimitiveTopologyType = this->PrimitiveTopologyType;
3918 D.BlendState = this->BlendState;
3919 D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState));
3920 D.DSVFormat = this->DSVFormat;
3921 D.RasterizerState = this->RasterizerState;
3922 D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets;
3923 memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats,
sizeof(D.RTVFormats));
3924 D.SampleDesc = this->SampleDesc;
3925 D.SampleMask = this->SampleMask;
3926 D.CachedPSO = this->CachedPSO;
3933struct CD3DX12_PIPELINE_STATE_STREAM
3935 CD3DX12_PIPELINE_STATE_STREAM() =
default;
3936 CD3DX12_PIPELINE_STATE_STREAM(
const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept
3938 , NodeMask(Desc.NodeMask)
3939 , pRootSignature(Desc.pRootSignature)
3940 , InputLayout(Desc.InputLayout)
3941 , IBStripCutValue(Desc.IBStripCutValue)
3942 , PrimitiveTopologyType(Desc.PrimitiveTopologyType)
3949 , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))
3950 , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState))
3951 , DSVFormat(Desc.DSVFormat)
3952 , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState))
3953 , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))
3954 , SampleDesc(Desc.SampleDesc)
3955 , SampleMask(Desc.SampleMask)
3956 , CachedPSO(Desc.CachedPSO)
3958 CD3DX12_PIPELINE_STATE_STREAM(
const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept
3960 , NodeMask(Desc.NodeMask)
3961 , pRootSignature(Desc.pRootSignature)
3962 , CS(CD3DX12_SHADER_BYTECODE(Desc.CS))
3963 , CachedPSO(Desc.CachedPSO)
3965 CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;
3966 CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask;
3967 CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature;
3968 CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout;
3969 CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue;
3970 CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType;
3971 CD3DX12_PIPELINE_STATE_STREAM_VS VS;
3972 CD3DX12_PIPELINE_STATE_STREAM_GS GS;
3973 CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT
StreamOutput;
3974 CD3DX12_PIPELINE_STATE_STREAM_HS HS;
3975 CD3DX12_PIPELINE_STATE_STREAM_DS DS;
3976 CD3DX12_PIPELINE_STATE_STREAM_PS PS;
3977 CD3DX12_PIPELINE_STATE_STREAM_CS CS;
3978 CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState;
3979 CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState;
3980 CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat;
3981 CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState;
3982 CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats;
3983 CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc;
3984 CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask;
3985 CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO;
3986 D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept
3988 D3D12_GRAPHICS_PIPELINE_STATE_DESC D;
3989 D.Flags = this->Flags;
3990 D.NodeMask = this->NodeMask;
3991 D.pRootSignature = this->pRootSignature;
3992 D.InputLayout = this->InputLayout;
3993 D.IBStripCutValue = this->IBStripCutValue;
3994 D.PrimitiveTopologyType = this->PrimitiveTopologyType;
3997 D.StreamOutput = this->StreamOutput;
4001 D.BlendState = this->BlendState;
4002 D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState));
4003 D.DSVFormat = this->DSVFormat;
4004 D.RasterizerState = this->RasterizerState;
4005 D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets;
4006 memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats,
sizeof(D.RTVFormats));
4007 D.SampleDesc = this->SampleDesc;
4008 D.SampleMask = this->SampleMask;
4009 D.CachedPSO = this->CachedPSO;
4012 D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const noexcept
4014 D3D12_COMPUTE_PIPELINE_STATE_DESC D;
4015 D.Flags = this->Flags;
4016 D.NodeMask = this->NodeMask;
4017 D.pRootSignature = this->pRootSignature;
4019 D.CachedPSO = this->CachedPSO;
4024struct CD3DX12_PIPELINE_STATE_STREAM2_PARSE_HELPER :
public ID3DX12PipelineParserCallbacks
4026 CD3DX12_PIPELINE_STATE_STREAM2 PipelineStream;
4027 CD3DX12_PIPELINE_STATE_STREAM2_PARSE_HELPER() noexcept
4031 PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;
4034 static_cast<D3D12_DEPTH_STENCIL_DESC1&
>(PipelineStream.DepthStencilState).DepthEnable =
false;
4038 void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags)
override {PipelineStream.Flags = Flags;}
4039 void NodeMaskCb(UINT NodeMask)
override {PipelineStream.NodeMask = NodeMask;}
4040 void RootSignatureCb(ID3D12RootSignature* pRootSignature)
override {PipelineStream.pRootSignature = pRootSignature;}
4041 void InputLayoutCb(
const D3D12_INPUT_LAYOUT_DESC& InputLayout)
override {PipelineStream.InputLayout = InputLayout;}
4042 void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue)
override {PipelineStream.IBStripCutValue = IBStripCutValue;}
4043 void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType)
override {PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;}
4044 void VSCb(
const D3D12_SHADER_BYTECODE& VS)
override {PipelineStream.VS = VS;}
4045 void GSCb(
const D3D12_SHADER_BYTECODE& GS)
override {PipelineStream.GS = GS;}
4046 void StreamOutputCb(
const D3D12_STREAM_OUTPUT_DESC& StreamOutput)
override {PipelineStream.StreamOutput =
StreamOutput;}
4047 void HSCb(
const D3D12_SHADER_BYTECODE& HS)
override {PipelineStream.HS = HS;}
4048 void DSCb(
const D3D12_SHADER_BYTECODE& DS)
override {PipelineStream.DS = DS;}
4049 void PSCb(
const D3D12_SHADER_BYTECODE& PS)
override {PipelineStream.PS = PS;}
4050 void CSCb(
const D3D12_SHADER_BYTECODE& CS)
override {PipelineStream.CS = CS;}
4051 void ASCb(
const D3D12_SHADER_BYTECODE& AS)
override {PipelineStream.AS = AS;}
4052 void MSCb(
const D3D12_SHADER_BYTECODE& MS)
override {PipelineStream.MS = MS;}
4053 void BlendStateCb(
const D3D12_BLEND_DESC& BlendState)
override {PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState);}
4054 void DepthStencilStateCb(
const D3D12_DEPTH_STENCIL_DESC& DepthStencilState)
override
4056 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState);
4059 void DepthStencilState1Cb(
const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState)
override
4061 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState);
4064 void DSVFormatCb(DXGI_FORMAT DSVFormat)
override
4066 PipelineStream.DSVFormat = DSVFormat;
4067 if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN)
4070 static_cast<D3D12_DEPTH_STENCIL_DESC1&
>(PipelineStream.DepthStencilState).DepthEnable =
true;
4073 void RasterizerStateCb(
const D3D12_RASTERIZER_DESC& RasterizerState)
override {PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC(RasterizerState);}
4074 void RTVFormatsCb(
const D3D12_RT_FORMAT_ARRAY& RTVFormats)
override {PipelineStream.RTVFormats = RTVFormats;}
4075 void SampleDescCb(
const DXGI_SAMPLE_DESC& SampleDesc)
override {PipelineStream.SampleDesc = SampleDesc;}
4076 void SampleMaskCb(UINT SampleMask)
override {PipelineStream.SampleMask = SampleMask;}
4077 void ViewInstancingCb(
const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc)
override {PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc);}
4078 void CachedPSOCb(
const D3D12_CACHED_PIPELINE_STATE& CachedPSO)
override {PipelineStream.CachedPSO = CachedPSO;}
4084#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)
4085struct CD3DX12_PIPELINE_STATE_STREAM3_PARSE_HELPER :
public ID3DX12PipelineParserCallbacks
4087 CD3DX12_PIPELINE_STATE_STREAM3 PipelineStream;
4088 CD3DX12_PIPELINE_STATE_STREAM3_PARSE_HELPER() noexcept
4092 PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;
4095 static_cast<D3D12_DEPTH_STENCIL_DESC2&
>(PipelineStream.DepthStencilState).DepthEnable =
false;
4099 void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags)
override { PipelineStream.Flags = Flags; }
4100 void NodeMaskCb(UINT NodeMask)
override { PipelineStream.NodeMask = NodeMask; }
4101 void RootSignatureCb(ID3D12RootSignature* pRootSignature)
override { PipelineStream.pRootSignature = pRootSignature; }
4102 void InputLayoutCb(
const D3D12_INPUT_LAYOUT_DESC& InputLayout)
override { PipelineStream.InputLayout = InputLayout; }
4103 void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue)
override { PipelineStream.IBStripCutValue = IBStripCutValue; }
4104 void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType)
override { PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType; }
4105 void VSCb(
const D3D12_SHADER_BYTECODE& VS)
override { PipelineStream.VS = VS; }
4106 void GSCb(
const D3D12_SHADER_BYTECODE& GS)
override { PipelineStream.GS = GS; }
4107 void StreamOutputCb(
const D3D12_STREAM_OUTPUT_DESC& StreamOutput)
override { PipelineStream.StreamOutput =
StreamOutput; }
4108 void HSCb(
const D3D12_SHADER_BYTECODE& HS)
override { PipelineStream.HS = HS; }
4109 void DSCb(
const D3D12_SHADER_BYTECODE& DS)
override { PipelineStream.DS = DS; }
4110 void PSCb(
const D3D12_SHADER_BYTECODE& PS)
override { PipelineStream.PS = PS; }
4111 void CSCb(
const D3D12_SHADER_BYTECODE& CS)
override { PipelineStream.CS = CS; }
4112 void ASCb(
const D3D12_SHADER_BYTECODE& AS)
override { PipelineStream.AS = AS; }
4113 void MSCb(
const D3D12_SHADER_BYTECODE& MS)
override { PipelineStream.MS = MS; }
4114 void BlendStateCb(
const D3D12_BLEND_DESC& BlendState)
override { PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState); }
4115 void DepthStencilStateCb(
const D3D12_DEPTH_STENCIL_DESC& DepthStencilState)
override
4117 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);
4120 void DepthStencilState1Cb(
const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState)
override
4122 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);
4125 void DepthStencilState2Cb(
const D3D12_DEPTH_STENCIL_DESC2& DepthStencilState)
override
4127 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);
4130 void DSVFormatCb(DXGI_FORMAT DSVFormat)
override
4132 PipelineStream.DSVFormat = DSVFormat;
4133 if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN)
4136 static_cast<D3D12_DEPTH_STENCIL_DESC2&
>(PipelineStream.DepthStencilState).DepthEnable =
true;
4139 void RasterizerStateCb(
const D3D12_RASTERIZER_DESC& RasterizerState)
override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC(RasterizerState); }
4140 void RTVFormatsCb(
const D3D12_RT_FORMAT_ARRAY& RTVFormats)
override { PipelineStream.RTVFormats = RTVFormats; }
4141 void SampleDescCb(
const DXGI_SAMPLE_DESC& SampleDesc)
override { PipelineStream.SampleDesc = SampleDesc; }
4142 void SampleMaskCb(UINT SampleMask)
override { PipelineStream.SampleMask = SampleMask; }
4143 void ViewInstancingCb(
const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc)
override { PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc); }
4144 void CachedPSOCb(
const D3D12_CACHED_PIPELINE_STATE& CachedPSO)
override { PipelineStream.CachedPSO = CachedPSO; }
4151#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)
4152struct CD3DX12_PIPELINE_STATE_STREAM4_PARSE_HELPER :
public ID3DX12PipelineParserCallbacks
4154 CD3DX12_PIPELINE_STATE_STREAM4 PipelineStream;
4155 CD3DX12_PIPELINE_STATE_STREAM4_PARSE_HELPER() noexcept
4159 PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;
4162 static_cast<D3D12_DEPTH_STENCIL_DESC2&
>(PipelineStream.DepthStencilState).DepthEnable =
false;
4166 void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags)
override { PipelineStream.Flags = Flags; }
4167 void NodeMaskCb(UINT NodeMask)
override { PipelineStream.NodeMask = NodeMask; }
4168 void RootSignatureCb(ID3D12RootSignature* pRootSignature)
override { PipelineStream.pRootSignature = pRootSignature; }
4169 void InputLayoutCb(
const D3D12_INPUT_LAYOUT_DESC& InputLayout)
override { PipelineStream.InputLayout = InputLayout; }
4170 void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue)
override { PipelineStream.IBStripCutValue = IBStripCutValue; }
4171 void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType)
override { PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType; }
4172 void VSCb(
const D3D12_SHADER_BYTECODE& VS)
override { PipelineStream.VS = VS; }
4173 void GSCb(
const D3D12_SHADER_BYTECODE& GS)
override { PipelineStream.GS = GS; }
4174 void StreamOutputCb(
const D3D12_STREAM_OUTPUT_DESC& StreamOutput)
override { PipelineStream.StreamOutput =
StreamOutput; }
4175 void HSCb(
const D3D12_SHADER_BYTECODE& HS)
override { PipelineStream.HS = HS; }
4176 void DSCb(
const D3D12_SHADER_BYTECODE& DS)
override { PipelineStream.DS = DS; }
4177 void PSCb(
const D3D12_SHADER_BYTECODE& PS)
override { PipelineStream.PS = PS; }
4178 void CSCb(
const D3D12_SHADER_BYTECODE& CS)
override { PipelineStream.CS = CS; }
4179 void ASCb(
const D3D12_SHADER_BYTECODE& AS)
override { PipelineStream.AS = AS; }
4180 void MSCb(
const D3D12_SHADER_BYTECODE& MS)
override { PipelineStream.MS = MS; }
4181 void BlendStateCb(
const D3D12_BLEND_DESC& BlendState)
override { PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState); }
4182 void DepthStencilStateCb(
const D3D12_DEPTH_STENCIL_DESC& DepthStencilState)
override
4184 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);
4187 void DepthStencilState1Cb(
const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState)
override
4189 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);
4192 void DepthStencilState2Cb(
const D3D12_DEPTH_STENCIL_DESC2& DepthStencilState)
override
4194 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);
4197 void DSVFormatCb(DXGI_FORMAT DSVFormat)
override
4199 PipelineStream.DSVFormat = DSVFormat;
4200 if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN)
4203 static_cast<D3D12_DEPTH_STENCIL_DESC2&
>(PipelineStream.DepthStencilState).DepthEnable =
true;
4206 void RasterizerStateCb(
const D3D12_RASTERIZER_DESC& RasterizerState)
override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC1(RasterizerState); }
4207 void RasterizerState1Cb(
const D3D12_RASTERIZER_DESC1& RasterizerState)
override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC1(RasterizerState); }
4208 void RTVFormatsCb(
const D3D12_RT_FORMAT_ARRAY& RTVFormats)
override { PipelineStream.RTVFormats = RTVFormats; }
4209 void SampleDescCb(
const DXGI_SAMPLE_DESC& SampleDesc)
override { PipelineStream.SampleDesc = SampleDesc; }
4210 void SampleMaskCb(UINT SampleMask)
override { PipelineStream.SampleMask = SampleMask; }
4211 void ViewInstancingCb(
const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc)
override { PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc); }
4212 void CachedPSOCb(
const D3D12_CACHED_PIPELINE_STATE& CachedPSO)
override { PipelineStream.CachedPSO = CachedPSO; }
4219#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 613)
4221struct CD3DX12_PIPELINE_STATE_STREAM5_PARSE_HELPER :
public ID3DX12PipelineParserCallbacks
4223 CD3DX12_PIPELINE_STATE_STREAM5 PipelineStream;
4224 CD3DX12_PIPELINE_STATE_STREAM5_PARSE_HELPER() noexcept
4230 PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;
4233 static_cast<D3D12_DEPTH_STENCIL_DESC2&
>(PipelineStream.DepthStencilState).DepthEnable =
false;
4237 void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags)
override { PipelineStream.Flags = Flags; }
4238 void NodeMaskCb(UINT NodeMask)
override { PipelineStream.NodeMask = NodeMask; }
4239 void RootSignatureCb(ID3D12RootSignature* pRootSignature)
override { PipelineStream.pRootSignature = pRootSignature; }
4240 void InputLayoutCb(
const D3D12_INPUT_LAYOUT_DESC& InputLayout)
override { PipelineStream.InputLayout = InputLayout; }
4241 void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue)
override { PipelineStream.IBStripCutValue = IBStripCutValue; }
4242 void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType)
override
4244 PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;
4245 SeenTopology =
true;
4247 void VSCb(
const D3D12_SHADER_BYTECODE& VS)
override { PipelineStream.VS = VS; }
4248 void GSCb(
const D3D12_SHADER_BYTECODE& GS)
override { PipelineStream.GS = GS; }
4249 void StreamOutputCb(
const D3D12_STREAM_OUTPUT_DESC& StreamOutput)
override { PipelineStream.StreamOutput =
StreamOutput; }
4250 void HSCb(
const D3D12_SHADER_BYTECODE& HS)
override { PipelineStream.HS = HS; }
4251 void DSCb(
const D3D12_SHADER_BYTECODE& DS)
override { PipelineStream.DS = DS; }
4252 void PSCb(
const D3D12_SHADER_BYTECODE& PS)
override { PipelineStream.PS = PS; }
4253 void CSCb(
const D3D12_SHADER_BYTECODE& CS)
override { PipelineStream.CS = CS; }
4254 void ASCb(
const D3D12_SHADER_BYTECODE& AS)
override { PipelineStream.AS = AS; }
4255 void MSCb(
const D3D12_SHADER_BYTECODE& MS)
override { PipelineStream.MS = MS; SeenMS =
true; }
4256 void BlendStateCb(
const D3D12_BLEND_DESC& BlendState)
override { PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState); }
4257 void DepthStencilStateCb(
const D3D12_DEPTH_STENCIL_DESC& DepthStencilState)
override
4259 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);
4262 void DepthStencilState1Cb(
const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState)
override
4264 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);
4267 void DepthStencilState2Cb(
const D3D12_DEPTH_STENCIL_DESC2& DepthStencilState)
override
4269 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);
4272 void DSVFormatCb(DXGI_FORMAT DSVFormat)
override {PipelineStream.DSVFormat = DSVFormat;}
4273 void RasterizerStateCb(
const D3D12_RASTERIZER_DESC& RasterizerState)
override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); }
4274 void RasterizerState1Cb(
const D3D12_RASTERIZER_DESC1& RasterizerState)
override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); }
4275 void RasterizerState2Cb(
const D3D12_RASTERIZER_DESC2& RasterizerState)
override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); }
4276 void RTVFormatsCb(
const D3D12_RT_FORMAT_ARRAY& RTVFormats)
override { PipelineStream.RTVFormats = RTVFormats; }
4277 void SampleDescCb(
const DXGI_SAMPLE_DESC& SampleDesc)
override { PipelineStream.SampleDesc = SampleDesc; }
4278 void SampleMaskCb(UINT SampleMask)
override { PipelineStream.SampleMask = SampleMask; }
4279 void ViewInstancingCb(
const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc)
override { PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc); }
4280 void CachedPSOCb(
const D3D12_CACHED_PIPELINE_STATE& CachedPSO)
override { PipelineStream.CachedPSO = CachedPSO; }
4281 void FinalizeCb()
override
4283 if (!SeenDSS && PipelineStream.DSVFormat != DXGI_FORMAT_UNKNOWN)
4286 static_cast<D3D12_DEPTH_STENCIL_DESC2&
>(PipelineStream.DepthStencilState).DepthEnable =
true;
4288 if (!SeenTopology && SeenMS)
4290 PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED;
4299#elif defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610)
4300struct CD3DX12_PIPELINE_STATE_STREAM5_PARSE_HELPER :
public ID3DX12PipelineParserCallbacks
4302 CD3DX12_PIPELINE_STATE_STREAM5 PipelineStream;
4303 CD3DX12_PIPELINE_STATE_STREAM5_PARSE_HELPER() noexcept
4307 PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;
4310 static_cast<D3D12_DEPTH_STENCIL_DESC2&
>(PipelineStream.DepthStencilState).DepthEnable =
false;
4314 void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags)
override { PipelineStream.Flags = Flags; }
4315 void NodeMaskCb(UINT NodeMask)
override { PipelineStream.NodeMask = NodeMask; }
4316 void RootSignatureCb(ID3D12RootSignature* pRootSignature)
override { PipelineStream.pRootSignature = pRootSignature; }
4317 void InputLayoutCb(
const D3D12_INPUT_LAYOUT_DESC& InputLayout)
override { PipelineStream.InputLayout = InputLayout; }
4318 void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue)
override { PipelineStream.IBStripCutValue = IBStripCutValue; }
4319 void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType)
override { PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType; }
4320 void VSCb(
const D3D12_SHADER_BYTECODE& VS)
override { PipelineStream.VS = VS; }
4321 void GSCb(
const D3D12_SHADER_BYTECODE& GS)
override { PipelineStream.GS = GS; }
4322 void StreamOutputCb(
const D3D12_STREAM_OUTPUT_DESC& StreamOutput)
override { PipelineStream.StreamOutput =
StreamOutput; }
4323 void HSCb(
const D3D12_SHADER_BYTECODE& HS)
override { PipelineStream.HS = HS; }
4324 void DSCb(
const D3D12_SHADER_BYTECODE& DS)
override { PipelineStream.DS = DS; }
4325 void PSCb(
const D3D12_SHADER_BYTECODE& PS)
override { PipelineStream.PS = PS; }
4326 void CSCb(
const D3D12_SHADER_BYTECODE& CS)
override { PipelineStream.CS = CS; }
4327 void ASCb(
const D3D12_SHADER_BYTECODE& AS)
override { PipelineStream.AS = AS; }
4328 void MSCb(
const D3D12_SHADER_BYTECODE& MS)
override { PipelineStream.MS = MS; }
4329 void BlendStateCb(
const D3D12_BLEND_DESC& BlendState)
override { PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState); }
4330 void DepthStencilStateCb(
const D3D12_DEPTH_STENCIL_DESC& DepthStencilState)
override
4332 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);
4335 void DepthStencilState1Cb(
const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState)
override
4337 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);
4340 void DepthStencilState2Cb(
const D3D12_DEPTH_STENCIL_DESC2& DepthStencilState)
override
4342 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);
4345 void DSVFormatCb(DXGI_FORMAT DSVFormat)
override
4347 PipelineStream.DSVFormat = DSVFormat;
4348 if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN)
4351 static_cast<D3D12_DEPTH_STENCIL_DESC2&
>(PipelineStream.DepthStencilState).DepthEnable =
true;
4354 void RasterizerStateCb(
const D3D12_RASTERIZER_DESC& RasterizerState)
override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); }
4355 void RasterizerState1Cb(
const D3D12_RASTERIZER_DESC1& RasterizerState)
override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); }
4356 void RasterizerState2Cb(
const D3D12_RASTERIZER_DESC2& RasterizerState)
override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); }
4357 void RTVFormatsCb(
const D3D12_RT_FORMAT_ARRAY& RTVFormats)
override { PipelineStream.RTVFormats = RTVFormats; }
4358 void SampleDescCb(
const DXGI_SAMPLE_DESC& SampleDesc)
override { PipelineStream.SampleDesc = SampleDesc; }
4359 void SampleMaskCb(UINT SampleMask)
override { PipelineStream.SampleMask = SampleMask; }
4360 void ViewInstancingCb(
const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc)
override { PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc); }
4361 void CachedPSOCb(
const D3D12_CACHED_PIPELINE_STATE& CachedPSO)
override { PipelineStream.CachedPSO = CachedPSO; }
4368#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 618)
4369struct CD3DX12_PIPELINE_STATE_STREAM6_PARSE_HELPER :
public ID3DX12PipelineParserCallbacks
4371 CD3DX12_PIPELINE_STATE_STREAM6 PipelineStream;
4372 CD3DX12_PIPELINE_STATE_STREAM6_PARSE_HELPER() noexcept
4378 PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;
4381 static_cast<D3D12_DEPTH_STENCIL_DESC2&
>(PipelineStream.DepthStencilState).DepthEnable =
false;
4385 void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags)
override { PipelineStream.Flags = Flags; }
4386 void NodeMaskCb(UINT NodeMask)
override { PipelineStream.NodeMask = NodeMask; }
4387 void RootSignatureCb(ID3D12RootSignature* pRootSignature)
override { PipelineStream.pRootSignature = pRootSignature; }
4388 void InputLayoutCb(
const D3D12_INPUT_LAYOUT_DESC& InputLayout)
override { PipelineStream.InputLayout = InputLayout; }
4389 void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue)
override { PipelineStream.IBStripCutValue = IBStripCutValue; }
4390 void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType)
override
4392 PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;
4393 SeenTopology =
true;
4395 void VSCb(
const D3D12_SHADER_BYTECODE& VS)
override { PipelineStream.VS = VS; }
4396 void GSCb(
const D3D12_SHADER_BYTECODE& GS)
override { PipelineStream.GS = GS; }
4397 void StreamOutputCb(
const D3D12_STREAM_OUTPUT_DESC& StreamOutput)
override { PipelineStream.StreamOutput =
StreamOutput; }
4398 void HSCb(
const D3D12_SHADER_BYTECODE& HS)
override { PipelineStream.HS = HS; }
4399 void DSCb(
const D3D12_SHADER_BYTECODE& DS)
override { PipelineStream.DS = DS; }
4400 void PSCb(
const D3D12_SHADER_BYTECODE& PS)
override { PipelineStream.PS = PS; }
4401 void CSCb(
const D3D12_SHADER_BYTECODE& CS)
override { PipelineStream.CS = CS; }
4402 void ASCb(
const D3D12_SHADER_BYTECODE& AS)
override { PipelineStream.AS = AS; }
4403 void MSCb(
const D3D12_SHADER_BYTECODE& MS)
override { PipelineStream.MS = MS; SeenMS =
true; }
4404 void BlendStateCb(
const D3D12_BLEND_DESC& BlendState)
override { PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState); }
4405 void DepthStencilStateCb(
const D3D12_DEPTH_STENCIL_DESC& DepthStencilState)
override
4407 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);
4410 void DepthStencilState1Cb(
const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState)
override
4412 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);
4415 void DepthStencilState2Cb(
const D3D12_DEPTH_STENCIL_DESC2& DepthStencilState)
override
4417 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState);
4420 void DSVFormatCb(DXGI_FORMAT DSVFormat)
override { PipelineStream.DSVFormat = DSVFormat; }
4421 void RasterizerStateCb(
const D3D12_RASTERIZER_DESC& RasterizerState)
override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); }
4422 void RasterizerState1Cb(
const D3D12_RASTERIZER_DESC1& RasterizerState)
override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); }
4423 void RasterizerState2Cb(
const D3D12_RASTERIZER_DESC2& RasterizerState)
override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); }
4424 void RTVFormatsCb(
const D3D12_RT_FORMAT_ARRAY& RTVFormats)
override { PipelineStream.RTVFormats = RTVFormats; }
4425 void SampleDescCb(
const DXGI_SAMPLE_DESC& SampleDesc)
override { PipelineStream.SampleDesc = SampleDesc; }
4426 void SampleMaskCb(UINT SampleMask)
override { PipelineStream.SampleMask = SampleMask; }
4427 void ViewInstancingCb(
const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc)
override { PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc); }
4428 void CachedPSOCb(
const D3D12_CACHED_PIPELINE_STATE& CachedPSO)
override { PipelineStream.CachedPSO = CachedPSO; }
4429 void FinalizeCb()
override
4431 if (!SeenDSS && PipelineStream.DSVFormat != DXGI_FORMAT_UNKNOWN)
4434 static_cast<D3D12_DEPTH_STENCIL_DESC2&
>(PipelineStream.DepthStencilState).DepthEnable =
true;
4436 if (!SeenTopology && SeenMS)
4438 PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED;
4441 void SerializedRootSignatureCb(
const D3D12_SERIALIZED_ROOT_SIGNATURE_DESC& SerializedRootSignature)
override { PipelineStream.SerializedRootSignature = CD3DX12_SERIALIZED_ROOT_SIGNATURE_DESC(SerializedRootSignature); }
4450struct CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER :
public ID3DX12PipelineParserCallbacks
4452 CD3DX12_PIPELINE_STATE_STREAM1 PipelineStream;
4453 CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER() noexcept
4457 PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;
4460 static_cast<D3D12_DEPTH_STENCIL_DESC1&
>(PipelineStream.DepthStencilState).DepthEnable =
false;
4464 void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags)
override {PipelineStream.Flags = Flags;}
4465 void NodeMaskCb(UINT NodeMask)
override {PipelineStream.NodeMask = NodeMask;}
4466 void RootSignatureCb(ID3D12RootSignature* pRootSignature)
override {PipelineStream.pRootSignature = pRootSignature;}
4467 void InputLayoutCb(
const D3D12_INPUT_LAYOUT_DESC& InputLayout)
override {PipelineStream.InputLayout = InputLayout;}
4468 void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue)
override {PipelineStream.IBStripCutValue = IBStripCutValue;}
4469 void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType)
override {PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;}
4470 void VSCb(
const D3D12_SHADER_BYTECODE& VS)
override {PipelineStream.VS = VS;}
4471 void GSCb(
const D3D12_SHADER_BYTECODE& GS)
override {PipelineStream.GS = GS;}
4472 void StreamOutputCb(
const D3D12_STREAM_OUTPUT_DESC& StreamOutput)
override {PipelineStream.StreamOutput =
StreamOutput;}
4473 void HSCb(
const D3D12_SHADER_BYTECODE& HS)
override {PipelineStream.HS = HS;}
4474 void DSCb(
const D3D12_SHADER_BYTECODE& DS)
override {PipelineStream.DS = DS;}
4475 void PSCb(
const D3D12_SHADER_BYTECODE& PS)
override {PipelineStream.PS = PS;}
4476 void CSCb(
const D3D12_SHADER_BYTECODE& CS)
override {PipelineStream.CS = CS;}
4477 void BlendStateCb(
const D3D12_BLEND_DESC& BlendState)
override {PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState);}
4478 void DepthStencilStateCb(
const D3D12_DEPTH_STENCIL_DESC& DepthStencilState)
override
4480 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState);
4483 void DepthStencilState1Cb(
const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState)
override
4485 PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState);
4488 void DSVFormatCb(DXGI_FORMAT DSVFormat)
override
4490 PipelineStream.DSVFormat = DSVFormat;
4491 if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN)
4494 static_cast<D3D12_DEPTH_STENCIL_DESC1&
>(PipelineStream.DepthStencilState).DepthEnable =
true;
4497 void RasterizerStateCb(
const D3D12_RASTERIZER_DESC& RasterizerState)
override {PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC(RasterizerState);}
4498 void RTVFormatsCb(
const D3D12_RT_FORMAT_ARRAY& RTVFormats)
override {PipelineStream.RTVFormats = RTVFormats;}
4499 void SampleDescCb(
const DXGI_SAMPLE_DESC& SampleDesc)
override {PipelineStream.SampleDesc = SampleDesc;}
4500 void SampleMaskCb(UINT SampleMask)
override {PipelineStream.SampleMask = SampleMask;}
4501 void ViewInstancingCb(
const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc)
override {PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc);}
4502 void CachedPSOCb(
const D3D12_CACHED_PIPELINE_STATE& CachedPSO)
override {PipelineStream.CachedPSO = CachedPSO;}
4508inline D3D12_PIPELINE_STATE_SUBOBJECT_TYPE D3DX12GetBaseSubobjectType(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE SubobjectType)
noexcept
4510 switch (SubobjectType)
4512 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1:
4513 return D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL;
4514#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)
4515 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2:
4516 return D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL;
4518#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)
4519 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER1:
4520 return D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER;
4523 return SubobjectType;
4527inline HRESULT D3DX12ParsePipelineStream(
const D3D12_PIPELINE_STATE_STREAM_DESC& Desc, ID3DX12PipelineParserCallbacks* pCallbacks)
4529 if (pCallbacks ==
nullptr)
4531 return E_INVALIDARG;
4534 if (Desc.SizeInBytes == 0 || Desc.pPipelineStateSubobjectStream ==
nullptr)
4536 pCallbacks->ErrorBadInputParameter(1);
4537 return E_INVALIDARG;
4540 bool SubobjectSeen[D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID] = {};
4541 for (SIZE_T CurOffset = 0, SizeOfSubobject = 0; CurOffset < Desc.SizeInBytes; CurOffset += SizeOfSubobject)
4543 BYTE* pStream =
static_cast<BYTE*
>(Desc.pPipelineStateSubobjectStream)+CurOffset;
4544 auto SubobjectType = *
reinterpret_cast<D3D12_PIPELINE_STATE_SUBOBJECT_TYPE*
>(pStream);
4545 if (SubobjectType < 0 || SubobjectType >= D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID)
4547 pCallbacks->ErrorUnknownSubobject(SubobjectType);
4548 return E_INVALIDARG;
4550 if (SubobjectSeen[D3DX12GetBaseSubobjectType(SubobjectType)])
4552 pCallbacks->ErrorDuplicateSubobject(SubobjectType);
4553 return E_INVALIDARG;
4555 SubobjectSeen[SubobjectType] =
true;
4556 switch (SubobjectType)
4558 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE:
4559 pCallbacks->RootSignatureCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::pRootSignature)*
>(pStream));
4560 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::pRootSignature);
4562 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS:
4563 pCallbacks->VSCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::VS)*
>(pStream));
4564 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::VS);
4566 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS:
4567 pCallbacks->PSCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::PS)*
>(pStream));
4568 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::PS);
4570 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS:
4571 pCallbacks->DSCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::DS)*
>(pStream));
4572 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::DS);
4574 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS:
4575 pCallbacks->HSCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::HS)*
>(pStream));
4576 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::HS);
4578 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS:
4579 pCallbacks->GSCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::GS)*
>(pStream));
4580 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::GS);
4582 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS:
4583 pCallbacks->CSCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::CS)*
>(pStream));
4584 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::CS);
4586 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_AS:
4587 pCallbacks->ASCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM2::AS)*
>(pStream));
4588 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM2::AS);
4590 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MS:
4591 pCallbacks->MSCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM2::MS)*
>(pStream));
4592 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM2::MS);
4594 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT:
4595 pCallbacks->StreamOutputCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::StreamOutput)*
>(pStream));
4596 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::StreamOutput);
4598 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND:
4599 pCallbacks->BlendStateCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::BlendState)*
>(pStream));
4600 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::BlendState);
4602 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK:
4603 pCallbacks->SampleMaskCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::SampleMask)*
>(pStream));
4604 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleMask);
4606 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER:
4607 pCallbacks->RasterizerStateCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::RasterizerState)*
>(pStream));
4608 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::RasterizerState);
4610#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)
4611 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER1:
4612 pCallbacks->RasterizerState1Cb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM4::RasterizerState)*
>(pStream));
4613 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM4::RasterizerState);
4616#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610)
4617 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER2:
4618 pCallbacks->RasterizerState2Cb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM5::RasterizerState)*
>(pStream));
4619 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM5::RasterizerState);
4622 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL:
4623 pCallbacks->DepthStencilStateCb(*
reinterpret_cast<CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL*
>(pStream));
4624 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL);
4626 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1:
4627 pCallbacks->DepthStencilState1Cb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::DepthStencilState)*
>(pStream));
4628 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::DepthStencilState);
4630#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)
4631 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2:
4632 pCallbacks->DepthStencilState2Cb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM3::DepthStencilState)*
>(pStream));
4633 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM3::DepthStencilState);
4636 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT:
4637 pCallbacks->InputLayoutCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::InputLayout)*
>(pStream));
4638 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::InputLayout);
4640 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE:
4641 pCallbacks->IBStripCutValueCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::IBStripCutValue)*
>(pStream));
4642 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::IBStripCutValue);
4644 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY:
4645 pCallbacks->PrimitiveTopologyTypeCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::PrimitiveTopologyType)*
>(pStream));
4646 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::PrimitiveTopologyType);
4648 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS:
4649 pCallbacks->RTVFormatsCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::RTVFormats)*
>(pStream));
4650 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::RTVFormats);
4652 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT:
4653 pCallbacks->DSVFormatCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::DSVFormat)*
>(pStream));
4654 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::DSVFormat);
4656 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC:
4657 pCallbacks->SampleDescCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::SampleDesc)*
>(pStream));
4658 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleDesc);
4660 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK:
4661 pCallbacks->NodeMaskCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::NodeMask)*
>(pStream));
4662 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::NodeMask);
4664 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO:
4665 pCallbacks->CachedPSOCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::CachedPSO)*
>(pStream));
4666 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::CachedPSO);
4668 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS:
4669 pCallbacks->FlagsCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::Flags)*
>(pStream));
4670 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM::Flags);
4672 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING:
4673 pCallbacks->ViewInstancingCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM1::ViewInstancingDesc)*
>(pStream));
4674 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM1::ViewInstancingDesc);
4676#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 618)
4677 case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SERIALIZED_ROOT_SIGNATURE:
4678 pCallbacks->SerializedRootSignatureCb(*
reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM6::SerializedRootSignature)*
>(pStream));
4679 SizeOfSubobject =
sizeof(CD3DX12_PIPELINE_STATE_STREAM6::SerializedRootSignature);
4683 pCallbacks->ErrorUnknownSubobject(SubobjectType);
4684 return E_INVALIDARG;
4687#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 613)
4688 pCallbacks->FinalizeCb();
4695#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
4696inline bool operator==(
const D3D12_RENDER_PASS_BEGINNING_ACCESS_PRESERVE_LOCAL_PARAMETERS& a,
const D3D12_RENDER_PASS_ENDING_ACCESS_PRESERVE_LOCAL_PARAMETERS& b)
noexcept
4698 return ((a.AdditionalWidth == b.AdditionalWidth) && (a.AdditionalHeight == b.AdditionalHeight));
4701inline bool operator==(
const D3D12_RENDER_PASS_BEGINNING_ACCESS_PRESERVE_LOCAL_PARAMETERS& a,
const D3D12_RENDER_PASS_BEGINNING_ACCESS_PRESERVE_LOCAL_PARAMETERS& b)
noexcept
4703 return ((a.AdditionalWidth == b.AdditionalWidth) && (a.AdditionalHeight == b.AdditionalHeight));
4706inline bool operator==(
const D3D12_RENDER_PASS_ENDING_ACCESS_PRESERVE_LOCAL_PARAMETERS& a,
const D3D12_RENDER_PASS_ENDING_ACCESS_PRESERVE_LOCAL_PARAMETERS& b)
noexcept
4708 return ((a.AdditionalWidth == b.AdditionalWidth) && (a.AdditionalHeight == b.AdditionalHeight));
4712inline bool operator==(
const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &a,
const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &b)
noexcept
4714 return a.ClearValue == b.ClearValue;
4717inline bool operator==(
const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &a,
const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &b)
noexcept
4719 if (a.pSrcResource != b.pSrcResource)
return false;
4720 if (a.pDstResource != b.pDstResource)
return false;
4721 if (a.SubresourceCount != b.SubresourceCount)
return false;
4722 if (a.Format != b.Format)
return false;
4723 if (a.ResolveMode != b.ResolveMode)
return false;
4724 if (a.PreserveResolveSource != b.PreserveResolveSource)
return false;
4728inline bool operator==(
const D3D12_RENDER_PASS_BEGINNING_ACCESS &a,
const D3D12_RENDER_PASS_BEGINNING_ACCESS &b)
noexcept
4730 if (a.Type != b.Type)
return false;
4733 case D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR:
4734 if (!(a.Clear == b.Clear))
return false;
4736#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
4737 case D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_RENDER:
4738 case D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_SRV:
4739 case D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_UAV:
4740 if (!(a.PreserveLocal == b.PreserveLocal))
return false;
4749inline bool operator==(
const D3D12_RENDER_PASS_ENDING_ACCESS& a,
const D3D12_RENDER_PASS_ENDING_ACCESS& b)
noexcept
4751 if (a.Type != b.Type)
return false;
4754 case D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_RESOLVE:
4755 if (!(a.Resolve == b.Resolve))
return false;
4757#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
4758 case D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_RENDER:
4759 case D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_SRV:
4760 case D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_UAV:
4761 if (!(a.PreserveLocal == b.PreserveLocal))
return false;
4771inline bool operator==(
const D3D12_RENDER_PASS_RENDER_TARGET_DESC &a,
const D3D12_RENDER_PASS_RENDER_TARGET_DESC &b)
noexcept
4773 if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr)
return false;
4774 if (!(a.BeginningAccess == b.BeginningAccess))
return false;
4775 if (!(a.EndingAccess == b.EndingAccess))
return false;
4778inline bool operator==(
const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &a,
const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &b)
noexcept
4780 if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr)
return false;
4781 if (!(a.DepthBeginningAccess == b.DepthBeginningAccess))
return false;
4782 if (!(a.StencilBeginningAccess == b.StencilBeginningAccess))
return false;
4783 if (!(a.DepthEndingAccess == b.DepthEndingAccess))
return false;
4784 if (!(a.StencilEndingAccess == b.StencilEndingAccess))
return false;
4789#ifndef D3DX12_NO_STATE_OBJECT_HELPERS
4805#include <forward_list>
4810#ifndef D3DX12_USE_ATL
4811#include <wrl/client.h>
4812#define D3DX12_COM_PTR Microsoft::WRL::ComPtr
4813#define D3DX12_COM_PTR_GET(x) x.Get()
4814#define D3DX12_COM_PTR_ADDRESSOF(x) x.GetAddressOf()
4817#define D3DX12_COM_PTR ATL::CComPtr
4818#define D3DX12_COM_PTR_GET(x) x.p
4819#define D3DX12_COM_PTR_ADDRESSOF(x) &x.p
4823class CD3DX12_STATE_OBJECT_DESC
4826 CD3DX12_STATE_OBJECT_DESC() noexcept
4828 Init(D3D12_STATE_OBJECT_TYPE_COLLECTION);
4830 CD3DX12_STATE_OBJECT_DESC(D3D12_STATE_OBJECT_TYPE Type)
noexcept
4834 void SetStateObjectType(D3D12_STATE_OBJECT_TYPE Type)
noexcept { m_Desc.Type =
Type; }
4835 CD3DX12_STATE_OBJECT_DESC(
const CD3DX12_STATE_OBJECT_DESC& other) =
delete;
4836 CD3DX12_STATE_OBJECT_DESC& operator=(
const CD3DX12_STATE_OBJECT_DESC& other) =
delete;
4837 CD3DX12_STATE_OBJECT_DESC(CD3DX12_STATE_OBJECT_DESC&& other) =
default;
4838 CD3DX12_STATE_OBJECT_DESC& operator=(CD3DX12_STATE_OBJECT_DESC&& other) =
default;
4839 operator const D3D12_STATE_OBJECT_DESC& ()
4841#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612)
4842 m_RepointedSubobjectVectors.clear();
4843 m_RepointedPrograms.clear();
4845 m_RepointedAssociations.clear();
4846 m_SubobjectArray.clear();
4847 m_SubobjectArray.reserve(m_Desc.NumSubobjects);
4850 for (
auto Iter = m_SubobjectList.begin();
4851 Iter != m_SubobjectList.end(); Iter++)
4853 m_SubobjectArray.push_back(*Iter);
4855 Iter->pSubobjectArrayLocation = &m_SubobjectArray.back();
4859 for (UINT i = 0; i < m_Desc.NumSubobjects; i++)
4861 if (m_SubobjectArray[i].Type == D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION)
4863 auto pOriginalSubobjectAssociation =
4864 static_cast<const D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION*
>(m_SubobjectArray[i].pDesc);
4865 D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION Repointed = *pOriginalSubobjectAssociation;
4867 static_cast<const SUBOBJECT_WRAPPER*
>(pOriginalSubobjectAssociation->pSubobjectToAssociate);
4868 Repointed.pSubobjectToAssociate = pWrapper->pSubobjectArrayLocation;
4869 m_RepointedAssociations.push_back(Repointed);
4870 m_SubobjectArray[i].pDesc = &m_RepointedAssociations.back();
4872#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612)
4873 else if (m_SubobjectArray[i].Type == D3D12_STATE_SUBOBJECT_TYPE_GENERIC_PROGRAM)
4875 auto originalGenericProgramDesc =
4876 static_cast<const D3D12_GENERIC_PROGRAM_DESC*
>(m_SubobjectArray[i].pDesc);
4877 D3D12_GENERIC_PROGRAM_DESC Repointed = *originalGenericProgramDesc;
4878 if (originalGenericProgramDesc->NumSubobjects > 0)
4880 m_RepointedSubobjectVectors.emplace_back(std::vector<const D3D12_STATE_SUBOBJECT*>());
4881 std::vector<D3D12_STATE_SUBOBJECT const*>& repointedGenericProgramSubobjects = m_RepointedSubobjectVectors.back();
4882 repointedGenericProgramSubobjects.resize(originalGenericProgramDesc->NumSubobjects);
4883 for (UINT s = 0; s < originalGenericProgramDesc->NumSubobjects; s++)
4886 static_cast<const SUBOBJECT_WRAPPER*
>(originalGenericProgramDesc->ppSubobjects[s]);
4887 repointedGenericProgramSubobjects[s] = pWrapper->pSubobjectArrayLocation;
4890 Repointed.ppSubobjects = &repointedGenericProgramSubobjects[0];
4892 m_RepointedPrograms.push_back(Repointed);
4893 m_SubobjectArray[i].pDesc = &m_RepointedPrograms.back();
4898 m_Desc.pSubobjects = m_Desc.NumSubobjects ? &m_SubobjectArray[0] :
nullptr;
4901 operator const D3D12_STATE_OBJECT_DESC* ()
4904 return &
static_cast<const D3D12_STATE_OBJECT_DESC&
>(*this);
4932 template<
typename T>
4933 T* CreateSubobject()
4935 T* pSubobject =
new T(*
this);
4936 m_OwnedSubobjectHelpers.emplace_back(pSubobject);
4940 template<
typename T,
typename U>
4941 T* CreateSubobject(U&& arg)
4943 T* pSubobject =
new T(std::forward<U>(arg), *
this);
4944 m_OwnedSubobjectHelpers.emplace_back(pSubobject);
4949 D3D12_STATE_SUBOBJECT* TrackSubobject(D3D12_STATE_SUBOBJECT_TYPE Type,
void* pDesc)
4951 SUBOBJECT_WRAPPER Subobject;
4952 Subobject.pSubobjectArrayLocation =
nullptr;
4953 Subobject.Type =
Type;
4954 Subobject.pDesc = pDesc;
4955 m_SubobjectList.push_back(Subobject);
4956 m_Desc.NumSubobjects++;
4957 return &m_SubobjectList.back();
4959 void Init(D3D12_STATE_OBJECT_TYPE Type)
noexcept
4961 SetStateObjectType(Type);
4962 m_Desc.pSubobjects =
nullptr;
4963 m_Desc.NumSubobjects = 0;
4964 m_SubobjectList.clear();
4965 m_SubobjectArray.clear();
4966 m_RepointedAssociations.clear();
4967#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612)
4968 m_RepointedSubobjectVectors.clear();
4969 m_RepointedPrograms.clear();
4972 typedef struct SUBOBJECT_WRAPPER :
public D3D12_STATE_SUBOBJECT
4974 D3D12_STATE_SUBOBJECT* pSubobjectArrayLocation;
4976 } SUBOBJECT_WRAPPER;
4977 D3D12_STATE_OBJECT_DESC m_Desc;
4978 std::list<SUBOBJECT_WRAPPER> m_SubobjectList;
4980 std::vector<D3D12_STATE_SUBOBJECT> m_SubobjectArray;
4982 std::list<D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION>
4983 m_RepointedAssociations;
4986#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612)
4987 std::list<std::vector<D3D12_STATE_SUBOBJECT const*>>
4988 m_RepointedSubobjectVectors;
4989 std::list<D3D12_GENERIC_PROGRAM_DESC>
4990 m_RepointedPrograms;
4993 template<
typename CStr,
typename StdStr>
4994 class StringContainer
4997 CStr LocalCopy(CStr
string,
bool bSingleString =
false)
5004 m_Strings.push_back(
string);
5008 m_Strings.push_back(
string);
5010 return m_Strings.back().c_str();
5017 void clear() noexcept { m_Strings.clear(); }
5019 std::list<StdStr> m_Strings;
5023 class SUBOBJECT_HELPER_BASE
5026 SUBOBJECT_HELPER_BASE() noexcept { Init(); }
5027 virtual ~SUBOBJECT_HELPER_BASE() =
default;
5028 virtual D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept = 0;
5029 SUBOBJECT_HELPER_BASE(const SUBOBJECT_HELPER_BASE& other) = delete;
5030 SUBOBJECT_HELPER_BASE& operator=(const SUBOBJECT_HELPER_BASE& other) = delete;
5031 SUBOBJECT_HELPER_BASE(SUBOBJECT_HELPER_BASE&& other) = default;
5032 SUBOBJECT_HELPER_BASE& operator=(SUBOBJECT_HELPER_BASE&& other) = default;
5033 void AddToStateObject(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5035 m_pSubobject = ContainingStateObject.TrackSubobject(
Type(), Data());
5037 operator const D3D12_STATE_SUBOBJECT& ()
const noexcept {
return *m_pSubobject; }
5039 virtual void* Data() noexcept = 0;
5040 void Init() noexcept { m_pSubobject =
nullptr; }
5041 D3D12_STATE_SUBOBJECT* m_pSubobject;
5045 std::list<std::unique_ptr<SUBOBJECT_HELPER_BASE>> m_OwnedSubobjectHelpers;
5047 friend class CD3DX12_DXIL_LIBRARY_SUBOBJECT;
5048 friend class CD3DX12_EXISTING_COLLECTION_SUBOBJECT;
5049 friend class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT;
5050 friend class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION;
5051 friend class CD3DX12_HIT_GROUP_SUBOBJECT;
5052 friend class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT;
5053 friend class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT;
5054 friend class CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT;
5055 friend class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT;
5056 friend class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT;
5057 friend class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT;
5058 friend class CD3DX12_NODE_MASK_SUBOBJECT;
5061#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612)
5062 friend class CD3DX12_GENERIC_PROGRAM_SUBOBJECT;
5063 friend class CD3DX12_WORK_GRAPH_SUBOBJECT;
5064 friend class CD3DX12_STREAM_OUTPUT_SUBOBJECT;
5065 friend class CD3DX12_BLEND_SUBOBJECT;
5066 friend class CD3DX12_RASTERIZER_SUBOBJECT;
5067 friend class CD3DX12_DEPTH_STENCIL2_SUBOBJECT;
5068 friend class CD3DX12_INPUT_LAYOUT_SUBOBJECT;
5069 friend class CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT;
5070 friend class CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT;
5071 friend class CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT;
5072 friend class CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT;
5073 friend class CD3DX12_SAMPLE_DESC_SUBOBJECT;
5074 friend class CD3DX12_FLAGS_SUBOBJECT;
5075 friend class CD3DX12_VIEW_INSTANCING_SUBOBJECT;
5076 friend class CD3DX12_DEPTH_STENCIL_SUBOBJECT;
5077 friend class CD3DX12_DEPTH_STENCIL1_SUBOBJECT;
5078 friend class CD3DX12_SAMPLE_MASK_SUBOBJECT;
5079 friend class CD3DX12_NODE_OUTPUT_OVERRIDES;
5080 friend class CD3DX12_NODE_HELPER_BASE;
5081 friend class CD3DX12_SHADER_NODE;
5082 friend class CD3DX12_BROADCASTING_LAUNCH_NODE_OVERRIDES;
5083 friend class CD3DX12_COALESCING_LAUNCH_NODE_OVERRIDES;
5084 friend class CD3DX12_THREAD_LAUNCH_NODE_OVERRIDES;
5085 friend class CD3DX12_COMMON_COMPUTE_NODE_OVERRIDES;
5087#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 618)
5088 friend class CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT;
5089 friend class CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT;
5090 friend class CD3DX12_COMPILER_EXISTING_COLLECTION_SUBOBJECT;
5091 friend class CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT;
5096class CD3DX12_DXIL_LIBRARY_SUBOBJECT
5097 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
5100 CD3DX12_DXIL_LIBRARY_SUBOBJECT() noexcept
5104 CD3DX12_DXIL_LIBRARY_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5107 AddToStateObject(ContainingStateObject);
5109 CD3DX12_DXIL_LIBRARY_SUBOBJECT(
const CD3DX12_DXIL_LIBRARY_SUBOBJECT& other) =
delete;
5110 CD3DX12_DXIL_LIBRARY_SUBOBJECT& operator=(
const CD3DX12_DXIL_LIBRARY_SUBOBJECT& other) =
delete;
5111 CD3DX12_DXIL_LIBRARY_SUBOBJECT(CD3DX12_DXIL_LIBRARY_SUBOBJECT&& other) =
default;
5112 CD3DX12_DXIL_LIBRARY_SUBOBJECT& operator=(CD3DX12_DXIL_LIBRARY_SUBOBJECT&& other) =
default;
5113 void SetDXILLibrary(
const D3D12_SHADER_BYTECODE* pCode)
noexcept
5115 static const D3D12_SHADER_BYTECODE
Default = {};
5116 m_Desc.DXILLibrary = pCode ? *pCode :
Default;
5120 LPCWSTR ExportToRename =
nullptr,
5121 D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE)
5123 D3D12_EXPORT_DESC Export;
5124 Export.Name = m_Strings.LocalCopy(Name);
5125 Export.ExportToRename = m_Strings.LocalCopy(ExportToRename);
5126 Export.Flags = Flags;
5127 m_Exports.push_back(Export);
5128 m_Desc.pExports = &m_Exports[0];
5129 m_Desc.NumExports =
static_cast<UINT
>(m_Exports.size());
5132 void DefineExports(LPCWSTR(&Exports)[N])
5134 for (UINT i = 0; i < N; i++)
5136 DefineExport(Exports[i]);
5139 void DefineExports(
const LPCWSTR* Exports, UINT N)
5141 for (UINT i = 0; i < N; i++)
5143 DefineExport(Exports[i]);
5146 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
5148 return D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY;
5150 operator const D3D12_DXIL_LIBRARY_DESC&()
const noexcept {
return m_Desc; }
5152 void Init() noexcept
5154 SUBOBJECT_HELPER_BASE::Init();
5159 void* Data() noexcept
override {
return &m_Desc; }
5160 D3D12_DXIL_LIBRARY_DESC m_Desc;
5161 CD3DX12_STATE_OBJECT_DESC::StringContainer<LPCWSTR, std::wstring> m_Strings;
5162 std::vector<D3D12_EXPORT_DESC> m_Exports;
5166class CD3DX12_EXISTING_COLLECTION_SUBOBJECT
5167 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
5170 CD3DX12_EXISTING_COLLECTION_SUBOBJECT() noexcept
5174 CD3DX12_EXISTING_COLLECTION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5177 AddToStateObject(ContainingStateObject);
5179 CD3DX12_EXISTING_COLLECTION_SUBOBJECT(
const CD3DX12_EXISTING_COLLECTION_SUBOBJECT& other) =
delete;
5180 CD3DX12_EXISTING_COLLECTION_SUBOBJECT& operator=(
const CD3DX12_EXISTING_COLLECTION_SUBOBJECT& other) =
delete;
5181 CD3DX12_EXISTING_COLLECTION_SUBOBJECT(CD3DX12_EXISTING_COLLECTION_SUBOBJECT&& other) =
default;
5182 CD3DX12_EXISTING_COLLECTION_SUBOBJECT& operator=(CD3DX12_EXISTING_COLLECTION_SUBOBJECT&& other) =
default;
5183 void SetExistingCollection(ID3D12StateObject*pExistingCollection)
noexcept
5185 m_Desc.pExistingCollection = pExistingCollection;
5186 m_CollectionRef = pExistingCollection;
5190 LPCWSTR ExportToRename =
nullptr,
5191 D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE)
5193 D3D12_EXPORT_DESC Export;
5194 Export.Name = m_Strings.LocalCopy(Name);
5195 Export.ExportToRename = m_Strings.LocalCopy(ExportToRename);
5196 Export.Flags = Flags;
5197 m_Exports.push_back(Export);
5198 m_Desc.pExports = &m_Exports[0];
5199 m_Desc.NumExports =
static_cast<UINT
>(m_Exports.size());
5202 void DefineExports(LPCWSTR(&Exports)[N])
5204 for (UINT i = 0; i < N; i++)
5206 DefineExport(Exports[i]);
5209 void DefineExports(
const LPCWSTR* Exports, UINT N)
5211 for (UINT i = 0; i < N; i++)
5213 DefineExport(Exports[i]);
5216 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
5218 return D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION;
5220 operator const D3D12_EXISTING_COLLECTION_DESC&()
const noexcept {
return m_Desc; }
5222 void Init() noexcept
5224 SUBOBJECT_HELPER_BASE::Init();
5226 m_CollectionRef =
nullptr;
5230 void* Data() noexcept
override {
return &m_Desc; }
5231 D3D12_EXISTING_COLLECTION_DESC m_Desc;
5232 D3DX12_COM_PTR<ID3D12StateObject> m_CollectionRef;
5233 CD3DX12_STATE_OBJECT_DESC::StringContainer<LPCWSTR, std::wstring> m_Strings;
5234 std::vector<D3D12_EXPORT_DESC> m_Exports;
5238class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT
5239 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
5242 CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT() noexcept
5246 CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5249 AddToStateObject(ContainingStateObject);
5251 CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT(
const CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT& other) =
delete;
5252 CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT& operator=(
const CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT& other) =
delete;
5253 CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT(CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT&& other) =
default;
5254 CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT& operator=(CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT&& other) =
default;
5255 void SetSubobjectToAssociate(
const D3D12_STATE_SUBOBJECT& SubobjectToAssociate)
noexcept
5257 m_Desc.pSubobjectToAssociate = &SubobjectToAssociate;
5259 void AddExport(LPCWSTR Export)
5261 m_Desc.NumExports++;
5262 m_Exports.push_back(m_Strings.LocalCopy(Export));
5263 m_Desc.pExports = &m_Exports[0];
5266 void AddExports(LPCWSTR (&Exports)[N])
5268 for (UINT i = 0; i < N; i++)
5270 AddExport(Exports[i]);
5273 void AddExports(
const LPCWSTR* Exports, UINT N)
5275 for (UINT i = 0; i < N; i++)
5277 AddExport(Exports[i]);
5280 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
5282 return D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION;
5284 operator const D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION&()
const noexcept {
return m_Desc; }
5286 void Init() noexcept
5288 SUBOBJECT_HELPER_BASE::Init();
5293 void* Data() noexcept
override {
return &m_Desc; }
5294 D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc;
5295 CD3DX12_STATE_OBJECT_DESC::StringContainer<LPCWSTR, std::wstring> m_Strings;
5296 std::vector<LPCWSTR> m_Exports;
5300class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION
5301 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
5304 CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION() noexcept
5308 CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5311 AddToStateObject(ContainingStateObject);
5313 CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION(
const CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION& other) =
delete;
5314 CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION& operator=(
const CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION& other) =
delete;
5315 CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION(CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION&& other) =
default;
5316 CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION& operator=(CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION&& other) =
default;
5317 void SetSubobjectNameToAssociate(LPCWSTR SubobjectToAssociate)
5319 m_Desc.SubobjectToAssociate = m_SubobjectName.LocalCopy(SubobjectToAssociate,
true);
5321 void AddExport(LPCWSTR Export)
5323 m_Desc.NumExports++;
5324 m_Exports.push_back(m_Strings.LocalCopy(Export));
5325 m_Desc.pExports = &m_Exports[0];
5328 void AddExports(LPCWSTR (&Exports)[N])
5330 for (UINT i = 0; i < N; i++)
5332 AddExport(Exports[i]);
5335 void AddExports(
const LPCWSTR* Exports, UINT N)
5337 for (UINT i = 0; i < N; i++)
5339 AddExport(Exports[i]);
5342 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
5344 return D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION;
5346 operator const D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION&()
const noexcept {
return m_Desc; }
5348 void Init() noexcept
5350 SUBOBJECT_HELPER_BASE::Init();
5353 m_SubobjectName.clear();
5356 void* Data() noexcept
override {
return &m_Desc; }
5357 D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc;
5358 CD3DX12_STATE_OBJECT_DESC::StringContainer<LPCWSTR, std::wstring> m_Strings;
5359 CD3DX12_STATE_OBJECT_DESC::StringContainer<LPCWSTR, std::wstring> m_SubobjectName;
5360 std::vector<LPCWSTR> m_Exports;
5364class CD3DX12_HIT_GROUP_SUBOBJECT
5365 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
5368 CD3DX12_HIT_GROUP_SUBOBJECT() noexcept
5372 CD3DX12_HIT_GROUP_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5375 AddToStateObject(ContainingStateObject);
5377 CD3DX12_HIT_GROUP_SUBOBJECT(
const CD3DX12_HIT_GROUP_SUBOBJECT& other) =
delete;
5378 CD3DX12_HIT_GROUP_SUBOBJECT& operator=(
const CD3DX12_HIT_GROUP_SUBOBJECT& other) =
delete;
5379 CD3DX12_HIT_GROUP_SUBOBJECT(CD3DX12_HIT_GROUP_SUBOBJECT&& other) =
default;
5380 CD3DX12_HIT_GROUP_SUBOBJECT& operator=(CD3DX12_HIT_GROUP_SUBOBJECT&& other) =
default;
5381 void SetHitGroupExport(LPCWSTR exportName)
5383 m_Desc.HitGroupExport = m_Strings[0].LocalCopy(exportName,
true);
5385 void SetHitGroupType(D3D12_HIT_GROUP_TYPE Type)
noexcept { m_Desc.Type =
Type; }
5386 void SetAnyHitShaderImport(LPCWSTR importName)
5388 m_Desc.AnyHitShaderImport = m_Strings[1].LocalCopy(importName,
true);
5390 void SetClosestHitShaderImport(LPCWSTR importName)
5392 m_Desc.ClosestHitShaderImport = m_Strings[2].LocalCopy(importName,
true);
5394 void SetIntersectionShaderImport(LPCWSTR importName)
5396 m_Desc.IntersectionShaderImport = m_Strings[3].LocalCopy(importName,
true);
5398 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
5400 return D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP;
5402 operator const D3D12_HIT_GROUP_DESC&()
const noexcept {
return m_Desc; }
5404 void Init() noexcept
5406 SUBOBJECT_HELPER_BASE::Init();
5408 for (UINT i = 0; i < m_NumStrings; i++)
5410 m_Strings[i].clear();
5413 void* Data() noexcept
override {
return &m_Desc; }
5414 D3D12_HIT_GROUP_DESC m_Desc;
5415 static constexpr UINT m_NumStrings = 4;
5416 CD3DX12_STATE_OBJECT_DESC::StringContainer<LPCWSTR, std::wstring>
5417 m_Strings[m_NumStrings];
5421class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT
5422 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
5425 CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT() noexcept
5430 CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5434 AddToStateObject(ContainingStateObject);
5436 CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(
const D3D12_RAYTRACING_SHADER_CONFIG &desc)
5441 CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(
const D3D12_RAYTRACING_SHADER_CONFIG &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5445 AddToStateObject(ContainingStateObject);
5447 CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(
const CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT& other) =
delete;
5448 CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT& operator=(
const CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT& other) =
delete;
5449 CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT&& other) =
default;
5450 CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT& operator=(CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT&& other) =
default;
5451 void Config(UINT MaxPayloadSizeInBytes, UINT MaxAttributeSizeInBytes)
noexcept
5453 m_Desc.MaxPayloadSizeInBytes = MaxPayloadSizeInBytes;
5454 m_Desc.MaxAttributeSizeInBytes = MaxAttributeSizeInBytes;
5456 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
5458 return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG;
5460 operator const D3D12_RAYTRACING_SHADER_CONFIG&()
const noexcept {
return m_Desc; }
5461 operator D3D12_RAYTRACING_SHADER_CONFIG&()
noexcept {
return m_Desc; }
5463 void Init() noexcept
5465 SUBOBJECT_HELPER_BASE::Init();
5467 void* Data() noexcept
override {
return &m_Desc; }
5468 D3D12_RAYTRACING_SHADER_CONFIG m_Desc;
5472class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT
5473 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
5476 CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT() noexcept
5481 CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5485 AddToStateObject(ContainingStateObject);
5487 CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(
const D3D12_RAYTRACING_PIPELINE_CONFIG &desc)
5492 CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(
const D3D12_RAYTRACING_PIPELINE_CONFIG &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5496 AddToStateObject(ContainingStateObject);
5498 CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(
const CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT& other) =
delete;
5499 CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT& operator=(
const CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT& other) =
delete;
5500 CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT&& other) =
default;
5501 CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT& operator=(CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT&& other) =
default;
5502 void Config(UINT MaxTraceRecursionDepth)
noexcept
5504 m_Desc.MaxTraceRecursionDepth = MaxTraceRecursionDepth;
5506 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
5508 return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG;
5510 operator const D3D12_RAYTRACING_PIPELINE_CONFIG&()
const noexcept {
return m_Desc; }
5511 operator D3D12_RAYTRACING_PIPELINE_CONFIG&()
noexcept {
return m_Desc; }
5513 void Init() noexcept
5515 SUBOBJECT_HELPER_BASE::Init();
5517 void* Data() noexcept
override {
return &m_Desc; }
5518 D3D12_RAYTRACING_PIPELINE_CONFIG m_Desc;
5522class CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT
5523 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
5526 CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT() noexcept
5531 CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5535 AddToStateObject(ContainingStateObject);
5537 CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT(
const D3D12_RAYTRACING_PIPELINE_CONFIG1 &desc)
5542 CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT(
const D3D12_RAYTRACING_PIPELINE_CONFIG1 &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5546 AddToStateObject(ContainingStateObject);
5548 CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT(
const CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT& other) =
delete;
5549 CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT& operator=(
const CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT& other) =
delete;
5550 CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT(CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT&& other) =
default;
5551 CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT& operator=(CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT&& other) =
default;
5552 void Config(UINT MaxTraceRecursionDepth, D3D12_RAYTRACING_PIPELINE_FLAGS Flags)
noexcept
5554 m_Desc.MaxTraceRecursionDepth = MaxTraceRecursionDepth;
5555 m_Desc.Flags = Flags;
5557 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
5559 return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG1;
5561 operator const D3D12_RAYTRACING_PIPELINE_CONFIG1&()
const noexcept {
return m_Desc; }
5562 operator D3D12_RAYTRACING_PIPELINE_CONFIG1&()
noexcept {
return m_Desc; }
5564 void Init() noexcept
5566 SUBOBJECT_HELPER_BASE::Init();
5568 void* Data() noexcept
override {
return &m_Desc; }
5569 D3D12_RAYTRACING_PIPELINE_CONFIG1 m_Desc;
5573class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT
5574 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
5577 CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT() noexcept
5581 CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5584 AddToStateObject(ContainingStateObject);
5586 CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT(
const CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT& other) =
delete;
5587 CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT& operator=(
const CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT& other) =
delete;
5588 CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT&& other) =
default;
5589 CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT& operator=(CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT&& other) =
default;
5590 void SetRootSignature(ID3D12RootSignature* pRootSig)
noexcept
5592 m_pRootSig = pRootSig;
5594 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
5596 return D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE;
5598 operator ID3D12RootSignature*()
const noexcept {
return D3DX12_COM_PTR_GET(m_pRootSig); }
5600 void Init() noexcept
5602 SUBOBJECT_HELPER_BASE::Init();
5603 m_pRootSig =
nullptr;
5605 void* Data() noexcept
override {
return D3DX12_COM_PTR_ADDRESSOF(m_pRootSig); }
5606 D3DX12_COM_PTR<ID3D12RootSignature> m_pRootSig;
5611class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT
5612 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
5615 CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT() noexcept
5619 CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5622 AddToStateObject(ContainingStateObject);
5624 CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT(
const CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT& other) =
delete;
5625 CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT& operator=(
const CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT& other) =
delete;
5626 CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT&& other) =
default;
5627 CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT& operator=(CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT&& other) =
default;
5628 void SetRootSignature(ID3D12RootSignature* pRootSig)
noexcept
5630 m_pRootSig = pRootSig;
5632 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
5634 return D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE;
5636 operator ID3D12RootSignature*()
const noexcept {
return D3DX12_COM_PTR_GET(m_pRootSig); }
5638 void Init() noexcept
5640 SUBOBJECT_HELPER_BASE::Init();
5641 m_pRootSig =
nullptr;
5643 void* Data() noexcept
override {
return D3DX12_COM_PTR_ADDRESSOF(m_pRootSig); }
5644 D3DX12_COM_PTR<ID3D12RootSignature> m_pRootSig;
5647#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 618)
5649class CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT
5650 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
5653 CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT() noexcept
5658 CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5662 AddToStateObject(ContainingStateObject);
5664 CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT(
const CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT& other) =
delete;
5665 CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT& operator=(
const CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT& other) =
delete;
5666 CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT&& other) =
default;
5667 CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT& operator=(CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT&& other) =
default;
5668 void SetRootSignature(
const D3D12_SERIALIZED_ROOT_SIGNATURE_DESC* pDesc)
noexcept
5673 m_Desc.Desc.pSerializedBlob = pDesc->pSerializedBlob;
5674 m_Desc.Desc.SerializedBlobSizeInBytes = pDesc->SerializedBlobSizeInBytes;
5677 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
5679 return D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_SERIALIZED_ROOT_SIGNATURE;
5681 operator const D3D12_GLOBAL_SERIALIZED_ROOT_SIGNATURE&()
const noexcept {
return m_Desc; }
5682 operator D3D12_GLOBAL_SERIALIZED_ROOT_SIGNATURE&()
noexcept {
return m_Desc; }
5684 void Init() noexcept
5686 SUBOBJECT_HELPER_BASE::Init();
5689 void* Data() noexcept
override {
return &m_Desc; }
5690 D3D12_GLOBAL_SERIALIZED_ROOT_SIGNATURE m_Desc;
5694class CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT
5695 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
5698 CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT() noexcept
5703 CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5707 AddToStateObject(ContainingStateObject);
5709 CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT(
const CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT& other) =
delete;
5710 CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT& operator=(
const CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT& other) =
delete;
5711 CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT&& other) =
default;
5712 CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT& operator=(CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT&& other) =
default;
5713 void SetRootSignature(
const D3D12_SERIALIZED_ROOT_SIGNATURE_DESC* pDesc)
noexcept
5718 m_Desc.Desc.pSerializedBlob = pDesc->pSerializedBlob;
5719 m_Desc.Desc.SerializedBlobSizeInBytes = pDesc->SerializedBlobSizeInBytes;
5722 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
5724 return D3D12_STATE_SUBOBJECT_TYPE_LOCAL_SERIALIZED_ROOT_SIGNATURE;
5726 operator const D3D12_LOCAL_SERIALIZED_ROOT_SIGNATURE&()
const noexcept {
return m_Desc; }
5727 operator D3D12_LOCAL_SERIALIZED_ROOT_SIGNATURE&()
noexcept {
return m_Desc; }
5729 void Init() noexcept
5731 SUBOBJECT_HELPER_BASE::Init();
5734 void* Data() noexcept
override {
return &m_Desc; }
5735 D3D12_LOCAL_SERIALIZED_ROOT_SIGNATURE m_Desc;
5740class CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT
5741 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
5744 CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT() noexcept
5748 CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5751 AddToStateObject(ContainingStateObject);
5753 CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT(
const CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT& other) =
delete;
5754 CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT& operator=(
const CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT& other) =
delete;
5755 CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT(CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT&& other) =
default;
5756 CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT& operator=(CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT&& other) =
default;
5757 void SetExistingCollection(
const void* pKey, UINT KeySize)
noexcept
5759 const unsigned char* pKeyBytes =
static_cast<const unsigned char *
>(pKey);
5761 m_Key.insert(m_Key.begin(), pKeyBytes, pKeyBytes + KeySize);
5762 m_Desc.pKey = m_Key.data();
5763 m_Desc.KeySize = KeySize;
5767 LPCWSTR ExportToRename =
nullptr,
5768 D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE)
5770 D3D12_EXPORT_DESC Export;
5771 Export.Name = m_Strings.LocalCopy(Name);
5772 Export.ExportToRename = m_Strings.LocalCopy(ExportToRename);
5773 Export.Flags = Flags;
5774 m_Exports.push_back(Export);
5775 m_Desc.pExports = &m_Exports[0];
5776 m_Desc.NumExports =
static_cast<UINT
>(m_Exports.size());
5779 void DefineExports(LPCWSTR(&Exports)[N])
5781 for (UINT i = 0; i < N; i++)
5783 DefineExport(Exports[i]);
5786 void DefineExports(
const LPCWSTR* Exports, UINT N)
5788 for (UINT i = 0; i < N; i++)
5790 DefineExport(Exports[i]);
5793 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
5795 return D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION_BY_KEY;
5797 operator const D3D12_EXISTING_COLLECTION_BY_KEY_DESC&()
const noexcept {
return m_Desc; }
5799 void Init() noexcept
5801 SUBOBJECT_HELPER_BASE::Init();
5806 void* Data() noexcept
override {
return &m_Desc; }
5807 D3D12_EXISTING_COLLECTION_BY_KEY_DESC m_Desc;
5808 std::vector<unsigned char> m_Key;
5809 CD3DX12_STATE_OBJECT_DESC::StringContainer<LPCWSTR, std::wstring> m_Strings;
5810 std::vector<D3D12_EXPORT_DESC> m_Exports;
5816class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT
5817 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
5820 CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT() noexcept
5825 CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5829 AddToStateObject(ContainingStateObject);
5831 CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(
const D3D12_STATE_OBJECT_CONFIG &desc) noexcept
5836 CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(
const D3D12_STATE_OBJECT_CONFIG &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5840 AddToStateObject(ContainingStateObject);
5842 CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(
const CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT& other) =
delete;
5843 CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT& operator=(
const CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT& other) =
delete;
5844 CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT&& other) =
default;
5845 CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT& operator=(CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT&& other) =
default;
5846 void SetFlags(D3D12_STATE_OBJECT_FLAGS Flags)
noexcept
5848 m_Desc.Flags = Flags;
5850 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
5852 return D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG;
5854 operator const D3D12_STATE_OBJECT_CONFIG&()
const noexcept {
return m_Desc; }
5855 operator D3D12_STATE_OBJECT_CONFIG&()
noexcept {
return m_Desc; }
5857 void Init() noexcept
5859 SUBOBJECT_HELPER_BASE::Init();
5861 void* Data() noexcept
override {
return &m_Desc; }
5862 D3D12_STATE_OBJECT_CONFIG m_Desc;
5866class CD3DX12_NODE_MASK_SUBOBJECT
5867 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
5870 CD3DX12_NODE_MASK_SUBOBJECT() noexcept
5875 CD3DX12_NODE_MASK_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5879 AddToStateObject(ContainingStateObject);
5881 CD3DX12_NODE_MASK_SUBOBJECT(
const D3D12_NODE_MASK &desc) noexcept
5886 CD3DX12_NODE_MASK_SUBOBJECT(
const D3D12_NODE_MASK &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5890 AddToStateObject(ContainingStateObject);
5892 CD3DX12_NODE_MASK_SUBOBJECT(
const CD3DX12_NODE_MASK_SUBOBJECT& other) =
delete;
5893 CD3DX12_NODE_MASK_SUBOBJECT& operator=(
const CD3DX12_NODE_MASK_SUBOBJECT& other) =
delete;
5894 CD3DX12_NODE_MASK_SUBOBJECT(CD3DX12_NODE_MASK_SUBOBJECT&& other) =
default;
5895 CD3DX12_NODE_MASK_SUBOBJECT& operator=(CD3DX12_NODE_MASK_SUBOBJECT&& other) =
default;
5896 void SetNodeMask(UINT NodeMask)
noexcept
5898 m_Desc.NodeMask = NodeMask;
5900 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
5902 return D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK;
5904 operator const D3D12_NODE_MASK&()
const noexcept {
return m_Desc; }
5905 operator D3D12_NODE_MASK&()
noexcept {
return m_Desc; }
5907 void Init() noexcept
5909 SUBOBJECT_HELPER_BASE::Init();
5911 void* Data() noexcept
override {
return &m_Desc; }
5912 D3D12_NODE_MASK m_Desc;
5915#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612)
5917class CD3DX12_STREAM_OUTPUT_SUBOBJECT
5918 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
5921 CD3DX12_STREAM_OUTPUT_SUBOBJECT()
5925 CD3DX12_STREAM_OUTPUT_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
5928 AddToStateObject(ContainingStateObject);
5930 void AddSODeclEntry(
const D3D12_SO_DECLARATION_ENTRY &entry)
5932 m_soDecalEntries.emplace_back(D3D12_SO_DECLARATION_ENTRY{
5934 m_Strings.LocalCopy(entry.SemanticName),
5935 entry.SemanticIndex,
5936 entry.StartComponent,
5937 entry.ComponentCount,
5940 m_Desc.NumEntries++;
5942 m_Desc.pSODeclaration = &m_soDecalEntries[0];
5944 void SetSODeclEntries(
const D3D12_SO_DECLARATION_ENTRY* soDeclEntries, UINT numEntries)
5946 m_soDecalEntries.resize(numEntries);
5947 for (UINT i = 0; i < numEntries; i++)
5949 m_soDecalEntries[i] = D3D12_SO_DECLARATION_ENTRY{
5950 soDeclEntries[i].Stream,
5951 m_Strings.LocalCopy(soDeclEntries[i].SemanticName),
5952 soDeclEntries[i].SemanticIndex,
5953 soDeclEntries[i].StartComponent,
5954 soDeclEntries[i].ComponentCount,
5955 soDeclEntries[i].OutputSlot
5958 m_Desc.NumEntries = numEntries;
5962 m_Desc.pSODeclaration = &m_soDecalEntries[0];
5965 void SetBufferStrides(
const UINT* bufferStrides, UINT numStrides)
5967 for (UINT i = 0; i < numStrides; ++i)
5969 m_Strides[i] = bufferStrides[i];
5971 m_Desc.pBufferStrides = m_Strides;
5972 m_Desc.NumStrides = numStrides;
5974 void SetRasterizedStream(UINT rasterizedStream)
5976 m_Desc.RasterizedStream = rasterizedStream;
5978 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
5980 return D3D12_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT;
5982 operator const D3D12_STREAM_OUTPUT_DESC& ()
const noexcept {
return m_Desc; }
5987 SUBOBJECT_HELPER_BASE::Init();
5990 void* Data() noexcept
override {
return &m_Desc; }
5991 D3D12_STREAM_OUTPUT_DESC m_Desc;
5992 CD3DX12_STATE_OBJECT_DESC::StringContainer<LPCSTR, std::string> m_Strings;
5993 std::vector<D3D12_SO_DECLARATION_ENTRY> m_soDecalEntries;
5994 UINT m_Strides[D3D12_SO_STREAM_COUNT];
5998class CD3DX12_BLEND_SUBOBJECT
5999 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
6002 CD3DX12_BLEND_SUBOBJECT()
6003 : m_Desc(CD3DX12_BLEND_DESC(D3D12_DEFAULT))
6007 CD3DX12_BLEND_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6008 : m_Desc(CD3DX12_BLEND_DESC(D3D12_DEFAULT))
6011 AddToStateObject(ContainingStateObject);
6013 CD3DX12_BLEND_SUBOBJECT(
const D3D12_BLEND_DESC &desc)
6018 CD3DX12_BLEND_SUBOBJECT(
const D3D12_BLEND_DESC &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6022 AddToStateObject(ContainingStateObject);
6024 void SetAlphaToCoverageEnable(
bool alphaToCoverageEnable)
6026 m_Desc.AlphaToCoverageEnable = alphaToCoverageEnable;
6028 void SetIndependentBlendEnable(
bool independentBlendEnable)
6030 m_Desc.IndependentBlendEnable = independentBlendEnable;
6032 void SetRenderTarget(UINT renderTargetIndex,
const D3D12_RENDER_TARGET_BLEND_DESC& renderTargetBlendDesc)
6034 m_Desc.RenderTarget[renderTargetIndex].BlendEnable = renderTargetBlendDesc.BlendEnable;
6035 m_Desc.RenderTarget[renderTargetIndex].BlendOp = renderTargetBlendDesc.BlendOp;
6036 m_Desc.RenderTarget[renderTargetIndex].BlendOpAlpha = renderTargetBlendDesc.BlendOpAlpha;
6037 m_Desc.RenderTarget[renderTargetIndex].DestBlend = renderTargetBlendDesc.DestBlend;
6038 m_Desc.RenderTarget[renderTargetIndex].DestBlendAlpha = renderTargetBlendDesc.DestBlendAlpha;
6039 m_Desc.RenderTarget[renderTargetIndex].LogicOp = renderTargetBlendDesc.LogicOp;
6040 m_Desc.RenderTarget[renderTargetIndex].LogicOpEnable = renderTargetBlendDesc.LogicOpEnable;
6041 m_Desc.RenderTarget[renderTargetIndex].RenderTargetWriteMask = renderTargetBlendDesc.RenderTargetWriteMask;
6042 m_Desc.RenderTarget[renderTargetIndex].SrcBlend = renderTargetBlendDesc.SrcBlend;
6043 m_Desc.RenderTarget[renderTargetIndex].SrcBlendAlpha = renderTargetBlendDesc.SrcBlendAlpha;
6045 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
6047 return D3D12_STATE_SUBOBJECT_TYPE_BLEND;
6049 operator const D3D12_BLEND_DESC& ()
const noexcept {
return m_Desc; }
6050 operator D3D12_BLEND_DESC& ()
noexcept {
return m_Desc; }
6052 void Init() noexcept
6054 SUBOBJECT_HELPER_BASE::Init();
6056 void* Data() noexcept
override {
return &m_Desc; }
6057 CD3DX12_BLEND_DESC m_Desc;
6061class CD3DX12_RASTERIZER_SUBOBJECT
6062 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
6065 CD3DX12_RASTERIZER_SUBOBJECT()
6066 : m_Desc(CD3DX12_RASTERIZER_DESC2(D3D12_DEFAULT))
6070 CD3DX12_RASTERIZER_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6071 : m_Desc(CD3DX12_RASTERIZER_DESC2(D3D12_DEFAULT))
6074 AddToStateObject(ContainingStateObject);
6076 CD3DX12_RASTERIZER_SUBOBJECT(
const D3D12_RASTERIZER_DESC2 &desc)
6081 CD3DX12_RASTERIZER_SUBOBJECT(
const D3D12_RASTERIZER_DESC2 &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6085 AddToStateObject(ContainingStateObject);
6087 void SetFillMode(D3D12_FILL_MODE fillMode)
6089 m_Desc.FillMode = fillMode;
6091 void SetCullMode(D3D12_CULL_MODE cullMode)
6093 m_Desc.CullMode = cullMode;
6095 void SetFrontCounterClockwise(BOOL frontCounterClockwise)
6097 m_Desc.FrontCounterClockwise = frontCounterClockwise;
6099 void SetDepthBias(FLOAT depthBias)
6101 m_Desc.DepthBias = depthBias;
6103 void SetDepthBiasClamp(FLOAT depthBiasClamp)
6105 m_Desc.DepthBiasClamp = depthBiasClamp;
6107 void SetSlopeScaledDepthBias(FLOAT slopeScaledDepthBias)
6109 m_Desc.SlopeScaledDepthBias = slopeScaledDepthBias;
6111 void SetDepthClipEnable(BOOL depthClipEnable)
6113 m_Desc.DepthClipEnable = depthClipEnable;
6115 void SetLineRasterizationMode(D3D12_LINE_RASTERIZATION_MODE lineRasterizationMode)
6117 m_Desc.LineRasterizationMode = lineRasterizationMode;
6119 void SetForcedSampleCount(UINT forcedSampleCount)
6121 m_Desc.ForcedSampleCount = forcedSampleCount;
6123 void SetConservativeRaster(D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster)
6125 m_Desc.ConservativeRaster = conservativeRaster;
6127 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
6129 return D3D12_STATE_SUBOBJECT_TYPE_RASTERIZER;
6131 operator const D3D12_RASTERIZER_DESC2& ()
const noexcept {
return m_Desc; }
6132 operator D3D12_RASTERIZER_DESC2& ()
noexcept {
return m_Desc; }
6134 void Init() noexcept
6136 SUBOBJECT_HELPER_BASE::Init();
6138 void* Data() noexcept
override {
return &m_Desc; }
6139 CD3DX12_RASTERIZER_DESC2 m_Desc;
6143class CD3DX12_DEPTH_STENCIL2_SUBOBJECT
6144 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
6147 CD3DX12_DEPTH_STENCIL2_SUBOBJECT()
6148 : m_Desc(CD3DX12_DEPTH_STENCIL_DESC2(D3D12_DEFAULT))
6152 CD3DX12_DEPTH_STENCIL2_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6153 : m_Desc(CD3DX12_DEPTH_STENCIL_DESC2(D3D12_DEFAULT))
6156 AddToStateObject(ContainingStateObject);
6158 CD3DX12_DEPTH_STENCIL2_SUBOBJECT(
const D3D12_DEPTH_STENCIL_DESC2 &desc)
6163 CD3DX12_DEPTH_STENCIL2_SUBOBJECT(
const D3D12_DEPTH_STENCIL_DESC2 &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6167 AddToStateObject(ContainingStateObject);
6169 void SetDepthEnable(BOOL depthEnable)
6171 m_Desc.DepthEnable = depthEnable;
6173 void SetDepthWriteMask(D3D12_DEPTH_WRITE_MASK depthWriteMask)
6175 m_Desc.DepthWriteMask = depthWriteMask;
6177 void SetDepthFunc(D3D12_COMPARISON_FUNC depthFunc)
6179 m_Desc.DepthFunc = depthFunc;
6181 void SetStencilEnable(BOOL stencilEnable)
6183 m_Desc.StencilEnable = stencilEnable;
6185 void SetFrontFace(D3D12_DEPTH_STENCILOP_DESC1 frontFace)
6187 m_Desc.FrontFace = {
6188 frontFace.StencilFailOp,
6189 frontFace.StencilDepthFailOp,
6190 frontFace.StencilPassOp,
6191 frontFace.StencilFunc,
6192 frontFace.StencilReadMask,
6193 frontFace.StencilWriteMask
6196 void SetBackFace(D3D12_DEPTH_STENCILOP_DESC1 backFace)
6199 backFace.StencilFailOp,
6200 backFace.StencilDepthFailOp,
6201 backFace.StencilPassOp,
6202 backFace.StencilFunc,
6203 backFace.StencilReadMask,
6204 backFace.StencilWriteMask
6207 void SetDepthBoundsTestEnable(BOOL depthBoundsTestEnable)
6209 m_Desc.DepthBoundsTestEnable = depthBoundsTestEnable;
6211 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
6213 return D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2;
6215 operator const D3D12_DEPTH_STENCIL_DESC2& ()
const noexcept {
return m_Desc; }
6216 operator D3D12_DEPTH_STENCIL_DESC2& ()
noexcept {
return m_Desc; }
6218 void Init() noexcept
6220 SUBOBJECT_HELPER_BASE::Init();
6222 void* Data() noexcept
override {
return &m_Desc; }
6223 CD3DX12_DEPTH_STENCIL_DESC2 m_Desc;
6227class CD3DX12_INPUT_LAYOUT_SUBOBJECT
6228 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
6231 CD3DX12_INPUT_LAYOUT_SUBOBJECT()
6235 CD3DX12_INPUT_LAYOUT_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6238 AddToStateObject(ContainingStateObject);
6240 void AddInputLayoutElementDesc(D3D12_INPUT_ELEMENT_DESC inputLayoutElementDesc)
6242 m_inputLayoutElements.emplace_back(
6243 D3D12_INPUT_ELEMENT_DESC{
6244 m_Strings.LocalCopy(inputLayoutElementDesc.SemanticName),
6245 inputLayoutElementDesc.SemanticIndex,
6246 inputLayoutElementDesc.Format,
6247 inputLayoutElementDesc.InputSlot,
6248 inputLayoutElementDesc.AlignedByteOffset,
6249 inputLayoutElementDesc.InputSlotClass,
6250 inputLayoutElementDesc.InstanceDataStepRate
6252 ++m_Desc.NumElements;
6254 m_Desc.pInputElementDescs = &m_inputLayoutElements[0];
6256 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
6258 return D3D12_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT;
6260 operator const D3D12_INPUT_LAYOUT_DESC& ()
const noexcept {
return m_Desc; }
6262 void Init() noexcept
6264 SUBOBJECT_HELPER_BASE::Init();
6266 m_inputLayoutElements.clear();
6268 void* Data() noexcept
override {
return &m_Desc; }
6269 D3D12_INPUT_LAYOUT_DESC m_Desc;
6270 std::vector<D3D12_INPUT_ELEMENT_DESC> m_inputLayoutElements;
6271 CD3DX12_STATE_OBJECT_DESC::StringContainer<LPCSTR, std::string> m_Strings;
6275class CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT
6276 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
6279 CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT()
6280 : m_Desc(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED)
6284 CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6285 : m_Desc(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED)
6288 AddToStateObject(ContainingStateObject);
6290 CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE desc)
6295 CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6299 AddToStateObject(ContainingStateObject);
6301 void SetIBStripCutValue(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE ibStripCutValue)
6303 m_Desc = ibStripCutValue;
6305 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
6307 return D3D12_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE;
6309 operator const D3D12_INDEX_BUFFER_STRIP_CUT_VALUE& ()
const noexcept {
return m_Desc; }
6310 operator D3D12_INDEX_BUFFER_STRIP_CUT_VALUE& ()
noexcept {
return m_Desc; }
6312 void Init() noexcept
6314 SUBOBJECT_HELPER_BASE::Init();
6316 void* Data() noexcept
override {
return &m_Desc; }
6317 D3D12_INDEX_BUFFER_STRIP_CUT_VALUE m_Desc;
6321class CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT
6322 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
6325 CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT()
6326 : m_Desc(D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED)
6330 CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6331 : m_Desc(D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED)
6334 AddToStateObject(ContainingStateObject);
6336 CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT(D3D12_PRIMITIVE_TOPOLOGY_TYPE desc)
6341 CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT(D3D12_PRIMITIVE_TOPOLOGY_TYPE desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6345 AddToStateObject(ContainingStateObject);
6347 void SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE primitiveTopologytype)
6349 m_Desc = primitiveTopologytype;
6351 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
6353 return D3D12_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY;
6355 operator const D3D12_PRIMITIVE_TOPOLOGY_TYPE& ()
const noexcept {
return m_Desc; }
6356 operator D3D12_PRIMITIVE_TOPOLOGY_TYPE& ()
noexcept {
return m_Desc; }
6358 void Init() noexcept
6360 SUBOBJECT_HELPER_BASE::Init();
6362 void* Data() noexcept
override {
return &m_Desc; }
6363 D3D12_PRIMITIVE_TOPOLOGY_TYPE m_Desc;
6367class CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT
6368 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
6371 CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT()
6376 CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6380 AddToStateObject(ContainingStateObject);
6382 CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT(
const D3D12_RT_FORMAT_ARRAY &desc)
6387 CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT(
const D3D12_RT_FORMAT_ARRAY &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6391 AddToStateObject(ContainingStateObject);
6393 void SetNumRenderTargets(UINT numRenderTargets)
6395 m_Desc.NumRenderTargets = numRenderTargets;
6397 void SetRenderTargetFormat(UINT renderTarget, DXGI_FORMAT renderTargetFormat)
6399 m_Desc.RTFormats[renderTarget] = renderTargetFormat;
6401 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
6403 return D3D12_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS;
6405 operator const D3D12_RT_FORMAT_ARRAY& ()
const noexcept {
return m_Desc; }
6406 operator D3D12_RT_FORMAT_ARRAY& ()
noexcept {
return m_Desc; }
6408 void Init() noexcept
6410 SUBOBJECT_HELPER_BASE::Init();
6412 void* Data() noexcept
override {
return &m_Desc; }
6413 D3D12_RT_FORMAT_ARRAY m_Desc;
6417class CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT
6418 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
6421 CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT()
6422 : m_Desc(DXGI_FORMAT_UNKNOWN)
6426 CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6427 : m_Desc(DXGI_FORMAT_UNKNOWN)
6430 AddToStateObject(ContainingStateObject);
6432 CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT(DXGI_FORMAT desc)
6437 CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT(DXGI_FORMAT desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6441 AddToStateObject(ContainingStateObject);
6443 void SetDepthStencilFormat(DXGI_FORMAT depthStencilFormat)
6445 m_Desc = depthStencilFormat;
6447 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
6449 return D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT;
6451 operator const DXGI_FORMAT& ()
const noexcept {
return m_Desc; }
6452 operator DXGI_FORMAT& ()
noexcept {
return m_Desc; }
6454 void Init() noexcept
6456 SUBOBJECT_HELPER_BASE::Init();
6458 void* Data() noexcept
override {
return &m_Desc; }
6463class CD3DX12_SAMPLE_DESC_SUBOBJECT
6464 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
6467 CD3DX12_SAMPLE_DESC_SUBOBJECT()
6472 CD3DX12_SAMPLE_DESC_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6476 AddToStateObject(ContainingStateObject);
6478 CD3DX12_SAMPLE_DESC_SUBOBJECT(
const DXGI_SAMPLE_DESC &desc)
6483 CD3DX12_SAMPLE_DESC_SUBOBJECT(
const DXGI_SAMPLE_DESC &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6487 AddToStateObject(ContainingStateObject);
6489 void SetCount(UINT count)
6491 m_Desc.Count = count;
6493 void SetQuality(UINT quality)
6495 m_Desc.Quality = quality;
6497 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
6499 return D3D12_STATE_SUBOBJECT_TYPE_SAMPLE_DESC;
6501 operator const DXGI_SAMPLE_DESC& ()
const noexcept {
return m_Desc; }
6502 operator DXGI_SAMPLE_DESC& ()
noexcept {
return m_Desc; }
6504 void Init() noexcept
6506 SUBOBJECT_HELPER_BASE::Init();
6509 void* Data() noexcept
override {
return &m_Desc; }
6510 DXGI_SAMPLE_DESC m_Desc;
6514class CD3DX12_FLAGS_SUBOBJECT
6515 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
6518 CD3DX12_FLAGS_SUBOBJECT()
6519 : m_Desc(D3D12_PIPELINE_STATE_FLAG_NONE)
6523 CD3DX12_FLAGS_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6524 : m_Desc(D3D12_PIPELINE_STATE_FLAG_NONE)
6527 AddToStateObject(ContainingStateObject);
6529 CD3DX12_FLAGS_SUBOBJECT(D3D12_PIPELINE_STATE_FLAGS desc)
6534 CD3DX12_FLAGS_SUBOBJECT(D3D12_PIPELINE_STATE_FLAGS desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6538 AddToStateObject(ContainingStateObject);
6540 void SetFlags(D3D12_PIPELINE_STATE_FLAGS flags)
6544 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
6546 return D3D12_STATE_SUBOBJECT_TYPE_FLAGS;
6548 operator const D3D12_PIPELINE_STATE_FLAGS& ()
const noexcept {
return m_Desc; }
6549 operator D3D12_PIPELINE_STATE_FLAGS& ()
noexcept {
return m_Desc; }
6551 void Init() noexcept
6553 SUBOBJECT_HELPER_BASE::Init();
6555 void* Data() noexcept
override {
return &m_Desc; }
6556 D3D12_PIPELINE_STATE_FLAGS m_Desc;
6560class CD3DX12_VIEW_INSTANCING_SUBOBJECT
6561 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
6564 CD3DX12_VIEW_INSTANCING_SUBOBJECT()
6568 CD3DX12_VIEW_INSTANCING_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6571 AddToStateObject(ContainingStateObject);
6573 void AddViewInstanceLocation(D3D12_VIEW_INSTANCE_LOCATION viewInstanceLocation)
6575 m_Desc.ViewInstanceCount++;
6576 m_viewInstanceLocations.emplace_back(
6577 D3D12_VIEW_INSTANCE_LOCATION
6579 viewInstanceLocation.ViewportArrayIndex,
6580 viewInstanceLocation.RenderTargetArrayIndex
6584 m_Desc.pViewInstanceLocations = &m_viewInstanceLocations[0];
6586 void SetFlags(D3D12_VIEW_INSTANCING_FLAGS flags)
6588 m_Desc.Flags = flags;
6590 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
6592 return D3D12_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING;
6594 operator const D3D12_VIEW_INSTANCING_DESC& ()
const noexcept {
return m_Desc; }
6596 void Init() noexcept
6598 SUBOBJECT_HELPER_BASE::Init();
6599 m_Desc = CD3DX12_VIEW_INSTANCING_DESC(D3D12_DEFAULT);
6600 m_viewInstanceLocations.clear();
6602 void* Data() noexcept
override {
return &m_Desc; }
6603 CD3DX12_VIEW_INSTANCING_DESC m_Desc;
6604 std::vector<D3D12_VIEW_INSTANCE_LOCATION> m_viewInstanceLocations;
6608class CD3DX12_DEPTH_STENCIL_SUBOBJECT
6609 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
6612 CD3DX12_DEPTH_STENCIL_SUBOBJECT()
6613 : m_Desc(CD3DX12_DEPTH_STENCIL_DESC(D3D12_DEFAULT))
6617 CD3DX12_DEPTH_STENCIL_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6618 : m_Desc(CD3DX12_DEPTH_STENCIL_DESC(D3D12_DEFAULT))
6621 AddToStateObject(ContainingStateObject);
6623 CD3DX12_DEPTH_STENCIL_SUBOBJECT(
const D3D12_DEPTH_STENCIL_DESC &desc)
6628 CD3DX12_DEPTH_STENCIL_SUBOBJECT(
const D3D12_DEPTH_STENCIL_DESC &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6632 AddToStateObject(ContainingStateObject);
6634 void SetDepthEnable(BOOL depthEnable)
6636 m_Desc.DepthEnable = depthEnable;
6638 void SetDepthWriteMask(D3D12_DEPTH_WRITE_MASK depthWriteMask)
6640 m_Desc.DepthWriteMask = depthWriteMask;
6642 void SetDepthFunc(D3D12_COMPARISON_FUNC depthFunc)
6644 m_Desc.DepthFunc = depthFunc;
6646 void SetStencilEnable(BOOL stencilEnable)
6648 m_Desc.StencilEnable = stencilEnable;
6650 void SetStencilReadMask(
UINT8 stencilReadMask)
6652 m_Desc.StencilReadMask = stencilReadMask;
6654 void SetStencilWriteMask(
UINT8 stencilWriteMask)
6656 m_Desc.StencilWriteMask = stencilWriteMask;
6658 void SetFrontFace(D3D12_DEPTH_STENCILOP_DESC frontFace)
6660 m_Desc.FrontFace = {
6661 frontFace.StencilFailOp,
6662 frontFace.StencilDepthFailOp,
6663 frontFace.StencilPassOp,
6664 frontFace.StencilFunc
6667 void SetBackFace(D3D12_DEPTH_STENCILOP_DESC backFace)
6670 backFace.StencilFailOp,
6671 backFace.StencilDepthFailOp,
6672 backFace.StencilPassOp,
6673 backFace.StencilFunc
6676 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
6678 return D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL;
6680 operator const D3D12_DEPTH_STENCIL_DESC& ()
const noexcept {
return m_Desc; }
6681 operator D3D12_DEPTH_STENCIL_DESC& ()
noexcept {
return m_Desc; }
6683 void Init() noexcept
6685 SUBOBJECT_HELPER_BASE::Init();
6687 void* Data() noexcept
override {
return &m_Desc; }
6688 CD3DX12_DEPTH_STENCIL_DESC m_Desc;
6692class CD3DX12_DEPTH_STENCIL1_SUBOBJECT
6693 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
6696 CD3DX12_DEPTH_STENCIL1_SUBOBJECT()
6697 : m_Desc(CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEFAULT))
6701 CD3DX12_DEPTH_STENCIL1_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6702 : m_Desc(CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEFAULT))
6705 AddToStateObject(ContainingStateObject);
6707 CD3DX12_DEPTH_STENCIL1_SUBOBJECT(
const D3D12_DEPTH_STENCIL_DESC1 &desc)
6712 CD3DX12_DEPTH_STENCIL1_SUBOBJECT(
const D3D12_DEPTH_STENCIL_DESC1 &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6716 AddToStateObject(ContainingStateObject);
6718 void SetDepthEnable(BOOL depthEnable)
6720 m_Desc.DepthEnable = depthEnable;
6722 void SetDepthWriteMask(D3D12_DEPTH_WRITE_MASK depthWriteMask)
6724 m_Desc.DepthWriteMask = depthWriteMask;
6726 void SetDepthFunc(D3D12_COMPARISON_FUNC depthFunc)
6728 m_Desc.DepthFunc = depthFunc;
6730 void SetStencilEnable(BOOL stencilEnable)
6732 m_Desc.StencilEnable = stencilEnable;
6734 void SetStencilReadMask(
UINT8 stencilReadMask)
6736 m_Desc.StencilReadMask = stencilReadMask;
6738 void SetStencilWriteMask(
UINT8 stencilWriteMask)
6740 m_Desc.StencilWriteMask = stencilWriteMask;
6742 void SetFrontFace(D3D12_DEPTH_STENCILOP_DESC frontFace)
6744 m_Desc.FrontFace = {
6745 frontFace.StencilFailOp,
6746 frontFace.StencilDepthFailOp,
6747 frontFace.StencilPassOp,
6748 frontFace.StencilFunc
6751 void SetBackFace(D3D12_DEPTH_STENCILOP_DESC backFace)
6754 backFace.StencilFailOp,
6755 backFace.StencilDepthFailOp,
6756 backFace.StencilPassOp,
6757 backFace.StencilFunc
6760 void SetDepthBoundsTestEnable(BOOL depthBoundsTestEnable)
6762 m_Desc.DepthBoundsTestEnable = depthBoundsTestEnable;
6764 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
6766 return D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1;
6768 operator const D3D12_DEPTH_STENCIL_DESC1& ()
const noexcept {
return m_Desc; }
6769 operator D3D12_DEPTH_STENCIL_DESC1& ()
noexcept {
return m_Desc; }
6771 void Init() noexcept
6773 SUBOBJECT_HELPER_BASE::Init();
6775 void* Data() noexcept
override {
return &m_Desc; }
6776 CD3DX12_DEPTH_STENCIL_DESC1 m_Desc;
6780class CD3DX12_SAMPLE_MASK_SUBOBJECT
6781 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
6784 CD3DX12_SAMPLE_MASK_SUBOBJECT()
6785 : m_Desc(0xffffffffu)
6789 CD3DX12_SAMPLE_MASK_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6790 : m_Desc(0xffffffffu)
6793 AddToStateObject(ContainingStateObject);
6795 CD3DX12_SAMPLE_MASK_SUBOBJECT(UINT desc)
6800 CD3DX12_SAMPLE_MASK_SUBOBJECT(UINT desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6804 AddToStateObject(ContainingStateObject);
6806 void SetSampleMask(UINT sampleMask)
6808 m_Desc = sampleMask;
6810 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
6812 return D3D12_STATE_SUBOBJECT_TYPE_SAMPLE_MASK;
6814 operator const UINT& ()
const noexcept {
return m_Desc; }
6815 operator UINT& ()
noexcept {
return m_Desc; }
6817 void Init() noexcept
6819 SUBOBJECT_HELPER_BASE::Init();
6821 void* Data() noexcept
override {
return &m_Desc; }
6826class CD3DX12_GENERIC_PROGRAM_SUBOBJECT
6827 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
6830 CD3DX12_GENERIC_PROGRAM_SUBOBJECT()
6834 CD3DX12_GENERIC_PROGRAM_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
6837 AddToStateObject(ContainingStateObject);
6839 void SetProgramName(LPCWSTR ProgramName)
6841 m_Desc.ProgramName = m_Strings.LocalCopy(ProgramName);
6843 void AddExport(LPCWSTR exportName)
6845 m_Exports.emplace_back(m_Strings.LocalCopy(exportName));
6846 m_Desc.NumExports++;
6848 m_Desc.pExports = &m_Exports[0];
6850 void AddSubobject(
const D3D12_STATE_SUBOBJECT& subobject)
6852 m_Subobjects.emplace_back(&subobject);
6853 m_Desc.NumSubobjects++;
6855 m_Desc.ppSubobjects = &m_Subobjects[0];
6857 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
6859 return D3D12_STATE_SUBOBJECT_TYPE_GENERIC_PROGRAM;
6861 operator const D3D12_GENERIC_PROGRAM_DESC& ()
const noexcept {
return m_Desc; }
6863 void Init() noexcept
6865 SUBOBJECT_HELPER_BASE::Init();
6868 void* Data() noexcept
override {
return &m_Desc; }
6869 D3D12_GENERIC_PROGRAM_DESC m_Desc;
6870 std::vector<LPCWSTR> m_Exports;
6871 std::vector<D3D12_STATE_SUBOBJECT const*> m_Subobjects;
6872 CD3DX12_STATE_OBJECT_DESC::StringContainer<LPCWSTR, std::wstring> m_Strings;
6876class CD3DX12_NODE_OUTPUT_OVERRIDES
6879 CD3DX12_NODE_OUTPUT_OVERRIDES(
const D3D12_NODE_OUTPUT_OVERRIDES** ppOwner, UINT* pNumOutputOverrides)
noexcept
6882 m_ppOwner = ppOwner;
6883 *m_ppOwner =
nullptr;
6884 m_pNumOutputOverrides = pNumOutputOverrides;
6885 *m_pNumOutputOverrides = 0;
6887 void NewOutputOverride()
6889 m_Desc.emplace_back(D3D12_NODE_OUTPUT_OVERRIDES{});
6890 *m_ppOwner = m_Desc.data();
6891 (*m_pNumOutputOverrides)++;
6893 void OutputIndex(UINT index)
6895 m_Desc.back().OutputIndex = index;
6897 void NewName(LPCWSTR Name, UINT ArrayIndex = 0)
6899 m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(Name),ArrayIndex });
6900 m_Desc.back().pNewName = &m_NodeIDs.front();
6902 void AllowSparseNodes(BOOL bAllow)
6904 m_UINTs.emplace_front((UINT)bAllow);
6905 m_Desc.back().pAllowSparseNodes = (BOOL*)&m_UINTs.front();
6907 void MaxOutputRecords(UINT maxOutputRecords)
noexcept
6909 m_UINTs.emplace_front(maxOutputRecords);
6910 m_Desc.back().pMaxRecords = &m_UINTs.front();
6912 void MaxOutputRecordsSharedWith(UINT outputIndex)
noexcept
6914 m_UINTs.emplace_front(outputIndex);
6915 m_Desc.back().pMaxRecordsSharedWithOutputIndex = &m_UINTs.front();
6918 std::vector<D3D12_NODE_OUTPUT_OVERRIDES> m_Desc;
6920 CD3DX12_STATE_OBJECT_DESC::StringContainer<LPCWSTR, std::wstring> m_Strings;
6921 std::forward_list<UINT> m_UINTs;
6922 std::forward_list<D3D12_NODE_ID> m_NodeIDs;
6923 const D3D12_NODE_OUTPUT_OVERRIDES** m_ppOwner;
6924 UINT* m_pNumOutputOverrides;
6928class CD3DX12_WORK_GRAPH_SUBOBJECT;
6931class CD3DX12_NODE_HELPER_BASE
6934 struct Backreference
6936 CD3DX12_WORK_GRAPH_SUBOBJECT *m_pGraph;
6940 CD3DX12_NODE_HELPER_BASE(
const Backreference &BackRef)
6941 : m_BackRef(BackRef)
6944 virtual ~CD3DX12_NODE_HELPER_BASE() =
default;
6946 D3D12_NODE *GetNode()
const;
6947 const Backreference m_BackRef;
6948 CD3DX12_STATE_OBJECT_DESC::StringContainer<LPCWSTR, std::wstring> m_Strings;
6952class CD3DX12_SHADER_NODE
6954 :
public CD3DX12_NODE_HELPER_BASE
6957 CD3DX12_SHADER_NODE(
6958 const Backreference &BackRef,
6959 LPCWSTR _Shader =
nullptr)
6960 : CD3DX12_NODE_HELPER_BASE(BackRef)
6962 GetNode()->NodeType = D3D12_NODE_TYPE_SHADER;
6965 void Shader(LPCWSTR _Shader)
6967 GetNode()->Shader.Shader = m_Strings.LocalCopy(_Shader);
6969 LPCWSTR GetShaderName()
const {
return GetNode()->Shader.Shader; }
6975#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612)
6980class CD3DX12_BROADCASTING_LAUNCH_NODE_OVERRIDES
6981 :
public CD3DX12_NODE_HELPER_BASE
6984 CD3DX12_BROADCASTING_LAUNCH_NODE_OVERRIDES(
6985 const Backreference &BackRef,
6986 LPCWSTR _Shader =
nullptr) :
6987 CD3DX12_NODE_HELPER_BASE(BackRef),
6988 m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides)
6991 D3D12_NODE *pNode = GetNode();
6992 pNode->NodeType = D3D12_NODE_TYPE_SHADER;
6993 pNode->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_BROADCASTING_LAUNCH;
6994 pNode->Shader.pBroadcastingLaunchOverrides = &Overrides;
6997 void Shader(LPCWSTR _Shader)
6999 GetNode()->Shader.Shader = m_Strings.LocalCopy(_Shader);
7001 LPCWSTR GetShaderName()
const {
return GetNode()->Shader.Shader; }
7002 void LocalRootArgumentsTableIndex(UINT index)
7004 m_UINTs.emplace_front(index);
7005 Overrides.pLocalRootArgumentsTableIndex = &m_UINTs.front();
7007 void ProgramEntry(BOOL bIsProgramEntry)
7009 m_UINTs.emplace_front(bIsProgramEntry);
7010 Overrides.pProgramEntry = (BOOL*)&m_UINTs.front();
7012 void NewName(D3D12_NODE_ID NodeID)
7014 m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex });
7015 Overrides.pNewName = &m_NodeIDs.front();
7017 void ShareInputOf(D3D12_NODE_ID NodeID)
7019 m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex });
7020 Overrides.pShareInputOf = &m_NodeIDs.front();
7022 void DispatchGrid(UINT x, UINT y, UINT z)
7024 m_UINT3s.emplace_front(UINT3{ x,y,z });
7025 Overrides.pDispatchGrid = (UINT*)&m_UINT3s.front();
7027 void MaxDispatchGrid(UINT x, UINT y, UINT z)
7029 m_UINT3s.emplace_front(UINT3{x,y,z});
7030 Overrides.pMaxDispatchGrid = (UINT*)&m_UINT3s.front();
7032 CD3DX12_NODE_OUTPUT_OVERRIDES& NodeOutputOverrides()
7034 return m_NodeOutputOverrides;
7036 D3D12_BROADCASTING_LAUNCH_OVERRIDES Overrides;
7039 std::forward_list<UINT> m_UINTs;
7046 std::forward_list<UINT3> m_UINT3s;
7047 std::forward_list<D3D12_NODE_ID> m_NodeIDs;
7048 CD3DX12_NODE_OUTPUT_OVERRIDES m_NodeOutputOverrides;
7054class CD3DX12_COALESCING_LAUNCH_NODE_OVERRIDES
7055 :
public CD3DX12_NODE_HELPER_BASE
7058 CD3DX12_COALESCING_LAUNCH_NODE_OVERRIDES(
7059 const Backreference &BackRef,
7060 LPCWSTR _Shader =
nullptr) :
7061 CD3DX12_NODE_HELPER_BASE(BackRef),
7062 m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides)
7065 D3D12_NODE *pNode = GetNode();
7066 pNode->NodeType = D3D12_NODE_TYPE_SHADER;
7067 pNode->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_COALESCING_LAUNCH;
7068 pNode->Shader.pCoalescingLaunchOverrides = &Overrides;
7071 void Shader(LPCWSTR _Shader)
7073 GetNode()->Shader.Shader = m_Strings.LocalCopy(_Shader);
7075 LPCWSTR GetShaderName()
const {
return GetNode()->Shader.Shader; }
7076 void LocalRootArgumentsTableIndex(UINT index)
7078 m_UINTs.emplace_front(index);
7079 Overrides.pLocalRootArgumentsTableIndex = &m_UINTs.front();
7081 void ProgramEntry(BOOL bIsProgramEntry)
7083 m_UINTs.emplace_front(bIsProgramEntry);
7084 Overrides.pProgramEntry = (BOOL*)&m_UINTs.front();
7086 void NewName(D3D12_NODE_ID NodeID)
7088 m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex });
7089 Overrides.pNewName = &m_NodeIDs.front();
7091 void ShareInputOf(D3D12_NODE_ID NodeID)
7093 m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex });
7094 Overrides.pShareInputOf = &m_NodeIDs.front();
7096 CD3DX12_NODE_OUTPUT_OVERRIDES& NodeOutputOverrides()
7098 return m_NodeOutputOverrides;
7100 D3D12_COALESCING_LAUNCH_OVERRIDES Overrides;
7103 std::forward_list<UINT> m_UINTs;
7110 std::forward_list<UINT3> m_UINT3s;
7111 std::forward_list<D3D12_NODE_ID> m_NodeIDs;
7112 CD3DX12_NODE_OUTPUT_OVERRIDES m_NodeOutputOverrides;
7118class CD3DX12_THREAD_LAUNCH_NODE_OVERRIDES
7119 :
public CD3DX12_NODE_HELPER_BASE
7122 CD3DX12_THREAD_LAUNCH_NODE_OVERRIDES(
7123 const Backreference &BackRef,
7124 LPCWSTR _Shader =
nullptr) :
7125 CD3DX12_NODE_HELPER_BASE(BackRef),
7126 m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides)
7129 D3D12_NODE *pNode = GetNode();
7130 pNode->NodeType = D3D12_NODE_TYPE_SHADER;
7131 pNode->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_THREAD_LAUNCH;
7132 pNode->Shader.pThreadLaunchOverrides = &Overrides;
7135 void Shader(LPCWSTR _Shader)
7137 GetNode()->Shader.Shader = m_Strings.LocalCopy(_Shader);
7139 LPCWSTR GetShaderName()
const {
return GetNode()->Shader.Shader; }
7140 void LocalRootArgumentsTableIndex(UINT index)
7142 m_UINTs.emplace_front(index);
7143 Overrides.pLocalRootArgumentsTableIndex = &m_UINTs.front();
7145 void ProgramEntry(BOOL bIsProgramEntry)
7147 m_UINTs.emplace_front(bIsProgramEntry);
7148 Overrides.pProgramEntry = (BOOL*)&m_UINTs.front();
7150 void NewName(D3D12_NODE_ID NodeID)
7152 m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex });
7153 Overrides.pNewName = &m_NodeIDs.front();
7155 void ShareInputOf(D3D12_NODE_ID NodeID)
7157 m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex });
7158 Overrides.pShareInputOf = &m_NodeIDs.front();
7160 CD3DX12_NODE_OUTPUT_OVERRIDES& NodeOutputOverrides()
7162 return m_NodeOutputOverrides;
7164 D3D12_THREAD_LAUNCH_OVERRIDES Overrides;
7167 std::forward_list<UINT> m_UINTs;
7168 std::forward_list<D3D12_NODE_ID> m_NodeIDs;
7169 CD3DX12_NODE_OUTPUT_OVERRIDES m_NodeOutputOverrides;
7178class CD3DX12_COMMON_COMPUTE_NODE_OVERRIDES
7179 :
public CD3DX12_NODE_HELPER_BASE
7182 CD3DX12_COMMON_COMPUTE_NODE_OVERRIDES(
7183 const Backreference &BackRef,
7184 LPCWSTR _Shader =
nullptr) :
7185 CD3DX12_NODE_HELPER_BASE(BackRef),
7186 m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides)
7189 D3D12_NODE *pNode = GetNode();
7190 pNode->NodeType = D3D12_NODE_TYPE_SHADER;
7191 pNode->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_COMMON_COMPUTE;
7192 pNode->Shader.pThreadLaunchOverrides = &Overrides;
7195 void Shader(LPCWSTR _Shader)
7197 GetNode()->Shader.Shader = m_Strings.LocalCopy(_Shader);
7199 LPCWSTR GetShaderName()
const {
return GetNode()->Shader.Shader; }
7200 void LocalRootArgumentsTableIndex(UINT index)
7202 m_UINTs.emplace_front(index);
7203 Overrides.pLocalRootArgumentsTableIndex = &m_UINTs.front();
7205 void ProgramEntry(BOOL bIsProgramEntry)
7207 m_UINTs.emplace_front(bIsProgramEntry);
7208 Overrides.pProgramEntry = (BOOL*)&m_UINTs.front();
7210 void NewName(D3D12_NODE_ID NodeID)
7212 m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex });
7213 Overrides.pNewName = &m_NodeIDs.front();
7215 void ShareInputOf(D3D12_NODE_ID NodeID)
7217 m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex });
7218 Overrides.pShareInputOf = &m_NodeIDs.front();
7220 CD3DX12_NODE_OUTPUT_OVERRIDES& NodeOutputOverrides()
7222 return m_NodeOutputOverrides;
7224 D3D12_THREAD_LAUNCH_OVERRIDES Overrides;
7227 std::forward_list<UINT> m_UINTs;
7228 std::forward_list<D3D12_NODE_ID> m_NodeIDs;
7229 CD3DX12_NODE_OUTPUT_OVERRIDES m_NodeOutputOverrides;
7233class CD3DX12_WORK_GRAPH_SUBOBJECT
7234 :
public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE
7237 CD3DX12_WORK_GRAPH_SUBOBJECT() noexcept
7241 CD3DX12_WORK_GRAPH_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject)
7244 AddToStateObject(ContainingStateObject);
7246 D3D12_STATE_SUBOBJECT_TYPE
Type() const noexcept
override
7248 return D3D12_STATE_SUBOBJECT_TYPE_WORK_GRAPH;
7250 void IncludeAllAvailableNodes()
7252 m_Desc.Flags |= D3D12_WORK_GRAPH_FLAG_INCLUDE_ALL_AVAILABLE_NODES;
7256 void SetProgramName(LPCWSTR ProgramName)
7258 m_Desc.ProgramName = m_Strings.LocalCopy(ProgramName);
7260 void AddEntrypoint(D3D12_NODE_ID Entrypoint)
7262 m_Entrypoints.emplace_back(D3D12_NODE_ID{ m_Strings.LocalCopy(Entrypoint.Name),Entrypoint.ArrayIndex });
7263 m_Desc.NumEntrypoints++;
7264 m_Desc.pEntrypoints = m_Entrypoints.data();
7267 template<
typename T>
7270 m_NodeDescs.push_back({});
7271 m_Desc.NumExplicitlyDefinedNodes++;
7272 m_Desc.pExplicitlyDefinedNodes = m_NodeDescs.data();
7273 T* pNodeHelper =
new T({
this, (UINT)m_NodeDescs.size() - 1});
7274 m_OwnedNodeHelpers.emplace_back(pNodeHelper);
7277 CD3DX12_SHADER_NODE* CreateShaderNode(LPCWSTR Shader =
nullptr)
7279 auto pNode = CreateNode<CD3DX12_SHADER_NODE>();
7280 pNode->Shader(Shader);
7283 CD3DX12_BROADCASTING_LAUNCH_NODE_OVERRIDES* CreateBroadcastingLaunchNodeOverrides(LPCWSTR Shader =
nullptr)
7285 auto pNode = CreateNode<CD3DX12_BROADCASTING_LAUNCH_NODE_OVERRIDES>();
7286 pNode->Shader(Shader);
7289 CD3DX12_COALESCING_LAUNCH_NODE_OVERRIDES* CreateCoalescingLaunchNodeOverrides(LPCWSTR Shader =
nullptr)
7291 auto pNode = CreateNode<CD3DX12_COALESCING_LAUNCH_NODE_OVERRIDES>();
7292 pNode->Shader(Shader);
7295 CD3DX12_THREAD_LAUNCH_NODE_OVERRIDES* CreateThreadLaunchNodeOverrides(LPCWSTR Shader =
nullptr)
7297 auto pNode = CreateNode<CD3DX12_THREAD_LAUNCH_NODE_OVERRIDES>();
7298 pNode->Shader(Shader);
7301 CD3DX12_COMMON_COMPUTE_NODE_OVERRIDES* CreateCommonComputeNodeOverrides(LPCWSTR Shader =
nullptr)
7303 auto pNode = CreateNode<CD3DX12_COMMON_COMPUTE_NODE_OVERRIDES>();
7304 pNode->Shader(Shader);
7310#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612)
7312 operator const D3D12_WORK_GRAPH_DESC& ()
noexcept
7317 void Init() noexcept
7319 SUBOBJECT_HELPER_BASE::Init();
7321 m_Entrypoints.clear();
7322 m_NodeDescs.clear();
7324 void* Data() noexcept
override {
return &m_Desc; }
7325 D3D12_WORK_GRAPH_DESC m_Desc;
7326 std::vector<D3D12_NODE_ID> m_Entrypoints;
7327 std::vector<D3D12_NODE> m_NodeDescs;
7328 CD3DX12_STATE_OBJECT_DESC::StringContainer<LPCWSTR, std::wstring> m_Strings;
7329 std::vector<std::unique_ptr<const CD3DX12_NODE_HELPER_BASE>> m_OwnedNodeHelpers;
7330 friend class CD3DX12_NODE_HELPER_BASE;
7333inline D3D12_NODE * CD3DX12_NODE_HELPER_BASE::GetNode()
const
7335 return &m_BackRef.m_pGraph->m_NodeDescs[m_BackRef.m_NodeIndex];
7339#undef D3DX12_COM_PTR
7340#undef D3DX12_COM_PTR_GET
7341#undef D3DX12_COM_PTR_ADDRESSOF
7346#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)
7352class CD3DX12_BARRIER_SUBRESOURCE_RANGE :
public D3D12_BARRIER_SUBRESOURCE_RANGE
7355 CD3DX12_BARRIER_SUBRESOURCE_RANGE() =
default;
7356 CD3DX12_BARRIER_SUBRESOURCE_RANGE(
const D3D12_BARRIER_SUBRESOURCE_RANGE &o) noexcept :
7357 D3D12_BARRIER_SUBRESOURCE_RANGE(o)
7359 explicit CD3DX12_BARRIER_SUBRESOURCE_RANGE(UINT Subresource) noexcept :
7360 D3D12_BARRIER_SUBRESOURCE_RANGE{ Subresource, 0, 0, 0, 0, 0 }
7362 CD3DX12_BARRIER_SUBRESOURCE_RANGE(
7365 UINT firstArraySlice,
7366 UINT numArraySlices,
7367 UINT firstPlane = 0,
7368 UINT numPlanes = 1) noexcept :
7369 D3D12_BARRIER_SUBRESOURCE_RANGE
7381class CD3DX12_GLOBAL_BARRIER :
public D3D12_GLOBAL_BARRIER
7384 CD3DX12_GLOBAL_BARRIER() =
default;
7385 CD3DX12_GLOBAL_BARRIER(
const D3D12_GLOBAL_BARRIER &o) noexcept : D3D12_GLOBAL_BARRIER(o){}
7386 CD3DX12_GLOBAL_BARRIER(
7387 D3D12_BARRIER_SYNC syncBefore,
7388 D3D12_BARRIER_SYNC syncAfter,
7389 D3D12_BARRIER_ACCESS accessBefore,
7390 D3D12_BARRIER_ACCESS accessAfter) noexcept : D3D12_GLOBAL_BARRIER {
7399class CD3DX12_BUFFER_BARRIER :
public D3D12_BUFFER_BARRIER
7402 CD3DX12_BUFFER_BARRIER() =
default;
7403 CD3DX12_BUFFER_BARRIER(
const D3D12_BUFFER_BARRIER &o) noexcept : D3D12_BUFFER_BARRIER(o){}
7404 CD3DX12_BUFFER_BARRIER(
7405 D3D12_BARRIER_SYNC syncBefore,
7406 D3D12_BARRIER_SYNC syncAfter,
7407 D3D12_BARRIER_ACCESS accessBefore,
7408 D3D12_BARRIER_ACCESS accessAfter,
7409 ID3D12Resource *pRes) noexcept : D3D12_BUFFER_BARRIER {
7420class CD3DX12_TEXTURE_BARRIER :
public D3D12_TEXTURE_BARRIER
7423 CD3DX12_TEXTURE_BARRIER() =
default;
7424 CD3DX12_TEXTURE_BARRIER(
const D3D12_TEXTURE_BARRIER &o) noexcept : D3D12_TEXTURE_BARRIER(o){}
7425 CD3DX12_TEXTURE_BARRIER(
7426 D3D12_BARRIER_SYNC syncBefore,
7427 D3D12_BARRIER_SYNC syncAfter,
7428 D3D12_BARRIER_ACCESS accessBefore,
7429 D3D12_BARRIER_ACCESS accessAfter,
7430 D3D12_BARRIER_LAYOUT layoutBefore,
7431 D3D12_BARRIER_LAYOUT layoutAfter,
7432 ID3D12Resource *pRes,
7433 const D3D12_BARRIER_SUBRESOURCE_RANGE &subresources,
7434 D3D12_TEXTURE_BARRIER_FLAGS flag = D3D12_TEXTURE_BARRIER_FLAG_NONE) noexcept : D3D12_TEXTURE_BARRIER {
7448class CD3DX12_BARRIER_GROUP :
public D3D12_BARRIER_GROUP
7451 CD3DX12_BARRIER_GROUP() =
default;
7452 CD3DX12_BARRIER_GROUP(
const D3D12_BARRIER_GROUP &o) noexcept : D3D12_BARRIER_GROUP(o){}
7453 CD3DX12_BARRIER_GROUP(
UINT32 numBarriers,
const D3D12_BUFFER_BARRIER *pBarriers)
noexcept
7455 Type = D3D12_BARRIER_TYPE_BUFFER;
7456 NumBarriers = numBarriers;
7457 pBufferBarriers = pBarriers;
7459 CD3DX12_BARRIER_GROUP(
UINT32 numBarriers,
const D3D12_TEXTURE_BARRIER *pBarriers)
noexcept
7461 Type = D3D12_BARRIER_TYPE_TEXTURE;
7462 NumBarriers = numBarriers;
7463 pTextureBarriers = pBarriers;
7465 CD3DX12_BARRIER_GROUP(
UINT32 numBarriers,
const D3D12_GLOBAL_BARRIER *pBarriers)
noexcept
7467 Type = D3D12_BARRIER_TYPE_GLOBAL;
7468 NumBarriers = numBarriers;
7469 pGlobalBarriers = pBarriers;
7476#ifndef D3DX12_NO_CHECK_FEATURE_SUPPORT_CLASS
7484class CD3DX12FeatureSupport
7488 CD3DX12FeatureSupport() noexcept;
7491 HRESULT Init(ID3D12Device* pDevice);
7494 HRESULT GetStatus() const noexcept {
return m_hStatus; }
7498 BOOL DoublePrecisionFloatShaderOps() const noexcept;
7499 BOOL OutputMergerLogicOp() const noexcept;
7500 D3D12_SHADER_MIN_PRECISION_SUPPORT MinPrecisionSupport() const noexcept;
7501 D3D12_TILED_RESOURCES_TIER TiledResourcesTier() const noexcept;
7502 D3D12_RESOURCE_BINDING_TIER ResourceBindingTier() const noexcept;
7503 BOOL PSSpecifiedStencilRefSupported() const noexcept;
7504 BOOL TypedUAVLoadAdditionalFormats() const noexcept;
7505 BOOL ROVsSupported() const noexcept;
7506 D3D12_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier() const noexcept;
7507 BOOL StandardSwizzle64KBSupported() const noexcept;
7508 BOOL CrossAdapterRowMajorTextureSupported() const noexcept;
7509 BOOL VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation() const noexcept;
7510 D3D12_RESOURCE_HEAP_TIER ResourceHeapTier() const noexcept;
7511 D3D12_CROSS_NODE_SHARING_TIER CrossNodeSharingTier() const noexcept;
7512 UINT MaxGPUVirtualAddressBitsPerResource() const noexcept;
7515 D3D_FEATURE_LEVEL MaxSupportedFeatureLevel() const noexcept;
7518 HRESULT FormatSupport(DXGI_FORMAT Format, D3D12_FORMAT_SUPPORT1& Support1, D3D12_FORMAT_SUPPORT2& Support2) const;
7521 HRESULT MultisampleQualityLevels(DXGI_FORMAT Format, UINT SampleCount, D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS Flags, UINT& NumQualityLevels) const;
7524 HRESULT FormatInfo(DXGI_FORMAT Format,
UINT8& PlaneCount) const;
7527 UINT MaxGPUVirtualAddressBitsPerProcess() const noexcept;
7530 D3D_SHADER_MODEL HighestShaderModel() const noexcept;
7533 BOOL WaveOps() const noexcept;
7534 UINT WaveLaneCountMin() const noexcept;
7535 UINT WaveLaneCountMax() const noexcept;
7536 UINT TotalLaneCount() const noexcept;
7537 BOOL ExpandedComputeResourceStates() const noexcept;
7538 BOOL Int64ShaderOps() const noexcept;
7541 D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS ProtectedResourceSessionSupport(UINT NodeIndex = 0) const;
7544 D3D_ROOT_SIGNATURE_VERSION HighestRootSignatureVersion() const noexcept;
7547 BOOL TileBasedRenderer(UINT NodeIndex = 0) const;
7548 BOOL UMA(UINT NodeIndex = 0) const;
7549 BOOL CacheCoherentUMA(UINT NodeIndex = 0) const;
7550 BOOL IsolatedMMU(UINT NodeIndex = 0) const;
7553 BOOL DepthBoundsTestSupported() const noexcept;
7554 D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER ProgrammableSamplePositionsTier() const noexcept;
7557 D3D12_SHADER_CACHE_SUPPORT_FLAGS ShaderCacheSupportFlags() const noexcept;
7560 BOOL CommandQueuePrioritySupported(D3D12_COMMAND_LIST_TYPE CommandListType, UINT Priority);
7563 BOOL CopyQueueTimestampQueriesSupported() const noexcept;
7564 BOOL CastingFullyTypedFormatSupported() const noexcept;
7565 D3D12_COMMAND_LIST_SUPPORT_FLAGS WriteBufferImmediateSupportFlags() const noexcept;
7566 D3D12_VIEW_INSTANCING_TIER ViewInstancingTier() const noexcept;
7567 BOOL BarycentricsSupported() const noexcept;
7570 BOOL ExistingHeapsSupported() const noexcept;
7573 BOOL MSAA64KBAlignedTextureSupported() const noexcept;
7574 D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER SharedResourceCompatibilityTier() const noexcept;
7575 BOOL Native16BitShaderOpsSupported() const noexcept;
7578 D3D12_HEAP_SERIALIZATION_TIER HeapSerializationTier(UINT NodeIndex = 0) const;
7582 BOOL CrossNodeAtomicShaderInstructions() const noexcept;
7585 BOOL SRVOnlyTiledResourceTier3() const noexcept;
7586 D3D12_RENDER_PASS_TIER RenderPassesTier() const noexcept;
7587 D3D12_RAYTRACING_TIER RaytracingTier() const noexcept;
7589#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4)
7591 BOOL DisplayableTexture() const noexcept;
7596 BOOL AdditionalShadingRatesSupported() const noexcept;
7597 BOOL PerPrimitiveShadingRateSupportedWithViewportIndexing() const noexcept;
7598 D3D12_VARIABLE_SHADING_RATE_TIER VariableShadingRateTier() const noexcept;
7599 UINT ShadingRateImageTileSize() const noexcept;
7600 BOOL BackgroundProcessingSupported() const noexcept;
7603 HRESULT QueryMetaCommand(D3D12_FEATURE_DATA_QUERY_META_COMMAND& dQueryMetaCommand) const;
7606 D3D12_MESH_SHADER_TIER MeshShaderTier() const noexcept;
7607 D3D12_SAMPLER_FEEDBACK_TIER SamplerFeedbackTier() const noexcept;
7610 UINT ProtectedResourceSessionTypeCount(UINT NodeIndex = 0) const;
7613 std::vector<GUID> ProtectedResourceSessionTypes(UINT NodeIndex = 0) const;
7615#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 3)
7617 BOOL UnalignedBlockTexturesSupported() const noexcept;
7620 BOOL MeshShaderPipelineStatsSupported() const noexcept;
7621 BOOL MeshShaderSupportsFullRangeRenderTargetArrayIndex() const noexcept;
7622 BOOL AtomicInt64OnTypedResourceSupported() const noexcept;
7623 BOOL AtomicInt64OnGroupSharedSupported() const noexcept;
7624 BOOL DerivativesInMeshAndAmplificationShadersSupported() const noexcept;
7625 D3D12_WAVE_MMA_TIER WaveMMATier() const noexcept;
7628#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4)
7630 BOOL VariableRateShadingSumCombinerSupported() const noexcept;
7631 BOOL MeshShaderPerPrimitiveShadingRateSupported() const noexcept;
7634 BOOL AtomicInt64OnDescriptorHeapResourceSupported() const noexcept;
7637#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 600)
7639 D3D12_TRI_STATE MSPrimitivesPipelineStatisticIncludesCulledPrimitives() const noexcept;
7640 BOOL EnhancedBarriersSupported() const noexcept;
7641 BOOL RelaxedFormatCastingSupported() const noexcept;
7644#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 602)
7646 BOOL UnrestrictedBufferTextureCopyPitchSupported() const noexcept;
7647 BOOL UnrestrictedVertexElementAlignmentSupported() const noexcept;
7648 BOOL InvertedViewportHeightFlipsYSupported() const noexcept;
7649 BOOL InvertedViewportDepthFlipsZSupported() const noexcept;
7650 BOOL TextureCopyBetweenDimensionsSupported() const noexcept;
7651 BOOL AlphaBlendFactorSupported() const noexcept;
7654#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)
7656 BOOL AdvancedTextureOpsSupported() const noexcept;
7657 BOOL WriteableMSAATexturesSupported() const noexcept;
7658 BOOL IndependentFrontAndBackStencilRefMaskSupported() const noexcept;
7661 BOOL TriangleFanSupported() const noexcept;
7662 BOOL DynamicIndexBufferStripCutSupported() const noexcept;
7665#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)
7667 BOOL DynamicDepthBiasSupported() const noexcept;
7670#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
7671 BOOL GPUUploadHeapSupported() const noexcept;
7674 BOOL NonNormalizedCoordinateSamplersSupported() const noexcept;
7675 BOOL ManualWriteTrackingResourceSupported() const noexcept;
7678 BOOL RenderPassesValid() const noexcept;
7681#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610)
7682 BOOL MismatchingOutputDimensionsSupported() const noexcept;
7683 UINT SupportedSampleCountsWithNoOutputs() const noexcept;
7684 BOOL PointSamplingAddressesNeverRoundUp() const noexcept;
7685 BOOL RasterizerDesc2Supported() const noexcept;
7686 BOOL NarrowQuadrilateralLinesSupported() const noexcept;
7687 BOOL AnisoFilterWithPointMipSupported() const noexcept;
7688 UINT MaxSamplerDescriptorHeapSize() const noexcept;
7689 UINT MaxSamplerDescriptorHeapSizeWithStaticSamplers() const noexcept;
7690 UINT MaxViewDescriptorHeapSize() const noexcept;
7693#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 611)
7694 BOOL ComputeOnlyWriteWatchSupported() const noexcept;
7697#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612)
7698 D3D12_EXECUTE_INDIRECT_TIER ExecuteIndirectTier() const noexcept;
7699 D3D12_WORK_GRAPHS_TIER WorkGraphsTier() const noexcept;
7702#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 617)
7703 D3D12_TIGHT_ALIGNMENT_TIER TightAlignmentSupportTier() const noexcept;
7707 struct ProtectedResourceSessionTypesLocal : D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPES
7709 std::vector<GUID> TypeVec;
7715 HRESULT QueryHighestShaderModel();
7719 HRESULT QueryHighestRootSignatureVersion();
7722 HRESULT QueryHighestFeatureLevel();
7725 HRESULT QueryProtectedResourceSessionTypes(UINT NodeIndex, UINT Count);
7729 ID3D12Device* m_pDevice;
7735 D3D12_FEATURE_DATA_D3D12_OPTIONS m_dOptions;
7736 D3D_FEATURE_LEVEL m_eMaxFeatureLevel;
7737 D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT m_dGPUVASupport;
7738 D3D12_FEATURE_DATA_SHADER_MODEL m_dShaderModel;
7739 D3D12_FEATURE_DATA_D3D12_OPTIONS1 m_dOptions1;
7740 std::vector<D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_SUPPORT> m_dProtectedResourceSessionSupport;
7741 D3D12_FEATURE_DATA_ROOT_SIGNATURE m_dRootSignature;
7742 std::vector<D3D12_FEATURE_DATA_ARCHITECTURE1> m_dArchitecture1;
7743 D3D12_FEATURE_DATA_D3D12_OPTIONS2 m_dOptions2;
7744 D3D12_FEATURE_DATA_SHADER_CACHE m_dShaderCache;
7745 D3D12_FEATURE_DATA_COMMAND_QUEUE_PRIORITY m_dCommandQueuePriority;
7746 D3D12_FEATURE_DATA_D3D12_OPTIONS3 m_dOptions3;
7747 D3D12_FEATURE_DATA_EXISTING_HEAPS m_dExistingHeaps;
7748 D3D12_FEATURE_DATA_D3D12_OPTIONS4 m_dOptions4;
7749 std::vector<D3D12_FEATURE_DATA_SERIALIZATION> m_dSerialization;
7750 D3D12_FEATURE_DATA_CROSS_NODE m_dCrossNode;
7751 D3D12_FEATURE_DATA_D3D12_OPTIONS5 m_dOptions5;
7752#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4)
7753 D3D12_FEATURE_DATA_DISPLAYABLE m_dDisplayable;
7755 D3D12_FEATURE_DATA_D3D12_OPTIONS6 m_dOptions6;
7756 D3D12_FEATURE_DATA_D3D12_OPTIONS7 m_dOptions7;
7757 std::vector<D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPE_COUNT> m_dProtectedResourceSessionTypeCount;
7758 std::vector<ProtectedResourceSessionTypesLocal> m_dProtectedResourceSessionTypes;
7759#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 3)
7760 D3D12_FEATURE_DATA_D3D12_OPTIONS8 m_dOptions8;
7761 D3D12_FEATURE_DATA_D3D12_OPTIONS9 m_dOptions9;
7763#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4)
7764 D3D12_FEATURE_DATA_D3D12_OPTIONS10 m_dOptions10;
7765 D3D12_FEATURE_DATA_D3D12_OPTIONS11 m_dOptions11;
7767#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 600)
7768 D3D12_FEATURE_DATA_D3D12_OPTIONS12 m_dOptions12;
7770#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 602)
7771 D3D12_FEATURE_DATA_D3D12_OPTIONS13 m_dOptions13;
7773#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)
7774 D3D12_FEATURE_DATA_D3D12_OPTIONS14 m_dOptions14;
7775 D3D12_FEATURE_DATA_D3D12_OPTIONS15 m_dOptions15;
7777#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)
7778 D3D12_FEATURE_DATA_D3D12_OPTIONS16 m_dOptions16;
7780#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
7781 D3D12_FEATURE_DATA_D3D12_OPTIONS17 m_dOptions17;
7783#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
7784 D3D12_FEATURE_DATA_D3D12_OPTIONS18 m_dOptions18;
7786#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610)
7787 D3D12_FEATURE_DATA_D3D12_OPTIONS19 m_dOptions19;
7789#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 611)
7790 D3D12_FEATURE_DATA_D3D12_OPTIONS20 m_dOptions20;
7792#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612)
7793 D3D12_FEATURE_DATA_D3D12_OPTIONS21 m_dOptions21;
7795#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 617)
7796 D3D12_FEATURE_DATA_TIGHT_ALIGNMENT m_dTightAlignment;
7804#define FEATURE_SUPPORT_GET(RETTYPE,FEATURE,OPTION) \
7805inline RETTYPE CD3DX12FeatureSupport::OPTION() const noexcept \
7807 return FEATURE.OPTION; \
7812#define FEATURE_SUPPORT_GET_NAME(RETTYPE,FEATURE,OPTION,NAME) \
7813inline RETTYPE CD3DX12FeatureSupport::NAME() const noexcept \
7815 return FEATURE.OPTION; \
7820#define FEATURE_SUPPORT_GET_NODE_INDEXED(RETTYPE,FEATURE,OPTION) \
7821inline RETTYPE CD3DX12FeatureSupport::OPTION(UINT NodeIndex) const \
7823 return FEATURE[NodeIndex].OPTION; \
7828#define FEATURE_SUPPORT_GET_NODE_INDEXED_NAME(RETTYPE,FEATURE,OPTION,NAME) \
7829inline RETTYPE CD3DX12FeatureSupport::NAME(UINT NodeIndex) const \
7831 return FEATURE[NodeIndex].OPTION; \
7834inline CD3DX12FeatureSupport::CD3DX12FeatureSupport() noexcept
7836, m_hStatus(E_INVALIDARG)
7838, m_eMaxFeatureLevel{}
7845, m_dCommandQueuePriority{}
7851#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4)
7856#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 3)
7860#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4)
7864#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 600)
7867#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 602)
7870#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)
7874#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)
7877#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
7880#if defined (D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
7883#if defined (D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610)
7886#if defined (D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 611)
7889#if defined (D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612)
7892#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 617)
7893, m_dTightAlignment{}
7897inline HRESULT CD3DX12FeatureSupport::Init(ID3D12Device* pDevice)
7901 m_hStatus = E_INVALIDARG;
7905 m_pDevice = pDevice;
7908 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS, &m_dOptions,
sizeof(m_dOptions))))
7913 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT, &m_dGPUVASupport,
sizeof(m_dGPUVASupport))))
7915 m_dGPUVASupport = {};
7918 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS1, &m_dOptions1,
sizeof(m_dOptions1))))
7923 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS2, &m_dOptions2,
sizeof(m_dOptions2))))
7928 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_SHADER_CACHE, &m_dShaderCache,
sizeof(m_dShaderCache))))
7930 m_dShaderCache = {};
7933 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS3, &m_dOptions3,
sizeof(m_dOptions3))))
7938 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_EXISTING_HEAPS, &m_dExistingHeaps,
sizeof(m_dExistingHeaps))))
7940 m_dExistingHeaps = {};
7943 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS4, &m_dOptions4,
sizeof(m_dOptions4))))
7948 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_CROSS_NODE, &m_dCrossNode,
sizeof(m_dCrossNode))))
7953 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS5, &m_dOptions5,
sizeof(m_dOptions5))))
7958#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4)
7959 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_DISPLAYABLE, &m_dDisplayable,
sizeof(m_dDisplayable))))
7961 m_dDisplayable = {};
7965 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS6, &m_dOptions6,
sizeof(m_dOptions6))))
7970 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS7, &m_dOptions7,
sizeof(m_dOptions7))))
7975#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 3)
7976 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS8, &m_dOptions8,
sizeof(m_dOptions8))))
7981 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS9, &m_dOptions9,
sizeof(m_dOptions9))))
7987#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4)
7988 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS10, &m_dOptions10,
sizeof(m_dOptions10))))
7993 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS11, &m_dOptions11,
sizeof(m_dOptions11))))
7999#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 600)
8000 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS12, &m_dOptions12,
sizeof(m_dOptions12))))
8003 m_dOptions12.MSPrimitivesPipelineStatisticIncludesCulledPrimitives = D3D12_TRI_STATE::D3D12_TRI_STATE_UNKNOWN;
8007#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 602)
8008 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS13, &m_dOptions13,
sizeof(m_dOptions13))))
8014#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)
8015 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS14, &m_dOptions14,
sizeof(m_dOptions14))))
8020 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS15, &m_dOptions15,
sizeof(m_dOptions15))))
8026#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)
8027 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS16, &m_dOptions16,
sizeof(m_dOptions16))))
8033#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
8034 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS17, &m_dOptions17,
sizeof(m_dOptions17))))
8039 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS18, &m_dOptions18,
sizeof(m_dOptions18))))
8041 m_dOptions18.RenderPassesValid =
false;
8045#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610)
8046 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS19, &m_dOptions19,
sizeof(m_dOptions19))))
8049 m_dOptions19.SupportedSampleCountsWithNoOutputs = 1;
8050 m_dOptions19.MaxSamplerDescriptorHeapSize = D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE;
8051 m_dOptions19.MaxSamplerDescriptorHeapSizeWithStaticSamplers = D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE;
8052 m_dOptions19.MaxViewDescriptorHeapSize = D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_1;
8056#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 611)
8057 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS20, &m_dOptions20,
sizeof(m_dOptions20))))
8063#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612)
8064 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS21, &m_dOptions21,
sizeof(m_dOptions21))))
8070#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 617)
8071 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_TIGHT_ALIGNMENT, &m_dTightAlignment,
sizeof(m_dTightAlignment))))
8073 m_dTightAlignment = {};
8078 const UINT uNodeCount = m_pDevice->GetNodeCount();
8079 m_dProtectedResourceSessionSupport.resize(uNodeCount);
8080 m_dArchitecture1.resize(uNodeCount);
8081 m_dSerialization.resize(uNodeCount);
8082 m_dProtectedResourceSessionTypeCount.resize(uNodeCount);
8083 m_dProtectedResourceSessionTypes.resize(uNodeCount);
8084 for (UINT NodeIndex = 0; NodeIndex < uNodeCount; NodeIndex++)
8086 m_dProtectedResourceSessionSupport[NodeIndex].NodeIndex = NodeIndex;
8087 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_SUPPORT, &m_dProtectedResourceSessionSupport[NodeIndex],
sizeof(m_dProtectedResourceSessionSupport[NodeIndex]))))
8089 m_dProtectedResourceSessionSupport[NodeIndex].Support = D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAG_NONE;
8092 m_dArchitecture1[NodeIndex].NodeIndex = NodeIndex;
8093 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_ARCHITECTURE1, &m_dArchitecture1[NodeIndex],
sizeof(m_dArchitecture1[NodeIndex]))))
8095 D3D12_FEATURE_DATA_ARCHITECTURE dArchLocal = {};
8096 dArchLocal.NodeIndex = NodeIndex;
8097 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_ARCHITECTURE, &dArchLocal,
sizeof(dArchLocal))))
8099 dArchLocal.TileBasedRenderer =
false;
8100 dArchLocal.UMA =
false;
8101 dArchLocal.CacheCoherentUMA =
false;
8104 m_dArchitecture1[NodeIndex].TileBasedRenderer = dArchLocal.TileBasedRenderer;
8105 m_dArchitecture1[NodeIndex].UMA = dArchLocal.UMA;
8106 m_dArchitecture1[NodeIndex].CacheCoherentUMA = dArchLocal.CacheCoherentUMA;
8107 m_dArchitecture1[NodeIndex].IsolatedMMU =
false;
8110 m_dSerialization[NodeIndex].NodeIndex = NodeIndex;
8111 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_SERIALIZATION, &m_dSerialization[NodeIndex],
sizeof(m_dSerialization[NodeIndex]))))
8113 m_dSerialization[NodeIndex].HeapSerializationTier = D3D12_HEAP_SERIALIZATION_TIER_0;
8116 m_dProtectedResourceSessionTypeCount[NodeIndex].NodeIndex = NodeIndex;
8117 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_TYPE_COUNT, &m_dProtectedResourceSessionTypeCount[NodeIndex],
sizeof(m_dProtectedResourceSessionTypeCount[NodeIndex]))))
8119 m_dProtectedResourceSessionTypeCount[NodeIndex].Count = 0;
8124 QueryProtectedResourceSessionTypes(NodeIndex, m_dProtectedResourceSessionTypeCount[NodeIndex].Count);
8128 if (FAILED(m_hStatus = QueryHighestShaderModel()))
8133 if (FAILED(m_hStatus = QueryHighestRootSignatureVersion()))
8139 if (FAILED(m_hStatus = QueryHighestFeatureLevel()))
8148FEATURE_SUPPORT_GET(BOOL, m_dOptions, DoublePrecisionFloatShaderOps);
8149FEATURE_SUPPORT_GET(BOOL, m_dOptions, OutputMergerLogicOp);
8150FEATURE_SUPPORT_GET(D3D12_SHADER_MIN_PRECISION_SUPPORT, m_dOptions, MinPrecisionSupport);
8151FEATURE_SUPPORT_GET(D3D12_TILED_RESOURCES_TIER, m_dOptions, TiledResourcesTier);
8152FEATURE_SUPPORT_GET(D3D12_RESOURCE_BINDING_TIER, m_dOptions, ResourceBindingTier);
8153FEATURE_SUPPORT_GET(BOOL, m_dOptions, PSSpecifiedStencilRefSupported);
8154FEATURE_SUPPORT_GET(BOOL, m_dOptions, TypedUAVLoadAdditionalFormats);
8155FEATURE_SUPPORT_GET(BOOL, m_dOptions, ROVsSupported);
8156FEATURE_SUPPORT_GET(D3D12_CONSERVATIVE_RASTERIZATION_TIER, m_dOptions, ConservativeRasterizationTier);
8157FEATURE_SUPPORT_GET(BOOL, m_dOptions, StandardSwizzle64KBSupported);
8158FEATURE_SUPPORT_GET(BOOL, m_dOptions, CrossAdapterRowMajorTextureSupported);
8159FEATURE_SUPPORT_GET(BOOL, m_dOptions, VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation);
8160FEATURE_SUPPORT_GET(D3D12_RESOURCE_HEAP_TIER, m_dOptions, ResourceHeapTier);
8163inline D3D12_CROSS_NODE_SHARING_TIER CD3DX12FeatureSupport::CrossNodeSharingTier() const noexcept
8165 if (m_dCrossNode.SharingTier > D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED)
8167 return m_dCrossNode.SharingTier;
8171 return m_dOptions.CrossNodeSharingTier;
8175inline UINT CD3DX12FeatureSupport::MaxGPUVirtualAddressBitsPerResource() const noexcept
8177 if (m_dOptions.MaxGPUVirtualAddressBitsPerResource > 0)
8179 return m_dOptions.MaxGPUVirtualAddressBitsPerResource;
8183 return m_dGPUVASupport.MaxGPUVirtualAddressBitsPerResource;
8192inline D3D_FEATURE_LEVEL CD3DX12FeatureSupport::MaxSupportedFeatureLevel() const noexcept
8194 return m_eMaxFeatureLevel;
8198inline HRESULT CD3DX12FeatureSupport::FormatSupport(DXGI_FORMAT Format, D3D12_FORMAT_SUPPORT1& Support1, D3D12_FORMAT_SUPPORT2& Support2)
const
8200 D3D12_FEATURE_DATA_FORMAT_SUPPORT dFormatSupport;
8201 dFormatSupport.Format =
Format;
8204 HRESULT result = m_pDevice->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &dFormatSupport,
sizeof(D3D12_FEATURE_DATA_FORMAT_SUPPORT));
8206 Support1 = dFormatSupport.Support1;
8207 Support2 = dFormatSupport.Support2;
8213inline HRESULT CD3DX12FeatureSupport::MultisampleQualityLevels(DXGI_FORMAT Format, UINT SampleCount, D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS Flags, UINT& NumQualityLevels)
const
8215 D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS dMultisampleQualityLevels;
8216 dMultisampleQualityLevels.Format =
Format;
8217 dMultisampleQualityLevels.SampleCount = SampleCount;
8218 dMultisampleQualityLevels.Flags = Flags;
8220 HRESULT result = m_pDevice->CheckFeatureSupport(D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS, &dMultisampleQualityLevels,
sizeof(D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS));
8222 if (SUCCEEDED(result))
8224 NumQualityLevels = dMultisampleQualityLevels.NumQualityLevels;
8228 NumQualityLevels = 0;
8235inline HRESULT CD3DX12FeatureSupport::FormatInfo(DXGI_FORMAT Format,
UINT8& PlaneCount)
const
8237 D3D12_FEATURE_DATA_FORMAT_INFO dFormatInfo;
8238 dFormatInfo.Format =
Format;
8240 HRESULT result = m_pDevice->CheckFeatureSupport(D3D12_FEATURE_FORMAT_INFO, &dFormatInfo,
sizeof(D3D12_FEATURE_DATA_FORMAT_INFO));
8247 PlaneCount = dFormatInfo.PlaneCount;
8254FEATURE_SUPPORT_GET(UINT, m_dGPUVASupport, MaxGPUVirtualAddressBitsPerProcess);
8257inline D3D_SHADER_MODEL CD3DX12FeatureSupport::HighestShaderModel() const noexcept
8259 return m_dShaderModel.HighestShaderModel;
8263FEATURE_SUPPORT_GET(BOOL, m_dOptions1, WaveOps);
8264FEATURE_SUPPORT_GET(UINT, m_dOptions1, WaveLaneCountMin);
8265FEATURE_SUPPORT_GET(UINT, m_dOptions1, WaveLaneCountMax);
8266FEATURE_SUPPORT_GET(UINT, m_dOptions1, TotalLaneCount);
8267FEATURE_SUPPORT_GET(BOOL, m_dOptions1, ExpandedComputeResourceStates);
8268FEATURE_SUPPORT_GET(BOOL, m_dOptions1, Int64ShaderOps);
8271inline D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS CD3DX12FeatureSupport::ProtectedResourceSessionSupport(UINT NodeIndex)
const
8273 return m_dProtectedResourceSessionSupport[NodeIndex].Support;
8277inline D3D_ROOT_SIGNATURE_VERSION CD3DX12FeatureSupport::HighestRootSignatureVersion() const noexcept
8279 return m_dRootSignature.HighestVersion;
8284FEATURE_SUPPORT_GET_NODE_INDEXED(BOOL, m_dArchitecture1, TileBasedRenderer);
8285FEATURE_SUPPORT_GET_NODE_INDEXED(BOOL, m_dArchitecture1, UMA);
8286FEATURE_SUPPORT_GET_NODE_INDEXED(BOOL, m_dArchitecture1, CacheCoherentUMA);
8287FEATURE_SUPPORT_GET_NODE_INDEXED(BOOL, m_dArchitecture1, IsolatedMMU);
8290FEATURE_SUPPORT_GET(BOOL, m_dOptions2, DepthBoundsTestSupported);
8291FEATURE_SUPPORT_GET(D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER, m_dOptions2, ProgrammableSamplePositionsTier);
8294FEATURE_SUPPORT_GET_NAME(D3D12_SHADER_CACHE_SUPPORT_FLAGS, m_dShaderCache, SupportFlags, ShaderCacheSupportFlags);
8297inline BOOL CD3DX12FeatureSupport::CommandQueuePrioritySupported(D3D12_COMMAND_LIST_TYPE CommandListType, UINT Priority)
8299 m_dCommandQueuePriority.CommandListType = CommandListType;
8300 m_dCommandQueuePriority.Priority = Priority;
8302 if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_COMMAND_QUEUE_PRIORITY, &m_dCommandQueuePriority,
sizeof(D3D12_FEATURE_DATA_COMMAND_QUEUE_PRIORITY))))
8307 return m_dCommandQueuePriority.PriorityForTypeIsSupported;
8311FEATURE_SUPPORT_GET(BOOL, m_dOptions3, CopyQueueTimestampQueriesSupported);
8312FEATURE_SUPPORT_GET(BOOL, m_dOptions3, CastingFullyTypedFormatSupported);
8313FEATURE_SUPPORT_GET(D3D12_COMMAND_LIST_SUPPORT_FLAGS, m_dOptions3, WriteBufferImmediateSupportFlags);
8314FEATURE_SUPPORT_GET(D3D12_VIEW_INSTANCING_TIER, m_dOptions3, ViewInstancingTier);
8315FEATURE_SUPPORT_GET(BOOL, m_dOptions3, BarycentricsSupported);
8318FEATURE_SUPPORT_GET_NAME(BOOL, m_dExistingHeaps, Supported, ExistingHeapsSupported);
8321FEATURE_SUPPORT_GET(BOOL, m_dOptions4, MSAA64KBAlignedTextureSupported);
8322FEATURE_SUPPORT_GET(D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER, m_dOptions4, SharedResourceCompatibilityTier);
8323FEATURE_SUPPORT_GET(BOOL, m_dOptions4, Native16BitShaderOpsSupported);
8326FEATURE_SUPPORT_GET_NODE_INDEXED(D3D12_HEAP_SERIALIZATION_TIER, m_dSerialization, HeapSerializationTier);
8330FEATURE_SUPPORT_GET_NAME(BOOL, m_dCrossNode, AtomicShaderInstructions, CrossNodeAtomicShaderInstructions);
8333FEATURE_SUPPORT_GET(BOOL, m_dOptions5, SRVOnlyTiledResourceTier3);
8334FEATURE_SUPPORT_GET(D3D12_RENDER_PASS_TIER, m_dOptions5, RenderPassesTier);
8335FEATURE_SUPPORT_GET(D3D12_RAYTRACING_TIER, m_dOptions5, RaytracingTier);
8337#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4)
8339FEATURE_SUPPORT_GET(BOOL, m_dDisplayable, DisplayableTexture);
8344FEATURE_SUPPORT_GET(BOOL, m_dOptions6, AdditionalShadingRatesSupported);
8345FEATURE_SUPPORT_GET(BOOL, m_dOptions6, PerPrimitiveShadingRateSupportedWithViewportIndexing);
8346FEATURE_SUPPORT_GET(D3D12_VARIABLE_SHADING_RATE_TIER, m_dOptions6, VariableShadingRateTier);
8347FEATURE_SUPPORT_GET(UINT, m_dOptions6, ShadingRateImageTileSize);
8348FEATURE_SUPPORT_GET(BOOL, m_dOptions6, BackgroundProcessingSupported);
8352inline HRESULT CD3DX12FeatureSupport::QueryMetaCommand(D3D12_FEATURE_DATA_QUERY_META_COMMAND& dQueryMetaCommand)
const
8354 return m_pDevice->CheckFeatureSupport(D3D12_FEATURE_QUERY_META_COMMAND, &dQueryMetaCommand,
sizeof(D3D12_FEATURE_DATA_QUERY_META_COMMAND));
8358FEATURE_SUPPORT_GET(D3D12_MESH_SHADER_TIER, m_dOptions7, MeshShaderTier);
8359FEATURE_SUPPORT_GET(D3D12_SAMPLER_FEEDBACK_TIER, m_dOptions7, SamplerFeedbackTier);
8362FEATURE_SUPPORT_GET_NODE_INDEXED_NAME(UINT, m_dProtectedResourceSessionTypeCount, Count, ProtectedResourceSessionTypeCount);
8365FEATURE_SUPPORT_GET_NODE_INDEXED_NAME(std::vector<GUID>, m_dProtectedResourceSessionTypes, TypeVec, ProtectedResourceSessionTypes);
8367#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 3)
8369FEATURE_SUPPORT_GET(BOOL, m_dOptions8, UnalignedBlockTexturesSupported);
8372FEATURE_SUPPORT_GET(BOOL, m_dOptions9, MeshShaderPipelineStatsSupported);
8373FEATURE_SUPPORT_GET(BOOL, m_dOptions9, MeshShaderSupportsFullRangeRenderTargetArrayIndex);
8374FEATURE_SUPPORT_GET(BOOL, m_dOptions9, AtomicInt64OnTypedResourceSupported);
8375FEATURE_SUPPORT_GET(BOOL, m_dOptions9, AtomicInt64OnGroupSharedSupported);
8376FEATURE_SUPPORT_GET(BOOL, m_dOptions9, DerivativesInMeshAndAmplificationShadersSupported);
8377FEATURE_SUPPORT_GET(D3D12_WAVE_MMA_TIER, m_dOptions9, WaveMMATier);
8380#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4)
8382FEATURE_SUPPORT_GET(BOOL, m_dOptions10, VariableRateShadingSumCombinerSupported);
8383FEATURE_SUPPORT_GET(BOOL, m_dOptions10, MeshShaderPerPrimitiveShadingRateSupported);
8386FEATURE_SUPPORT_GET(BOOL, m_dOptions11, AtomicInt64OnDescriptorHeapResourceSupported);
8389#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 600)
8391FEATURE_SUPPORT_GET(D3D12_TRI_STATE, m_dOptions12, MSPrimitivesPipelineStatisticIncludesCulledPrimitives);
8392FEATURE_SUPPORT_GET(BOOL, m_dOptions12, EnhancedBarriersSupported);
8393FEATURE_SUPPORT_GET(BOOL, m_dOptions12, RelaxedFormatCastingSupported);
8396#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 602)
8398FEATURE_SUPPORT_GET(BOOL, m_dOptions13, UnrestrictedBufferTextureCopyPitchSupported);
8399FEATURE_SUPPORT_GET(BOOL, m_dOptions13, UnrestrictedVertexElementAlignmentSupported);
8400FEATURE_SUPPORT_GET(BOOL, m_dOptions13, InvertedViewportHeightFlipsYSupported);
8401FEATURE_SUPPORT_GET(BOOL, m_dOptions13, InvertedViewportDepthFlipsZSupported);
8402FEATURE_SUPPORT_GET(BOOL, m_dOptions13, TextureCopyBetweenDimensionsSupported);
8403FEATURE_SUPPORT_GET(BOOL, m_dOptions13, AlphaBlendFactorSupported);
8406#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)
8408FEATURE_SUPPORT_GET(BOOL, m_dOptions14, AdvancedTextureOpsSupported);
8409FEATURE_SUPPORT_GET(BOOL, m_dOptions14, WriteableMSAATexturesSupported);
8410FEATURE_SUPPORT_GET(BOOL, m_dOptions14, IndependentFrontAndBackStencilRefMaskSupported);
8413FEATURE_SUPPORT_GET(BOOL, m_dOptions15, TriangleFanSupported);
8414FEATURE_SUPPORT_GET(BOOL, m_dOptions15, DynamicIndexBufferStripCutSupported);
8417#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608)
8419FEATURE_SUPPORT_GET(BOOL, m_dOptions16, DynamicDepthBiasSupported);
8421#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
8422FEATURE_SUPPORT_GET(BOOL, m_dOptions16, GPUUploadHeapSupported);
8425FEATURE_SUPPORT_GET(BOOL, m_dOptions17, NonNormalizedCoordinateSamplersSupported);
8426FEATURE_SUPPORT_GET(BOOL, m_dOptions17, ManualWriteTrackingResourceSupported);
8429FEATURE_SUPPORT_GET(BOOL, m_dOptions18, RenderPassesValid);
8432#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610)
8433FEATURE_SUPPORT_GET(BOOL, m_dOptions19, MismatchingOutputDimensionsSupported);
8434FEATURE_SUPPORT_GET(UINT, m_dOptions19, SupportedSampleCountsWithNoOutputs);
8435FEATURE_SUPPORT_GET(BOOL, m_dOptions19, PointSamplingAddressesNeverRoundUp);
8436FEATURE_SUPPORT_GET(BOOL, m_dOptions19, RasterizerDesc2Supported);
8437FEATURE_SUPPORT_GET(BOOL, m_dOptions19, NarrowQuadrilateralLinesSupported);
8438FEATURE_SUPPORT_GET(BOOL, m_dOptions19, AnisoFilterWithPointMipSupported);
8439FEATURE_SUPPORT_GET(UINT, m_dOptions19, MaxSamplerDescriptorHeapSize);
8440FEATURE_SUPPORT_GET(UINT, m_dOptions19, MaxSamplerDescriptorHeapSizeWithStaticSamplers);
8441FEATURE_SUPPORT_GET(UINT, m_dOptions19, MaxViewDescriptorHeapSize);
8444#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 611)
8446FEATURE_SUPPORT_GET(BOOL, m_dOptions20, ComputeOnlyWriteWatchSupported);
8449#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612)
8451FEATURE_SUPPORT_GET(D3D12_EXECUTE_INDIRECT_TIER, m_dOptions21, ExecuteIndirectTier);
8452FEATURE_SUPPORT_GET(D3D12_WORK_GRAPHS_TIER, m_dOptions21, WorkGraphsTier);
8455#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 617)
8457FEATURE_SUPPORT_GET_NAME(D3D12_TIGHT_ALIGNMENT_TIER, m_dTightAlignment, SupportTier, TightAlignmentSupportTier);
8463inline HRESULT CD3DX12FeatureSupport::QueryHighestShaderModel()
8468 const D3D_SHADER_MODEL allModelVersions[] =
8470#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612)
8471 D3D_SHADER_MODEL_6_9,
8473#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606)
8474 D3D_SHADER_MODEL_6_8,
8476#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 3)
8477 D3D_SHADER_MODEL_6_7,
8479 D3D_SHADER_MODEL_6_6,
8480 D3D_SHADER_MODEL_6_5,
8481 D3D_SHADER_MODEL_6_4,
8482 D3D_SHADER_MODEL_6_3,
8483 D3D_SHADER_MODEL_6_2,
8484 D3D_SHADER_MODEL_6_1,
8485 D3D_SHADER_MODEL_6_0,
8486 D3D_SHADER_MODEL_5_1
8488 constexpr size_t numModelVersions =
sizeof(allModelVersions) /
sizeof(D3D_SHADER_MODEL);
8490 for (
size_t i = 0; i < numModelVersions; i++)
8492 m_dShaderModel.HighestShaderModel = allModelVersions[i];
8493 result = m_pDevice->CheckFeatureSupport(D3D12_FEATURE_SHADER_MODEL, &m_dShaderModel,
sizeof(D3D12_FEATURE_DATA_SHADER_MODEL));
8494 if (result != E_INVALIDARG)
8500 m_dShaderModel.HighestShaderModel =
static_cast<D3D_SHADER_MODEL
>(0);
8507 m_dShaderModel.HighestShaderModel =
static_cast<D3D_SHADER_MODEL
>(0);
8513inline HRESULT CD3DX12FeatureSupport::QueryHighestRootSignatureVersion()
8517 const D3D_ROOT_SIGNATURE_VERSION allRootSignatureVersions[] =
8519#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609)
8520 D3D_ROOT_SIGNATURE_VERSION_1_2,
8522 D3D_ROOT_SIGNATURE_VERSION_1_1,
8523 D3D_ROOT_SIGNATURE_VERSION_1_0,
8524 D3D_ROOT_SIGNATURE_VERSION_1,
8526 constexpr size_t numRootSignatureVersions =
sizeof(allRootSignatureVersions) /
sizeof(D3D_ROOT_SIGNATURE_VERSION);
8528 for (
size_t i = 0; i < numRootSignatureVersions; i++)
8530 m_dRootSignature.HighestVersion = allRootSignatureVersions[i];
8531 result = m_pDevice->CheckFeatureSupport(D3D12_FEATURE_ROOT_SIGNATURE, &m_dRootSignature,
sizeof(D3D12_FEATURE_DATA_ROOT_SIGNATURE));
8532 if (result != E_INVALIDARG)
8536 m_dRootSignature.HighestVersion =
static_cast<D3D_ROOT_SIGNATURE_VERSION
>(0);
8544 m_dRootSignature.HighestVersion =
static_cast<D3D_ROOT_SIGNATURE_VERSION
>(0);
8549inline HRESULT CD3DX12FeatureSupport::QueryHighestFeatureLevel()
8555 const D3D_FEATURE_LEVEL allLevels[] =
8557#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 3)
8558 D3D_FEATURE_LEVEL_12_2,
8560 D3D_FEATURE_LEVEL_12_1,
8561 D3D_FEATURE_LEVEL_12_0,
8562 D3D_FEATURE_LEVEL_11_1,
8563 D3D_FEATURE_LEVEL_11_0,
8564 D3D_FEATURE_LEVEL_10_1,
8565 D3D_FEATURE_LEVEL_10_0,
8566 D3D_FEATURE_LEVEL_9_3,
8567 D3D_FEATURE_LEVEL_9_2,
8568 D3D_FEATURE_LEVEL_9_1,
8569#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 5)
8570 D3D_FEATURE_LEVEL_1_0_CORE,
8572#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 611)
8573 D3D_FEATURE_LEVEL_1_0_GENERIC
8577 D3D12_FEATURE_DATA_FEATURE_LEVELS dFeatureLevel;
8578 dFeatureLevel.NumFeatureLevels =
static_cast<UINT
>(
sizeof(allLevels) /
sizeof(D3D_FEATURE_LEVEL));
8579 dFeatureLevel.pFeatureLevelsRequested = allLevels;
8581 result = m_pDevice->CheckFeatureSupport(D3D12_FEATURE_FEATURE_LEVELS, &dFeatureLevel,
sizeof(D3D12_FEATURE_DATA_FEATURE_LEVELS));
8582 if (SUCCEEDED(result))
8584 m_eMaxFeatureLevel = dFeatureLevel.MaxSupportedFeatureLevel;
8588 m_eMaxFeatureLevel =
static_cast<D3D_FEATURE_LEVEL
>(0);
8590 if (result == DXGI_ERROR_UNSUPPORTED)
8600inline HRESULT CD3DX12FeatureSupport::QueryProtectedResourceSessionTypes(UINT NodeIndex, UINT Count)
8602 auto& CurrentPRSTypes = m_dProtectedResourceSessionTypes[NodeIndex];
8603 CurrentPRSTypes.NodeIndex = NodeIndex;
8604 CurrentPRSTypes.Count = Count;
8605 CurrentPRSTypes.TypeVec.resize(CurrentPRSTypes.Count);
8606 CurrentPRSTypes.pTypes = CurrentPRSTypes.TypeVec.data();
8608 HRESULT result = m_pDevice->CheckFeatureSupport(D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_TYPES, &m_dProtectedResourceSessionTypes[NodeIndex],
sizeof(D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPES));
8612 CurrentPRSTypes.TypeVec.clear();
8618#undef FEATURE_SUPPORT_GET
8619#undef FEATURE_SUPPORT_GET_NAME
8620#undef FEATURE_SUPPORT_GET_NODE_INDEXED
8621#undef FEATURE_SUPPORT_GET_NODE_INDEXED_NAME
8627#undef D3DX12_COM_PTR
8628#undef D3DX12_COM_PTR_GET
8629#undef D3DX12_COM_PTR_ADDRESSOF
8632#pragma clang diagnostic pop
static DX12ShaderRegister< DefaultVertexShader > V
Definition DefaultShader.cpp:10
bool operator==(const json_pointer< RefStringTypeLhs > &lhs, const json_pointer< RefStringTypeRhs > &rhs) noexcept
Definition json.hpp:14737
bool operator!=(const json_pointer< RefStringTypeLhs > &lhs, const json_pointer< RefStringTypeRhs > &rhs) noexcept
Definition json.hpp:14762
str width
Definition enums.py:209
Dimension dimension(FlexDirection flexDirection)
Definition FlexDirection.h:105
Dimension
Definition Dimension.h:18
uint8_t Type
Definition slang-gfx.h:1359
FillMode
Definition slang-gfx.h:1265
size_t Offset
Definition slang-gfx.h:56
CullMode
Definition slang-gfx.h:1271
SlangResult Result
Definition slang-gfx.h:47
Format
Definition slang-gfx.h:336
#define SIZE_MAX
Definition slang-llvm.h:364
Definition slang-cpp-types.h:104