Fix missing dependency on sparse binds
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / data / vulkan / amber / graphicsfuzz / spv-null-in-phi-and-unroll.amber
1 #!amber
2
3 # Copyright 2020 Google LLC
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 #     http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16
17
18 # A test for a bug found by the GraphicsFuzz project.
19
20 # Short description: Equivalent shaders, one that uses null for 0 and an Unroll annotation
21
22 # The test passes because both shaders render the same image.
23
24 SHADER vertex reference_vertex_shader PASSTHROUGH
25
26 SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
27 ; SPIR-V
28 ; Version: 1.0
29 ; Generator: Khronos Glslang Reference Front End; 7
30 ; Bound: 295
31 ; Schema: 0
32                OpCapability Shader
33           %1 = OpExtInstImport "GLSL.std.450"
34                OpMemoryModel Logical GLSL450
35                OpEntryPoint Fragment %4 "main" %165 %180
36                OpExecutionMode %4 OriginUpperLeft
37                OpSource ESSL 320
38                OpName %4 "main"
39                OpName %165 "gl_FragCoord"
40                OpName %168 "buf0"
41                OpMemberName %168 0 "resolution"
42                OpName %170 ""
43                OpName %180 "_GLF_color"
44                OpDecorate %165 BuiltIn FragCoord
45                OpMemberDecorate %168 0 Offset 0
46                OpDecorate %168 Block
47                OpDecorate %170 DescriptorSet 0
48                OpDecorate %170 Binding 0
49                OpDecorate %180 Location 0
50           %2 = OpTypeVoid
51           %3 = OpTypeFunction %2
52           %6 = OpTypeFloat 32
53           %7 = OpTypeVector %6 2
54           %9 = OpTypeVector %6 4
55          %10 = OpTypePointer Function %9
56          %11 = OpTypeBool
57          %21 = OpTypeInt 32 0
58          %22 = OpConstant %21 0
59          %23 = OpTypePointer Function %6
60          %31 = OpConstantFalse %11
61          %33 = OpConstant %21 1
62          %66 = OpConstantTrue %11
63          %70 = OpConstant %6 0.5
64          %71 = OpConstant %6 1
65          %72 = OpConstantComposite %9 %70 %70 %71 %71
66          %73 = OpTypeInt 32 1
67          %76 = OpConstant %73 0
68          %83 = OpConstant %73 8
69          %85 = OpConstant %21 8
70          %86 = OpTypeArray %9 %85
71          %87 = OpConstant %6 4
72          %88 = OpConstant %6 20
73          %89 = OpConstantComposite %9 %87 %87 %88 %87
74          %90 = OpConstantComposite %9 %87 %87 %87 %88
75          %91 = OpConstantComposite %9 %87 %88 %88 %87
76          %92 = OpConstant %6 8
77          %93 = OpConstantComposite %9 %88 %87 %87 %92
78          %94 = OpConstant %6 6
79          %95 = OpConstant %6 2
80          %96 = OpConstantComposite %9 %92 %94 %87 %95
81          %97 = OpConstant %6 12
82          %98 = OpConstantComposite %9 %95 %97 %95 %87
83          %99 = OpConstant %6 16
84         %100 = OpConstantComposite %9 %99 %95 %87 %87
85         %101 = OpConstant %6 22
86         %102 = OpConstantComposite %9 %97 %101 %87 %87
87         %103 = OpConstantComposite %86 %89 %90 %91 %93 %96 %98 %100 %102
88         %108 = OpTypePointer Function %86
89         %115 = OpConstant %21 16
90         %116 = OpTypeArray %9 %115
91         %117 = OpConstant %6 0
92         %118 = OpConstantComposite %9 %117 %117 %117 %71
93         %119 = OpConstantComposite %9 %70 %117 %117 %71
94         %120 = OpConstantComposite %9 %117 %70 %117 %71
95         %121 = OpConstantComposite %9 %70 %70 %117 %71
96         %122 = OpConstantComposite %9 %117 %117 %70 %71
97         %123 = OpConstantComposite %9 %70 %117 %70 %71
98         %124 = OpConstantComposite %9 %117 %70 %70 %71
99         %125 = OpConstantComposite %9 %70 %70 %70 %71
100         %126 = OpConstantComposite %9 %71 %117 %117 %71
101         %127 = OpConstantComposite %9 %117 %71 %117 %71
102         %128 = OpConstantComposite %9 %71 %71 %117 %71
103         %129 = OpConstantComposite %9 %117 %117 %71 %71
104         %130 = OpConstantComposite %9 %71 %117 %71 %71
105         %131 = OpConstantComposite %9 %117 %71 %71 %71
106         %132 = OpConstantComposite %9 %71 %71 %71 %71
107         %133 = OpConstantComposite %116 %118 %119 %120 %121 %122 %123 %124 %125 %118 %126 %127 %128 %129 %130 %131 %132
108         %146 = OpConstant %73 9
109         %149 = OpConstant %73 11
110         %151 = OpConstant %73 16
111         %153 = OpTypePointer Function %116
112         %158 = OpConstant %73 1
113         %164 = OpTypePointer Input %9
114         %165 = OpVariable %164 Input
115         %168 = OpTypeStruct %7
116         %169 = OpTypePointer Uniform %168
117         %170 = OpVariable %169 Uniform
118         %171 = OpTypePointer Uniform %7
119         %176 = OpConstant %6 32
120         %179 = OpTypePointer Output %9
121         %180 = OpVariable %179 Output
122           %4 = OpFunction %2 None %3
123           %5 = OpLabel
124         %199 = OpVariable %108 Function
125         %200 = OpVariable %108 Function
126         %201 = OpVariable %108 Function
127         %202 = OpVariable %153 Function
128         %166 = OpLoad %9 %165
129         %167 = OpVectorShuffle %7 %166 %166 0 1
130         %172 = OpAccessChain %171 %170 %76
131         %173 = OpLoad %7 %172
132         %174 = OpFDiv %7 %167 %173
133         %177 = OpVectorTimesScalar %7 %174 %176
134         %178 = OpExtInst %7 %1 Floor %177
135                OpBranch %205
136         %205 = OpLabel
137         %290 = OpPhi %9 %72 %5 %294 %233
138         %289 = OpPhi %73 %76 %5 %235 %233
139         %208 = OpSLessThan %11 %289 %83
140                OpLoopMerge %236 %233 None
141                OpBranchConditional %208 %209 %236
142         %209 = OpLabel
143                OpStore %199 %103
144         %212 = OpAccessChain %10 %199 %289
145         %213 = OpLoad %9 %212
146                OpSelectionMerge %277 None
147                OpSwitch %22 %242
148         %242 = OpLabel
149         %244 = OpCompositeExtract %6 %178 0
150         %246 = OpCompositeExtract %6 %213 0
151         %247 = OpFOrdLessThan %11 %244 %246
152                OpSelectionMerge %249 None
153                OpBranchConditional %247 %248 %249
154         %248 = OpLabel
155                OpBranch %277
156         %249 = OpLabel
157         %251 = OpCompositeExtract %6 %178 1
158         %253 = OpCompositeExtract %6 %213 1
159         %254 = OpFOrdLessThan %11 %251 %253
160                OpSelectionMerge %256 None
161                OpBranchConditional %254 %255 %256
162         %255 = OpLabel
163                OpBranch %277
164         %256 = OpLabel
165         %262 = OpCompositeExtract %6 %213 2
166         %263 = OpFAdd %6 %246 %262
167         %264 = OpFOrdGreaterThan %11 %244 %263
168                OpSelectionMerge %266 None
169                OpBranchConditional %264 %265 %266
170         %265 = OpLabel
171                OpBranch %277
172         %266 = OpLabel
173         %272 = OpCompositeExtract %6 %213 3
174         %273 = OpFAdd %6 %253 %272
175         %274 = OpFOrdGreaterThan %11 %251 %273
176                OpSelectionMerge %276 None
177                OpBranchConditional %274 %275 %276
178         %275 = OpLabel
179                OpBranch %277
180         %276 = OpLabel
181                OpBranch %277
182         %277 = OpLabel
183         %291 = OpPhi %11 %31 %248 %31 %255 %31 %265 %31 %275 %66 %276
184                OpSelectionMerge %232 None
185                OpBranchConditional %291 %215 %232
186         %215 = OpLabel
187                OpStore %200 %103
188         %217 = OpAccessChain %23 %200 %289 %22
189         %218 = OpLoad %6 %217
190         %219 = OpConvertFToS %73 %218
191                OpStore %201 %103
192         %221 = OpAccessChain %23 %201 %289 %33
193         %222 = OpLoad %6 %221
194         %223 = OpConvertFToS %73 %222
195         %224 = OpIMul %73 %219 %223
196         %226 = OpIMul %73 %289 %146
197         %227 = OpIAdd %73 %224 %226
198         %228 = OpIAdd %73 %227 %149
199         %229 = OpSMod %73 %228 %151
200                OpStore %202 %133
201         %230 = OpAccessChain %10 %202 %229
202         %231 = OpLoad %9 %230
203                OpBranch %232
204         %232 = OpLabel
205         %294 = OpPhi %9 %290 %277 %231 %215
206                OpBranch %233
207         %233 = OpLabel
208         %235 = OpIAdd %73 %289 %158
209                OpBranch %205
210         %236 = OpLabel
211                OpStore %180 %290
212                OpReturn
213                OpFunctionEnd
214 END
215
216 # uniforms for reference
217
218 # resolution
219 BUFFER reference_resolution DATA_TYPE vec2<float> DATA
220  256.0 256.0
221 END
222
223 BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
224
225 PIPELINE graphics reference_pipeline
226   ATTACH reference_vertex_shader
227   ATTACH reference_fragment_shader
228   FRAMEBUFFER_SIZE 256 256
229   BIND BUFFER reference_framebuffer AS color LOCATION 0
230   BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
231 END
232 CLEAR_COLOR reference_pipeline 0 0 0 255
233
234 CLEAR reference_pipeline
235 RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
236
237
238 SHADER vertex variant_vertex_shader PASSTHROUGH
239
240 SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
241 ; SPIR-V
242 ; Version: 1.0
243 ; Generator: Khronos Glslang Reference Front End; 7
244 ; Bound: 426
245 ; Schema: 0
246                OpCapability Shader
247           %1 = OpExtInstImport "GLSL.std.450"
248                OpMemoryModel Logical GLSL450
249                OpEntryPoint Fragment %4 "main" %165 %180
250                OpExecutionMode %4 OriginUpperLeft
251                OpSource ESSL 320
252                OpName %4 "main"
253                OpName %165 "gl_FragCoord"
254                OpName %168 "buf0"
255                OpMemberName %168 0 "resolution"
256                OpName %170 ""
257                OpName %180 "_GLF_color"
258                OpDecorate %165 BuiltIn FragCoord
259                OpMemberDecorate %168 0 Offset 0
260                OpDecorate %168 Block
261                OpDecorate %170 DescriptorSet 0
262                OpDecorate %170 Binding 0
263                OpDecorate %180 Location 0
264           %2 = OpTypeVoid
265           %3 = OpTypeFunction %2
266           %6 = OpTypeFloat 32
267           %7 = OpTypeVector %6 2
268           %9 = OpTypeVector %6 4
269          %10 = OpTypePointer Function %9
270          %11 = OpTypeBool
271          %21 = OpTypeInt 32 0
272          %22 = OpConstant %21 0
273          %23 = OpTypePointer Function %6
274          %31 = OpConstantFalse %11
275          %33 = OpConstant %21 1
276          %66 = OpConstantTrue %11
277          %70 = OpConstant %6 0.5
278          %71 = OpConstant %6 1
279          %72 = OpConstantComposite %9 %70 %70 %71 %71
280          %73 = OpTypeInt 32 1
281          %76 = OpConstant %73 0
282          %83 = OpConstant %73 8
283          %85 = OpConstant %21 8
284          %86 = OpTypeArray %9 %85
285          %87 = OpConstant %6 4
286          %88 = OpConstant %6 20
287          %89 = OpConstantComposite %9 %87 %87 %88 %87
288          %90 = OpConstantComposite %9 %87 %87 %87 %88
289          %91 = OpConstantComposite %9 %87 %88 %88 %87
290          %92 = OpConstant %6 8
291          %93 = OpConstantComposite %9 %88 %87 %87 %92
292          %94 = OpConstant %6 6
293          %95 = OpConstant %6 2
294          %96 = OpConstantComposite %9 %92 %94 %87 %95
295          %97 = OpConstant %6 12
296          %98 = OpConstantComposite %9 %95 %97 %95 %87
297          %99 = OpConstant %6 16
298         %100 = OpConstantComposite %9 %99 %95 %87 %87
299         %101 = OpConstant %6 22
300         %102 = OpConstantComposite %9 %97 %101 %87 %87
301         %103 = OpConstantComposite %86 %89 %90 %91 %93 %96 %98 %100 %102
302         %108 = OpTypePointer Function %86
303         %115 = OpConstant %21 16
304         %116 = OpTypeArray %9 %115
305         %117 = OpConstant %6 0
306         %118 = OpConstantComposite %9 %117 %117 %117 %71
307         %119 = OpConstantComposite %9 %70 %117 %117 %71
308         %120 = OpConstantComposite %9 %117 %70 %117 %71
309         %121 = OpConstantComposite %9 %70 %70 %117 %71
310         %122 = OpConstantComposite %9 %117 %117 %70 %71
311         %123 = OpConstantComposite %9 %70 %117 %70 %71
312         %124 = OpConstantComposite %9 %117 %70 %70 %71
313         %125 = OpConstantComposite %9 %70 %70 %70 %71
314         %126 = OpConstantComposite %9 %71 %117 %117 %71
315         %127 = OpConstantComposite %9 %117 %71 %117 %71
316         %128 = OpConstantComposite %9 %71 %71 %117 %71
317         %129 = OpConstantComposite %9 %117 %117 %71 %71
318         %130 = OpConstantComposite %9 %71 %117 %71 %71
319         %131 = OpConstantComposite %9 %117 %71 %71 %71
320         %132 = OpConstantComposite %9 %71 %71 %71 %71
321         %133 = OpConstantComposite %116 %118 %119 %120 %121 %122 %123 %124 %125 %118 %126 %127 %128 %129 %130 %131 %132
322         %146 = OpConstant %73 9
323         %149 = OpConstant %73 11
324         %151 = OpConstant %73 16
325         %153 = OpTypePointer Function %116
326         %158 = OpConstant %73 1
327         %164 = OpTypePointer Input %9
328         %165 = OpVariable %164 Input
329         %168 = OpTypeStruct %7
330         %169 = OpTypePointer Uniform %168
331         %170 = OpVariable %169 Uniform
332         %171 = OpTypePointer Uniform %7
333         %176 = OpConstant %6 32
334         %179 = OpTypePointer Output %9
335         %180 = OpVariable %179 Output
336         %425 = OpConstantNull %73
337           %4 = OpFunction %2 None %3
338           %5 = OpLabel
339         %199 = OpVariable %108 Function
340         %200 = OpVariable %108 Function
341         %201 = OpVariable %108 Function
342         %202 = OpVariable %153 Function
343         %166 = OpLoad %9 %165
344         %167 = OpVectorShuffle %7 %166 %166 0 1
345         %172 = OpAccessChain %171 %170 %76
346         %173 = OpLoad %7 %172
347         %174 = OpFDiv %7 %167 %173
348         %177 = OpVectorTimesScalar %7 %174 %176
349         %178 = OpExtInst %7 %1 Floor %177
350                OpBranch %205
351         %205 = OpLabel
352         %290 = OpPhi %9 %72 %5 %294 %233
353         %289 = OpPhi %73 %425 %5 %235 %233
354         %208 = OpSLessThan %11 %289 %83
355                OpLoopMerge %236 %233 Unroll
356                OpBranchConditional %208 %209 %236
357         %209 = OpLabel
358                OpStore %199 %103
359         %212 = OpAccessChain %10 %199 %289
360         %213 = OpLoad %9 %212
361                OpSelectionMerge %277 None
362                OpSwitch %22 %242
363         %242 = OpLabel
364         %244 = OpCompositeExtract %6 %178 0
365         %246 = OpCompositeExtract %6 %213 0
366         %247 = OpFOrdLessThan %11 %244 %246
367                OpSelectionMerge %249 None
368                OpBranchConditional %247 %248 %249
369         %248 = OpLabel
370                OpBranch %277
371         %249 = OpLabel
372         %251 = OpCompositeExtract %6 %178 1
373         %253 = OpCompositeExtract %6 %213 1
374         %254 = OpFOrdLessThan %11 %251 %253
375                OpSelectionMerge %256 None
376                OpBranchConditional %254 %255 %256
377         %255 = OpLabel
378                OpBranch %277
379         %256 = OpLabel
380         %262 = OpCompositeExtract %6 %213 2
381         %263 = OpFAdd %6 %246 %262
382         %264 = OpFOrdGreaterThan %11 %244 %263
383                OpSelectionMerge %266 None
384                OpBranchConditional %264 %265 %266
385         %265 = OpLabel
386                OpBranch %277
387         %266 = OpLabel
388         %272 = OpCompositeExtract %6 %213 3
389         %273 = OpFAdd %6 %253 %272
390         %274 = OpFOrdGreaterThan %11 %251 %273
391                OpSelectionMerge %276 None
392                OpBranchConditional %274 %275 %276
393         %275 = OpLabel
394                OpBranch %277
395         %276 = OpLabel
396                OpBranch %277
397         %277 = OpLabel
398         %291 = OpPhi %11 %31 %248 %31 %255 %31 %265 %31 %275 %66 %276
399                OpSelectionMerge %232 None
400                OpBranchConditional %291 %215 %232
401         %215 = OpLabel
402                OpStore %200 %103
403         %217 = OpAccessChain %23 %200 %289 %22
404         %218 = OpLoad %6 %217
405         %219 = OpConvertFToS %73 %218
406                OpStore %201 %103
407         %221 = OpAccessChain %23 %201 %289 %33
408         %222 = OpLoad %6 %221
409         %223 = OpConvertFToS %73 %222
410         %224 = OpIMul %73 %219 %223
411         %226 = OpIMul %73 %289 %146
412         %227 = OpIAdd %73 %224 %226
413         %228 = OpIAdd %73 %227 %149
414         %229 = OpSMod %73 %228 %151
415                OpStore %202 %133
416         %230 = OpAccessChain %10 %202 %229
417         %231 = OpLoad %9 %230
418                OpBranch %232
419         %232 = OpLabel
420         %294 = OpPhi %9 %290 %277 %231 %215
421                OpBranch %233
422         %233 = OpLabel
423         %235 = OpIAdd %73 %289 %158
424                OpBranch %205
425         %236 = OpLabel
426                OpStore %180 %290
427                OpReturn
428                OpFunctionEnd
429 END
430
431 # uniforms for variant
432
433 # resolution
434 BUFFER variant_resolution DATA_TYPE vec2<float> DATA
435  256.0 256.0
436 END
437
438 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
439
440 PIPELINE graphics variant_pipeline
441   ATTACH variant_vertex_shader
442   ATTACH variant_fragment_shader
443   FRAMEBUFFER_SIZE 256 256
444   BIND BUFFER variant_framebuffer AS color LOCATION 0
445   BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
446 END
447 CLEAR_COLOR variant_pipeline 0 0 0 255
448
449 CLEAR variant_pipeline
450 RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
451
452 EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005