diff options
| -rw-r--r-- | source/slang/hlsl.meta.slang | 15 | ||||
| -rw-r--r-- | tests/metal/get-dimensions-error.slang | 35 |
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; +} |
