• 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 GraphicsFuzz.
19
20# Short description: A fragment shader that covers a specific vector DCE path.
21
22# The test passes because 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# precision highp float;
29#
30# layout(location = 0) out vec4 _GLF_color;
31#
32# void main()
33# {
34#     vec2 a = vec2(1);
35#     a.x += 0.5;
36#     vec2 b = fract(a);
37#
38#     if (b.x == 0.5) // Always true.
39#         _GLF_color = vec4(1, 0, 0, 1);
40#     else
41#         _GLF_color = vec4(0);
42# }
43SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
44; SPIR-V
45; Version: 1.0
46; Generator: Khronos Glslang Reference Front End; 8
47; Bound: 36
48; Schema: 0
49               OpCapability Shader
50          %1 = OpExtInstImport "GLSL.std.450"
51               OpMemoryModel Logical GLSL450
52               OpEntryPoint Fragment %4 "main" %31
53               OpExecutionMode %4 OriginUpperLeft
54               OpSource ESSL 310
55               OpName %4 "main"
56               OpName %9 "a"
57               OpName %20 "b"
58               OpName %31 "_GLF_color"
59               OpDecorate %31 Location 0
60          %2 = OpTypeVoid
61          %3 = OpTypeFunction %2
62          %6 = OpTypeFloat 32
63          %7 = OpTypeVector %6 2
64          %8 = OpTypePointer Function %7
65         %10 = OpConstant %6 1
66         %11 = OpConstantComposite %7 %10 %10
67         %12 = OpConstant %6 0.5
68         %13 = OpTypeInt 32 0
69         %14 = OpConstant %13 0
70         %15 = OpTypePointer Function %6
71         %25 = OpTypeBool
72         %29 = OpTypeVector %6 4
73         %30 = OpTypePointer Output %29
74         %31 = OpVariable %30 Output
75         %32 = OpConstant %6 0
76         %33 = OpConstantComposite %29 %10 %32 %32 %10
77         %35 = OpConstantComposite %29 %32 %32 %32 %32
78          %4 = OpFunction %2 None %3
79          %5 = OpLabel
80          %9 = OpVariable %8 Function
81         %20 = OpVariable %8 Function
82               OpStore %9 %11
83         %16 = OpAccessChain %15 %9 %14
84         %17 = OpLoad %6 %16
85         %18 = OpFAdd %6 %17 %12
86         %19 = OpAccessChain %15 %9 %14
87               OpStore %19 %18
88         %21 = OpLoad %7 %9
89         %22 = OpExtInst %7 %1 Fract %21
90               OpStore %20 %22
91         %23 = OpAccessChain %15 %20 %14
92         %24 = OpLoad %6 %23
93         %26 = OpFOrdEqual %25 %24 %12
94               OpSelectionMerge %28 None
95               OpBranchConditional %26 %27 %34
96         %27 = OpLabel
97               OpStore %31 %33
98               OpBranch %28
99         %34 = OpLabel
100               OpStore %31 %35
101               OpBranch %28
102         %28 = OpLabel
103               OpReturn
104               OpFunctionEnd
105END
106
107
108BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
109
110PIPELINE graphics variant_pipeline
111  ATTACH variant_vertex_shader
112  ATTACH variant_fragment_shader
113  FRAMEBUFFER_SIZE 256 256
114  BIND BUFFER variant_framebuffer AS color LOCATION 0
115END
116CLEAR_COLOR variant_pipeline 0 0 0 255
117
118CLEAR variant_pipeline
119RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
120
121EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
122