diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/diagnostics/parameter-block-to-mutating-func.slang | 27 | ||||
| -rw-r--r-- | tests/glsl-intrinsic/intrinsic-basic.slang | 6 | ||||
| -rw-r--r-- | tests/spirv/aligned-load-store.slang | 7 | ||||
| -rw-r--r-- | tests/spirv/fetch-array-from-parameter-block.slang | 22 | ||||
| -rw-r--r-- | tests/spirv/large-struct.slang | 9 | ||||
| -rw-r--r-- | tests/spirv/pointer-data-marshal.slang | 6 | ||||
| -rw-r--r-- | tests/spirv/ptr-unsized-array-2.slang | 2 | ||||
| -rw-r--r-- | tests/spirv/ref-this.slang | 2 | ||||
| -rw-r--r-- | tests/spirv/subgroup-size-2.slang | 6 | ||||
| -rw-r--r-- | tests/vkray/callable.slang | 4 | ||||
| -rw-r--r-- | tests/vkray/closesthit.slang | 10 | ||||
| -rw-r--r-- | tests/vkray/entry-point-params.slang | 2 |
12 files changed, 77 insertions, 26 deletions
diff --git a/tests/diagnostics/parameter-block-to-mutating-func.slang b/tests/diagnostics/parameter-block-to-mutating-func.slang new file mode 100644 index 000000000..b5bdb4550 --- /dev/null +++ b/tests/diagnostics/parameter-block-to-mutating-func.slang @@ -0,0 +1,27 @@ +//TEST:SIMPLE(filecheck=CHECK):-target spirv +struct Data { + StructuredBuffer<float> input[2]; + RWStructuredBuffer<float> output; + uint input_tensor_count; + StructuredBuffer<uint> index_buffer; + uint index_count; + + [mutating] + float fetch(int buffer, int index) + { + return input[buffer][index]; + } +}; + +[shader("compute")] +[numthreads(8, 8, 1)] +void compute_main(uint3 tid: SV_DispatchThreadID, ParameterBlock<Data> data) +{ + float result = 0.0; + for (int i = 0; i < data.index_count; ++i) { + uint buffer = data.index_buffer[i]; + //CHECK: ([[# @LINE+1]]): error + result += data.fetch(buffer, tid.x * 1024 + tid.y); + } + data.output[tid.x * 1024 + tid.y] = result; +} diff --git a/tests/glsl-intrinsic/intrinsic-basic.slang b/tests/glsl-intrinsic/intrinsic-basic.slang index 4e1dfe8c4..7e4a76734 100644 --- a/tests/glsl-intrinsic/intrinsic-basic.slang +++ b/tests/glsl-intrinsic/intrinsic-basic.slang @@ -56,7 +56,7 @@ bool Test_ScalarType() const mat3 identity3x3 = mat3(vec3(1,0,0),vec3(0,1,0),vec3(0,0,1)); const mat4 identity4x4 = mat4(vec4(1,0,0,0),vec4(0,1,0,0),vec4(0,0,1,0),vec4(0,0,0,1)); - // CHECK_SPIR-LABEL: OpAccessChain {{.*}} %inputBuffer + // CHECK_SPIR-LABEL: Op{{.*}}AccessChain {{.*}} %inputBuffer const int zero = inputBuffer.data[0]; const int one = inputBuffer.data[1]; const int negaOne = inputBuffer.data[2]; @@ -539,7 +539,7 @@ bool Test_VectorType() constexpr const float epsilon = 0.000001; - // CHECK_SPIR-LABEL: OpAccessChain {{.*}} %inputBuffer + // CHECK_SPIR-LABEL: Op{{.*}}AccessChain {{.*}} %inputBuffer const int zero = inputBuffer.data[0]; const int one = inputBuffer.data[1]; const int negaOne = inputBuffer.data[2]; @@ -1106,7 +1106,7 @@ bool Test_VectorType() ; // CHECK_GLSL-LABEL: bool Test_VectorType_1 - // CHECK_SPIR-LABEL: OpAccessChain {{.*}} %inputBuffer + // CHECK_SPIR-LABEL: Op{{.*}}AccessChain {{.*}} %inputBuffer } [numthreads(4, 1, 1)] diff --git a/tests/spirv/aligned-load-store.slang b/tests/spirv/aligned-load-store.slang index e8bee779e..c2f50b66c 100644 --- a/tests/spirv/aligned-load-store.slang +++ b/tests/spirv/aligned-load-store.slang @@ -3,8 +3,8 @@ // CHECK: OpLoad {{.*}} Aligned 8 // CHECK: OpStore {{.*}} Aligned 16 -// CHECK: OpLoad {{.*}} Aligned 8 -// CHECK: OpLoad {{.*}} Aligned 8 +// CHECK: OpLoad {{.*}} Aligned 16 +// CHECK: OpLoad {{.*}} Aligned 16 // CHECK: OpStore {{.*}} Aligned 16 // CHECK: OpStore {{.*}} Aligned 16 @@ -20,6 +20,7 @@ void computeMain() var v = loadAligned<8>((float2x4*)data); storeAligned<16>((float2x4*)data+1, v); - var v1 = loadAligned<8>(data2); + var v1 = loadAligned<16>(data2); + v1.v0 += 1.0f; storeAligned<16>(data2, v1); }
\ No newline at end of file diff --git a/tests/spirv/fetch-array-from-parameter-block.slang b/tests/spirv/fetch-array-from-parameter-block.slang new file mode 100644 index 000000000..4a86bfb8d --- /dev/null +++ b/tests/spirv/fetch-array-from-parameter-block.slang @@ -0,0 +1,22 @@ +//TEST:SIMPLE(filecheck=CHECK):-target spirv + +//CHECK-NOT: OpCompositeConstruct +//CHECK-COUNT-1: OpStore + +struct Data +{ + int bigArray[8]; + int fetch(int i) + { + return bigArray[i]; + } +} + +ParameterBlock<Data> pData; +uniform int* result; + +[numthreads(16,1,1)] +void main(int id : SV_DispatchThreadID) +{ + *result = pData.fetch(id); +}
\ No newline at end of file diff --git a/tests/spirv/large-struct.slang b/tests/spirv/large-struct.slang index 7738a5fcf..2d79c0aaf 100644 --- a/tests/spirv/large-struct.slang +++ b/tests/spirv/large-struct.slang @@ -3,9 +3,8 @@ //TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-d3d12 -compute -output-using-type //TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=BUF):-cpu -compute -output-using-type -// Check that when generating spirv directly, we use a loop -// to copy large arrays in input data out into a local variable, instead of emitting -// unrolled code that reads each element of the array individually. +// Check that when generating spirv directly, we do not load the entire big array +// from the constant buffer into registers. struct WorkData { @@ -21,7 +20,9 @@ ConstantBuffer<WorkData> input; //TEST_INPUT:set resultBuffer = out ubuffer(data=[0 0 0 0], stride=4) RWStructuredBuffer<float> resultBuffer; -// CHECK: OpLoopMerge +// CHECK-NOT: OpLoopMerge +// CHECK-NOT: OpCompositeConstruct +// CHECK-COUNT-1: OpStore [numthreads(2, 1, 1)] void computeMain(uint3 tid: SV_DispatchThreadID) diff --git a/tests/spirv/pointer-data-marshal.slang b/tests/spirv/pointer-data-marshal.slang index 3ad6c373b..a07a365ce 100644 --- a/tests/spirv/pointer-data-marshal.slang +++ b/tests/spirv/pointer-data-marshal.slang @@ -8,9 +8,9 @@ struct Params { Foo *foo; }; -// CHECK: %[[PTR0:[A-Za-z0-9_]+]] = OpAccessChain %_ptr_PhysicalStorageBuffer__arr_v3float_int_2 %{{.*}} %int_0 -// CHECK: %[[PTR1:[A-Za-z0-9_]+]] = OpAccessChain %_ptr_PhysicalStorageBuffer_v3float %[[PTR0]] %int_1 -// CHECK: %[[PTR2:[A-Za-z0-9_]+]] = OpAccessChain %_ptr_PhysicalStorageBuffer_float %[[PTR1]] %int_2 +// CHECK: %[[PTR0:[A-Za-z0-9_]+]] = Op{{.*}}AccessChain %_ptr_PhysicalStorageBuffer__arr_v3float_int_2 %{{.*}} %int_0 +// CHECK: %[[PTR1:[A-Za-z0-9_]+]] = Op{{.*}}AccessChain %_ptr_PhysicalStorageBuffer_v3float %[[PTR0]] %int_1 +// CHECK: %[[PTR2:[A-Za-z0-9_]+]] = Op{{.*}}AccessChain %_ptr_PhysicalStorageBuffer_float %[[PTR1]] %int_2 ConstantBuffer<Params> params; diff --git a/tests/spirv/ptr-unsized-array-2.slang b/tests/spirv/ptr-unsized-array-2.slang index ac0911d76..eb653d0a6 100644 --- a/tests/spirv/ptr-unsized-array-2.slang +++ b/tests/spirv/ptr-unsized-array-2.slang @@ -3,7 +3,7 @@ // CHECK-DAG: %[[cbuffer__t:[A-Za-z0-9_]+]] = OpTypeStruct %_ptr_PhysicalStorageBuffer_uint // CHECK-DAG: %light_buffer = OpVariable %_ptr_PushConstant_[[cbuffer__t]] PushConstant -// CHECK: OpAccessChain %_ptr_PushConstant +// CHECK: Op{{.*}}AccessChain %_ptr_PushConstant // CHECK-NEXT: OpLoad // CHECK-NEXT: OpBitcast %_ptr_PhysicalStorageBuffer diff --git a/tests/spirv/ref-this.slang b/tests/spirv/ref-this.slang index de4263975..890e1451f 100644 --- a/tests/spirv/ref-this.slang +++ b/tests/spirv/ref-this.slang @@ -1,6 +1,6 @@ //TEST:SIMPLE(filecheck=CHECK): -target spirv -// CHECK: %[[PTR:[0-9a-zA-Z_]+]] = OpAccessChain %_ptr_PhysicalStorageBuffer_uint %{{.*}} %int_0 +// CHECK: %[[PTR:[0-9a-zA-Z_]+]] = Op{{.*}}AccessChain %_ptr_PhysicalStorageBuffer_uint %{{.*}} %int_0 // CHECK: %{{.*}} = OpAtomicIAdd %uint %[[PTR]] %uint_1 %uint_0 %uint_1 struct Buf diff --git a/tests/spirv/subgroup-size-2.slang b/tests/spirv/subgroup-size-2.slang index 500bd63c8..f7376f584 100644 --- a/tests/spirv/subgroup-size-2.slang +++ b/tests/spirv/subgroup-size-2.slang @@ -15,12 +15,12 @@ uint3 f() { return WorkgroupSize(); } void compute1() { // CHECK_EXPERIMENTAL-DAG: %[[VAR:[A-Za-z0-9_]+]] = OpTypePointer Function %v3int - // CHECK_EXPERIMENTAL: OpAccessChain %[[VAR]] + // CHECK_EXPERIMENTAL: Op{{.*}}AccessChain %[[VAR]] // // CHECK_EXPERIMENTAL-DAG: %[[CALL_RS:[A-Za-z0-9_]+]] = OpFunctionCall %v3uint %f // CHECK_EXPERIMENTAL: OpCompositeExtract %uint %[[CALL_RS]] 0 // - // CHECK_EXPERIMENTAL-DAG: %[[PTR:[A-Za-z0-9_]+]] = OpAccessChain %_ptr_StorageBuffer_int %outputBuffer %int_0 %int_1 + // CHECK_EXPERIMENTAL-DAG: %[[PTR:[A-Za-z0-9_]+]] = Op{{.*}}AccessChain %_ptr_StorageBuffer_int %outputBuffer %int_0 %int_1 // CHECK_EXPERIMENTAL: OpStore %[[PTR]] %int_2 // CHECK-DAG: %[[VAR:[A-Za-z0-9_]+]] = OpVariable %_ptr_Private_v3int Private @@ -29,7 +29,7 @@ void compute1() // CHECK-DAG: %[[CALL_RS:[A-Za-z0-9_]+]] = OpFunctionCall %v3uint %f // CHECK: OpCompositeExtract %uint %[[CALL_RS]] 0 // - // CHECK-DAG: %[[PTR:[A-Za-z0-9_]+]] = OpAccessChain %_ptr_StorageBuffer_int %outputBuffer %int_0 %int_1 + // CHECK-DAG: %[[PTR:[A-Za-z0-9_]+]] = Op{{.*}}AccessChain %_ptr_StorageBuffer_int %outputBuffer %int_0 %int_1 // CHECK: OpStore %[[PTR]] %int_2 const int x = f().x; diff --git a/tests/vkray/callable.slang b/tests/vkray/callable.slang index f3aa55979..51f69ad1c 100644 --- a/tests/vkray/callable.slang +++ b/tests/vkray/callable.slang @@ -22,5 +22,5 @@ void main(in out MaterialPayload ioPayload) // CHECK-DAG: OpTypePointer IncomingCallableData{{NV|KHR}} // CHECK-DAG: OpTypePointer IncomingCallableData{{NV|KHR}} // CHECK-DAG: OpTypePointer IncomingCallableData{{NV|KHR}} -// CHECK-DAG: %{{.*}} = OpAccessChain %{{.*}} %{{.*}} %{{.*}} -// CHECK-DAG: %{{.*}} = OpAccessChain %{{.*}} %{{.*}} %{{.*}} +// CHECK-DAG: %{{.*}} = Op{{.*}}AccessChain %{{.*}} %{{.*}} %{{.*}} +// CHECK-DAG: %{{.*}} = Op{{.*}}AccessChain %{{.*}} %{{.*}} %{{.*}}
\ No newline at end of file diff --git a/tests/vkray/closesthit.slang b/tests/vkray/closesthit.slang index b7d40e5f9..9d767ccae 100644 --- a/tests/vkray/closesthit.slang +++ b/tests/vkray/closesthit.slang @@ -56,8 +56,8 @@ void main( // CHECK-DAG: %{{.*}} = OpVariable %_ptr_IncomingRayPayload{{NV|KHR}}_ReflectionRay{{.*}} IncomingRayPayload{{NV|KHR}} // CHECK-DAG: %{{.*}} = OpLoad %{{u?}}int %[[INSTANCE_ID]] // CHECK-DAG: %{{.*}} = OpLoad %{{u?}}int %[[INSTANCE_INDEX]] -// CHECK-DAG: %{{.*}} = OpAccessChain %_ptr_ShaderRecordBuffer{{NV|KHR}}_uint %ShaderRecord{{.*}} %int_0 -// CHECK-DAG: %{{.*}} = OpAccessChain %_ptr_IncomingRayPayload{{NV|KHR}}_v4float %{{.*}} %int_0 -// CHECK-DAG: %{{.*}} = OpAccessChain %_ptr_Input_v3float %{{.*}} %{{u?}}int_0 -// CHECK-DAG: %{{.*}} = OpAccessChain %_ptr_Input_v3float %{{.*}} %{{u?}}int_1 -// CHECK-DAG: %{{.*}} = OpAccessChain %_ptr_Input_v3float %{{.*}} %{{u?}}int_2 +// CHECK-DAG: %{{.*}} = Op{{.*}}AccessChain %_ptr_ShaderRecordBuffer{{NV|KHR}}_uint %ShaderRecord{{.*}} %int_0 +// CHECK-DAG: %{{.*}} = Op{{.*}}AccessChain %_ptr_IncomingRayPayload{{NV|KHR}}_v4float %{{.*}} %int_0 +// CHECK-DAG: %{{.*}} = Op{{.*}}AccessChain %_ptr_Input_v3float %{{.*}} %{{u?}}int_0 +// CHECK-DAG: %{{.*}} = Op{{.*}}AccessChain %_ptr_Input_v3float %{{.*}} %{{u?}}int_1 +// CHECK-DAG: %{{.*}} = Op{{.*}}AccessChain %_ptr_Input_v3float %{{.*}} %{{u?}}int_2 diff --git a/tests/vkray/entry-point-params.slang b/tests/vkray/entry-point-params.slang index e3f29bc5b..47b108414 100644 --- a/tests/vkray/entry-point-params.slang +++ b/tests/vkray/entry-point-params.slang @@ -20,4 +20,4 @@ void main( // CHECK-DAG: OpDecorate %[[LaunchID:[A-Za-z0-9_]+]] BuiltIn LaunchId{{NV|KHR}} // CHECK-DAG: %[[LaunchID]] = OpVariable %_ptr_Input_v3uint Input // CHECK-DAG: %{{.*}} = OpLoad %v3uint %[[LaunchID]] -// CHECK-DAG: %{{.*}} = OpAccessChain %_ptr_ShaderRecordBuffer{{NV|KHR}}_float %{{.*}} %int_0 +// CHECK-DAG: %{{.*}} = Op{{.*}}AccessChain %_ptr_ShaderRecordBuffer{{NV|KHR}}_float %{{.*}} %int_0 |
