blob: 1cea88e338aabaca6da84eff869b112dd4f24645 [file] [edit]
// RUN: %clang_cc1 -triple spirv-linux-vulkan-vertex -x hlsl -emit-llvm -finclude-default-header -disable-llvm-passes -o - %s | FileCheck %s
struct Inner {
uint b : B;
};
struct VSInput {
float4 position : POSITION; // Not system semantic, Location 0
};
struct VSOutput {
float4 position : SV_POSITION; // System semantic, builtin Position
uint a : A; // Location 0
Inner inner; // Location 1
uint c : C; // Location 2
};
// CHECK: @POSITION0 = external hidden thread_local addrspace(7) externally_initialized constant <4 x float>, !spirv.Decorations ![[#MD_0:]]
// CHECK: @SV_POSITION = external hidden thread_local addrspace(8) global <4 x float>, !spirv.Decorations ![[#MD_2:]]
// CHECK: @A0 = external hidden thread_local addrspace(8) global i32, !spirv.Decorations ![[#MD_0:]]
// CHECK: @B0 = external hidden thread_local addrspace(8) global i32, !spirv.Decorations ![[#MD_4:]]
// CHECK: @C0 = external hidden thread_local addrspace(8) global i32, !spirv.Decorations ![[#MD_6:]]
VSOutput main(VSInput input) {
VSOutput output;
output.position = input.position;
output.a = 1;
output.inner.b = 2;
output.c = 3;
return output;
}
// CHECK: ![[#MD_0]] = !{![[#MD_1:]]}
// CHECK: ![[#MD_1]] = !{i32 30, i32 0}
// | `-> Location index
// `-> SPIR-V decoration 'Location'
// CHECK: ![[#MD_2]] = !{![[#MD_3:]]}
// CHECK: ![[#MD_3]] = !{i32 11, i32 0}
// | `-> BuiltIn 'Position'
// `-> SPIR-V decoration 'BuiltIn'
// CHECK: ![[#MD_4]] = !{![[#MD_5:]]}
// CHECK: ![[#MD_5]] = !{i32 30, i32 1}
// | `-> Location index
// `-> SPIR-V decoration 'Location'
// CHECK: ![[#MD_6]] = !{![[#MD_7:]]}
// CHECK: ![[#MD_7]] = !{i32 30, i32 2}
// | `-> Location index
// `-> SPIR-V decoration 'Location'