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