Fix missing dependency on sparse binds
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / data / vulkan / amber / graphicsfuzz / cov-unused-matrix-copy-inside-loop.amber
1 #!amber
2
3 # Copyright 2021 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 covers specific NIR code paths
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 320 es
28 #
29 # #define _int_100 _GLF_uniform_int_values[0]
30 # #define _int_0 _GLF_uniform_int_values[1]
31 # #define _int_1 _GLF_uniform_int_values[2]
32 # #define _int_4 _GLF_uniform_int_values[3]
33 # #define _float_1_0 _GLF_uniform_float_values[0]
34 #
35 # precision highp int;
36 # precision highp float;
37 #
38 # // Contents of _GLF_uniform_float_values: 1.0
39 # layout(set = 0, binding = 0) uniform buf0
40 # {
41 #     float _GLF_uniform_float_values[1];
42 # };
43 #
44 # // Contents of _GLF_uniform_int_values: [100, 0, 1, 4]
45 # layout(set = 0, binding = 1) uniform buf1
46 # {
47 #     int _GLF_uniform_int_values[4];
48 # };
49 #
50 # layout(location = 0) out vec4 _GLF_color;
51 #
52 # void main()
53 # {
54 #     mat4 m0 = mat4(_int_0);
55 #
56 #     for(int c = _int_1; c < _int_100; c++)
57 #     {
58 #         // m1 has no dependency outside this block.
59 #         mat4 m1 = m0;
60 #
61 #         m1[c % _int_4][_int_1] = _float_1_0;
62 #         m0[c % _int_4][_int_1] = _float_1_0;
63 #     }
64 #
65 #     // Always true.
66 #     if(m0 == mat4(_int_0, _int_1, _int_0, _int_0, _int_0, _int_1, _int_0, _int_0, _int_0, _int_1, _int_0, _int_0, _int_0, _int_1, _int_0, _int_0))
67 #     {
68 #         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
69 #     }
70 #     else
71 #     {
72 #         _GLF_color = vec4(_int_0);
73 #     }
74 # }
75 SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
76 ; SPIR-V
77 ; Version: 1.0
78 ; Generator: Khronos Glslang Reference Front End; 10
79 ; Bound: 172
80 ; Schema: 0
81                OpCapability Shader
82           %1 = OpExtInstImport "GLSL.std.450"
83                OpMemoryModel Logical GLSL450
84                OpEntryPoint Fragment %4 "main" %153
85                OpExecutionMode %4 OriginUpperLeft
86                OpSource ESSL 320
87                OpName %4 "main"
88                OpName %10 "m0"
89                OpName %15 "buf1"
90                OpMemberName %15 0 "_GLF_uniform_int_values"
91                OpName %17 ""
92                OpName %32 "c"
93                OpName %46 "m1"
94                OpName %57 "buf0"
95                OpMemberName %57 0 "_GLF_uniform_float_values"
96                OpName %59 ""
97                OpName %153 "_GLF_color"
98                OpDecorate %14 ArrayStride 16
99                OpMemberDecorate %15 0 Offset 0
100                OpDecorate %15 Block
101                OpDecorate %17 DescriptorSet 0
102                OpDecorate %17 Binding 1
103                OpDecorate %56 ArrayStride 16
104                OpMemberDecorate %57 0 Offset 0
105                OpDecorate %57 Block
106                OpDecorate %59 DescriptorSet 0
107                OpDecorate %59 Binding 0
108                OpDecorate %153 Location 0
109           %2 = OpTypeVoid
110           %3 = OpTypeFunction %2
111           %6 = OpTypeFloat 32
112           %7 = OpTypeVector %6 4
113           %8 = OpTypeMatrix %7 4
114           %9 = OpTypePointer Function %8
115          %11 = OpTypeInt 32 1
116          %12 = OpTypeInt 32 0
117          %13 = OpConstant %12 4
118          %14 = OpTypeArray %11 %13
119          %15 = OpTypeStruct %14
120          %16 = OpTypePointer Uniform %15
121          %17 = OpVariable %16 Uniform
122          %18 = OpConstant %11 0
123          %19 = OpConstant %11 1
124          %20 = OpTypePointer Uniform %11
125          %24 = OpConstant %6 1
126          %25 = OpConstant %6 0
127          %31 = OpTypePointer Function %11
128          %33 = OpConstant %11 2
129          %44 = OpTypeBool
130          %49 = OpConstant %11 3
131          %55 = OpConstant %12 1
132          %56 = OpTypeArray %6 %55
133          %57 = OpTypeStruct %56
134          %58 = OpTypePointer Uniform %57
135          %59 = OpVariable %58 Uniform
136          %60 = OpTypePointer Uniform %6
137          %63 = OpTypePointer Function %6
138         %132 = OpTypeVector %44 4
139         %152 = OpTypePointer Output %7
140         %153 = OpVariable %152 Output
141           %4 = OpFunction %2 None %3
142           %5 = OpLabel
143          %10 = OpVariable %9 Function
144          %32 = OpVariable %31 Function
145          %46 = OpVariable %9 Function
146          %21 = OpAccessChain %20 %17 %18 %19
147          %22 = OpLoad %11 %21
148          %23 = OpConvertSToF %6 %22
149          %26 = OpCompositeConstruct %7 %23 %25 %25 %25
150          %27 = OpCompositeConstruct %7 %25 %23 %25 %25
151          %28 = OpCompositeConstruct %7 %25 %25 %23 %25
152          %29 = OpCompositeConstruct %7 %25 %25 %25 %23
153          %30 = OpCompositeConstruct %8 %26 %27 %28 %29
154                OpStore %10 %30
155          %34 = OpAccessChain %20 %17 %18 %33
156          %35 = OpLoad %11 %34
157                OpStore %32 %35
158                OpBranch %36
159          %36 = OpLabel
160                OpLoopMerge %38 %39 None
161                OpBranch %40
162          %40 = OpLabel
163          %41 = OpLoad %11 %32
164          %42 = OpAccessChain %20 %17 %18 %18
165          %43 = OpLoad %11 %42
166          %45 = OpSLessThan %44 %41 %43
167                OpBranchConditional %45 %37 %38
168          %37 = OpLabel
169          %47 = OpLoad %8 %10
170                OpStore %46 %47
171          %48 = OpLoad %11 %32
172          %50 = OpAccessChain %20 %17 %18 %49
173          %51 = OpLoad %11 %50
174          %52 = OpSMod %11 %48 %51
175          %53 = OpAccessChain %20 %17 %18 %33
176          %54 = OpLoad %11 %53
177          %61 = OpAccessChain %60 %59 %18 %18
178          %62 = OpLoad %6 %61
179          %64 = OpAccessChain %63 %46 %52 %54
180                OpStore %64 %62
181          %65 = OpLoad %11 %32
182          %66 = OpAccessChain %20 %17 %18 %49
183          %67 = OpLoad %11 %66
184          %68 = OpSMod %11 %65 %67
185          %69 = OpAccessChain %20 %17 %18 %33
186          %70 = OpLoad %11 %69
187          %71 = OpAccessChain %60 %59 %18 %18
188          %72 = OpLoad %6 %71
189          %73 = OpAccessChain %63 %10 %68 %70
190                OpStore %73 %72
191                OpBranch %39
192          %39 = OpLabel
193          %74 = OpLoad %11 %32
194          %75 = OpIAdd %11 %74 %19
195                OpStore %32 %75
196                OpBranch %36
197          %38 = OpLabel
198          %76 = OpLoad %8 %10
199          %77 = OpAccessChain %20 %17 %18 %19
200          %78 = OpLoad %11 %77
201          %79 = OpConvertSToF %6 %78
202          %80 = OpAccessChain %20 %17 %18 %33
203          %81 = OpLoad %11 %80
204          %82 = OpConvertSToF %6 %81
205          %83 = OpAccessChain %20 %17 %18 %19
206          %84 = OpLoad %11 %83
207          %85 = OpConvertSToF %6 %84
208          %86 = OpAccessChain %20 %17 %18 %19
209          %87 = OpLoad %11 %86
210          %88 = OpConvertSToF %6 %87
211          %89 = OpAccessChain %20 %17 %18 %19
212          %90 = OpLoad %11 %89
213          %91 = OpConvertSToF %6 %90
214          %92 = OpAccessChain %20 %17 %18 %33
215          %93 = OpLoad %11 %92
216          %94 = OpConvertSToF %6 %93
217          %95 = OpAccessChain %20 %17 %18 %19
218          %96 = OpLoad %11 %95
219          %97 = OpConvertSToF %6 %96
220          %98 = OpAccessChain %20 %17 %18 %19
221          %99 = OpLoad %11 %98
222         %100 = OpConvertSToF %6 %99
223         %101 = OpAccessChain %20 %17 %18 %19
224         %102 = OpLoad %11 %101
225         %103 = OpConvertSToF %6 %102
226         %104 = OpAccessChain %20 %17 %18 %33
227         %105 = OpLoad %11 %104
228         %106 = OpConvertSToF %6 %105
229         %107 = OpAccessChain %20 %17 %18 %19
230         %108 = OpLoad %11 %107
231         %109 = OpConvertSToF %6 %108
232         %110 = OpAccessChain %20 %17 %18 %19
233         %111 = OpLoad %11 %110
234         %112 = OpConvertSToF %6 %111
235         %113 = OpAccessChain %20 %17 %18 %19
236         %114 = OpLoad %11 %113
237         %115 = OpConvertSToF %6 %114
238         %116 = OpAccessChain %20 %17 %18 %33
239         %117 = OpLoad %11 %116
240         %118 = OpConvertSToF %6 %117
241         %119 = OpAccessChain %20 %17 %18 %19
242         %120 = OpLoad %11 %119
243         %121 = OpConvertSToF %6 %120
244         %122 = OpAccessChain %20 %17 %18 %19
245         %123 = OpLoad %11 %122
246         %124 = OpConvertSToF %6 %123
247         %125 = OpCompositeConstruct %7 %79 %82 %85 %88
248         %126 = OpCompositeConstruct %7 %91 %94 %97 %100
249         %127 = OpCompositeConstruct %7 %103 %106 %109 %112
250         %128 = OpCompositeConstruct %7 %115 %118 %121 %124
251         %129 = OpCompositeConstruct %8 %125 %126 %127 %128
252         %130 = OpCompositeExtract %7 %76 0
253         %131 = OpCompositeExtract %7 %129 0
254         %133 = OpFOrdEqual %132 %130 %131
255         %134 = OpAll %44 %133
256         %135 = OpCompositeExtract %7 %76 1
257         %136 = OpCompositeExtract %7 %129 1
258         %137 = OpFOrdEqual %132 %135 %136
259         %138 = OpAll %44 %137
260         %139 = OpLogicalAnd %44 %134 %138
261         %140 = OpCompositeExtract %7 %76 2
262         %141 = OpCompositeExtract %7 %129 2
263         %142 = OpFOrdEqual %132 %140 %141
264         %143 = OpAll %44 %142
265         %144 = OpLogicalAnd %44 %139 %143
266         %145 = OpCompositeExtract %7 %76 3
267         %146 = OpCompositeExtract %7 %129 3
268         %147 = OpFOrdEqual %132 %145 %146
269         %148 = OpAll %44 %147
270         %149 = OpLogicalAnd %44 %144 %148
271                OpSelectionMerge %151 None
272                OpBranchConditional %149 %150 %167
273         %150 = OpLabel
274         %154 = OpAccessChain %20 %17 %18 %33
275         %155 = OpLoad %11 %154
276         %156 = OpConvertSToF %6 %155
277         %157 = OpAccessChain %20 %17 %18 %19
278         %158 = OpLoad %11 %157
279         %159 = OpConvertSToF %6 %158
280         %160 = OpAccessChain %20 %17 %18 %19
281         %161 = OpLoad %11 %160
282         %162 = OpConvertSToF %6 %161
283         %163 = OpAccessChain %20 %17 %18 %33
284         %164 = OpLoad %11 %163
285         %165 = OpConvertSToF %6 %164
286         %166 = OpCompositeConstruct %7 %156 %159 %162 %165
287                OpStore %153 %166
288                OpBranch %151
289         %167 = OpLabel
290         %168 = OpAccessChain %20 %17 %18 %19
291         %169 = OpLoad %11 %168
292         %170 = OpConvertSToF %6 %169
293         %171 = OpCompositeConstruct %7 %170 %170 %170 %170
294                OpStore %153 %171
295                OpBranch %151
296         %151 = OpLabel
297                OpReturn
298                OpFunctionEnd
299 END
300
301 # uniforms for variant
302
303 # _GLF_uniform_int_values
304 BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
305  100 0 1 4
306 END
307 # _GLF_uniform_float_values
308 BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
309  1.0
310 END
311
312 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
313
314 PIPELINE graphics variant_pipeline
315   ATTACH variant_vertex_shader
316   ATTACH variant_fragment_shader
317   FRAMEBUFFER_SIZE 16 16
318   BIND BUFFER variant_framebuffer AS color LOCATION 0
319   BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
320   BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
321 END
322 CLEAR_COLOR variant_pipeline 0 0 0 255
323
324 CLEAR variant_pipeline
325 RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
326
327 EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255