summaryrefslogtreecommitdiff
path: root/source/slang/slang-type-layout.h
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2023-10-18 06:26:00 +0800
committerGitHub <noreply@github.com>2023-10-17 15:26:00 -0700
commit7826afcaad78cc33c976bb3db3cdc9eada4c77e8 (patch)
tree7a89a54512a4cbab6165d2c4b7906f88a032bbee /source/slang/slang-type-layout.h
parent0a3683dd39fc04d15937b8a4700d477f9492c257 (diff)
Type layouts for structured buffers with counters (#3269)
* More tests for append structured buffer * Append and Consume structured buffer tests for DX12 * neaten * test wobble * Add counter layout information to append/consume structured buffers * add getRWStructuredBufferType * Correct definition of get size for append/consume structured buffers * tweak append structured buffer test * Allow initializing counter buffer in render test * vulkan test for consume structured buffer * Handle null counterVarLayout in getExplicitCounterBindingRangeOffset * remove dead code * Implement atomic counter increment/decrement for spirv * explicit spirv test * Add missing check on result * Hold on to counter resources --------- Co-authored-by: Yong He <yonghe@outlook.com>
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,