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