Fix missing dependency on sparse binds
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / data / vulkan / amber / graphicsfuzz / cov-value-tracking-selection-dag-negation-clamp-loop.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 coverage-gap found by the GraphicsFuzz project.
19
20 # Short description: A fragment shader that calculates negation of clamped loop iterator values
21
22 # The test passes because the shader always writes red.
23
24 SHADER vertex variant_vertex_shader PASSTHROUGH
25
26 # variant_fragment_shader is derived from the following GLSL:
27 # #version 310 es
28 # #define _int_0 _GLF_uniform_int_values[0]
29 # #define _int_1 _GLF_uniform_int_values[1]
30 # #define _int_2 _GLF_uniform_int_values[2]
31 # #define _int_3 _GLF_uniform_int_values[3]
32 # #define _int_4 _GLF_uniform_int_values[4]
33 # #define _int_5 _GLF_uniform_int_values[5]
34 # #define _int_10 _GLF_uniform_int_values[6]
35 # #define _int_15 _GLF_uniform_int_values[7]
36 # #define _int_6 _GLF_uniform_int_values[8]
37 # #define _int_7 _GLF_uniform_int_values[9]
38 # #define _int_8 _GLF_uniform_int_values[10]
39 # #define _int_9 _GLF_uniform_int_values[11]
40 # #define _int_11 _GLF_uniform_int_values[12]
41 # #define _int_12 _GLF_uniform_int_values[13]
42 # #define _int_13 _GLF_uniform_int_values[14]
43 # #define _int_14 _GLF_uniform_int_values[15]
44 #
45 # precision highp float;
46 # precision highp int;
47 #
48 # // Contents of _GLF_uniform_int_values: [0, 1, 2, 3, 4, 5, 10, 15, 6, 7, 8, 9,
49 # // 11, 12, 13, 14]
50 # layout(set = 0, binding = 0) uniform buf0
51 # {
52 #     int _GLF_uniform_int_values[16];
53 # };
54 #
55 # layout(location = 0) out vec4 _GLF_color;
56 #
57 # void main()
58 # {
59 #     int data[15];
60 #     int ref[15];
61 #     ref[_int_0] = _int_0;
62 #     ref[_int_1] = _int_1;
63 #     ref[_int_2] = _int_2;
64 #     ref[_int_3] = _int_3;
65 #     ref[_int_4] = _int_4;
66 #     ref[_int_5] = -_int_1;
67 #     ref[_int_6] = -_int_1;
68 #     ref[_int_7] = -_int_1;
69 #     ref[_int_8] = -_int_1;
70 #     ref[_int_9] = -_int_1;
71 #     ref[_int_10] = -_int_2;
72 #     ref[_int_11] = -_int_2;
73 #     ref[_int_12] = -_int_2;
74 #     ref[_int_13] = -_int_2;
75 #     ref[_int_14] = -_int_2;
76 #
77 #     for (int i = 0; i < _int_5; i++)
78 #     {
79 #         data[i] = ~clamp(~i, ~i, _int_1);
80 #     }
81 #     for (int i = _int_5; i < _int_10; i++)
82 #     {
83 #         data[i] = ~clamp(~i, 0, 1);
84 #     }
85 #     for (int i = _int_10; i < _int_15; i++)
86 #     {
87 #         data[i] = ~clamp(i, 0, 1);
88 #     }
89 #     for (int i = _int_0; i < _int_15; i++)
90 #     {
91 #         if (data[i] != ref[i])
92 #         {
93 #             _GLF_color = vec4(_int_0);
94 #             return;
95 #         }
96 #     }
97 #
98 #     _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
99 # }
100 SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
101 ; SPIR-V
102 ; Version: 1.0
103 ; Generator: Khronos Glslang Reference Front End; 8
104 ; Bound: 228
105 ; Schema: 0
106                OpCapability Shader
107           %1 = OpExtInstImport "GLSL.std.450"
108                OpMemoryModel Logical GLSL450
109                OpEntryPoint Fragment %4 "main" %207
110                OpExecutionMode %4 OriginUpperLeft
111                OpSource ESSL 310
112                OpName %4 "main"
113                OpName %11 "ref"
114                OpName %14 "buf0"
115                OpMemberName %14 0 "_GLF_uniform_int_values"
116                OpName %16 ""
117                OpName %119 "i"
118                OpName %130 "data"
119                OpName %143 "i"
120                OpName %163 "i"
121                OpName %183 "i"
122                OpName %207 "_GLF_color"
123                OpDecorate %13 ArrayStride 16
124                OpMemberDecorate %14 0 Offset 0
125                OpDecorate %14 Block
126                OpDecorate %16 DescriptorSet 0
127                OpDecorate %16 Binding 0
128                OpDecorate %207 Location 0
129           %2 = OpTypeVoid
130           %3 = OpTypeFunction %2
131           %6 = OpTypeInt 32 1
132           %7 = OpTypeInt 32 0
133           %8 = OpConstant %7 15
134           %9 = OpTypeArray %6 %8
135          %10 = OpTypePointer Function %9
136          %12 = OpConstant %7 16
137          %13 = OpTypeArray %6 %12
138          %14 = OpTypeStruct %13
139          %15 = OpTypePointer Uniform %14
140          %16 = OpVariable %15 Uniform
141          %17 = OpConstant %6 0
142          %18 = OpTypePointer Uniform %6
143          %23 = OpTypePointer Function %6
144          %25 = OpConstant %6 1
145          %31 = OpConstant %6 2
146          %37 = OpConstant %6 3
147          %43 = OpConstant %6 4
148          %49 = OpConstant %6 5
149          %56 = OpConstant %6 8
150          %63 = OpConstant %6 9
151          %70 = OpConstant %6 10
152          %77 = OpConstant %6 11
153          %84 = OpConstant %6 6
154          %91 = OpConstant %6 12
155          %98 = OpConstant %6 13
156         %105 = OpConstant %6 14
157         %112 = OpConstant %6 15
158         %128 = OpTypeBool
159         %172 = OpConstant %6 7
160         %204 = OpTypeFloat 32
161         %205 = OpTypeVector %204 4
162         %206 = OpTypePointer Output %205
163         %207 = OpVariable %206 Output
164           %4 = OpFunction %2 None %3
165           %5 = OpLabel
166          %11 = OpVariable %10 Function
167         %119 = OpVariable %23 Function
168         %130 = OpVariable %10 Function
169         %143 = OpVariable %23 Function
170         %163 = OpVariable %23 Function
171         %183 = OpVariable %23 Function
172          %19 = OpAccessChain %18 %16 %17 %17
173          %20 = OpLoad %6 %19
174          %21 = OpAccessChain %18 %16 %17 %17
175          %22 = OpLoad %6 %21
176          %24 = OpAccessChain %23 %11 %20
177                OpStore %24 %22
178          %26 = OpAccessChain %18 %16 %17 %25
179          %27 = OpLoad %6 %26
180          %28 = OpAccessChain %18 %16 %17 %25
181          %29 = OpLoad %6 %28
182          %30 = OpAccessChain %23 %11 %27
183                OpStore %30 %29
184          %32 = OpAccessChain %18 %16 %17 %31
185          %33 = OpLoad %6 %32
186          %34 = OpAccessChain %18 %16 %17 %31
187          %35 = OpLoad %6 %34
188          %36 = OpAccessChain %23 %11 %33
189                OpStore %36 %35
190          %38 = OpAccessChain %18 %16 %17 %37
191          %39 = OpLoad %6 %38
192          %40 = OpAccessChain %18 %16 %17 %37
193          %41 = OpLoad %6 %40
194          %42 = OpAccessChain %23 %11 %39
195                OpStore %42 %41
196          %44 = OpAccessChain %18 %16 %17 %43
197          %45 = OpLoad %6 %44
198          %46 = OpAccessChain %18 %16 %17 %43
199          %47 = OpLoad %6 %46
200          %48 = OpAccessChain %23 %11 %45
201                OpStore %48 %47
202          %50 = OpAccessChain %18 %16 %17 %49
203          %51 = OpLoad %6 %50
204          %52 = OpAccessChain %18 %16 %17 %25
205          %53 = OpLoad %6 %52
206          %54 = OpSNegate %6 %53
207          %55 = OpAccessChain %23 %11 %51
208                OpStore %55 %54
209          %57 = OpAccessChain %18 %16 %17 %56
210          %58 = OpLoad %6 %57
211          %59 = OpAccessChain %18 %16 %17 %25
212          %60 = OpLoad %6 %59
213          %61 = OpSNegate %6 %60
214          %62 = OpAccessChain %23 %11 %58
215                OpStore %62 %61
216          %64 = OpAccessChain %18 %16 %17 %63
217          %65 = OpLoad %6 %64
218          %66 = OpAccessChain %18 %16 %17 %25
219          %67 = OpLoad %6 %66
220          %68 = OpSNegate %6 %67
221          %69 = OpAccessChain %23 %11 %65
222                OpStore %69 %68
223          %71 = OpAccessChain %18 %16 %17 %70
224          %72 = OpLoad %6 %71
225          %73 = OpAccessChain %18 %16 %17 %25
226          %74 = OpLoad %6 %73
227          %75 = OpSNegate %6 %74
228          %76 = OpAccessChain %23 %11 %72
229                OpStore %76 %75
230          %78 = OpAccessChain %18 %16 %17 %77
231          %79 = OpLoad %6 %78
232          %80 = OpAccessChain %18 %16 %17 %25
233          %81 = OpLoad %6 %80
234          %82 = OpSNegate %6 %81
235          %83 = OpAccessChain %23 %11 %79
236                OpStore %83 %82
237          %85 = OpAccessChain %18 %16 %17 %84
238          %86 = OpLoad %6 %85
239          %87 = OpAccessChain %18 %16 %17 %31
240          %88 = OpLoad %6 %87
241          %89 = OpSNegate %6 %88
242          %90 = OpAccessChain %23 %11 %86
243                OpStore %90 %89
244          %92 = OpAccessChain %18 %16 %17 %91
245          %93 = OpLoad %6 %92
246          %94 = OpAccessChain %18 %16 %17 %31
247          %95 = OpLoad %6 %94
248          %96 = OpSNegate %6 %95
249          %97 = OpAccessChain %23 %11 %93
250                OpStore %97 %96
251          %99 = OpAccessChain %18 %16 %17 %98
252         %100 = OpLoad %6 %99
253         %101 = OpAccessChain %18 %16 %17 %31
254         %102 = OpLoad %6 %101
255         %103 = OpSNegate %6 %102
256         %104 = OpAccessChain %23 %11 %100
257                OpStore %104 %103
258         %106 = OpAccessChain %18 %16 %17 %105
259         %107 = OpLoad %6 %106
260         %108 = OpAccessChain %18 %16 %17 %31
261         %109 = OpLoad %6 %108
262         %110 = OpSNegate %6 %109
263         %111 = OpAccessChain %23 %11 %107
264                OpStore %111 %110
265         %113 = OpAccessChain %18 %16 %17 %112
266         %114 = OpLoad %6 %113
267         %115 = OpAccessChain %18 %16 %17 %31
268         %116 = OpLoad %6 %115
269         %117 = OpSNegate %6 %116
270         %118 = OpAccessChain %23 %11 %114
271                OpStore %118 %117
272                OpStore %119 %17
273                OpBranch %120
274         %120 = OpLabel
275                OpLoopMerge %122 %123 None
276                OpBranch %124
277         %124 = OpLabel
278         %125 = OpLoad %6 %119
279         %126 = OpAccessChain %18 %16 %17 %49
280         %127 = OpLoad %6 %126
281         %129 = OpSLessThan %128 %125 %127
282                OpBranchConditional %129 %121 %122
283         %121 = OpLabel
284         %131 = OpLoad %6 %119
285         %132 = OpLoad %6 %119
286         %133 = OpNot %6 %132
287         %134 = OpLoad %6 %119
288         %135 = OpNot %6 %134
289         %136 = OpAccessChain %18 %16 %17 %25
290         %137 = OpLoad %6 %136
291         %138 = OpExtInst %6 %1 SClamp %133 %135 %137
292         %139 = OpNot %6 %138
293         %140 = OpAccessChain %23 %130 %131
294                OpStore %140 %139
295                OpBranch %123
296         %123 = OpLabel
297         %141 = OpLoad %6 %119
298         %142 = OpIAdd %6 %141 %25
299                OpStore %119 %142
300                OpBranch %120
301         %122 = OpLabel
302         %144 = OpAccessChain %18 %16 %17 %49
303         %145 = OpLoad %6 %144
304                OpStore %143 %145
305                OpBranch %146
306         %146 = OpLabel
307                OpLoopMerge %148 %149 None
308                OpBranch %150
309         %150 = OpLabel
310         %151 = OpLoad %6 %143
311         %152 = OpAccessChain %18 %16 %17 %84
312         %153 = OpLoad %6 %152
313         %154 = OpSLessThan %128 %151 %153
314                OpBranchConditional %154 %147 %148
315         %147 = OpLabel
316         %155 = OpLoad %6 %143
317         %156 = OpLoad %6 %143
318         %157 = OpNot %6 %156
319         %158 = OpExtInst %6 %1 SClamp %157 %17 %25
320         %159 = OpNot %6 %158
321         %160 = OpAccessChain %23 %130 %155
322                OpStore %160 %159
323                OpBranch %149
324         %149 = OpLabel
325         %161 = OpLoad %6 %143
326         %162 = OpIAdd %6 %161 %25
327                OpStore %143 %162
328                OpBranch %146
329         %148 = OpLabel
330         %164 = OpAccessChain %18 %16 %17 %84
331         %165 = OpLoad %6 %164
332                OpStore %163 %165
333                OpBranch %166
334         %166 = OpLabel
335                OpLoopMerge %168 %169 None
336                OpBranch %170
337         %170 = OpLabel
338         %171 = OpLoad %6 %163
339         %173 = OpAccessChain %18 %16 %17 %172
340         %174 = OpLoad %6 %173
341         %175 = OpSLessThan %128 %171 %174
342                OpBranchConditional %175 %167 %168
343         %167 = OpLabel
344         %176 = OpLoad %6 %163
345         %177 = OpLoad %6 %163
346         %178 = OpExtInst %6 %1 SClamp %177 %17 %25
347         %179 = OpNot %6 %178
348         %180 = OpAccessChain %23 %130 %176
349                OpStore %180 %179
350                OpBranch %169
351         %169 = OpLabel
352         %181 = OpLoad %6 %163
353         %182 = OpIAdd %6 %181 %25
354                OpStore %163 %182
355                OpBranch %166
356         %168 = OpLabel
357         %184 = OpAccessChain %18 %16 %17 %17
358         %185 = OpLoad %6 %184
359                OpStore %183 %185
360                OpBranch %186
361         %186 = OpLabel
362                OpLoopMerge %188 %189 None
363                OpBranch %190
364         %190 = OpLabel
365         %191 = OpLoad %6 %183
366         %192 = OpAccessChain %18 %16 %17 %172
367         %193 = OpLoad %6 %192
368         %194 = OpSLessThan %128 %191 %193
369                OpBranchConditional %194 %187 %188
370         %187 = OpLabel
371         %195 = OpLoad %6 %183
372         %196 = OpAccessChain %23 %130 %195
373         %197 = OpLoad %6 %196
374         %198 = OpLoad %6 %183
375         %199 = OpAccessChain %23 %11 %198
376         %200 = OpLoad %6 %199
377         %201 = OpINotEqual %128 %197 %200
378                OpSelectionMerge %203 None
379                OpBranchConditional %201 %202 %203
380         %202 = OpLabel
381         %208 = OpAccessChain %18 %16 %17 %17
382         %209 = OpLoad %6 %208
383         %210 = OpConvertSToF %204 %209
384         %211 = OpCompositeConstruct %205 %210 %210 %210 %210
385                OpStore %207 %211
386                OpReturn
387         %203 = OpLabel
388                OpBranch %189
389         %189 = OpLabel
390         %213 = OpLoad %6 %183
391         %214 = OpIAdd %6 %213 %25
392                OpStore %183 %214
393                OpBranch %186
394         %188 = OpLabel
395         %215 = OpAccessChain %18 %16 %17 %25
396         %216 = OpLoad %6 %215
397         %217 = OpConvertSToF %204 %216
398         %218 = OpAccessChain %18 %16 %17 %17
399         %219 = OpLoad %6 %218
400         %220 = OpConvertSToF %204 %219
401         %221 = OpAccessChain %18 %16 %17 %17
402         %222 = OpLoad %6 %221
403         %223 = OpConvertSToF %204 %222
404         %224 = OpAccessChain %18 %16 %17 %25
405         %225 = OpLoad %6 %224
406         %226 = OpConvertSToF %204 %225
407         %227 = OpCompositeConstruct %205 %217 %220 %223 %226
408                OpStore %207 %227
409                OpReturn
410                OpFunctionEnd
411 END
412
413 # uniforms for variant
414
415 # _GLF_uniform_int_values
416 BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
417  0 1 2 3 4 5 10 15 6 7 8 9 11 12 13 14
418 END
419
420 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
421
422 PIPELINE graphics variant_pipeline
423   ATTACH variant_vertex_shader
424   ATTACH variant_fragment_shader
425   FRAMEBUFFER_SIZE 16 16
426   BIND BUFFER variant_framebuffer AS color LOCATION 0
427   BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
428 END
429 CLEAR_COLOR variant_pipeline 0 0 0 255
430
431 CLEAR variant_pipeline
432 RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
433
434 EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255