dEQP-VK.graphicsfuzz.cov-tail-duplicator-infinite-loops
authorAntto Mäkinen <antto.makinen@siru.fi>
Thu, 17 Dec 2020 12:34:34 +0000 (14:34 +0200)
committerAlexander Galazin <alexander.galazin@arm.com>
Fri, 22 Jan 2021 09:41:59 +0000 (10:41 +0100)
Components: Vulkan

New Tests:

dEQP-VK.graphicsfuzz.cov-tail-duplicator-infinite-loops

Change-Id: I24ac09b51408f2e244328f2b90dc6821a6cdce1b

android/cts/master/vk-master-2020-03-01.txt
android/cts/master/vk-master.txt
external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-tail-duplicator-infinite-loops.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/graphicsfuzz/index.txt
external/vulkancts/mustpass/master/vk-default.txt

index 0bd1e32..7b7dafc 100644 (file)
@@ -343237,6 +343237,7 @@ dEQP-VK.graphicsfuzz.cov-single-block-elim-self-assign
 dEQP-VK.graphicsfuzz.cov-single-store-elim-assume-store
 dEQP-VK.graphicsfuzz.cov-ssa-rewrite-case-with-default
 dEQP-VK.graphicsfuzz.cov-tail-duplicator-for-for-for
+dEQP-VK.graphicsfuzz.cov-tail-duplicator-infinite-loops
 dEQP-VK.graphicsfuzz.cov-target-lowering-dfdx-cos
 dEQP-VK.graphicsfuzz.cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal
 dEQP-VK.graphicsfuzz.cov-types-return-in-main-never-hit
index aa61d1d..2baf9ff 100644 (file)
@@ -753430,6 +753430,7 @@ dEQP-VK.graphicsfuzz.cov-single-block-elim-self-assign
 dEQP-VK.graphicsfuzz.cov-single-store-elim-assume-store
 dEQP-VK.graphicsfuzz.cov-ssa-rewrite-case-with-default
 dEQP-VK.graphicsfuzz.cov-tail-duplicator-for-for-for
+dEQP-VK.graphicsfuzz.cov-tail-duplicator-infinite-loops
 dEQP-VK.graphicsfuzz.cov-target-lowering-dfdx-cos
 dEQP-VK.graphicsfuzz.cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal
 dEQP-VK.graphicsfuzz.cov-types-return-in-main-never-hit
diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-tail-duplicator-infinite-loops.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/cov-tail-duplicator-infinite-loops.amber
new file mode 100644 (file)
index 0000000..7c51c19
--- /dev/null
@@ -0,0 +1,275 @@
+#!amber
+
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# A test for a coverage-gap found by the GraphicsFuzz project.
+
+# Short description: A fragment shader that covers a specific tail duplicator code path
+
+# The test passes because the shader always writes red.
+
+SHADER vertex variant_vertex_shader PASSTHROUGH
+
+# variant_fragment_shader is derived from the following GLSL:
+# #version 310 es
+# #define _int_5 _GLF_uniform_int_values[0]
+# #define _int_0 _GLF_uniform_int_values[1]
+# #define _float_0_0 _GLF_uniform_float_values[0]
+# #define _float_1_0 _GLF_uniform_float_values[1]
+#
+# precision highp float;
+#
+# // Contents of _GLF_uniform_int_values: [5, 0]
+# layout(set = 0, binding = 0) uniform buf0 {
+#     int _GLF_uniform_int_values[2];
+# };
+# // Contents of _GLF_uniform_float_values: [0.0, 1.0]
+# layout(set = 0, binding = 1) uniform buf1 {
+#     float _GLF_uniform_float_values[2];
+# };
+# // Contents of zero: 0.0
+# layout(set = 0, binding = 2) uniform buf2 {
+#     float zero;
+# };
+# layout(location = 0) out vec4 _GLF_color;
+#
+# void main()
+# {
+#     _GLF_color = vec4(_float_0_0);
+#
+#     // Always false.
+#     if(zero > _float_0_0)
+#     {
+#         do
+#         {
+#             _GLF_color = vec4(_float_1_0);
+#         }
+#         while(true);
+#     }
+#     else
+#     {
+#         do
+#         {
+#             // Loops once because of the break inside.
+#             while(true)
+#             {
+#                 for(int i = _int_0; i < _int_5; i ++)
+#                 {
+#                     _GLF_color = vec4(_float_1_0, _float_0_0, _float_0_0, _float_1_0);
+#                 }
+#                 break;
+#             }
+#         }
+#         while(zero > _float_0_0); // Always false.
+#     }
+# }
+SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 10
+; Bound: 87
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %4 "main" %9
+               OpExecutionMode %4 OriginUpperLeft
+               OpSource ESSL 310
+               OpName %4 "main"
+               OpName %9 "_GLF_color"
+               OpName %13 "buf1"
+               OpMemberName %13 0 "_GLF_uniform_float_values"
+               OpName %15 ""
+               OpName %22 "buf2"
+               OpMemberName %22 0 "zero"
+               OpName %24 ""
+               OpName %53 "i"
+               OpName %55 "buf0"
+               OpMemberName %55 0 "_GLF_uniform_int_values"
+               OpName %57 ""
+               OpDecorate %9 Location 0
+               OpDecorate %12 ArrayStride 16
+               OpMemberDecorate %13 0 Offset 0
+               OpDecorate %13 Block
+               OpDecorate %15 DescriptorSet 0
+               OpDecorate %15 Binding 1
+               OpMemberDecorate %22 0 Offset 0
+               OpDecorate %22 Block
+               OpDecorate %24 DescriptorSet 0
+               OpDecorate %24 Binding 2
+               OpDecorate %53 RelaxedPrecision
+               OpDecorate %54 ArrayStride 16
+               OpMemberDecorate %55 0 RelaxedPrecision
+               OpMemberDecorate %55 0 Offset 0
+               OpDecorate %55 Block
+               OpDecorate %57 DescriptorSet 0
+               OpDecorate %57 Binding 0
+               OpDecorate %60 RelaxedPrecision
+               OpDecorate %66 RelaxedPrecision
+               OpDecorate %68 RelaxedPrecision
+               OpDecorate %79 RelaxedPrecision
+               OpDecorate %80 RelaxedPrecision
+          %2 = OpTypeVoid
+          %3 = OpTypeFunction %2
+          %6 = OpTypeFloat 32
+          %7 = OpTypeVector %6 4
+          %8 = OpTypePointer Output %7
+          %9 = OpVariable %8 Output
+         %10 = OpTypeInt 32 0
+         %11 = OpConstant %10 2
+         %12 = OpTypeArray %6 %11
+         %13 = OpTypeStruct %12
+         %14 = OpTypePointer Uniform %13
+         %15 = OpVariable %14 Uniform
+         %16 = OpTypeInt 32 1
+         %17 = OpConstant %16 0
+         %18 = OpTypePointer Uniform %6
+         %22 = OpTypeStruct %6
+         %23 = OpTypePointer Uniform %22
+         %24 = OpVariable %23 Uniform
+         %29 = OpTypeBool
+         %37 = OpConstant %16 1
+         %41 = OpConstantTrue %29
+         %52 = OpTypePointer Function %16
+         %54 = OpTypeArray %16 %11
+         %55 = OpTypeStruct %54
+         %56 = OpTypePointer Uniform %55
+         %57 = OpVariable %56 Uniform
+         %58 = OpTypePointer Uniform %16
+          %4 = OpFunction %2 None %3
+          %5 = OpLabel
+         %53 = OpVariable %52 Function
+         %19 = OpAccessChain %18 %15 %17 %17
+         %20 = OpLoad %6 %19
+         %21 = OpCompositeConstruct %7 %20 %20 %20 %20
+               OpStore %9 %21
+         %25 = OpAccessChain %18 %24 %17
+         %26 = OpLoad %6 %25
+         %27 = OpAccessChain %18 %15 %17 %17
+         %28 = OpLoad %6 %27
+         %30 = OpFOrdGreaterThan %29 %26 %28
+               OpSelectionMerge %32 None
+               OpBranchConditional %30 %31 %42
+         %31 = OpLabel
+               OpBranch %33
+         %33 = OpLabel
+               OpLoopMerge %35 %36 None
+               OpBranch %34
+         %34 = OpLabel
+         %38 = OpAccessChain %18 %15 %17 %37
+         %39 = OpLoad %6 %38
+         %40 = OpCompositeConstruct %7 %39 %39 %39 %39
+               OpStore %9 %40
+               OpBranch %36
+         %36 = OpLabel
+               OpBranchConditional %41 %33 %35
+         %35 = OpLabel
+               OpBranch %32
+         %42 = OpLabel
+               OpBranch %43
+         %43 = OpLabel
+               OpLoopMerge %45 %46 None
+               OpBranch %44
+         %44 = OpLabel
+               OpBranch %47
+         %47 = OpLabel
+               OpLoopMerge %49 %50 None
+               OpBranch %51
+         %51 = OpLabel
+               OpBranchConditional %41 %48 %49
+         %48 = OpLabel
+         %59 = OpAccessChain %58 %57 %17 %37
+         %60 = OpLoad %16 %59
+               OpStore %53 %60
+               OpBranch %61
+         %61 = OpLabel
+               OpLoopMerge %63 %64 None
+               OpBranch %65
+         %65 = OpLabel
+         %66 = OpLoad %16 %53
+         %67 = OpAccessChain %58 %57 %17 %17
+         %68 = OpLoad %16 %67
+         %69 = OpSLessThan %29 %66 %68
+               OpBranchConditional %69 %62 %63
+         %62 = OpLabel
+         %70 = OpAccessChain %18 %15 %17 %37
+         %71 = OpLoad %6 %70
+         %72 = OpAccessChain %18 %15 %17 %17
+         %73 = OpLoad %6 %72
+         %74 = OpAccessChain %18 %15 %17 %17
+         %75 = OpLoad %6 %74
+         %76 = OpAccessChain %18 %15 %17 %37
+         %77 = OpLoad %6 %76
+         %78 = OpCompositeConstruct %7 %71 %73 %75 %77
+               OpStore %9 %78
+               OpBranch %64
+         %64 = OpLabel
+         %79 = OpLoad %16 %53
+         %80 = OpIAdd %16 %79 %37
+               OpStore %53 %80
+               OpBranch %61
+         %63 = OpLabel
+               OpBranch %49
+         %50 = OpLabel
+               OpBranch %47
+         %49 = OpLabel
+               OpBranch %46
+         %46 = OpLabel
+         %82 = OpAccessChain %18 %24 %17
+         %83 = OpLoad %6 %82
+         %84 = OpAccessChain %18 %15 %17 %17
+         %85 = OpLoad %6 %84
+         %86 = OpFOrdGreaterThan %29 %83 %85
+               OpBranchConditional %86 %43 %45
+         %45 = OpLabel
+               OpBranch %32
+         %32 = OpLabel
+               OpReturn
+               OpFunctionEnd
+END
+
+# uniforms for variant
+
+# zero
+BUFFER variant_zero DATA_TYPE float STD140 DATA
+ 0.0
+END
+# _GLF_uniform_float_values
+BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
+ 0.0 1.0
+END
+# _GLF_uniform_int_values
+BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
+ 5 0
+END
+
+BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics variant_pipeline
+  ATTACH variant_vertex_shader
+  ATTACH variant_fragment_shader
+  FRAMEBUFFER_SIZE 16 16
+  BIND BUFFER variant_framebuffer AS color LOCATION 0
+  BIND BUFFER variant_zero AS uniform DESCRIPTOR_SET 0 BINDING 2
+  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
+  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
+END
+CLEAR_COLOR variant_pipeline 0 0 0 255
+
+CLEAR variant_pipeline
+RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 16 16
+
+EXPECT variant_framebuffer IDX 0 0 SIZE 16 16 EQ_RGBA 255 0 0 255
index c4de422..6994326 100644 (file)
 {      "cov-single-store-elim-assume-store.amber",                                                                                                     "cov-single-store-elim-assume-store",                                                                                           "A fragment shader that covers a specific single store elimination path."                       },
 {      "cov-ssa-rewrite-case-with-default.amber",                                                                                                      "cov-ssa-rewrite-case-with-default",                                                                                            "A fragment shader that covers a specific SSA rewrite path."                                            },
 {      "cov-tail-duplicator-for-for-for.amber",                                                                                                        "cov-tail-duplicator-for-for-for",                                                                                                      "A fragment shader that covers a specific tail duplicator code path"                            },
