Skip to content

Commit a22e23a

Browse files
committed
Add function parameter access test
1 parent 30e8b7c commit a22e23a

File tree

4 files changed

+373
-0
lines changed

4 files changed

+373
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
glslangValidator -V -S frag -g0 --ku -o function_parameter_access.spv function_parameter_access.glsl
3+
*/
4+
5+
#version 450
6+
7+
layout(binding = 0) uniform sampler Sampler;
8+
layout(binding = 1) uniform texture2D Texture;
9+
layout(binding = 2) uniform sampler2D Sampler2D;
10+
11+
layout(binding = 3) uniform sampler NeverAccessedSampler;
12+
layout(binding = 4) uniform texture2D NeverAccessedTexture;
13+
layout(binding = 5) uniform sampler2D NeverAccessedSampler2D;
14+
15+
layout(location = 0) out vec4 color;
16+
17+
vec4 access_sampler_and_texture(texture2D t, sampler s, vec2 coord)
18+
{
19+
vec4 ret = texture(sampler2D(t, s), coord);
20+
return vec4(5.0) * ret;
21+
}
22+
23+
vec4 access_combined_sampler(sampler2D s)
24+
{
25+
vec2 coord = vec2(0.5, 0.5);
26+
vec4 ret = texture(s, coord);
27+
return vec4(1.0, 2.0, 3.0, 1.0) * ret;
28+
}
29+
30+
vec4 call_access_functions(texture2D t, sampler s)
31+
{
32+
return access_combined_sampler(Sampler2D) + access_sampler_and_texture(t, s, vec2(0.25, 0.75));
33+
}
34+
35+
vec4 never_called(texture2D t, sampler s, float u, float v)
36+
{
37+
vec4 ret = texture(sampler2D(t, s), vec2(u, v));
38+
return vec4(-3.0) * ret;
39+
}
40+
41+
vec4 never_called_2(vec2 coord)
42+
{
43+
vec4 ret = texture(sampler2D(NeverAccessedTexture, NeverAccessedSampler), coord);
44+
ret *= texture(NeverAccessedSampler2D, coord);
45+
return ret;
46+
}
47+
48+
void main()
49+
{
50+
color = vec4(-1.0) * call_access_functions(Texture, Sampler);
51+
}
2.23 KB
Binary file not shown.
Lines changed: 321 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,321 @@
1+
%YAML 1.0
2+
---
3+
all_type_descriptions:
4+
- &td0
5+
id: 9
6+
op: 26
7+
type_name:
8+
struct_member_name:
9+
storage_class: -1 # NOT APPLICABLE
10+
type_flags: 0x00020000 # EXTERNAL_SAMPLER
11+
decoration_flags: 0x00000000 # NONE
12+
traits:
13+
numeric:
14+
scalar: { width: 0, signedness: 0 }
15+
vector: { component_count: 0 }
16+
matrix: { column_count: 0, row_count: 0, stride: 0 }
17+
image: { dim: 0, depth: 0, arrayed: 0, ms: 0, sampled: 0, image_format: 0 } # dim=1D image_format=Unknown
18+
array: { dims_count: 0, dims: [], stride: 0 }
19+
member_count: 0
20+
members:
21+
- &td1
22+
id: 7
23+
op: 25
24+
type_name:
25+
struct_member_name:
26+
storage_class: -1 # NOT APPLICABLE
27+
type_flags: 0x00010008 # EXTERNAL_IMAGE FLOAT
28+
decoration_flags: 0x00000000 # NONE
29+
traits:
30+
numeric:
31+
scalar: { width: 32, signedness: 0 }
32+
vector: { component_count: 0 }
33+
matrix: { column_count: 0, row_count: 0, stride: 0 }
34+
image: { dim: 1, depth: 0, arrayed: 0, ms: 0, sampled: 1, image_format: 0 } # dim=2D image_format=Unknown
35+
array: { dims_count: 0, dims: [], stride: 0 }
36+
member_count: 0
37+
members:
38+
- &td2
39+
id: 20
40+
op: 27
41+
type_name:
42+
struct_member_name:
43+
storage_class: -1 # NOT APPLICABLE
44+
type_flags: 0x00050008 # EXTERNAL_SAMPLED_IMAGE EXTERNAL_IMAGE FLOAT
45+
decoration_flags: 0x00000000 # NONE
46+
traits:
47+
numeric:
48+
scalar: { width: 32, signedness: 0 }
49+
vector: { component_count: 0 }
50+
matrix: { column_count: 0, row_count: 0, stride: 0 }
51+
image: { dim: 1, depth: 0, arrayed: 0, ms: 0, sampled: 1, image_format: 0 } # dim=2D image_format=Unknown
52+
array: { dims_count: 0, dims: [], stride: 0 }
53+
member_count: 0
54+
members:
55+
- &td3
56+
id: 13
57+
op: 23
58+
type_name:
59+
struct_member_name:
60+
storage_class: -1 # NOT APPLICABLE
61+
type_flags: 0x00000108 # VECTOR FLOAT
62+
decoration_flags: 0x00000000 # NONE
63+
traits:
64+
numeric:
65+
scalar: { width: 32, signedness: 0 }
66+
vector: { component_count: 4 }
67+
matrix: { column_count: 0, row_count: 0, stride: 0 }
68+
image: { dim: 0, depth: 0, arrayed: 0, ms: 0, sampled: 0, image_format: 0 } # dim=1D image_format=Unknown
69+
array: { dims_count: 0, dims: [], stride: 0 }
70+
member_count: 0
71+
members:
72+
all_block_variables:
73+
- &bv0
74+
name:
75+
offset: 0
76+
absolute_offset: 0
77+
size: 0
78+
padded_size: 0
79+
decorations: 0x00000000 # NONE
80+
numeric:
81+
scalar: { width: 0, signedness: 0 }
82+
vector: { component_count: 0 }
83+
matrix: { column_count: 0, row_count: 0, stride: 0 }
84+
array: { dims_count: 0, dims: [], stride: 0 }
85+
member_count: 0
86+
members:
87+
type_description:
88+
- &bv1
89+
name:
90+
offset: 0
91+
absolute_offset: 0
92+
size: 0
93+
padded_size: 0
94+
decorations: 0x00000000 # NONE
95+
numeric:
96+
scalar: { width: 0, signedness: 0 }
97+
vector: { component_count: 0 }
98+
matrix: { column_count: 0, row_count: 0, stride: 0 }
99+
array: { dims_count: 0, dims: [], stride: 0 }
100+
member_count: 0
101+
members:
102+
type_description:
103+
- &bv2
104+
name:
105+
offset: 0
106+
absolute_offset: 0
107+
size: 0
108+
padded_size: 0
109+
decorations: 0x00000000 # NONE
110+
numeric:
111+
scalar: { width: 0, signedness: 0 }
112+
vector: { component_count: 0 }
113+
matrix: { column_count: 0, row_count: 0, stride: 0 }
114+
array: { dims_count: 0, dims: [], stride: 0 }
115+
member_count: 0
116+
members:
117+
type_description:
118+
- &bv3
119+
name:
120+
offset: 0
121+
absolute_offset: 0
122+
size: 0
123+
padded_size: 0
124+
decorations: 0x00000000 # NONE
125+
numeric:
126+
scalar: { width: 0, signedness: 0 }
127+
vector: { component_count: 0 }
128+
matrix: { column_count: 0, row_count: 0, stride: 0 }
129+
array: { dims_count: 0, dims: [], stride: 0 }
130+
member_count: 0
131+
members:
132+
type_description:
133+
- &bv4
134+
name:
135+
offset: 0
136+
absolute_offset: 0
137+
size: 0
138+
padded_size: 0
139+
decorations: 0x00000000 # NONE
140+
numeric:
141+
scalar: { width: 0, signedness: 0 }
142+
vector: { component_count: 0 }
143+
matrix: { column_count: 0, row_count: 0, stride: 0 }
144+
array: { dims_count: 0, dims: [], stride: 0 }
145+
member_count: 0
146+
members:
147+
type_description:
148+
- &bv5
149+
name:
150+
offset: 0
151+
absolute_offset: 0
152+
size: 0
153+
padded_size: 0
154+
decorations: 0x00000000 # NONE
155+
numeric:
156+
scalar: { width: 0, signedness: 0 }
157+
vector: { component_count: 0 }
158+
matrix: { column_count: 0, row_count: 0, stride: 0 }
159+
array: { dims_count: 0, dims: [], stride: 0 }
160+
member_count: 0
161+
members:
162+
type_description:
163+
all_descriptor_bindings:
164+
- &db0
165+
spirv_id: 117
166+
name:
167+
binding: 0
168+
input_attachment_index: 0
169+
set: 0
170+
decoration_flags: 0x00000000 # NONE
171+
descriptor_type: 0 # VK_DESCRIPTOR_TYPE_SAMPLER
172+
resource_type: 1 # SAMPLER
173+
image: { dim: 0, depth: 0, arrayed: 0, ms: 0, sampled: 0, image_format: 0 } # dim=1D image_format=Unknown
174+
block: *bv0 #
175+
array: { dims_count: 0, dims: [] }
176+
accessed: 1
177+
uav_counter_id: 4294967295
178+
uav_counter_binding:
179+
type_description: *td0
180+
word_offset: { binding: 76, set: 72 }
181+
- &db1
182+
spirv_id: 116
183+
name:
184+
binding: 1
185+
input_attachment_index: 0
186+
set: 0
187+
decoration_flags: 0x00000000 # NONE
188+
descriptor_type: 2 # VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
189+
resource_type: 4 # SRV
190+
image: { dim: 1, depth: 0, arrayed: 0, ms: 0, sampled: 1, image_format: 0 } # dim=2D image_format=Unknown
191+
block: *bv1 #
192+
array: { dims_count: 0, dims: [] }
193+
accessed: 1
194+
uav_counter_id: 4294967295
195+
uav_counter_binding:
196+
type_description: *td1
197+
word_offset: { binding: 68, set: 64 }
198+
- &db2
199+
spirv_id: 71
200+
name:
201+
binding: 2
202+
input_attachment_index: 0
203+
set: 0
204+
decoration_flags: 0x00000000 # NONE
205+
descriptor_type: 1 # VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
206+
resource_type: 5 # ???
207+
image: { dim: 1, depth: 0, arrayed: 0, ms: 0, sampled: 1, image_format: 0 } # dim=2D image_format=Unknown
208+
block: *bv2 #
209+
array: { dims_count: 0, dims: [] }
210+
accessed: 1
211+
uav_counter_id: 4294967295
212+
uav_counter_binding:
213+
type_description: *td2
214+
word_offset: { binding: 32, set: 28 }
215+
- &db3
216+
spirv_id: 98
217+
name:
218+
binding: 3
219+
input_attachment_index: 0
220+
set: 0
221+
decoration_flags: 0x00000000 # NONE
222+
descriptor_type: 0 # VK_DESCRIPTOR_TYPE_SAMPLER
223+
resource_type: 1 # SAMPLER
224+
image: { dim: 0, depth: 0, arrayed: 0, ms: 0, sampled: 0, image_format: 0 } # dim=1D image_format=Unknown
225+
block: *bv3 #
226+
array: { dims_count: 0, dims: [] }
227+
accessed: 0
228+
uav_counter_id: 4294967295
229+
uav_counter_binding:
230+
type_description: *td0
231+
word_offset: { binding: 48, set: 44 }
232+
- &db4
233+
spirv_id: 96
234+
name:
235+
binding: 4
236+
input_attachment_index: 0
237+
set: 0
238+
decoration_flags: 0x00000000 # NONE
239+
descriptor_type: 2 # VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
240+
resource_type: 4 # SRV
241+
image: { dim: 1, depth: 0, arrayed: 0, ms: 0, sampled: 1, image_format: 0 } # dim=2D image_format=Unknown
242+
block: *bv4 #
243+
array: { dims_count: 0, dims: [] }
244+
accessed: 0
245+
uav_counter_id: 4294967295
246+
uav_counter_binding:
247+
type_description: *td1
248+
word_offset: { binding: 40, set: 36 }
249+
- &db5
250+
spirv_id: 103
251+
name:
252+
binding: 5
253+
input_attachment_index: 0
254+
set: 0
255+
decoration_flags: 0x00000000 # NONE
256+
descriptor_type: 1 # VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
257+
resource_type: 5 # ???
258+
image: { dim: 1, depth: 0, arrayed: 0, ms: 0, sampled: 1, image_format: 0 } # dim=2D image_format=Unknown
259+
block: *bv5 #
260+
array: { dims_count: 0, dims: [] }
261+
accessed: 0
262+
uav_counter_id: 4294967295
263+
uav_counter_binding:
264+
type_description: *td2
265+
word_offset: { binding: 56, set: 52 }
266+
all_interface_variables:
267+
- &iv0
268+
spirv_id: 113
269+
name:
270+
location: 0
271+
storage_class: 3 # Output
272+
semantic:
273+
decoration_flags: 0x00000000 # NONE
274+
built_in: -1 # ??? (-1)
275+
numeric:
276+
scalar: { width: 32, signedness: 0 }
277+
vector: { component_count: 4 }
278+
matrix: { column_count: 0, row_count: 0, stride: 0 }
279+
array: { dims_count: 0, dims: [], stride: 0 }
280+
member_count: 0
281+
members:
282+
format: 109 # VK_FORMAT_R32G32B32A32_SFLOAT
283+
type_description: *td3
284+
word_offset: { location: 60 }
285+
module:
286+
generator: 8 # Khronos Glslang Reference Front End
287+
entry_point_name: "main"
288+
entry_point_id: 4
289+
source_language: 0 # Unknown
290+
source_language_version: 0
291+
spirv_execution_model: 4 # Fragment
292+
shader_stage: 0x00000010 # PS
293+
descriptor_binding_count: 6
294+
descriptor_bindings:
295+
- *db0 #
296+
- *db1 #
297+
- *db2 #
298+
- *db3 #
299+
- *db4 #
300+
- *db5 #
301+
descriptor_set_count: 1
302+
descriptor_sets:
303+
- set: 0
304+
binding_count: 6
305+
bindings:
306+
- *db0 #
307+
- *db1 #
308+
- *db2 #
309+
- *db3 #
310+
- *db4 #
311+
- *db5 #
312+
input_variable_count: 0,
313+
input_variables:
314+
output_variable_count: 1,
315+
output_variables:
316+
- *iv0 #
317+
push_constant_count: 0,
318+
push_constants:
319+
specialization_constant_count: 0,
320+
specialization_constants:
321+
...

tests/test-spirv-reflect.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -821,6 +821,7 @@ const std::vector<const char*> all_spirv_paths = {
821821
"../tests/issues/77/hlsl/array_from_ubo.spv",
822822
"../tests/issues/77/hlsl/array_from_ubo_with_O0.spv",
823823
"../tests/issues/77/hlsl/rocketz.spv",
824+
"../tests/issues/102/function_parameter_access.spv",
824825
"../tests/issues/178/vertex_input_struct.spv",
825826
"../tests/issues/178/vertex_input_struct2.spv",
826827
"../tests/multi_entrypoint/multi_entrypoint.spv",

0 commit comments

Comments
 (0)