• 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 instruction simplify code path
21
22# The test passes because the shader always writes red.
23
24# Optimized using spirv-opt with the following arguments:
25# '-O'
26# spirv-opt commit hash: a187dd58a0485988841d325a85c8e6063f53500a
27
28
29
30SHADER vertex variant_vertex_shader PASSTHROUGH
31
32# variant_fragment_shader is derived from the following GLSL:
33# #version 310 es
34# #define _int_1 _GLF_uniform_int_values[0]
35# #define _int_0 _GLF_uniform_int_values[1]
36# #define _float_1_0 _GLF_uniform_float_values[0]
37# #define _float_0_0 _GLF_uniform_float_values[0]
38#
39# precision highp float;
40#
41# // Contents of _GLF_uniform_float_values: [1.0, 0.0]
42# layout(set = 0, binding = 0) uniform buf0
43# {
44#     float _GLF_uniform_float_values[2];
45# };
46#
47# // Contents of _GLF_uniform_int_values: [1, 0]
48# layout(set = 0, binding = 1) uniform buf1
49# {
50#     int _GLF_uniform_int_values[2];
51# };
52#
53# layout(location = 0) out vec4 _GLF_color;
54#
55# void main()
56# {
57#     float a = _float_1_0;
58#     a = -1.;
59#     if (sqrt(_float_0_0) < a)
60#     {
61#         _GLF_color = vec4(_int_0);
62#     }
63#     else
64#     {
65#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
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: 56
73; Schema: 0
74               OpCapability Shader
75          %1 = OpExtInstImport "GLSL.std.450"
76               OpMemoryModel Logical GLSL450
77               OpEntryPoint Fragment %4 "main" %31
78               OpExecutionMode %4 OriginUpperLeft
79               OpSource ESSL 310
80               OpName %4 "main"
81               OpName %12 "buf0"
82               OpMemberName %12 0 "_GLF_uniform_float_values"
83               OpName %14 ""
84               OpName %31 "_GLF_color"
85               OpName %33 "buf1"
86               OpMemberName %33 0 "_GLF_uniform_int_values"
87               OpName %35 ""
88               OpDecorate %11 ArrayStride 16
89               OpMemberDecorate %12 0 Offset 0
90               OpDecorate %12 Block
91               OpDecorate %14 DescriptorSet 0
92               OpDecorate %14 Binding 0
93               OpDecorate %31 Location 0
94               OpDecorate %32 ArrayStride 16
95               OpMemberDecorate %33 0 RelaxedPrecision
96               OpMemberDecorate %33 0 Offset 0
97               OpDecorate %33 Block
98               OpDecorate %35 DescriptorSet 0
99               OpDecorate %35 Binding 1
100               OpDecorate %39 RelaxedPrecision
101               OpDecorate %44 RelaxedPrecision
102               OpDecorate %47 RelaxedPrecision
103          %2 = OpTypeVoid
104          %3 = OpTypeFunction %2
105          %6 = OpTypeFloat 32
106          %9 = OpTypeInt 32 0
107         %10 = OpConstant %9 2
108         %11 = OpTypeArray %6 %10
109         %12 = OpTypeStruct %11
110         %13 = OpTypePointer Uniform %12
111         %14 = OpVariable %13 Uniform
112         %15 = OpTypeInt 32 1
113         %16 = OpConstant %15 0
114         %17 = OpTypePointer Uniform %6
115         %20 = OpConstant %6 -1
116         %25 = OpTypeBool
117         %29 = OpTypeVector %6 4
118         %30 = OpTypePointer Output %29
119         %31 = OpVariable %30 Output
120         %32 = OpTypeArray %15 %10
121         %33 = OpTypeStruct %32
122         %34 = OpTypePointer Uniform %33
123         %35 = OpVariable %34 Uniform
124         %36 = OpConstant %15 1
125         %37 = OpTypePointer Uniform %15
126          %4 = OpFunction %2 None %3
127          %5 = OpLabel
128         %21 = OpAccessChain %17 %14 %16 %16
129         %22 = OpLoad %6 %21
130         %23 = OpExtInst %6 %1 Sqrt %22
131         %26 = OpFOrdLessThan %25 %23 %20
132               OpSelectionMerge %28 None
133               OpBranchConditional %26 %27 %42
134         %27 = OpLabel
135         %38 = OpAccessChain %37 %35 %16 %36
136         %39 = OpLoad %15 %38
137         %40 = OpConvertSToF %6 %39
138         %41 = OpCompositeConstruct %29 %40 %40 %40 %40
139               OpStore %31 %41
140               OpBranch %28
141         %42 = OpLabel
142         %43 = OpAccessChain %37 %35 %16 %16
143         %44 = OpLoad %15 %43
144         %45 = OpConvertSToF %6 %44
145         %46 = OpAccessChain %37 %35 %16 %36
146         %47 = OpLoad %15 %46
147         %48 = OpConvertSToF %6 %47
148         %55 = OpCompositeConstruct %29 %45 %48 %48 %45
149               OpStore %31 %55
150               OpBranch %28
151         %28 = OpLabel
152               OpReturn
153               OpFunctionEnd
154END
155
156# uniforms for variant
157
158# _GLF_uniform_int_values
159BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
160 1 0
161END
162# _GLF_uniform_float_values
163BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
164 1.0 0.0
165END
166
167BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
168
169PIPELINE graphics variant_pipeline
170  ATTACH variant_vertex_shader
171  ATTACH variant_fragment_shader
172  FRAMEBUFFER_SIZE 256 256
173  BIND BUFFER variant_framebuffer AS color LOCATION 0
174  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
175  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
176END
177CLEAR_COLOR variant_pipeline 0 0 0 255
178
179CLEAR variant_pipeline
180RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
181
182EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
183