aboutsummaryrefslogtreecommitdiff
path: root/demo/d3d12/pipelineUtilD3D12.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'demo/d3d12/pipelineUtilD3D12.cpp')
-rw-r--r--demo/d3d12/pipelineUtilD3D12.cpp78
1 files changed, 78 insertions, 0 deletions
diff --git a/demo/d3d12/pipelineUtilD3D12.cpp b/demo/d3d12/pipelineUtilD3D12.cpp
new file mode 100644
index 0000000..81e2581
--- /dev/null
+++ b/demo/d3d12/pipelineUtilD3D12.cpp
@@ -0,0 +1,78 @@
+
+// this
+#include "pipelineUtilD3D12.h"
+
+namespace NvCo = nvidia::Common;
+
+namespace FlexSample {
+
+/* static */void PipelineUtilD3D::initRasterizerDesc(FrontWindingType winding, D3D12_RASTERIZER_DESC& desc)
+{
+ desc.FillMode = D3D12_FILL_MODE_SOLID;
+ desc.CullMode = D3D12_CULL_MODE_NONE;
+
+ desc.FrontCounterClockwise = (winding == FRONT_WINDING_COUNTER_CLOCKWISE);
+
+ desc.DepthBias = D3D12_DEFAULT_DEPTH_BIAS;
+ desc.DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP;
+ desc.SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS;
+ desc.DepthClipEnable = TRUE;
+ desc.MultisampleEnable = FALSE;
+ desc.AntialiasedLineEnable = FALSE;
+ desc.ForcedSampleCount = 0;
+ desc.ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF;
+}
+
+/* static */void PipelineUtilD3D::initSolidBlendDesc(D3D12_BLEND_DESC& desc)
+{
+ desc.AlphaToCoverageEnable = FALSE;
+ desc.IndependentBlendEnable = FALSE;
+ {
+ const D3D12_RENDER_TARGET_BLEND_DESC defaultRenderTargetBlendDesc =
+ {
+ FALSE,FALSE,
+ D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD,
+ D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD,
+ D3D12_LOGIC_OP_NOOP,
+ D3D12_COLOR_WRITE_ENABLE_ALL,
+ };
+ for (UINT i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
+ desc.RenderTarget[i] = defaultRenderTargetBlendDesc;
+ }
+}
+
+/* static */void PipelineUtilD3D::initTargetFormat(NvCo::Dx12RenderTarget* renderTarget, AppGraphCtxD3D12* renderContext, D3D12_GRAPHICS_PIPELINE_STATE_DESC& psoDesc)
+{
+ psoDesc.DepthStencilState.DepthEnable = TRUE;
+ psoDesc.DepthStencilState.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL;
+ psoDesc.DepthStencilState.DepthFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL;
+ psoDesc.DepthStencilState.StencilEnable = FALSE;
+ psoDesc.SampleMask = UINT_MAX;
+
+ // Normally single render target
+ psoDesc.NumRenderTargets = 1;
+
+ if (renderTarget)
+ {
+ psoDesc.RTVFormats[0] = renderTarget->getTargetFormat(NvCo::Dx12RenderTarget::BUFFER_TARGET);
+ psoDesc.DSVFormat = renderTarget->getTargetFormat(NvCo::Dx12RenderTarget::BUFFER_DEPTH_STENCIL);
+ psoDesc.NumRenderTargets = renderTarget->getNumRenderTargets();
+ psoDesc.SampleDesc.Count = 1;
+ }
+ else
+ {
+ const NvCo::Dx12TargetInfo& targetInfo = renderContext->m_targetInfo;
+
+ psoDesc.RTVFormats[0] = targetInfo.m_renderTargetFormats[0];
+ psoDesc.DSVFormat = targetInfo.m_depthStencilFormat;
+ psoDesc.SampleDesc.Count = targetInfo.m_numSamples;
+ }
+
+ // If no depth buffer, disable
+ if (psoDesc.DSVFormat == DXGI_FORMAT_UNKNOWN)
+ {
+ psoDesc.DepthStencilState.DepthEnable = FALSE;
+ }
+}
+
+} // namespace FlexSample \ No newline at end of file