summaryrefslogtreecommitdiff
path: root/source/slang/slang-type-layout.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-type-layout.h')
-rw-r--r--source/slang/slang-type-layout.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/source/slang/slang-type-layout.h b/source/slang/slang-type-layout.h
index e3dd719d6..1ebd26098 100644
--- a/source/slang/slang-type-layout.h
+++ b/source/slang/slang-type-layout.h
@@ -628,6 +628,10 @@ class StructuredBufferTypeLayout : public TypeLayout
{
public:
RefPtr<TypeLayout> elementTypeLayout;
+ // If required, this is the VarLayout for a buffer which contains the
+ // counter associated with the buffer, most often used for
+ // AppendStructuredBuffer or ConsumeStructuredBuffer
+ RefPtr<VarLayout> counterVarLayout;
};
/// Type layout for a logical sequence type
@@ -962,6 +966,10 @@ struct SimpleLayoutRulesImpl
// End layout for a struct, and finalize its size/alignment.
virtual void EndStructLayout(UniformLayoutInfo* ioStructInfo) = 0;
+
+ // Do structured buffers need a separate binding for the counter buffer?
+ // (DirectX is the exception in managing these together)
+ virtual bool DoStructuredBuffersNeedSeparateCounterBuffer() = 0;
};
struct ObjectLayoutRulesImpl
@@ -1021,6 +1029,13 @@ struct LayoutRulesImpl
return simpleRules->EndStructLayout(ioStructInfo);
}
+ // Do structured buffers need a separate binding for the counter buffer?
+ // (DirectX is the exception in managing these together)
+ bool DoStructuredBuffersNeedSeparateCounterBuffer()
+ {
+ return simpleRules->DoStructuredBuffersNeedSeparateCounterBuffer();
+ }
+
// Forward `ObjectLayoutRulesImpl` interface
SimpleLayoutInfo GetObjectLayout(ShaderParameterKind kind, const ObjectLayoutRulesImpl::Options& options)
@@ -1306,6 +1321,13 @@ createStructuredBufferTypeLayout(
Type* structuredBufferType,
Type* elementType);
+RefPtr<StructuredBufferTypeLayout>
+createStructuredBufferTypeLayout(
+ TypeLayoutContext const& context,
+ ShaderParameterKind kind,
+ Type* structuredBufferType,
+ RefPtr<TypeLayout> elementTypeLayout);
+
/// Create a type layout for an unspecialized `globalGenericParamDecl`.
RefPtr<TypeLayout> createTypeLayoutForGlobalGenericTypeParam(
TypeLayoutContext const& context,