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