1
2layout(input_attachment_index = 1) SubpassInput<float4> subpass_f4 : register(t1);
3layout(input_attachment_index = 2) SubpassInput<int4>   subpass_i4;
4layout(input_attachment_index = 3) SubpassInput<uint4>  subpass_u4;
5
6layout(input_attachment_index = 4) SubpassInputMS<float4> subpass_ms_f4;
7layout(input_attachment_index = 5) SubpassInputMS<int4>   subpass_ms_i4;
8layout(input_attachment_index = 6) SubpassInputMS<uint4>  subpass_ms_u4;
9
10layout(input_attachment_index = 1) SubpassInput<float3> subpass_f3;
11layout(input_attachment_index = 2) SubpassInput<int3>   subpass_i3;
12layout(input_attachment_index = 3) SubpassInput<uint3>  subpass_u3;
13
14layout(input_attachment_index = 4) SubpassInputMS<float3> subpass_ms_f3;
15layout(input_attachment_index = 5) SubpassInputMS<int3>   subpass_ms_i3;
16layout(input_attachment_index = 6) SubpassInputMS<uint3>  subpass_ms_u3;
17
18layout(input_attachment_index = 1) SubpassInput<float2> subpass_f2;
19layout(input_attachment_index = 2) SubpassInput<int2>   subpass_i2;
20layout(input_attachment_index = 3) SubpassInput<uint2>  subpass_u2;
21
22layout(input_attachment_index = 4) SubpassInputMS<float2> subpass_ms_f2;
23layout(input_attachment_index = 5) SubpassInputMS<int2>   subpass_ms_i2;
24layout(input_attachment_index = 6) SubpassInputMS<uint2>  subpass_ms_u2;
25
26layout(input_attachment_index = 1) SubpassInput<float> subpass_f;
27layout(input_attachment_index = 2) SubpassInput<int>   subpass_i;
28layout(input_attachment_index = 3) SubpassInput<uint>  subpass_u;
29
30layout(input_attachment_index = 4) SubpassInputMS<float> subpass_ms_f;
31layout(input_attachment_index = 5) SubpassInputMS<int>   subpass_ms_i;
32layout(input_attachment_index = 6) SubpassInputMS<uint>  subpass_ms_u;
33
34[[vk::input_attachment_index(7)]] SubpassInput subpass_2;
35
36struct mystruct_f_t
37{
38    float  c0;
39    float2 c1;
40    float  c2;
41};
42
43struct mystruct_i_t
44{
45    int  c0;
46    int2 c1;
47    int  c2;
48};
49
50struct mystruct_u_t
51{
52    uint  c0;
53    uint2 c1;
54    uint  c2;
55};
56
57// TODO: ...
58// layout(input_attachment_index = 7) SubpassInput<mystruct_f_t>    subpass_fs;
59// layout(input_attachment_index = 8) SubpassInputMS<mystruct_f_t>  subpass_ms_fs;
60
61// layout(input_attachment_index = 7) SubpassInput<mystruct_i_t>    subpass_is;
62// layout(input_attachment_index = 8) SubpassInputMS<mystruct_i_t>  subpass_ms_is;
63
64// layout(input_attachment_index = 7) SubpassInput<mystruct_u_t>    subpass_us;
65// layout(input_attachment_index = 8) SubpassInputMS<mystruct_u_t>  subpass_ms_us;
66
67float4 main() : SV_Target0
68{
69    float4 result00 = subpass_f4.SubpassLoad();
70    int4   result01 = subpass_i4.SubpassLoad();
71    uint4  result02 = subpass_u4.SubpassLoad();
72
73    float4 result10 = subpass_ms_f4.SubpassLoad(3);
74    int4   result11 = subpass_ms_i4.SubpassLoad(3);
75    uint4  result12 = subpass_ms_u4.SubpassLoad(3);
76
77    float3 result20 = subpass_f3.SubpassLoad();
78    int3   result21 = subpass_i3.SubpassLoad();
79    uint3  result22 = subpass_u3.SubpassLoad();
80
81    float3 result30 = subpass_ms_f3.SubpassLoad(3);
82    int3   result31 = subpass_ms_i3.SubpassLoad(3);
83    uint3  result32 = subpass_ms_u3.SubpassLoad(3);
84
85    float2 result40 = subpass_f2.SubpassLoad();
86    int2   result41 = subpass_i2.SubpassLoad();
87    uint2  result42 = subpass_u2.SubpassLoad();
88
89    float2 result50 = subpass_ms_f2.SubpassLoad(2);
90    int2   result51 = subpass_ms_i2.SubpassLoad(2);
91    uint2  result52 = subpass_ms_u2.SubpassLoad(2);
92
93    float  result60 = subpass_f.SubpassLoad();
94    int    result61 = subpass_i.SubpassLoad();
95    uint   result62 = subpass_u.SubpassLoad();
96
97    float  result70 = subpass_ms_f.SubpassLoad(2);
98    int    result71 = subpass_ms_i.SubpassLoad(2);
99    uint   result72 = subpass_ms_u.SubpassLoad(2);
100
101    float4 result73 = subpass_2.SubpassLoad();
102
103    // TODO:
104    // mystruct_f_t result80 = subpass_fs.SubpassLoad();
105    // mystruct_i_t result81 = subpass_is.SubpassLoad();
106    // mystruct_u_t result82 = subpass_us.SubpassLoad();
107
108    // mystruct_f_t result90 = subpass_ms_sf.SubpassLoad(2);
109    // mystruct_i_t result91 = subpass_ms_if.SubpassLoad(2);
110    // mystruct_u_t result92 = subpass_ms_uf.SubpassLoad(2);
111
112    return 0;
113}
114