+{      "cov-tail-duplicator-infinite-loops.amber",                                                                                                     "cov-tail-duplicator-infinite-loops",                                                                                           "A fragment shader that covers a specific tail duplicator code path"                            },
 {      "cov-target-lowering-dfdx-cos.amber",                                                                                                           "cov-target-lowering-dfdx-cos",                                                                                                         "A fragment shader that covers a specific target lowering code path."                           },
 {      "cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal.amber",                      "cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal",            "Covers target lowering and compare combining code paths"                                                       },
 {      "cov-types-return-in-main-never-hit.amber",                                                                                                     "cov-types-return-in-main-never-hit",                                                                                           "A fragment shader that covers a specific types optimization path."                                     },
index 8ef1b95..bc40e6b 100644 (file)
@@ -755878,6 +755878,7 @@ dEQP-VK.graphicsfuzz.cov-single-block-elim-self-assign
 dEQP-VK.graphicsfuzz.cov-single-store-elim-assume-store
 dEQP-VK.graphicsfuzz.cov-ssa-rewrite-case-with-default
 dEQP-VK.graphicsfuzz.cov-tail-duplicator-for-for-for
+dEQP-VK.graphicsfuzz.cov-tail-duplicator-infinite-loops
 dEQP-VK.graphicsfuzz.cov-target-lowering-dfdx-cos
 dEQP-VK.graphicsfuzz.cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal
 dEQP-VK.graphicsfuzz.cov-types-return-in-main-never-hit