Fix missing dependency on sparse binds
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / data / vulkan / amber / graphicsfuzz / spv-composite2.amber
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
24 SHADER vertex reference_vertex_shader PASSTHROUGH
25
26 SHADER 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
136 END
137
138 # uniforms for reference
139
140 # resolution
141 BUFFER reference_resolution DATA_TYPE vec2<float> DATA
142  256.0 256.0
143 END
144
145 BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
146
147 PIPELINE 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
153 END
154 CLEAR_COLOR reference_pipeline 0 0 0 255
155
156 CLEAR reference_pipeline
157 RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
158
159
160 SHADER vertex variant_vertex_shader PASSTHROUGH
161
162 SHADER 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
278 END
279
280 # uniforms for variant
281
282 # resolution
283 BUFFER variant_resolution DATA_TYPE vec2<float> DATA
284  256.0 256.0
285 END
286
287 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
288
289 PIPELINE 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
295 END
296 CLEAR_COLOR variant_pipeline 0 0 0 255
297
298 CLEAR variant_pipeline
299 RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
300
301 EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005