summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/compute/nonuniformres-array-of-textures.slang10
-rw-r--r--tests/compute/nonuniformres-nested-rwstructuredbuf.slang10
-rw-r--r--tests/language-feature/descriptor-handle/desc-handle-0.slang22
-rw-r--r--tests/language-feature/descriptor-handle/desc-handle-1.slang32
-rw-r--r--tests/language-feature/descriptor-handle/desc-handle-2.slang14
-rw-r--r--tests/language-feature/descriptor-handle/desc-handle-3.slang35
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