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