blob: 14df48c19f1bddcf62e06d573cf2169ffb2efc8d [file] [log] [blame]
// RUN: clspv %s -o %t.spv -keep-unused-arguments
// RUN: clspv-reflection %t.spv -o %t.map
// RUN: FileCheck -check-prefix=MAP %s < %t.map
// RUN: spirv-dis -o %t2.spvasm %t.spv
// RUN: FileCheck %s < %t2.spvasm
// RUN: spirv-val --target-env vulkan1.0 %t.spv
// MAP: kernel,foo,arg,A,argOrdinal,0,descriptorSet,0,binding,0,offset,0,argKind,buffer
// MAP: kernel,foo,arg,n,argOrdinal,1,offset,0,argKind,pod_pushconstant,argSize,4
// MAP: kernel,bar,arg,B,argOrdinal,0,descriptorSet,0,binding,0,offset,0,argKind,buffer
// MAP: kernel,bar,arg,m,argOrdinal,1,offset,0,argKind,pod_pushconstant,argSize,4
// MAP-NONE: kernel
float core(global float *arr, int n) {
return arr[n];
}
float apple(global float *arr, int n) {
return core(arr, n) + core(arr, n+1);
}
void kernel __attribute__((reqd_work_group_size(1, 1, 1))) foo(global float* A, int n)
{
A[0] = apple(A, n);
}
void kernel __attribute__((reqd_work_group_size(1, 1, 1))) bar(global float* B, uint m)
{
B[0] = apple(B, m) + apple(B, m+2);
}
// CHECK: OpEntryPoint GLCompute [[_33:%[0-9a-zA-Z_]+]] "foo"
// CHECK: OpEntryPoint GLCompute [[_39:%[0-9a-zA-Z_]+]] "bar"
// CHECK: OpDecorate [[_16:%[0-9a-zA-Z_]+]] DescriptorSet 0
// CHECK: OpDecorate [[_16]] Binding 0
// CHECK-DAG: [[_float:%[0-9a-zA-Z_]+]] = OpTypeFloat 32
// CHECK-DAG: [[_void:%[0-9a-zA-Z_]+]] = OpTypeVoid
// CHECK-DAG: [[_16]] = OpVariable {{.*}} StorageBuffer
// CHECK: [[_18:%[0-9a-zA-Z_]+]] = OpFunction [[_float]]
// CHECK: [[_22:%[0-9a-zA-Z_]+]] = OpAccessChain {{.*}} [[_16]]
// CHECK: [[_24:%[0-9a-zA-Z_]+]] = OpFunction [[_float]]
// CHECK: [[_28:%[0-9a-zA-Z_]+]] = OpAccessChain {{.*}} [[_16]]
// CHECK: [[_29:%[0-9a-zA-Z_]+]] = OpFunctionCall [[_float]] [[_18]] [[_28]]
// CHECK: [[_31:%[0-9a-zA-Z_]+]] = OpFunctionCall [[_float]] [[_18]] [[_28]]
// CHECK: [[_33]] = OpFunction [[_void]]
// CHECK: [[_35:%[0-9a-zA-Z_]+]] = OpAccessChain {{.*}} [[_16]]
// CHECK: [[_38:%[0-9a-zA-Z_]+]] = OpFunctionCall [[_float]] [[_24]] [[_35]]
// CHECK: [[_39]] = OpFunction [[_void]]
// CHECK: [[_41:%[0-9a-zA-Z_]+]] = OpAccessChain {{.*}} [[_16]]
// CHECK: [[_44:%[0-9a-zA-Z_]+]] = OpFunctionCall [[_float]] [[_24]] [[_41]]
// CHECK: [[_46:%[0-9a-zA-Z_]+]] = OpFunctionCall [[_float]] [[_24]] [[_41]]