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