summaryrefslogtreecommitdiff
path: root/source/slang/hlsl.meta.slang
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-08-21 17:07:34 -0700
committerGitHub <noreply@github.com>2023-08-21 17:07:34 -0700
commitbd6dbaf7c3ea720b4ed39904fe08878f9dcbd947 (patch)
tree9e8c436e0888d192c462f75e4655a63b51f41648 /source/slang/hlsl.meta.slang
parentf94b2f7a328a898c5e3dc1389d08e0b7ce6e092e (diff)
Compile append and consume structured buffers to glsl. (#3142)
* Compile append and consume structured buffers to glsl. * Fix. * Update CI config. --------- Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/hlsl.meta.slang')
-rw-r--r--source/slang/hlsl.meta.slang26
1 files changed, 24 insertions, 2 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index b690a5910..3dcdc6c54 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -7,15 +7,30 @@ typedef uint UINT;
[ForceInline] float3 __asFloat3(float3 v) { return v; }
__generic<T>
+__intrinsic_op($(kIROp_StructuredBufferGetDimensions))
+uint2 __structuredBufferGetDimensions(AppendStructuredBuffer<T> buffer);
+
+__generic<T>
+__intrinsic_op($(kIROp_StructuredBufferGetDimensions))
+uint2 __structuredBufferGetDimensions(ConsumeStructuredBuffer<T> buffer);
+
+__generic<T>
__magic_type(HLSLAppendStructuredBufferType)
__intrinsic_type($(kIROp_HLSLAppendStructuredBufferType))
struct AppendStructuredBuffer
{
+ __intrinsic_op($(kIROp_StructuredBufferAppend))
void Append(T value);
+ [ForceInline]
void GetDimensions(
out uint numStructs,
- out uint stride);
+ out uint stride)
+ {
+ let result = __structuredBufferGetDimensions(this);
+ numStructs = result.x;
+ stride = result.y;
+ }
};
__magic_type(HLSLByteAddressBufferType)
@@ -257,11 +272,18 @@ __magic_type(HLSLConsumeStructuredBufferType)
__intrinsic_type($(kIROp_HLSLConsumeStructuredBufferType))
struct ConsumeStructuredBuffer
{
+ __intrinsic_op($(kIROp_StructuredBufferConsume))
T Consume();
+ [ForceInline]
void GetDimensions(
out uint numStructs,
- out uint stride);
+ out uint stride)
+ {
+ let result = __structuredBufferGetDimensions(this);
+ numStructs = result.x;
+ stride = result.y;
+ }
};
__generic<T, let N : int>