• 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: Two shaders with diff: variable mutated
21
22# The test renders two images using semantically equivalent shaders, and then
23# checks that the images are similar.
24# The test passes because the shaders have the same semantics and so the images
25# should be the same.
26
27SHADER vertex reference_vertex_shader PASSTHROUGH
28
29SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
30; SPIR-V
31; Version: 1.0
32; Generator: Khronos Glslang Reference Front End; 7
33; Bound: 230
34; Schema: 0
35               OpCapability Shader
36          %1 = OpExtInstImport "GLSL.std.450"
37               OpMemoryModel Logical GLSL450
38               OpEntryPoint Fragment %4 "main" %53 %138
39               OpExecutionMode %4 OriginUpperLeft
40               OpSource ESSL 320
41               OpName %4 "main"
42               OpName %53 "gl_FragCoord"
43               OpName %56 "buf0"
44               OpMemberName %56 0 "resolution"
45               OpName %58 ""
46               OpName %138 "_GLF_color"
47               OpName %163 "indexable"
48               OpDecorate %53 BuiltIn FragCoord
49               OpMemberDecorate %56 0 Offset 0
50               OpDecorate %56 Block
51               OpDecorate %58 DescriptorSet 0
52               OpDecorate %58 Binding 0
53               OpDecorate %138 Location 0
54          %2 = OpTypeVoid
55          %3 = OpTypeFunction %2
56          %6 = OpTypeInt 32 1
57          %7 = OpTypeVector %6 2
58         %13 = OpTypeInt 32 0
59         %18 = OpConstant %6 0
60         %19 = OpTypeBool
61         %26 = OpConstant %6 1
62         %38 = OpConstant %6 2
63         %47 = OpTypeFloat 32
64         %48 = OpTypeVector %47 2
65         %51 = OpTypeVector %47 4
66         %52 = OpTypePointer Input %51
67         %53 = OpVariable %52 Input
68         %56 = OpTypeStruct %48
69         %57 = OpTypePointer Uniform %56
70         %58 = OpVariable %57 Uniform
71         %59 = OpTypePointer Uniform %48
72         %67 = OpConstant %47 8
73         %78 = OpConstant %6 5
74         %82 = OpConstant %6 10
75         %95 = OpConstant %6 8
76        %107 = OpConstant %6 100
77        %130 = OpConstant %6 15
78        %132 = OpConstant %6 16
79        %137 = OpTypePointer Output %51
80        %138 = OpVariable %137 Output
81        %139 = OpConstant %13 16
82        %140 = OpTypeArray %51 %139
83        %141 = OpConstant %47 0
84        %142 = OpConstant %47 1
85        %143 = OpConstantComposite %51 %141 %141 %141 %142
86        %144 = OpConstant %47 0.5
87        %145 = OpConstantComposite %51 %144 %141 %141 %142
88        %146 = OpConstantComposite %51 %141 %144 %141 %142
89        %147 = OpConstantComposite %51 %144 %144 %141 %142
90        %148 = OpConstantComposite %51 %141 %141 %144 %142
91        %149 = OpConstantComposite %51 %144 %141 %144 %142
92        %150 = OpConstantComposite %51 %141 %144 %144 %142
93        %151 = OpConstantComposite %51 %144 %144 %144 %142
94        %152 = OpConstantComposite %51 %142 %141 %141 %142
95        %153 = OpConstantComposite %51 %141 %142 %141 %142
96        %154 = OpConstantComposite %51 %142 %142 %141 %142
97        %155 = OpConstantComposite %51 %141 %141 %142 %142
98        %156 = OpConstantComposite %51 %142 %141 %142 %142
99        %157 = OpConstantComposite %51 %141 %142 %142 %142
100        %158 = OpConstantComposite %51 %142 %142 %142 %142
101        %159 = OpConstantComposite %140 %143 %145 %146 %147 %148 %149 %150 %151 %143 %152 %153 %154 %155 %156 %157 %158
102        %162 = OpTypePointer Function %140
103        %164 = OpTypePointer Function %51
104        %229 = OpUndef %7
105          %4 = OpFunction %2 None %3
106          %5 = OpLabel
107        %163 = OpVariable %162 Function
108         %54 = OpLoad %51 %53
109         %55 = OpVectorShuffle %48 %54 %54 0 1
110         %60 = OpAccessChain %59 %58 %18
111         %61 = OpLoad %48 %60
112         %62 = OpFDiv %48 %55 %61
113         %66 = OpCompositeExtract %47 %62 0
114         %68 = OpFMul %47 %66 %67
115         %69 = OpConvertFToS %6 %68
116         %71 = OpCompositeExtract %47 %62 1
117         %72 = OpFMul %47 %71 %67
118         %73 = OpConvertFToS %6 %72
119         %79 = OpBitwiseAnd %6 %69 %78
120         %83 = OpBitwiseAnd %6 %73 %82
121         %84 = OpBitwiseOr %6 %79 %83
122         %88 = OpBitwiseAnd %6 %73 %78
123         %91 = OpBitwiseAnd %6 %69 %82
124         %92 = OpBitwiseOr %6 %88 %91
125         %96 = OpIMul %6 %84 %95
126         %98 = OpIAdd %6 %96 %92
127         %99 = OpCompositeConstruct %7 %98 %18
128               OpBranch %101
129        %101 = OpLabel
130        %221 = OpPhi %7 %99 %5 %210 %104
131        %220 = OpPhi %6 %18 %5 %113 %104
132        %108 = OpSLessThan %19 %220 %107
133               OpLoopMerge %103 %104 None
134               OpBranchConditional %108 %102 %103
135        %102 = OpLabel
136        %170 = OpCompositeExtract %6 %221 0
137        %171 = OpSGreaterThan %19 %170 %18
138               OpSelectionMerge %176 None
139               OpBranchConditional %171 %172 %176
140        %172 = OpLabel
141        %174 = OpCompositeExtract %6 %221 1
142        %175 = OpISub %6 %174 %26
143        %202 = OpCompositeInsert %7 %175 %221 1
144               OpBranch %176
145        %176 = OpLabel
146        %224 = OpPhi %7 %221 %102 %202 %172
147        %178 = OpCompositeExtract %6 %224 0
148        %179 = OpSLessThan %19 %178 %18
149               OpSelectionMerge %184 None
150               OpBranchConditional %179 %180 %184
151        %180 = OpLabel
152        %182 = OpCompositeExtract %6 %224 1
153        %183 = OpIAdd %6 %182 %26
154        %206 = OpCompositeInsert %7 %183 %224 1
155               OpBranch %184
156        %184 = OpLabel
157        %225 = OpPhi %7 %224 %176 %206 %180
158        %186 = OpCompositeExtract %6 %225 1
159        %187 = OpSDiv %6 %186 %38
160        %189 = OpCompositeExtract %6 %225 0
161        %190 = OpIAdd %6 %189 %187
162        %210 = OpCompositeInsert %7 %190 %225 0
163               OpBranch %104
164        %104 = OpLabel
165        %113 = OpIAdd %6 %220 %26
166               OpBranch %101
167        %103 = OpLabel
168        %115 = OpCompositeExtract %6 %221 0
169        %116 = OpSLessThan %19 %115 %18
170               OpSelectionMerge %118 None
171               OpBranchConditional %116 %117 %118
172        %117 = OpLabel
173        %121 = OpSNegate %6 %115
174        %214 = OpCompositeInsert %7 %121 %229 0
175               OpBranch %118
176        %118 = OpLabel
177        %223 = OpPhi %7 %221 %103 %214 %117
178               OpBranch %123
179        %123 = OpLabel
180        %222 = OpPhi %7 %223 %118 %218 %124
181        %129 = OpCompositeExtract %6 %222 0
182        %131 = OpSGreaterThan %19 %129 %130
183               OpLoopMerge %125 %124 None
184               OpBranchConditional %131 %124 %125
185        %124 = OpLabel
186        %135 = OpISub %6 %129 %132
187        %218 = OpCompositeInsert %7 %135 %229 0
188               OpBranch %123
189        %125 = OpLabel
190               OpStore %163 %159
191        %165 = OpAccessChain %164 %163 %129
192        %166 = OpLoad %51 %165
193               OpStore %138 %166
194               OpReturn
195               OpFunctionEnd
196END
197
198# uniforms for reference
199
200# resolution
201BUFFER reference_resolution DATA_TYPE vec2<float> STD140 DATA
202 256.0 256.0
203END
204
205BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
206
207PIPELINE graphics reference_pipeline
208  ATTACH reference_vertex_shader
209  ATTACH reference_fragment_shader
210  FRAMEBUFFER_SIZE 256 256
211  BIND BUFFER reference_framebuffer AS color LOCATION 0
212  BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
213END
214CLEAR_COLOR reference_pipeline 0 0 0 255
215
216CLEAR reference_pipeline
217RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
218
219
220SHADER vertex variant_vertex_shader PASSTHROUGH
221
222SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
223; SPIR-V
224; Version: 1.0
225; Generator: Khronos Glslang Reference Front End; 7
226; Bound: 399
227; Schema: 0
228               OpCapability Shader
229          %1 = OpExtInstImport "GLSL.std.450"
230               OpMemoryModel Logical GLSL450
231               OpEntryPoint Fragment %4 "main" %53 %138
232               OpExecutionMode %4 OriginUpperLeft
233               OpSource ESSL 320
234               OpName %4 "main"
235               OpName %53 "gl_FragCoord"
236               OpName %56 "buf0"
237               OpMemberName %56 0 "resolution"
238               OpName %58 ""
239               OpName %138 "_GLF_color"
240               OpName %163 "indexable"
241               OpDecorate %53 BuiltIn FragCoord
242               OpMemberDecorate %56 0 Offset 0
243               OpDecorate %56 Block
244               OpDecorate %58 DescriptorSet 0
245               OpDecorate %58 Binding 0
246               OpDecorate %138 Location 0
247          %2 = OpTypeVoid
248          %3 = OpTypeFunction %2
249          %6 = OpTypeInt 32 1
250          %7 = OpTypeVector %6 2
251         %13 = OpTypeInt 32 0
252         %18 = OpConstant %6 0
253         %19 = OpTypeBool
254         %26 = OpConstant %6 1
255         %38 = OpConstant %6 2
256         %47 = OpTypeFloat 32
257         %48 = OpTypeVector %47 2
258         %51 = OpTypeVector %47 4
259         %52 = OpTypePointer Input %51
260         %53 = OpVariable %52 Input
261         %56 = OpTypeStruct %48
262         %57 = OpTypePointer Uniform %56
263         %58 = OpVariable %57 Uniform
264         %59 = OpTypePointer Uniform %48
265         %67 = OpConstant %47 8
266         %78 = OpConstant %6 5
267         %82 = OpConstant %6 10
268         %95 = OpConstant %6 8
269        %107 = OpConstant %6 100
270        %130 = OpConstant %6 15
271        %132 = OpConstant %6 16
272        %137 = OpTypePointer Output %51
273        %138 = OpVariable %137 Output
274        %139 = OpConstant %13 16
275        %140 = OpTypeArray %51 %139
276        %141 = OpConstant %47 0
277        %142 = OpConstant %47 1
278        %143 = OpConstantComposite %51 %141 %141 %141 %142
279        %144 = OpConstant %47 0.5
280        %145 = OpConstantComposite %51 %144 %141 %141 %142
281        %146 = OpConstantComposite %51 %141 %144 %141 %142
282        %147 = OpConstantComposite %51 %144 %144 %141 %142
283        %148 = OpConstantComposite %51 %141 %141 %144 %142
284        %149 = OpConstantComposite %51 %144 %141 %144 %142
285        %150 = OpConstantComposite %51 %141 %144 %144 %142
286        %151 = OpConstantComposite %51 %144 %144 %144 %142
287        %152 = OpConstantComposite %51 %142 %141 %141 %142
288        %153 = OpConstantComposite %51 %141 %142 %141 %142
289        %154 = OpConstantComposite %51 %142 %142 %141 %142
290        %155 = OpConstantComposite %51 %141 %141 %142 %142
291        %156 = OpConstantComposite %51 %142 %141 %142 %142
292        %157 = OpConstantComposite %51 %141 %142 %142 %142
293        %158 = OpConstantComposite %51 %142 %142 %142 %142
294        %159 = OpConstantComposite %140 %143 %145 %146 %147 %148 %149 %150 %151 %143 %152 %153 %154 %155 %156 %157 %158
295        %162 = OpTypePointer Function %140
296        %164 = OpTypePointer Function %51
297        %229 = OpUndef %7
298        %354 = OpConstant %47 0
299        %355 = OpConstantComposite %51 %354 %354 %354 %354
300        %356 = OpConstantComposite %140 %355 %355 %355 %355 %355 %355 %355 %355 %355 %355 %355 %355 %355 %355 %355 %355
301          %4 = OpFunction %2 None %3
302          %5 = OpLabel
303        %163 = OpVariable %162 Function
304         %54 = OpLoad %51 %53
305         %55 = OpVectorShuffle %48 %54 %54 0 1
306         %60 = OpAccessChain %59 %58 %18
307         %61 = OpLoad %48 %60
308         %62 = OpFDiv %48 %55 %61
309         %66 = OpCompositeExtract %47 %62 0
310         %68 = OpFMul %47 %66 %67
311         %69 = OpConvertFToS %6 %68
312         %71 = OpCompositeExtract %47 %62 1
313         %72 = OpFMul %47 %71 %67
314         %73 = OpConvertFToS %6 %72
315         %79 = OpBitwiseAnd %6 %69 %78
316         %83 = OpBitwiseAnd %6 %73 %82
317         %84 = OpBitwiseOr %6 %79 %83
318         %88 = OpBitwiseAnd %6 %73 %78
319         %91 = OpBitwiseAnd %6 %69 %82
320         %92 = OpBitwiseOr %6 %88 %91
321         %96 = OpIMul %6 %84 %95
322         %98 = OpIAdd %6 %96 %92
323         %99 = OpCompositeConstruct %7 %98 %18
324               OpBranch %101
325        %101 = OpLabel
326        %221 = OpPhi %7 %99 %5 %210 %104
327        %220 = OpPhi %6 %18 %5 %113 %104
328        %108 = OpSLessThan %19 %220 %107
329               OpLoopMerge %103 %104 None
330               OpBranchConditional %108 %102 %103
331        %102 = OpLabel
332        %170 = OpCompositeExtract %6 %221 0
333        %171 = OpSGreaterThan %19 %170 %18
334               OpSelectionMerge %176 None
335               OpBranchConditional %171 %172 %176
336        %172 = OpLabel
337        %174 = OpCompositeExtract %6 %221 1
338        %175 = OpISub %6 %174 %26
339        %202 = OpCompositeInsert %7 %175 %221 1
340               OpBranch %176
341        %176 = OpLabel
342        %224 = OpPhi %7 %221 %102 %202 %172
343        %178 = OpCompositeExtract %6 %224 0
344        %179 = OpSLessThan %19 %178 %18
345               OpSelectionMerge %184 None
346               OpBranchConditional %179 %180 %184
347        %180 = OpLabel
348        %182 = OpCompositeExtract %6 %224 1
349        %183 = OpIAdd %6 %182 %26
350        %206 = OpCompositeInsert %7 %183 %224 1
351               OpBranch %184
352        %184 = OpLabel
353        %225 = OpPhi %7 %224 %176 %206 %180
354        %186 = OpCompositeExtract %6 %225 1
355        %187 = OpSDiv %6 %186 %38
356        %189 = OpCompositeExtract %6 %225 0
357        %190 = OpIAdd %6 %189 %187
358        %210 = OpCompositeInsert %7 %190 %225 0
359               OpBranch %104
360        %104 = OpLabel
361        %113 = OpIAdd %6 %220 %26
362               OpBranch %101
363        %103 = OpLabel
364        %115 = OpCompositeExtract %6 %221 0
365        %116 = OpSLessThan %19 %115 %18
366               OpSelectionMerge %118 None
367               OpBranchConditional %116 %117 %118
368        %117 = OpLabel
369        %121 = OpSNegate %6 %115
370        %214 = OpCompositeInsert %7 %121 %229 0
371               OpBranch %118
372        %118 = OpLabel
373        %223 = OpPhi %7 %221 %103 %214 %117
374               OpBranch %123
375        %123 = OpLabel
376        %222 = OpPhi %7 %223 %118 %218 %124
377        %129 = OpCompositeExtract %6 %222 0
378        %131 = OpSGreaterThan %19 %129 %130
379               OpLoopMerge %125 %124 None
380               OpBranchConditional %131 %124 %125
381        %124 = OpLabel
382        %135 = OpISub %6 %129 %132
383        %218 = OpCompositeInsert %7 %135 %229 0
384               OpBranch %123
385        %125 = OpLabel
386               OpStore %163 %159
387        %398 = OpLoad %140 %163
388               OpStore %163 %356
389               OpStore %163 %398
390        %165 = OpAccessChain %164 %163 %129
391        %166 = OpLoad %51 %165
392               OpStore %138 %166
393               OpReturn
394               OpFunctionEnd
395END
396
397# uniforms for variant
398
399# resolution
400BUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA
401 256.0 256.0
402END
403
404BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
405
406PIPELINE graphics variant_pipeline
407  ATTACH variant_vertex_shader
408  ATTACH variant_fragment_shader
409  FRAMEBUFFER_SIZE 256 256
410  BIND BUFFER variant_framebuffer AS color LOCATION 0
411  BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
412END
413CLEAR_COLOR variant_pipeline 0 0 0 255
414
415CLEAR variant_pipeline
416RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
417
418EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
419