summaryrefslogtreecommitdiffstats
path: root/tools/gfx/d3d
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2021-11-22 11:24:25 -0800
committerGitHub <noreply@github.com>2021-11-22 11:24:25 -0800
commitfd46034bf2de59b8ad51743e62b26359678432f7 (patch)
tree2879aac8cc49fea87fa2c168e69afae5c6e7b5df /tools/gfx/d3d
parent87eb789ae03cbd7a79d5433cefb37f10bec86753 (diff)
gfx: Add more fixed function states and instancing draw calls. (#2023)
* gfx: Add more fixed function states and instancing draw calls. * Fix clang error. * Fix clang. * Fixes. * Add `AccelerationStructureCurrentSize` enum. Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'tools/gfx/d3d')
-rw-r--r--tools/gfx/d3d/d3d-util.cpp108
-rw-r--r--tools/gfx/d3d/d3d-util.h9
2 files changed, 117 insertions, 0 deletions
diff --git a/tools/gfx/d3d/d3d-util.cpp b/tools/gfx/d3d/d3d-util.cpp
index afd4d068b..505755005 100644
--- a/tools/gfx/d3d/d3d-util.cpp
+++ b/tools/gfx/d3d/d3d-util.cpp
@@ -665,6 +665,114 @@ uint32_t D3DUtil::getPlaneSlice(DXGI_FORMAT format, TextureAspect aspect)
}
}
+D3D12_INPUT_CLASSIFICATION D3DUtil::getInputSlotClass(InputSlotClass slotClass)
+{
+ switch (slotClass)
+ {
+ case InputSlotClass::PerVertex:
+ return D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA;
+ case InputSlotClass::PerInstance:
+ return D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA;
+ default:
+ SLANG_ASSERT_FAILURE("Unknown input slot class.");
+ return D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA;
+ }
+}
+
+D3D12_FILL_MODE D3DUtil::getFillMode(FillMode mode)
+{
+ switch (mode)
+ {
+ case FillMode::Solid:
+ return D3D12_FILL_MODE_SOLID;
+ case FillMode::Wireframe:
+ return D3D12_FILL_MODE_WIREFRAME;
+ default:
+ SLANG_ASSERT_FAILURE("Unknown fill mode.");
+ return D3D12_FILL_MODE_SOLID;
+ }
+}
+
+D3D12_CULL_MODE D3DUtil::getCullMode(CullMode mode)
+{
+ switch (mode)
+ {
+ case CullMode::None:
+ return D3D12_CULL_MODE_NONE;
+ case CullMode::Front:
+ return D3D12_CULL_MODE_FRONT;
+ case CullMode::Back:
+ return D3D12_CULL_MODE_BACK;
+ default:
+ SLANG_ASSERT_FAILURE("Unknown cull mode.");
+ return D3D12_CULL_MODE_NONE;
+ }
+}
+
+D3D12_BLEND_OP D3DUtil::getBlendOp(BlendOp op)
+{
+ switch (op)
+ {
+ case BlendOp::Add:
+ return D3D12_BLEND_OP_ADD;
+ case BlendOp::Subtract:
+ return D3D12_BLEND_OP_SUBTRACT;
+ case BlendOp::ReverseSubtract:
+ return D3D12_BLEND_OP_REV_SUBTRACT;
+ case BlendOp::Min:
+ return D3D12_BLEND_OP_MIN;
+ case BlendOp::Max:
+ return D3D12_BLEND_OP_MAX;
+ default:
+ SLANG_ASSERT_FAILURE("Unknown blend op.");
+ return D3D12_BLEND_OP_ADD;
+ }
+}
+
+D3D12_BLEND D3DUtil::getBlendFactor(BlendFactor factor)
+{
+ switch (factor)
+ {
+ case BlendFactor::Zero:
+ return D3D12_BLEND_ZERO;
+ case BlendFactor::One:
+ return D3D12_BLEND_ONE;
+ case BlendFactor::SrcColor:
+ return D3D12_BLEND_SRC_COLOR;
+ case BlendFactor::InvSrcColor:
+ return D3D12_BLEND_INV_SRC_COLOR;
+ case BlendFactor::SrcAlpha:
+ return D3D12_BLEND_SRC_ALPHA;
+ case BlendFactor::InvSrcAlpha:
+ return D3D12_BLEND_INV_SRC_ALPHA;
+ case BlendFactor::DestAlpha:
+ return D3D12_BLEND_DEST_ALPHA;
+ case BlendFactor::InvDestAlpha:
+ return D3D12_BLEND_INV_DEST_ALPHA;
+ case BlendFactor::DestColor:
+ return D3D12_BLEND_DEST_COLOR;
+ case BlendFactor::InvDestColor:
+ return D3D12_BLEND_INV_DEST_COLOR;
+ case BlendFactor::SrcAlphaSaturate:
+ return D3D12_BLEND_SRC_ALPHA_SAT;
+ case BlendFactor::BlendColor:
+ return D3D12_BLEND_BLEND_FACTOR;
+ case BlendFactor::InvBlendColor:
+ return D3D12_BLEND_INV_BLEND_FACTOR;
+ case BlendFactor::SecondarySrcColor:
+ return D3D12_BLEND_SRC1_COLOR;
+ case BlendFactor::InvSecondarySrcColor:
+ return D3D12_BLEND_INV_SRC1_COLOR;
+ case BlendFactor::SecondarySrcAlpha:
+ return D3D12_BLEND_SRC1_ALPHA;
+ case BlendFactor::InvSecondarySrcAlpha:
+ return D3D12_BLEND_INV_SRC1_ALPHA;
+ default:
+ SLANG_ASSERT_FAILURE("Unknown blend factor.");
+ return D3D12_BLEND_ZERO;
+ }
+}
+
/* static */SlangResult D3DUtil::findAdapters(DeviceCheckFlags flags, const UnownedStringSlice& adapterName, IDXGIFactory* dxgiFactory, List<ComPtr<IDXGIAdapter>>& outDxgiAdapters)
{
Slang::String lowerAdapterName = Slang::String(adapterName).toLower();
diff --git a/tools/gfx/d3d/d3d-util.h b/tools/gfx/d3d/d3d-util.h
index 7ce922b21..96ccfd776 100644
--- a/tools/gfx/d3d/d3d-util.h
+++ b/tools/gfx/d3d/d3d-util.h
@@ -98,6 +98,15 @@ class D3DUtil
static uint32_t getPlaneSlice(DXGI_FORMAT format, TextureAspect aspect);
+ static D3D12_INPUT_CLASSIFICATION getInputSlotClass(InputSlotClass slotClass);
+
+ static D3D12_FILL_MODE getFillMode(FillMode mode);
+
+ static D3D12_CULL_MODE getCullMode(CullMode mode);
+
+ static D3D12_BLEND_OP getBlendOp(BlendOp op);
+
+ static D3D12_BLEND getBlendFactor(BlendFactor factor);
};
#if SLANG_GFX_HAS_DXR_SUPPORT