summaryrefslogtreecommitdiff
path: root/tools/gfx/d3d12/d3d12-shader-object-layout.cpp
diff options
context:
space:
mode:
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 = {};