• 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 bug found by the GraphicsFuzz project.
19
20# Short description: Equivalent shaders, one with an additional access chain
21
22# The test passes because both shaders render the same image.
23
24SHADER vertex texgen_vert PASSTHROUGH
25
26SHADER fragment texgen_frag GLSL
27#version 430
28precision highp float;
29
30layout(location = 0) out vec4 _GLF_color;
31
32void main()
33{
34 _GLF_color = vec4(
35 floor(gl_FragCoord.x) * (1.0 / 255.0),
36 (int(gl_FragCoord.x) ^ int(gl_FragCoord.y)) * (1.0 / 255.0),
37 floor(gl_FragCoord.y) * (1.0 / 255.0),
38 1.0);
39}
40END
41BUFFER default_texture FORMAT B8G8R8A8_UNORM
42
43PIPELINE graphics texgen_pipeline
44  ATTACH texgen_vert
45  ATTACH texgen_frag
46  FRAMEBUFFER_SIZE 256 256
47  BIND BUFFER default_texture AS color LOCATION 0
48END
49
50CLEAR_COLOR texgen_pipeline 0 0 0 255
51CLEAR texgen_pipeline
52RUN texgen_pipeline DRAW_RECT POS 0 0  SIZE 256 256
53
54SHADER vertex reference_vertex_shader PASSTHROUGH
55
56SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
57; SPIR-V
58; Version: 1.0
59; Generator: Khronos Glslang Reference Front End; 10
60; Bound: 254
61; Schema: 0
62               OpCapability Shader
63          %1 = OpExtInstImport "GLSL.std.450"
64               OpMemoryModel Logical GLSL450
65               OpEntryPoint Fragment %4 "main" %115 %130
66               OpExecutionMode %4 OriginUpperLeft
67               OpSource ESSL 320
68               OpName %4 "main"
69               OpName %115 "gl_FragCoord"
70               OpName %130 "_GLF_color"
71               OpName %134 "tex"
72               OpDecorate %115 BuiltIn FragCoord
73               OpDecorate %130 Location 0
74               OpDecorate %134 RelaxedPrecision
75               OpDecorate %134 DescriptorSet 0
76               OpDecorate %134 Binding 0
77               OpDecorate %135 RelaxedPrecision
78               OpDecorate %137 RelaxedPrecision
79          %2 = OpTypeVoid
80          %3 = OpTypeFunction %2
81          %6 = OpTypeFloat 32
82          %7 = OpTypeVector %6 2
83         %19 = OpConstant %6 0.318309873
84         %22 = OpConstant %6 0.00100000005
85         %23 = OpTypeBool
86         %27 = OpConstant %6 0
87         %32 = OpTypeInt 32 0
88         %36 = OpConstant %32 0
89         %55 = OpConstant %6 0.970000029
90         %56 = OpConstant %6 0.189999998
91         %73 = OpConstant %6 0.5
92         %81 = OpConstant %6 1
93         %98 = OpConstantComposite %7 %73 %73
94        %113 = OpTypeVector %6 4
95        %114 = OpTypePointer Input %113
96        %115 = OpVariable %114 Input
97        %118 = OpConstant %6 0.00390625
98        %124 = OpConstant %6 256
99        %129 = OpTypePointer Output %113
100        %130 = OpVariable %129 Output
101        %131 = OpTypeImage %6 2D 0 0 0 1 Unknown
102        %132 = OpTypeSampledImage %131
103        %133 = OpTypePointer UniformConstant %132
104        %134 = OpVariable %133 UniformConstant
105        %253 = OpConstantComposite %7 %118 %118
106          %4 = OpFunction %2 None %3
107          %5 = OpLabel
108        %116 = OpLoad %113 %115
109        %117 = OpVectorShuffle %7 %116 %116 0 1
110        %119 = OpVectorTimesScalar %7 %117 %118
111        %160 = OpFSub %7 %119 %98
112        %162 = OpExtInst %6 %1 Length %160
113               OpSelectionMerge %235 None
114               OpSwitch %36 %176
115        %176 = OpLabel
116        %179 = OpFOrdLessThan %23 %162 %22
117               OpSelectionMerge %181 None
118               OpBranchConditional %179 %180 %181
119        %180 = OpLabel
120               OpBranch %235
121        %181 = OpLabel
122        %183 = OpExtInst %7 %1 FAbs %160
123        %185 = OpCompositeExtract %6 %183 1
124        %187 = OpCompositeExtract %6 %183 0
125        %188 = OpFOrdGreaterThan %23 %185 %187
126               OpSelectionMerge %201 None
127               OpBranchConditional %188 %189 %195
128        %189 = OpLabel
129        %194 = OpFDiv %6 %187 %185
130               OpBranch %201
131        %195 = OpLabel
132        %200 = OpFDiv %6 %185 %187
133               OpBranch %201
134        %201 = OpLabel
135        %247 = OpPhi %6 %194 %189 %200 %195
136        %203 = OpFMul %6 %56 %247
137        %205 = OpFMul %6 %203 %247
138        %206 = OpFSub %6 %55 %205
139        %208 = OpFMul %6 %206 %247
140        %210 = OpFMul %6 %208 %19
141        %215 = OpFOrdLessThan %23 %185 %187
142               OpSelectionMerge %219 None
143               OpBranchConditional %215 %216 %219
144        %216 = OpLabel
145        %218 = OpFSub %6 %73 %210
146               OpBranch %219
147        %219 = OpLabel
148        %248 = OpPhi %6 %210 %201 %218 %216
149        %221 = OpCompositeExtract %6 %160 0
150        %222 = OpFOrdLessThan %23 %221 %27
151               OpSelectionMerge %226 None
152               OpBranchConditional %222 %223 %226
153        %223 = OpLabel
154        %225 = OpFSub %6 %81 %248
155               OpBranch %226
156        %226 = OpLabel
157        %249 = OpPhi %6 %248 %219 %225 %223
158        %228 = OpCompositeExtract %6 %160 1
159        %229 = OpFOrdLessThan %23 %228 %27
160               OpSelectionMerge %233 None
161               OpBranchConditional %229 %230 %233
162        %230 = OpLabel
163        %232 = OpFNegate %6 %249
164               OpBranch %233
165        %233 = OpLabel
166        %250 = OpPhi %6 %249 %226 %232 %230
167               OpBranch %235
168        %235 = OpLabel
169        %251 = OpPhi %6 %27 %180 %250 %233
170        %167 = OpCompositeConstruct %7 %162 %251
171        %125 = OpVectorTimesScalar %7 %167 %124
172        %126 = OpExtInst %7 %1 Floor %125
173        %128 = OpFMul %7 %126 %253
174        %135 = OpLoad %132 %134
175        %137 = OpImageSampleImplicitLod %113 %135 %128
176        %140 = OpCompositeExtract %6 %137 0
177        %141 = OpCompositeExtract %6 %137 1
178        %142 = OpCompositeExtract %6 %137 2
179        %143 = OpCompositeConstruct %113 %140 %141 %142 %81
180               OpStore %130 %143
181               OpReturn
182               OpFunctionEnd
183END
184
185# uniforms for reference
186
187# tex
188SAMPLER reference_tex
189
190
191BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
192
193PIPELINE graphics reference_pipeline
194  ATTACH reference_vertex_shader
195  ATTACH reference_fragment_shader
196  FRAMEBUFFER_SIZE 256 256
197  BIND BUFFER reference_framebuffer AS color LOCATION 0
198  BIND BUFFER default_texture AS combined_image_sampler SAMPLER reference_tex DESCRIPTOR_SET 0 BINDING 0
199END
200CLEAR_COLOR reference_pipeline 0 0 0 255
201
202CLEAR reference_pipeline
203RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
204
205
206SHADER vertex variant_vertex_shader PASSTHROUGH
207
208SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
209; SPIR-V
210; Version: 1.0
211; Generator: Khronos Glslang Reference Front End; 10
212; Bound: 529
213; Schema: 0
214               OpCapability Shader
215          %1 = OpExtInstImport "GLSL.std.450"
216               OpMemoryModel Logical GLSL450
217               OpEntryPoint Fragment %4 "main" %115 %130
218               OpExecutionMode %4 OriginUpperLeft
219               OpSource ESSL 320
220               OpName %4 "main"
221               OpName %115 "gl_FragCoord"
222               OpName %130 "_GLF_color"
223               OpName %134 "tex"
224               OpDecorate %115 BuiltIn FragCoord
225               OpDecorate %130 Location 0
226               OpDecorate %134 RelaxedPrecision
227               OpDecorate %134 DescriptorSet 0
228               OpDecorate %134 Binding 0
229               OpDecorate %135 RelaxedPrecision
230               OpDecorate %137 RelaxedPrecision
231          %2 = OpTypeVoid
232          %3 = OpTypeFunction %2
233          %6 = OpTypeFloat 32
234          %7 = OpTypeVector %6 2
235         %19 = OpConstant %6 0.318309873
236         %22 = OpConstant %6 0.00100000005
237         %23 = OpTypeBool
238         %27 = OpConstant %6 0
239         %32 = OpTypeInt 32 0
240         %36 = OpConstant %32 0
241         %55 = OpConstant %6 0.970000029
242         %56 = OpConstant %6 0.189999998
243         %73 = OpConstant %6 0.5
244         %81 = OpConstant %6 1
245         %98 = OpConstantComposite %7 %73 %73
246        %113 = OpTypeVector %6 4
247        %114 = OpTypePointer Input %113
248        %115 = OpVariable %114 Input
249        %118 = OpConstant %6 0.00390625
250        %124 = OpConstant %6 256
251        %129 = OpTypePointer Output %113
252        %130 = OpVariable %129 Output
253        %131 = OpTypeImage %6 2D 0 0 0 1 Unknown
254        %132 = OpTypeSampledImage %131
255        %133 = OpTypePointer UniformConstant %132
256        %134 = OpVariable %133 UniformConstant
257        %253 = OpConstantComposite %7 %118 %118
258        %379 = OpTypeInt 32 1
259        %380 = OpConstant %379 3
260        %383 = OpConstant %379 0
261        %384 = OpTypePointer Input %6
262        %475 = OpConstantFalse %23
263        %526 = OpTypePointer Function %23
264          %4 = OpFunction %2 None %3
265          %5 = OpLabel
266        %527 = OpVariable %526 Function %475
267        %116 = OpLoad %113 %115
268        %117 = OpVectorShuffle %7 %116 %116 0 1
269        %119 = OpVectorTimesScalar %7 %117 %118
270        %160 = OpFSub %7 %119 %98
271        %162 = OpExtInst %6 %1 Length %160
272               OpSelectionMerge %235 None
273               OpSwitch %36 %176
274        %176 = OpLabel
275        %179 = OpFOrdLessThan %23 %162 %22
276               OpSelectionMerge %181 None
277               OpBranchConditional %179 %180 %181
278        %180 = OpLabel
279               OpBranch %235
280        %181 = OpLabel
281        %183 = OpExtInst %7 %1 FAbs %160
282        %185 = OpCompositeExtract %6 %183 1
283        %187 = OpCompositeExtract %6 %183 0
284        %188 = OpFOrdGreaterThan %23 %185 %187
285               OpSelectionMerge %201 None
286               OpBranchConditional %188 %189 %195
287        %189 = OpLabel
288        %194 = OpFDiv %6 %187 %185
289               OpBranch %201
290        %195 = OpLabel
291        %200 = OpFDiv %6 %185 %187
292               OpBranch %201
293        %201 = OpLabel
294        %247 = OpPhi %6 %194 %189 %200 %195
295        %203 = OpFMul %6 %56 %247
296        %205 = OpFMul %6 %203 %247
297        %206 = OpFSub %6 %55 %205
298        %208 = OpFMul %6 %206 %247
299        %210 = OpFMul %6 %208 %19
300        %215 = OpFOrdLessThan %23 %185 %187
301               OpSelectionMerge %219 None
302               OpBranchConditional %215 %216 %219
303        %216 = OpLabel
304        %218 = OpFSub %6 %73 %210
305               OpBranch %219
306        %219 = OpLabel
307        %248 = OpPhi %6 %210 %201 %218 %216
308        %221 = OpCompositeExtract %6 %160 0
309        %222 = OpFOrdLessThan %23 %221 %27
310               OpSelectionMerge %226 None
311               OpBranchConditional %222 %223 %226
312        %223 = OpLabel
313        %225 = OpFSub %6 %81 %248
314               OpBranch %226
315        %226 = OpLabel
316        %249 = OpPhi %6 %248 %219 %225 %223
317        %228 = OpCompositeExtract %6 %160 1
318        %229 = OpFOrdLessThan %23 %228 %27
319               OpSelectionMerge %233 None
320               OpBranchConditional %229 %230 %233
321        %230 = OpLabel
322        %232 = OpFNegate %6 %249
323               OpBranch %233
324        %233 = OpLabel
325        %250 = OpPhi %6 %249 %226 %232 %230
326               OpBranch %235
327        %235 = OpLabel
328        %251 = OpPhi %6 %27 %180 %250 %233
329        %167 = OpCompositeConstruct %7 %162 %251
330        %125 = OpVectorTimesScalar %7 %167 %124
331        %126 = OpExtInst %7 %1 Floor %125
332        %128 = OpFMul %7 %126 %253
333        %135 = OpLoad %132 %134
334        %137 = OpImageSampleImplicitLod %113 %135 %128
335        %140 = OpCompositeExtract %6 %137 0
336        %141 = OpCompositeExtract %6 %137 1
337        %142 = OpCompositeExtract %6 %137 2
338               OpStore %527 %179
339        %528 = OpLoad %23 %527
340        %381 = OpULessThanEqual %23 %383 %380
341        %382 = OpSelect %379 %381 %383 %380
342        %385 = OpAccessChain %384 %115 %382
343        %143 = OpCompositeConstruct %113 %140 %141 %142 %81
344               OpStore %130 %143
345               OpReturn
346               OpFunctionEnd
347END
348
349# uniforms for variant
350
351# tex
352SAMPLER variant_tex
353
354
355BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
356
357PIPELINE graphics variant_pipeline
358  ATTACH variant_vertex_shader
359  ATTACH variant_fragment_shader
360  FRAMEBUFFER_SIZE 256 256
361  BIND BUFFER variant_framebuffer AS color LOCATION 0
362  BIND BUFFER default_texture AS combined_image_sampler SAMPLER variant_tex DESCRIPTOR_SET 0 BINDING 0
363END
364CLEAR_COLOR variant_pipeline 0 0 0 255
365
366CLEAR variant_pipeline
367RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
368
369EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
370