summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/slang/hlsl.meta.slang15
-rw-r--r--tests/metal/get-dimensions-error.slang35
2 files changed, 43 insertions, 7 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index 740f48320..78f6a4eb8 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -65,24 +65,24 @@ struct GLSLShaderStorageBuffer {}
__generic<T,L:IBufferDataLayout>
__intrinsic_op($(kIROp_StructuredBufferGetDimensions))
-[require(cpp_cuda_glsl_hlsl_metal_spirv, appendstructuredbuffer)]
+[require(cpp_cuda_glsl_hlsl_spirv, appendstructuredbuffer)]
uint2 __structuredBufferGetDimensions(AppendStructuredBuffer<T,L> buffer);
__generic<T,L:IBufferDataLayout>
__intrinsic_op($(kIROp_StructuredBufferGetDimensions))
-[require(cpp_cuda_glsl_hlsl_metal_spirv, consumestructuredbuffer)]
+[require(cpp_cuda_glsl_hlsl_spirv, consumestructuredbuffer)]
uint2 __structuredBufferGetDimensions(ConsumeStructuredBuffer<T,L> buffer);
__intrinsic_op($(kIROp_StructuredBufferGetDimensions))
-[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, structuredbuffer)]
+[require(cpp_cuda_glsl_hlsl_spirv_wgsl, structuredbuffer)]
uint2 __structuredBufferGetDimensions<T,L:IBufferDataLayout>(StructuredBuffer<T,L> buffer);
__intrinsic_op($(kIROp_StructuredBufferGetDimensions))
-[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, structuredbuffer_rw)]
+[require(cpp_cuda_glsl_hlsl_spirv_wgsl, structuredbuffer_rw)]
uint2 __structuredBufferGetDimensions<T,L:IBufferDataLayout>(RWStructuredBuffer<T,L> buffer);
__intrinsic_op($(kIROp_StructuredBufferGetDimensions))
-[require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, structuredbuffer_rw)]
+[require(cpp_cuda_glsl_hlsl_spirv_wgsl, structuredbuffer_rw)]
uint2 __structuredBufferGetDimensions<T,L:IBufferDataLayout>(RasterizerOrderedStructuredBuffer<T,L> buffer);
//@public:
@@ -150,7 +150,7 @@ struct ByteAddressBuffer
///@param[out] dim The number of bytes in the buffer.
[__readNone]
[ForceInline]
- [require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, structuredbuffer)]
+ [require(cpp_cuda_glsl_hlsl_spirv_wgsl, structuredbuffer)]
void GetDimensions(out uint dim)
{
__target_switch
@@ -4852,6 +4852,7 @@ struct StructuredBuffer
/// @param stride The stride, in bytes, of each structure element.
[__readNone]
[ForceInline]
+ [require(cpp_cuda_glsl_hlsl_spirv_wgsl, structuredbuffer)]
void GetDimensions(
out uint numStructs,
out uint stride)
@@ -6048,7 +6049,7 @@ struct $(item.name)
/// @param stride The stride, in bytes, of each structure element.
[__readNone]
[ForceInline]
- [require(cpp_cuda_glsl_hlsl_metal_spirv_wgsl, structuredbuffer_rw)]
+ [require(cpp_cuda_glsl_hlsl_spirv_wgsl, structuredbuffer_rw)]
void GetDimensions(
out uint numStructs,
out uint stride)
diff --git a/tests/metal/get-dimensions-error.slang b/tests/metal/get-dimensions-error.slang
new file mode 100644
index 000000000..a632ece0b
--- /dev/null
+++ b/tests/metal/get-dimensions-error.slang
@@ -0,0 +1,35 @@
+//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK): -target metal -stage compute -entry cmain -DTEST=0 -DBUFFER_TYPE=StructuredBuffer
+//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK): -target metal -stage compute -entry cmain -DTEST=0 -DBUFFER_TYPE=RWStructuredBuffer
+//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK): -target metal -stage compute -entry cmain -DTEST=0 -DBUFFER_TYPE=AppendStructuredBuffer
+//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK): -target metal -stage compute -entry cmain -DTEST=0 -DBUFFER_TYPE=ConsumeStructuredBuffer
+//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK): -target metal -stage compute -entry cmain -DTEST=0 -DBUFFER_TYPE=RasterizerOrderedStructuredBuffer
+//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK): -target metal -stage compute -entry cmain -DTEST=1 -DBUFFER_TYPE=ByteAddressBuffer
+//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK): -target metal -stage compute -entry cmain -DTEST=1 -DBUFFER_TYPE=RWByteAddressBuffer
+//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK): -target metal -stage compute -entry cmain -DTEST=1 -DBUFFER_TYPE=RasterizerOrderedByteAddressBuffer
+
+//TEST_INPUT:ubuffer(data=[0 0], stride=4):out,name outputBuffer
+RWStructuredBuffer<uint> outputBuffer;
+
+//TEST_INPUT:ubuffer(data=[7 2 9 53], stride=4):name buffer
+#if TEST == 0
+BUFFER_TYPE<int> buffer;
+#elif TEST==1
+BUFFER_TYPE buffer;
+#endif
+
+//CHECK: error 36107:
+//CHECK: buffer.GetDimensions
+
+[shader("compute")]
+[numthreads(1, 1, 1)]
+void cmain(uint3 dispatchThreadID : SV_DispatchThreadID)
+{
+ uint count = 0, stride = 0;
+#if TEST == 0
+ buffer.GetDimensions(count, stride);
+#elif TEST == 1
+ buffer.GetDimensions(count);
+#endif
+ outputBuffer[0] = count;
+ outputBuffer[1] = stride;
+}