• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!amber
2
3# Copyright 2022 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 LLVM code paths
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_1 _GLF_uniform_int_values[0]
29# #define _int_0 _GLF_uniform_int_values[1]
30# #define _float_2_0 _GLF_uniform_float_values[0]
31# #define _float_923_2 _GLF_uniform_float_values[1]
32# #define _float_9_9 _GLF_uniform_float_values[2]
33# #define _float_802_849 _GLF_uniform_float_values[3]
34# #define _float_1_0 _GLF_uniform_float_values[4]
35#
36# precision highp float;
37# precision highp int;
38#
39# // Contents of _GLF_uniform_int_values: [1, 0]
40# layout(set = 0, binding = 0) uniform buf0
41# {
42#     int _GLF_uniform_int_values[2];
43# };
44#
45# // Contents of _GLF_uniform_float_values: [2.0, 923.2, 9.9, 802.849, 1.0]
46# layout(set = 0, binding = 1) uniform buf1
47# {
48#     float _GLF_uniform_float_values[5];
49# };
50#
51# const int _GLF_global_loop_bound = 10;
52# int _GLF_global_loop_count = 0;
53#
54# layout(location = 0) out vec4 _GLF_color;
55#
56# void main()
57# {
58#     // This will be replaced later.
59#     _GLF_color = vec4(_float_923_2, _float_9_9, _float_802_849, _float_2_0);
60#     vec2 v = vec2(1.0);
61#
62#     // Never iterated.
63#     while((v.x > 1.0 || v.y > 1.0) && (_GLF_global_loop_count < _GLF_global_loop_bound))
64#     {
65#         _GLF_global_loop_count++;
66#         v *= _float_2_0;
67#         _GLF_color = vec4(_float_1_0);
68#     }
69#
70#     // Always true.
71#     if(v == vec2(_int_1))
72#     {
73#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
74#     }
75# }
76SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
77; SPIR-V
78; Version: 1.0
79; Generator: Khronos Glslang Reference Front End; 10
80; Bound: 100
81; Schema: 0
82               OpCapability Shader
83          %1 = OpExtInstImport "GLSL.std.450"
84               OpMemoryModel Logical GLSL450
85               OpEntryPoint Fragment %4 "main" %13
86               OpExecutionMode %4 OriginUpperLeft
87               OpSource ESSL 320
88               OpName %4 "main"
89               OpName %8 "_GLF_global_loop_count"
90               OpName %13 "_GLF_color"
91               OpName %17 "buf1"
92               OpMemberName %17 0 "_GLF_uniform_float_values"
93               OpName %19 ""
94               OpName %35 "v"
95               OpName %74 "buf0"
96               OpMemberName %74 0 "_GLF_uniform_int_values"
97               OpName %76 ""
98               OpDecorate %13 Location 0
99               OpDecorate %16 ArrayStride 16
100               OpMemberDecorate %17 0 Offset 0
101               OpDecorate %17 Block
102               OpDecorate %19 DescriptorSet 0
103               OpDecorate %19 Binding 1
104               OpDecorate %73 ArrayStride 16
105               OpMemberDecorate %74 0 Offset 0
106               OpDecorate %74 Block
107               OpDecorate %76 DescriptorSet 0
108               OpDecorate %76 Binding 0
109          %2 = OpTypeVoid
110          %3 = OpTypeFunction %2
111          %6 = OpTypeInt 32 1
112          %7 = OpTypePointer Private %6
113          %8 = OpVariable %7 Private
114          %9 = OpConstant %6 0
115         %10 = OpTypeFloat 32
116         %11 = OpTypeVector %10 4
117         %12 = OpTypePointer Output %11
118         %13 = OpVariable %12 Output
119         %14 = OpTypeInt 32 0
120         %15 = OpConstant %14 5
121         %16 = OpTypeArray %10 %15
122         %17 = OpTypeStruct %16
123         %18 = OpTypePointer Uniform %17
124         %19 = OpVariable %18 Uniform
125         %20 = OpConstant %6 1
126         %21 = OpTypePointer Uniform %10
127         %24 = OpConstant %6 2
128         %27 = OpConstant %6 3
129         %33 = OpTypeVector %10 2
130         %34 = OpTypePointer Function %33
131         %36 = OpConstant %10 1
132         %37 = OpConstantComposite %33 %36 %36
133         %43 = OpTypeBool
134         %44 = OpConstant %14 0
135         %45 = OpTypePointer Function %10
136         %52 = OpConstant %14 1
137         %58 = OpConstant %6 10
138         %67 = OpConstant %6 4
139         %72 = OpConstant %14 2
140         %73 = OpTypeArray %6 %72
141         %74 = OpTypeStruct %73
142         %75 = OpTypePointer Uniform %74
143         %76 = OpVariable %75 Uniform
144         %77 = OpTypePointer Uniform %6
145         %82 = OpTypeVector %43 2
146          %4 = OpFunction %2 None %3
147          %5 = OpLabel
148         %35 = OpVariable %34 Function
149               OpStore %8 %9
150         %22 = OpAccessChain %21 %19 %9 %20
151         %23 = OpLoad %10 %22
152         %25 = OpAccessChain %21 %19 %9 %24
153         %26 = OpLoad %10 %25
154         %28 = OpAccessChain %21 %19 %9 %27
155         %29 = OpLoad %10 %28
156         %30 = OpAccessChain %21 %19 %9 %9
157         %31 = OpLoad %10 %30
158         %32 = OpCompositeConstruct %11 %23 %26 %29 %31
159               OpStore %13 %32
160               OpStore %35 %37
161               OpBranch %38
162         %38 = OpLabel
163               OpLoopMerge %40 %41 None
164               OpBranch %42
165         %42 = OpLabel
166         %46 = OpAccessChain %45 %35 %44
167         %47 = OpLoad %10 %46
168         %48 = OpFOrdGreaterThan %43 %47 %36
169         %49 = OpLogicalNot %43 %48
170               OpSelectionMerge %51 None
171               OpBranchConditional %49 %50 %51
172         %50 = OpLabel
173         %53 = OpAccessChain %45 %35 %52
174         %54 = OpLoad %10 %53
175         %55 = OpFOrdGreaterThan %43 %54 %36
176               OpBranch %51
177         %51 = OpLabel
178         %56 = OpPhi %43 %48 %42 %55 %50
179         %57 = OpLoad %6 %8
180         %59 = OpSLessThan %43 %57 %58
181         %60 = OpLogicalAnd %43 %56 %59
182               OpBranchConditional %60 %39 %40
183         %39 = OpLabel
184         %61 = OpLoad %6 %8
185         %62 = OpIAdd %6 %61 %20
186               OpStore %8 %62
187         %63 = OpAccessChain %21 %19 %9 %9
188         %64 = OpLoad %10 %63
189         %65 = OpLoad %33 %35
190         %66 = OpVectorTimesScalar %33 %65 %64
191               OpStore %35 %66
192         %68 = OpAccessChain %21 %19 %9 %67
193         %69 = OpLoad %10 %68
194         %70 = OpCompositeConstruct %11 %69 %69 %69 %69
195               OpStore %13 %70
196               OpBranch %41
197         %41 = OpLabel
198               OpBranch %38
199         %40 = OpLabel
200         %71 = OpLoad %33 %35
201         %78 = OpAccessChain %77 %76 %9 %9
202         %79 = OpLoad %6 %78
203         %80 = OpConvertSToF %10 %79
204         %81 = OpCompositeConstruct %33 %80 %80
205         %83 = OpFOrdEqual %82 %71 %81
206         %84 = OpAll %43 %83
207               OpSelectionMerge %86 None
208               OpBranchConditional %84 %85 %86
209         %85 = OpLabel
210         %87 = OpAccessChain %77 %76 %9 %9
211         %88 = OpLoad %6 %87
212         %89 = OpConvertSToF %10 %88
213         %90 = OpAccessChain %77 %76 %9 %20
214         %91 = OpLoad %6 %90
215         %92 = OpConvertSToF %10 %91
216         %93 = OpAccessChain %77 %76 %9 %20
217         %94 = OpLoad %6 %93
218         %95 = OpConvertSToF %10 %94
219         %96 = OpAccessChain %77 %76 %9 %9
220         %97 = OpLoad %6 %96
221         %98 = OpConvertSToF %10 %97
222         %99 = OpCompositeConstruct %11 %89 %92 %95 %98
223               OpStore %13 %99
224               OpBranch %86
225         %86 = OpLabel
226               OpReturn
227               OpFunctionEnd
228END
229
230# uniforms for variant
231
232# _GLF_uniform_float_values
233BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
234 2.0 923.2 9.9 802.849 1.0
235END
236# _GLF_uniform_int_values
237BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
238 1 0
239END
240
241BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
242
243PIPELINE graphics variant_pipeline
244  ATTACH variant_vertex_shader
245  ATTACH variant_fragment_shader
246  FRAMEBUFFER_SIZE 32 32
247  BIND BUFFER variant_framebuffer AS color LOCATION 0
248  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
249  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
250END
251CLEAR_COLOR variant_pipeline 0 0 0 255
252
253CLEAR variant_pipeline
254RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
255
256EXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255
257