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