diff options
Diffstat (limited to 'tests')
6 files changed, 112 insertions, 11 deletions
diff --git a/tests/compute/nonuniformres-array-of-textures.slang b/tests/compute/nonuniformres-array-of-textures.slang index a7f3e05bd..6cab0131a 100644 --- a/tests/compute/nonuniformres-array-of-textures.slang +++ b/tests/compute/nonuniformres-array-of-textures.slang @@ -26,12 +26,12 @@ void main(uint2 pixelIndex : SV_DispatchThreadID) // CHECK2: %[[VAR5]] = OpAccessChain %_ptr_UniformConstant_{{.*}} %{{.*}} %[[VAR4]] // CHECK2: %[[VAR6]] = OpLoad %{{.*}} %[[VAR5]] - // CHECK3: OpDecorate %[[VAR1:[a-zA-Z0-9_]+]] NonUniform - // CHECK3: OpDecorate %[[VAR2:[a-zA-Z0-9_]+]] NonUniform - // CHECK3: %[[VAR1]] = OpLoad %{{.*}} - // CHECK3: %{{.*}} = OpImageFetch %v4float %[[VAR1]] %{{.*}} - // CHECK3: %[[VAR2]] = OpLoad %{{.*}} + // CHECK3: %[[VAR1:[a-zA-Z0-9_]+]] = OpAccessChain{{.*}}NonUniform + // CHECK3: %[[VAR2:[a-zA-Z0-9_]+]] = OpLoad %{{.*}}[[VAR1]]{{.*}}NonUniform // CHECK3: %{{.*}} = OpImageFetch %v4float %[[VAR2]] %{{.*}} + // CHECK3: %[[VAR3:[a-zA-Z0-9_]+]] = OpAccessChain{{.*}}NonUniform + // CHECK3: %[[VAR4:[a-zA-Z0-9_]+]] = OpLoad %{{.*}}[[VAR3]]{{.*}}NonUniform + // CHECK3: %{{.*}} = OpImageFetch %v4float %[[VAR4]] %{{.*}} float2 tmp0 = textures[NonUniformResourceIndex(pixelIndex.x)].Load(int3(0, 0, 0)); outputTexture[0] = tmp0; diff --git a/tests/compute/nonuniformres-nested-rwstructuredbuf.slang b/tests/compute/nonuniformres-nested-rwstructuredbuf.slang index b188a2c52..f935ce799 100644 --- a/tests/compute/nonuniformres-nested-rwstructuredbuf.slang +++ b/tests/compute/nonuniformres-nested-rwstructuredbuf.slang @@ -8,9 +8,9 @@ RWStructuredBuffer<int> buffer[]; [numthreads(8, 1, 1)] void main(uint3 dispatchThreadID: SV_DispatchThreadID) { - // CHECK0: buffer_{{.*}}[nonuniformEXT(nonuniformEXT(nonuniformEXT({{.*}})))] + // CHECK0: buffer_{{.*}}[nonuniformEXT({{.*}})] - // CHECK1: buffer_{{.*}}[NonUniformResourceIndex(NonUniformResourceIndex(NonUniformResourceIndex(_{{.*}})))] + // CHECK1: buffer_{{.*}}[NonUniformResourceIndex(_{{.*}})] // CHECK2-DAG: OpDecorate %[[VAR1:[a-zA-Z0-9_]+]] NonUniform // CHECK2-DAG: OpDecorate %[[VAR2:[a-zA-Z0-9_]+]] NonUniform @@ -21,11 +21,9 @@ void main(uint3 dispatchThreadID: SV_DispatchThreadID) // CHECK2: %[[VAR3]] = OpCopyObject %{{.*}} // CHECK2: %{{.*}} = OpBitcast %int %[[VAR3]] - // CHECK3-DAG: OpDecorate %[[VAR1:[a-zA-Z0-9_]+]] NonUniform - // CHECK3-DAG: OpDecorate %[[VAR2:[a-zA-Z0-9_]+]] NonUniform - // CHECK3: %[[VAR1]] = OpAccessChain %_ptr_StorageBuffer_RWStructuredBuffer %buffer %{{.*}} + // CHECK3: %[[VAR1:[a-zA-Z0-9_]+]] = OpAccessChain %_ptr_StorageBuffer_RWStructuredBuffer %buffer %{{.*}}NonUniform // CHECK3: %{{.*}} = OpAccessChain %_ptr_StorageBuffer_int %[[VAR1]] - // CHECK3: %[[VAR2]] = OpAccessChain %_ptr_StorageBuffer_RWStructuredBuffer %buffer %{{.*}} + // CHECK3: %[[VAR2:[a-zA-Z0-9_]+]] = OpAccessChain %_ptr_StorageBuffer_RWStructuredBuffer %buffer %{{.*}}NonUniform // CHECK3: %{{.*}} = OpAccessChain %_ptr_StorageBuffer_int %[[VAR2]] RWStructuredBuffer<int> buffer1 = buffer[NonUniformResourceIndex(NonUniformResourceIndex(NonUniformResourceIndex(dispatchThreadID.x)))]; buffer1[0] = 1; diff --git a/tests/language-feature/descriptor-handle/desc-handle-0.slang b/tests/language-feature/descriptor-handle/desc-handle-0.slang new file mode 100644 index 000000000..67f452cfc --- /dev/null +++ b/tests/language-feature/descriptor-handle/desc-handle-0.slang @@ -0,0 +1,22 @@ +//TEST:SIMPLE(filecheck=CUDA): -target cuda -entry computeMain -stage compute +//TEST:SIMPLE(filecheck=MTL): -target metallib -entry computeMain -profile cs_6_6 +//TEST:SIMPLE(filecheck=HLSL): -target hlsl -entry computeMain -profile cs_6_6 +//TEST:SIMPLE(filecheck=DXIL): -target dxil -entry computeMain -profile cs_6_6 +//TEST:SIMPLE(filecheck=SPV): -target spirv + +// SPV: OpImageSample +// HLSL: ResourceDescriptorHeap[{{.*}}] +// HLSL: SamplerDescriptorHeap[{{.*}}] +// HLSL: SampleLevel +// DXIL: computeMain +// CUDA: computeMain +// MTL: define void @computeMain + +uniform StructuredBuffer<DescriptorHandle<Sampler2D>> t; +uniform DescriptorHandle<RWStructuredBuffer<float4>> buffer; + +[numthreads(1,1,1)] +void computeMain() +{ + buffer[0] = t[0]->SampleLevel(float2(0.0), 0.0); +}
\ No newline at end of file diff --git a/tests/language-feature/descriptor-handle/desc-handle-1.slang b/tests/language-feature/descriptor-handle/desc-handle-1.slang new file mode 100644 index 000000000..0621f4a84 --- /dev/null +++ b/tests/language-feature/descriptor-handle/desc-handle-1.slang @@ -0,0 +1,32 @@ +//TEST:SIMPLE(filecheck=SPV): -target spirv + +// SPV: OpDecorate %resourceHeap DescriptorSet 10 +// SPV: OpAccessChain {{.*}} %resourceHeap +// SPV: OpImageSample + +uniform StructuredBuffer<DescriptorHandle<Sampler2D>> t; +uniform DescriptorHandle<RWStructuredBuffer<float4>> buffer; + +[vk::binding(0, 10)] +__DynamicResource<__DynamicResourceKind.General> resourceHeap[]; + +// A customized function that overrides the default behavior of fetch texture resources. +export T getDescriptorFromHandle<T:IOpaqueDescriptor>(DescriptorHandle<T> handleValue) +{ + __target_switch + { + case spirv: + if (T.kind != DescriptorKind.Buffer) + return resourceHeap[((uint2)handleValue).x].asOpaqueDescriptor<T>(); + else + return defaultGetDescriptorFromHandle(handleValue); + default: + return defaultGetDescriptorFromHandle(handleValue); + } +} + +[numthreads(1,1,1)] +void computeMain() +{ + buffer[0] = t[0]->SampleLevel(float2(0.0), 0.0); +}
\ No newline at end of file diff --git a/tests/language-feature/descriptor-handle/desc-handle-2.slang b/tests/language-feature/descriptor-handle/desc-handle-2.slang new file mode 100644 index 000000000..fa7f73b31 --- /dev/null +++ b/tests/language-feature/descriptor-handle/desc-handle-2.slang @@ -0,0 +1,14 @@ +//TEST:SIMPLE(filecheck=SPV): -target spirv -bindless-space-index 101 + +// SPV: OpDecorate %__slang_resource_heap{{.*}} Binding 0 +// SPV: OpDecorate %__slang_resource_heap{{.*}} DescriptorSet 101 +// SPV: OpImageSample + +uniform StructuredBuffer<DescriptorHandle<Sampler2D>> t; +uniform DescriptorHandle<RWStructuredBuffer<float4>> buffer; + +[numthreads(1,1,1)] +void computeMain() +{ + (*buffer)[0] = t[0].SampleLevel(float2(0.0), 0.0); +}
\ No newline at end of file diff --git a/tests/language-feature/descriptor-handle/desc-handle-3.slang b/tests/language-feature/descriptor-handle/desc-handle-3.slang new file mode 100644 index 000000000..5b9263026 --- /dev/null +++ b/tests/language-feature/descriptor-handle/desc-handle-3.slang @@ -0,0 +1,35 @@ +//TEST:SIMPLE(filecheck=MTL): -target metal +//TEST:SIMPLE(filecheck=MTLLIB): -target metallib +//TEST:SIMPLE(filecheck=CUDA): -target cuda -entry computeMain -stage compute +//TEST:SIMPLE(filecheck=PTX): -target ptx -entry computeMain -stage compute +//TEST:SIMPLE(filecheck=SPV): -target spirv -entry computeMain -stage compute -emit-spirv-via-glsl +//TEST:SIMPLE(filecheck=GLSL): -target glsl -entry computeMain -stage compute +//TEST:SIMPLE(filecheck=HLSL): -target hlsl -entry computeMain -profile cs_6_6 +//TEST:SIMPLE(filecheck=DXIL): -target dxil -entry computeMain -profile cs_6_6 +//TEST:SIMPLE(filecheck=SPV): -target spirv + +// SPV-DAG: %[[REG:[A-Za-z_0-9]+]] = OpAccessChain{{.*}}NonUniform +// SPV-DAG: %[[TEX:[A-Za-z_0-9]+]] = OpLoad {{.*}} %[[REG]] +// SPV-DAG: OpImageSampleExplicitLod {{.*}} %[[TEX]] + +// HLSL: ResourceDescriptorHeap[NonUniformResourceIndex +// HLSL: SamplerDescriptorHeap[NonUniformResourceIndex( + +// DXIL: define void @computeMain() + +// GLSL: _slang_resource_heap{{[0-9_]+}}[nonuniformEXT + +// MTL: void computeMain +// MTLLIB: @computeMain + +// CUDA: tex2DLod +// PTX: computeMain + +uniform StructuredBuffer<Sampler2D.Handle> t; +uniform RWStructuredBuffer<float4>.Handle buffer; + +[numthreads(4,1,1)] +void computeMain(int3 id : SV_DispatchThreadID) +{ + (*buffer)[0] = nonuniform(t[id.x]).SampleLevel(float2(0.0), 0.0); +}
\ No newline at end of file |
