blob: cae199bb81d44d8c38acedc16cc0ea2a4a8b877b [file]
// RUN: clspv %s -o %t.spv -pod-ubo -cluster-pod-kernel-args
// RUN: spirv-dis %t.spv -o %t.spvasm
// RUN: FileCheck %s < %t.spvasm
// RUN: clspv-reflection %t.spv -o %t.map
// RUN: FileCheck --check-prefix=MAP %s < %t.map
// RUN: spirv-val --target-env vulkan1.0 %t.spv
// RUN: clspv %s -o %t2.spv -pod-ubo -cluster-pod-kernel-args -int8=0
// RUN: spirv-dis %t2.spv -o %t2.spvasm
// RUN: FileCheck %s < %t2.spvasm
// RUN: clspv-reflection %t2.spv -o %t2.map
// RUN: FileCheck --check-prefix=MAP %s < %t2.map
// RUN: spirv-val --target-env vulkan1.0 %t2.spv
typedef struct {
int a, b, c, d;
} S;
kernel void foo(global int4* out, int a, S s) {
out->x = a + s.a;
}
// MAP: kernel,foo,arg,out,argOrdinal,0,descriptorSet,0,binding,0,offset,0,argKind,buffer
// MAP-NEXT: kernel,foo,arg,a,argOrdinal,1,descriptorSet,0,binding,1,offset,0,argKind,pod_ubo,argSize,4
// MAP-NEXT: kernel,foo,arg,s,argOrdinal,2,descriptorSet,0,binding,1,offset,16,argKind,pod_ubo,argSize,16
// CHECK: OpMemberDecorate
// CHECK: OpMemberDecorate [[S:%[a-zA-Z0-9_]+]] 0 Offset 0
// CHECK: OpMemberDecorate [[S]] 1 Offset 4
// CHECK: OpMemberDecorate [[S]] 2 Offset 8
// CHECK: OpMemberDecorate [[S]] 3 Offset 12
// CHECK: OpMemberDecorate [[cluster:%[a-zA-Z0-9_]+]] 0 Offset 0
// CHECK: OpMemberDecorate [[cluster]] 1 Offset 4
// CHECK: OpMemberDecorate [[cluster]] 2 Offset 8
// CHECK: OpMemberDecorate [[cluster]] 3 Offset 12
// CHECK: OpMemberDecorate [[cluster]] 4 Offset 16
// CHECK: [[int:%[a-zA-Z0-9_]+]] = OpTypeInt 32 0
// CHECK-NOT: OpTypeInt 8 0
// CHECK: [[S]] = OpTypeStruct [[int]] [[int]] [[int]] [[int]]
// CHECK: [[cluster]] = OpTypeStruct [[int]] [[int]] [[int]] [[int]] [[S]]
// CHECK: [[pod_var:%[a-zA-Z0-9_]+]] = OpVariable {{.*}} Uniform
// CHECK: [[gep:%[a-zA-Z0-9_]+]] = OpAccessChain {{.*}} [[pod_var]]
// CHECK: [[ld:%[a-zA-Z0-9_]+]] = OpLoad [[cluster]] [[gep]]
// CHECK: [[a:%[a-zA-Z0-9_]+]] = OpCompositeExtract [[int]] [[ld]] 0
// CHECK: [[s:%[a-zA-Z0-9_]+]] = OpCompositeExtract [[S]] [[ld]] 4
// CHECK: [[s_a:%[a-zA-Z0-9_]+]] = OpCompositeExtract [[int]] [[s]] 0
// CHECK: OpIAdd [[int]] [[s_a]] [[a]]