diff options
| author | Yong He <yonghe@outlook.com> | 2023-08-21 17:07:34 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-21 17:07:34 -0700 |
| commit | bd6dbaf7c3ea720b4ed39904fe08878f9dcbd947 (patch) | |
| tree | 9e8c436e0888d192c462f75e4655a63b51f41648 /source/slang/hlsl.meta.slang | |
| parent | f94b2f7a328a898c5e3dc1389d08e0b7ce6e092e (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.slang | 26 |
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> |
