3 # Copyright 2020 Google LLC
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
9 # http://www.apache.org/licenses/LICENSE-2.0
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.
18 # A test for a coverage-gap found by the GraphicsFuzz project.
20 # Short description: A fragment shader that covers a specific APFloat code path
22 # The test passes because the shader always writes red.
24 SHADER vertex variant_vertex_shader PASSTHROUGH
26 # variant_fragment_shader is derived from the following GLSL:
28 # #define _float_1_0 _GLF_uniform_float_values[0]
30 # precision highp float;
32 # // Contents of _GLF_uniform_float_values: 1.0
33 # layout(set = 0, binding = 0) uniform buf0
35 # float _GLF_uniform_float_values[1];
38 # layout(location = 0) out vec4 _GLF_color;
42 # vec2 v1 = vec2(_float_1_0);
45 # // The values of the edges are the same, therefore this results in
46 # // an undefined value, but not in undefined behavior.
47 # float a = smoothstep(vec2(1.0), vec2(1.0), b).x;
49 # _GLF_color = vec4(_float_1_0, a, a, _float_1_0);
52 # if (b.x < 1.0 && b.y < 1.0)
54 # _GLF_color = vec4(_float_1_0, b.x, b.y, _float_1_0);
58 # _GLF_color = vec4(_float_1_0);
61 SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
64 ; Generator: Khronos Glslang Reference Front End; 10
68 %1 = OpExtInstImport "GLSL.std.450"
69 OpMemoryModel Logical GLSL450
70 OpEntryPoint Fragment %4 "main" %35
71 OpExecutionMode %4 OriginUpperLeft
76 OpMemberName %13 0 "_GLF_uniform_float_values"
80 OpName %35 "_GLF_color"
81 OpDecorate %12 ArrayStride 16
82 OpMemberDecorate %13 0 Offset 0
84 OpDecorate %15 DescriptorSet 0
85 OpDecorate %15 Binding 0
86 OpDecorate %35 Location 0
88 %3 = OpTypeFunction %2
90 %7 = OpTypeVector %6 2
91 %8 = OpTypePointer Function %7
93 %11 = OpConstant %10 1
94 %12 = OpTypeArray %6 %11
95 %13 = OpTypeStruct %12
96 %14 = OpTypePointer Uniform %13
97 %15 = OpVariable %14 Uniform
99 %17 = OpConstant %16 0
100 %18 = OpTypePointer Uniform %6
101 %25 = OpTypePointer Function %6
102 %27 = OpConstant %6 1
103 %28 = OpConstantComposite %7 %27 %27
104 %31 = OpConstant %10 0
105 %33 = OpTypeVector %6 4
106 %34 = OpTypePointer Output %33
107 %35 = OpVariable %34 Output
109 %4 = OpFunction %2 None %3
111 %9 = OpVariable %8 Function
112 %22 = OpVariable %8 Function
113 %26 = OpVariable %25 Function
114 %19 = OpAccessChain %18 %15 %17 %17
116 %21 = OpCompositeConstruct %7 %20 %20
119 %24 = OpExtInst %7 %1 Fract %23
122 %30 = OpExtInst %7 %1 SmoothStep %28 %28 %29
123 %32 = OpCompositeExtract %6 %30 0
125 %36 = OpAccessChain %18 %15 %17 %17
129 %40 = OpAccessChain %18 %15 %17 %17
131 %42 = OpCompositeConstruct %33 %37 %38 %39 %41
133 %44 = OpAccessChain %25 %22 %31
135 %46 = OpFOrdLessThan %43 %45 %27
136 OpSelectionMerge %48 None
137 OpBranchConditional %46 %47 %48
139 %49 = OpAccessChain %25 %22 %11
141 %51 = OpFOrdLessThan %43 %50 %27
144 %52 = OpPhi %43 %46 %5 %51 %47
145 OpSelectionMerge %54 None
146 OpBranchConditional %52 %53 %64
148 %55 = OpAccessChain %18 %15 %17 %17
150 %57 = OpAccessChain %25 %22 %31
152 %59 = OpAccessChain %25 %22 %11
154 %61 = OpAccessChain %18 %15 %17 %17
156 %63 = OpCompositeConstruct %33 %56 %58 %60 %62
160 %65 = OpAccessChain %18 %15 %17 %17
162 %67 = OpCompositeConstruct %33 %66 %66 %66 %66
170 # uniforms for variant
172 # _GLF_uniform_float_values
173 BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
177 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
179 PIPELINE graphics variant_pipeline
180 ATTACH variant_vertex_shader
181 ATTACH variant_fragment_shader
182 FRAMEBUFFER_SIZE 256 256
183 BIND BUFFER variant_framebuffer AS color LOCATION 0
184 BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
186 CLEAR_COLOR variant_pipeline 0 0 0 255
188 CLEAR variant_pipeline
189 RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
191 EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255