Merge vk-gl-cts/opengl-cts-4.6.0 into vk-gl-cts/opengl-cts-4.6.1
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / data / vulkan / amber / graphicsfuzz / cov-if-true-continue.amber
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 specific NIR code paths
21
22 # The test passes because the shader always writes red.
23
24 SHADER vertex variant_vertex_shader PASSTHROUGH
25
26 # variant_fragment_shader is derived from the following GLSL:
27 # #version 320 es
28 # #define _int_0 _GLF_uniform_int_values[0]
29 # #define _int_10 _GLF_uniform_int_values[1]
30 # #define _int_1 _GLF_uniform_int_values[2]
31 # #define _int_2 _GLF_uniform_int_values[3]
32 #
33 # precision highp float;
34 # precision highp int;
35 #
36 # // Contents of _GLF_uniform_int_values: [0, 10, 1, 2]
37 # layout(set = 0, binding = 0) uniform buf0
38 # {
39 #     int _GLF_uniform_int_values[4];
40 # };
41 # layout(location = 0) out vec4 _GLF_color;
42 #
43 # void main()
44 # {
45 #     int a = _int_0;
46 #     int b = _int_10;
47 #     int c = _int_1;
48 #
49 #     // Loop iterates 10 times where a goes from 0 to 10
50 #     // during the loop, and c goes from 1 to 2 on the
51 #     // first iteration.
52 #     while (a < b)
53 #     {
54 #         a++;
55 #
56 #         // True for the first iteration.
57 #         if (c == _int_1)
58 #         {
59 #             c *= _int_2;
60 #         }
61 #         else if (true)
62 #         {
63 #             continue;
64 #         }
65 #     }
66 #
67 #     // Always true.
68 #     if (a == b && c == _int_2)
69 #     {
70 #         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
71 #     }
72 #     else
73 #     {
74 #         _GLF_color = vec4(_int_0);
75 #     }
76 # }
77 SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
78 ; SPIR-V
79 ; Version: 1.0
80 ; Generator: Khronos Glslang Reference Front End; 10
81 ; Bound: 88
82 ; Schema: 0
83                OpCapability Shader
84           %1 = OpExtInstImport "GLSL.std.450"
85                OpMemoryModel Logical GLSL450
86                OpEntryPoint Fragment %4 "main" %69
87                OpExecutionMode %4 OriginUpperLeft
88                OpSource ESSL 320
89                OpName %4 "main"
90                OpName %8 "a"
91                OpName %12 "buf0"
92                OpMemberName %12 0 "_GLF_uniform_int_values"
93                OpName %14 ""
94                OpName %19 "b"
95                OpName %23 "c"
96                OpName %69 "_GLF_color"
97                OpDecorate %11 ArrayStride 16
98                OpMemberDecorate %12 0 Offset 0
99                OpDecorate %12 Block
100                OpDecorate %14 DescriptorSet 0
101                OpDecorate %14 Binding 0
102                OpDecorate %69 Location 0
103           %2 = OpTypeVoid
104           %3 = OpTypeFunction %2
105           %6 = OpTypeInt 32 1
106           %7 = OpTypePointer Function %6
107           %9 = OpTypeInt 32 0
108          %10 = OpConstant %9 4
109          %11 = OpTypeArray %6 %10
110          %12 = OpTypeStruct %11
111          %13 = OpTypePointer Uniform %12
112          %14 = OpVariable %13 Uniform
113          %15 = OpConstant %6 0
114          %16 = OpTypePointer Uniform %6
115          %20 = OpConstant %6 1
116          %24 = OpConstant %6 2
117          %34 = OpTypeBool
118          %44 = OpConstant %6 3
119          %50 = OpConstantTrue %34
120          %66 = OpTypeFloat 32
121          %67 = OpTypeVector %66 4
122          %68 = OpTypePointer Output %67
123          %69 = OpVariable %68 Output
124           %4 = OpFunction %2 None %3
125           %5 = OpLabel
126           %8 = OpVariable %7 Function
127          %19 = OpVariable %7 Function
128          %23 = OpVariable %7 Function
129          %17 = OpAccessChain %16 %14 %15 %15
130          %18 = OpLoad %6 %17
131                OpStore %8 %18
132          %21 = OpAccessChain %16 %14 %15 %20
133          %22 = OpLoad %6 %21
134                OpStore %19 %22
135          %25 = OpAccessChain %16 %14 %15 %24
136          %26 = OpLoad %6 %25
137                OpStore %23 %26
138                OpBranch %27
139          %27 = OpLabel
140                OpLoopMerge %29 %30 None
141                OpBranch %31
142          %31 = OpLabel
143          %32 = OpLoad %6 %8
144          %33 = OpLoad %6 %19
145          %35 = OpSLessThan %34 %32 %33
146                OpBranchConditional %35 %28 %29
147          %28 = OpLabel
148          %36 = OpLoad %6 %8
149          %37 = OpIAdd %6 %36 %20
150                OpStore %8 %37
151          %38 = OpLoad %6 %23
152          %39 = OpAccessChain %16 %14 %15 %24
153          %40 = OpLoad %6 %39
154          %41 = OpIEqual %34 %38 %40
155                OpSelectionMerge %43 None
156                OpBranchConditional %41 %42 %49
157          %42 = OpLabel
158          %45 = OpAccessChain %16 %14 %15 %44
159          %46 = OpLoad %6 %45
160          %47 = OpLoad %6 %23
161          %48 = OpIMul %6 %47 %46
162                OpStore %23 %48
163                OpBranch %43
164          %49 = OpLabel
165                OpSelectionMerge %52 None
166                OpBranchConditional %50 %51 %52
167          %51 = OpLabel
168                OpBranch %30
169          %52 = OpLabel
170                OpBranch %43
171          %43 = OpLabel
172                OpBranch %30
173          %30 = OpLabel
174                OpBranch %27
175          %29 = OpLabel
176          %54 = OpLoad %6 %8
177          %55 = OpLoad %6 %19
178          %56 = OpIEqual %34 %54 %55
179                OpSelectionMerge %58 None
180                OpBranchConditional %56 %57 %58
181          %57 = OpLabel
182          %59 = OpLoad %6 %23
183          %60 = OpAccessChain %16 %14 %15 %44
184          %61 = OpLoad %6 %60
185          %62 = OpIEqual %34 %59 %61
186                OpBranch %58
187          %58 = OpLabel
188          %63 = OpPhi %34 %56 %29 %62 %57
189                OpSelectionMerge %65 None
190                OpBranchConditional %63 %64 %83
191          %64 = OpLabel
192          %70 = OpAccessChain %16 %14 %15 %24
193          %71 = OpLoad %6 %70
194          %72 = OpConvertSToF %66 %71
195          %73 = OpAccessChain %16 %14 %15 %15
196          %74 = OpLoad %6 %73
197          %75 = OpConvertSToF %66 %74
198          %76 = OpAccessChain %16 %14 %15 %15
199          %77 = OpLoad %6 %76
200          %78 = OpConvertSToF %66 %77
201          %79 = OpAccessChain %16 %14 %15 %24
202          %80 = OpLoad %6 %79
203          %81 = OpConvertSToF %66 %80
204          %82 = OpCompositeConstruct %67 %72 %75 %78 %81
205                OpStore %69 %82
206                OpBranch %65
207          %83 = OpLabel
208          %84 = OpAccessChain %16 %14 %15 %15
209          %85 = OpLoad %6 %84
210          %86 = OpConvertSToF %66 %85
211          %87 = OpCompositeConstruct %67 %86 %86 %86 %86
212                OpStore %69 %87
213                OpBranch %65
214          %65 = OpLabel
215                OpReturn
216                OpFunctionEnd
217 END
218
219 # uniforms for variant
220
221 # _GLF_uniform_int_values
222 BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
223  0 10 1 2
224 END
225
226 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
227
228 PIPELINE graphics variant_pipeline
229   ATTACH variant_vertex_shader
230   ATTACH variant_fragment_shader
231   FRAMEBUFFER_SIZE 256 256
232   BIND BUFFER variant_framebuffer AS color LOCATION 0
233   BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
234 END
235 CLEAR_COLOR variant_pipeline 0 0 0 255
236
237 CLEAR variant_pipeline
238 RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
239
240 EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255