• 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 where an id is hidden inside a composite
21
22# The test passes because both shaders render the same image.
23
24SHADER vertex reference_vertex_shader PASSTHROUGH
25
26SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
27; SPIR-V
28; Version: 1.0
29; Generator: Khronos Glslang Reference Front End; 7
30; Bound: 107
31; Schema: 0
32               OpCapability Shader
33          %1 = OpExtInstImport "GLSL.std.450"
34               OpMemoryModel Logical GLSL450
35               OpEntryPoint Fragment %4 "main" %12 %74
36               OpExecutionMode %4 OriginUpperLeft
37               OpSource ESSL 320
38               OpName %4 "main"
39               OpName %12 "gl_FragCoord"
40               OpName %15 "buf0"
41               OpMemberName %15 0 "resolution"
42               OpName %17 ""
43               OpName %74 "_GLF_color"
44               OpName %100 "indexable"
45               OpDecorate %12 BuiltIn FragCoord
46               OpMemberDecorate %15 0 Offset 0
47               OpDecorate %15 Block
48               OpDecorate %17 DescriptorSet 0
49               OpDecorate %17 Binding 0
50               OpDecorate %74 Location 0
51          %2 = OpTypeVoid
52          %3 = OpTypeFunction %2
53          %6 = OpTypeFloat 32
54          %7 = OpTypeVector %6 2
55         %10 = OpTypeVector %6 4
56         %11 = OpTypePointer Input %10
57         %12 = OpVariable %11 Input
58         %15 = OpTypeStruct %7
59         %16 = OpTypePointer Uniform %15
60         %17 = OpVariable %16 Uniform
61         %18 = OpTypeInt 32 1
62         %19 = OpConstant %18 0
63         %20 = OpTypePointer Uniform %7
64         %27 = OpTypeInt 32 0
65         %32 = OpConstant %6 10
66         %47 = OpConstant %18 10
67         %51 = OpConstant %18 100
68         %60 = OpTypeBool
69         %62 = OpConstant %18 4
70         %65 = OpConstant %18 1000
71         %71 = OpConstant %18 1
72         %73 = OpTypePointer Output %10
73         %74 = OpVariable %73 Output
74         %75 = OpConstant %27 16
75         %76 = OpTypeArray %10 %75
76         %77 = OpConstant %6 0
77         %78 = OpConstant %6 1
78         %79 = OpConstantComposite %10 %77 %77 %77 %78
79         %80 = OpConstant %6 0.5
80         %81 = OpConstantComposite %10 %80 %77 %77 %78
81         %82 = OpConstantComposite %10 %77 %80 %77 %78
82         %83 = OpConstantComposite %10 %80 %80 %77 %78
83         %84 = OpConstantComposite %10 %77 %77 %80 %78
84         %85 = OpConstantComposite %10 %80 %77 %80 %78
85         %86 = OpConstantComposite %10 %77 %80 %80 %78
86         %87 = OpConstantComposite %10 %80 %80 %80 %78
87         %88 = OpConstantComposite %10 %78 %77 %77 %78
88         %89 = OpConstantComposite %10 %77 %78 %77 %78
89         %90 = OpConstantComposite %10 %78 %78 %77 %78
90         %91 = OpConstantComposite %10 %77 %77 %78 %78
91         %92 = OpConstantComposite %10 %78 %77 %78 %78
92         %93 = OpConstantComposite %10 %77 %78 %78 %78
93         %94 = OpConstantComposite %10 %78 %78 %78 %78
94         %95 = OpConstantComposite %76 %79 %81 %82 %83 %84 %85 %86 %87 %79 %88 %89 %90 %91 %92 %93 %94
95         %97 = OpConstant %18 16
96         %99 = OpTypePointer Function %76
97        %101 = OpTypePointer Function %10
98          %4 = OpFunction %2 None %3
99          %5 = OpLabel
100        %100 = OpVariable %99 Function
101         %13 = OpLoad %10 %12
102         %14 = OpVectorShuffle %7 %13 %13 0 1
103         %21 = OpAccessChain %20 %17 %19
104         %22 = OpLoad %7 %21
105         %23 = OpFDiv %7 %14 %22
106         %31 = OpCompositeExtract %6 %23 0
107         %33 = OpFMul %6 %31 %32
108         %34 = OpConvertFToS %18 %33
109         %37 = OpCompositeExtract %6 %23 1
110         %38 = OpFMul %6 %37 %32
111         %39 = OpConvertFToS %18 %38
112         %48 = OpIMul %18 %39 %47
113         %49 = OpIAdd %18 %34 %48
114               OpBranch %53
115         %53 = OpLabel
116        %106 = OpPhi %18 %51 %5 %69 %54
117        %104 = OpPhi %18 %19 %5 %72 %54
118         %61 = OpSLessThan %60 %104 %49
119               OpLoopMerge %55 %54 None
120               OpBranchConditional %61 %54 %55
121         %54 = OpLabel
122         %64 = OpIMul %18 %62 %106
123         %67 = OpISub %18 %65 %106
124         %68 = OpIMul %18 %64 %67
125         %69 = OpSDiv %18 %68 %65
126         %72 = OpIAdd %18 %104 %71
127               OpBranch %53
128         %55 = OpLabel
129         %98 = OpSMod %18 %106 %97
130               OpStore %100 %95
131        %102 = OpAccessChain %101 %100 %98
132        %103 = OpLoad %10 %102
133               OpStore %74 %103
134               OpReturn
135               OpFunctionEnd
136END
137
138# uniforms for reference
139
140# resolution
141BUFFER reference_resolution DATA_TYPE vec2<float> DATA
142 256.0 256.0
143END
144
145BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
146
147PIPELINE graphics reference_pipeline
148  ATTACH reference_vertex_shader
149  ATTACH reference_fragment_shader
150  FRAMEBUFFER_SIZE 256 256
151  BIND BUFFER reference_framebuffer AS color LOCATION 0
152  BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
153END
154CLEAR_COLOR reference_pipeline 0 0 0 255
155
156CLEAR reference_pipeline
157RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
158
159
160SHADER vertex variant_vertex_shader PASSTHROUGH
161
162SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
163; SPIR-V
164; Version: 1.0
165; Generator: Khronos Glslang Reference Front End; 7
166; Bound: 395
167; Schema: 0
168               OpCapability Shader
169          %1 = OpExtInstImport "GLSL.std.450"
170               OpMemoryModel Logical GLSL450
171               OpEntryPoint Fragment %4 "main" %12 %74
172               OpExecutionMode %4 OriginUpperLeft
173               OpSource ESSL 320
174               OpName %4 "main"
175               OpName %12 "gl_FragCoord"
176               OpName %15 "buf0"
177               OpMemberName %15 0 "resolution"
178               OpName %17 ""
179               OpName %74 "_GLF_color"
180               OpName %100 "indexable"
181               OpDecorate %12 BuiltIn FragCoord
182               OpMemberDecorate %15 0 Offset 0
183               OpDecorate %15 Block
184               OpDecorate %17 DescriptorSet 0
185               OpDecorate %17 Binding 0
186               OpDecorate %74 Location 0
187          %2 = OpTypeVoid
188          %3 = OpTypeFunction %2
189          %6 = OpTypeFloat 32
190          %7 = OpTypeVector %6 2
191         %10 = OpTypeVector %6 4
192         %11 = OpTypePointer Input %10
193         %12 = OpVariable %11 Input
194         %15 = OpTypeStruct %7
195         %16 = OpTypePointer Uniform %15
196         %17 = OpVariable %16 Uniform
197         %18 = OpTypeInt 32 1
198         %19 = OpConstant %18 0
199         %20 = OpTypePointer Uniform %7
200         %27 = OpTypeInt 32 0
201         %32 = OpConstant %6 10
202         %47 = OpConstant %18 10
203         %51 = OpConstant %18 100
204         %60 = OpTypeBool
205         %62 = OpConstant %18 4
206         %65 = OpConstant %18 1000
207         %71 = OpConstant %18 1
208         %73 = OpTypePointer Output %10
209         %74 = OpVariable %73 Output
210         %75 = OpConstant %27 16
211         %76 = OpTypeArray %10 %75
212         %77 = OpConstant %6 0
213         %78 = OpConstant %6 1
214         %79 = OpConstantComposite %10 %77 %77 %77 %78
215         %80 = OpConstant %6 0.5
216         %81 = OpConstantComposite %10 %80 %77 %77 %78
217         %82 = OpConstantComposite %10 %77 %80 %77 %78
218         %83 = OpConstantComposite %10 %80 %80 %77 %78
219         %84 = OpConstantComposite %10 %77 %77 %80 %78
220         %85 = OpConstantComposite %10 %80 %77 %80 %78
221         %86 = OpConstantComposite %10 %77 %80 %80 %78
222         %87 = OpConstantComposite %10 %80 %80 %80 %78
223         %88 = OpConstantComposite %10 %78 %77 %77 %78
224         %89 = OpConstantComposite %10 %77 %78 %77 %78
225         %90 = OpConstantComposite %10 %78 %78 %77 %78
226         %91 = OpConstantComposite %10 %77 %77 %78 %78
227         %92 = OpConstantComposite %10 %78 %77 %78 %78
228         %93 = OpConstantComposite %10 %77 %78 %78 %78
229         %94 = OpConstantComposite %10 %78 %78 %78 %78
230         %95 = OpConstantComposite %76 %79 %81 %82 %83 %84 %85 %86 %87 %79 %88 %89 %90 %91 %92 %93 %94
231         %97 = OpConstant %18 16
232         %99 = OpTypePointer Function %76
233        %101 = OpTypePointer Function %10
234        %213 = OpConstantComposite %7 %77 %77
235        %246 = OpConstant %6 0.5
236          %4 = OpFunction %2 None %3
237          %5 = OpLabel
238        %100 = OpVariable %99 Function
239         %13 = OpLoad %10 %12
240         %14 = OpVectorShuffle %7 %13 %13 0 1
241         %21 = OpAccessChain %20 %17 %19
242        %341 = OpCompositeConstruct %10 %77 %14 %246
243         %22 = OpLoad %7 %21
244         %23 = OpFDiv %7 %14 %22
245         %31 = OpCompositeExtract %6 %23 0
246        %388 = OpCompositeExtract %6 %341 3
247        %343 = OpCompositeConstruct %10 %388 %32 %213
248        %394 = OpCompositeExtract %6 %343 1
249         %33 = OpFMul %6 %31 %394
250         %34 = OpConvertFToS %18 %33
251         %37 = OpCompositeExtract %6 %23 1
252         %38 = OpFMul %6 %37 %32
253         %39 = OpConvertFToS %18 %38
254         %48 = OpIMul %18 %39 %47
255         %49 = OpIAdd %18 %34 %48
256               OpBranch %53
257         %53 = OpLabel
258        %106 = OpPhi %18 %51 %5 %69 %54
259        %104 = OpPhi %18 %19 %5 %72 %54
260         %61 = OpSLessThan %60 %104 %49
261               OpLoopMerge %55 %54 None
262               OpBranchConditional %61 %54 %55
263         %54 = OpLabel
264         %64 = OpIMul %18 %62 %106
265         %67 = OpISub %18 %65 %106
266         %68 = OpIMul %18 %64 %67
267         %69 = OpSDiv %18 %68 %65
268         %72 = OpIAdd %18 %104 %71
269               OpBranch %53
270         %55 = OpLabel
271         %98 = OpSMod %18 %106 %97
272               OpStore %100 %95
273        %102 = OpAccessChain %101 %100 %98
274        %103 = OpLoad %10 %102
275               OpStore %74 %103
276               OpReturn
277               OpFunctionEnd
278END
279
280# uniforms for variant
281
282# resolution
283BUFFER variant_resolution DATA_TYPE vec2<float> DATA
284 256.0 256.0
285END
286
287BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
288
289PIPELINE graphics variant_pipeline
290  ATTACH variant_vertex_shader
291  ATTACH variant_fragment_shader
292  FRAMEBUFFER_SIZE 256 256
293  BIND BUFFER variant_framebuffer AS color LOCATION 0
294  BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
295END
296CLEAR_COLOR variant_pipeline 0 0 0 255
297
298CLEAR variant_pipeline
299RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
300
301EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
302