summaryrefslogtreecommitdiff
path: root/tools/gfx/d3d12/d3d12-shader-object-layout.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-04-15 23:28:28 -0700
committerGitHub <noreply@github.com>2024-04-15 23:28:28 -0700
commit3192f34f57abd3245995342a0a5971ebbbbd945c (patch)
treedc139be9fe9f4995bac96513571cc9e0526ce547 /tools/gfx/d3d12/d3d12-shader-object-layout.cpp
parent030d7f45726187b5b23a3cfb9743166aa60fae30 (diff)
[GFX] Fix d3d12 buffer view creation logic for StructuredBuffers. (#3954)
Diffstat (limited to 'tools/gfx/d3d12/d3d12-shader-object-layout.cpp')
-rw-r--r--tools/gfx/d3d12/d3d12-shader-object-layout.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/tools/gfx/d3d12/d3d12-shader-object-layout.cpp b/tools/gfx/d3d12/d3d12-shader-object-layout.cpp
index 0c0095621..ef59c3672 100644
--- a/tools/gfx/d3d12/d3d12-shader-object-layout.cpp
+++ b/tools/gfx/d3d12/d3d12-shader-object-layout.cpp
@@ -116,6 +116,7 @@ Result ShaderObjectLayoutImpl::Builder::setElementTypeLayout(
uint32_t count = (uint32_t)typeLayout->getBindingRangeBindingCount(r);
slang::TypeLayoutReflection* slangLeafTypeLayout =
typeLayout->getBindingRangeLeafTypeLayout(r);
+
BindingRangeInfo bindingRangeInfo = {};
bindingRangeInfo.bindingType = slangBindingType;
bindingRangeInfo.resourceShape = slangLeafTypeLayout->getResourceShape();
@@ -126,6 +127,21 @@ Result ShaderObjectLayoutImpl::Builder::setElementTypeLayout(
typeLayout,
r);
bindingRangeInfo.isSpecializable = typeLayout->isBindingRangeSpecializable(r);
+ switch (slangBindingType)
+ {
+ case slang::BindingType::RawBuffer:
+ case slang::BindingType::TypedBuffer:
+ case slang::BindingType::MutableRawBuffer:
+ case slang::BindingType::MutableTypedBuffer:
+ {
+ auto bufferElementType = slangLeafTypeLayout->getElementTypeLayout();
+ if (bufferElementType)
+ {
+ bindingRangeInfo.bufferElementStride = (uint32_t)bufferElementType->getStride();
+ }
+ }
+ break;
+ }
if (bindingRangeInfo.isRootParameter)
{
RootParameterInfo rootInfo = {};