From: Paul Thomson Date: Tue, 8 Oct 2019 15:27:14 +0000 (+0100) Subject: dEQP-VK.graphicsfuzz.loops-ifs-continues-call X-Git-Tag: upstream/1.3.5~1724 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=35e1ad0b5bce34638db361c8b5e00aa010ca2097;p=platform%2Fupstream%2FVK-GL-CTS.git dEQP-VK.graphicsfuzz.loops-ifs-continues-call Components: Vulkan New Tests: dEQP-VK.graphicsfuzz.loops-ifs-continues-call Change-Id: I2210e55707fc698b5913166f05e833f8cc329dc5 --- diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index 0755e99..d2c1b33 100644 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -520901,6 +520901,7 @@ dEQP-VK.graphicsfuzz.loop-call-discard dEQP-VK.graphicsfuzz.loop-dead-if-loop dEQP-VK.graphicsfuzz.loop-nested-ifs dEQP-VK.graphicsfuzz.loops-breaks-returns +dEQP-VK.graphicsfuzz.loops-ifs-continues-call dEQP-VK.graphicsfuzz.mat-array-deep-control-flow dEQP-VK.graphicsfuzz.mat-array-distance dEQP-VK.graphicsfuzz.matrices-and-return-in-loop diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/loops-ifs-continues-call.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/loops-ifs-continues-call.amber new file mode 100644 index 0000000..bc4a692 --- /dev/null +++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/loops-ifs-continues-call.amber @@ -0,0 +1,294 @@ +#!amber + +# Copyright 2019 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 bug found by GraphicsFuzz. + +# Short description: A fragment shader with nested control flow and a call + +# The test passes because all loops terminate or are not entered and the shader ends by writing red. + +SHADER vertex variant_vertex_shader PASSTHROUGH + +# variant_fragment_shader is derived from the following GLSL: +# #version 310 es +# precision highp float; +# +# layout(set = 0, binding = 0) uniform buf0 +# { +# vec2 injectionSwitch; +# }; +# layout(location = 0) out vec4 _GLF_color; +# +# struct BinarySearchObject +# { +# int prime_numbers[10]; +# }; +# +# int binarySearch(BinarySearchObject obj) +# { +# while (injectionSwitch.x > 1.0) // always false +# { +# int m = int(injectionSwitch.x); +# if (obj.prime_numbers[m] == 1) +# { +# return 1; +# } +# } +# return 1; +# } +# +# void main() +# { +# BinarySearchObject obj; +# for ( +# int i = 0; +# i < 10; +# i++) +# { +# if (i != 3) +# { +# if ((i - int(injectionSwitch.x)) == 4) +# { +# obj.prime_numbers[i] = 11; +# } +# else +# { +# if (i == 6) +# { +# obj.prime_numbers[i] = 17; +# } +# continue; +# } +# } +# do +# { +# } while (0.0 > injectionSwitch.y); // always false +# } +# binarySearch(obj); +# _GLF_color = vec4(1.0, 0.0, 0.0, 1.0); +# } +SHADER fragment variant_fragment_shader SPIRV-ASM +; SPIR-V +; Version: 1.0 +; Generator: Khronos Glslang Reference Front End; 7 +; Bound: 104 +; Schema: 0 + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %102 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + OpName %10 "BinarySearchObject" + OpMemberName %10 0 "prime_numbers" + OpName %14 "binarySearch(struct-BinarySearchObject-i1[10]1;" + OpName %13 "obj" + OpName %23 "buf0" + OpMemberName %23 0 "injectionSwitch" + OpName %25 "" + OpName %35 "m" + OpName %49 "i" + OpName %72 "obj" + OpName %97 "param" + OpName %102 "_GLF_color" + OpMemberDecorate %10 0 RelaxedPrecision + OpDecorate %14 RelaxedPrecision + OpMemberDecorate %23 0 Offset 0 + OpDecorate %23 Block + OpDecorate %25 DescriptorSet 0 + OpDecorate %25 Binding 0 + OpDecorate %35 RelaxedPrecision + OpDecorate %38 RelaxedPrecision + OpDecorate %39 RelaxedPrecision + OpDecorate %41 RelaxedPrecision + OpDecorate %49 RelaxedPrecision + OpDecorate %55 RelaxedPrecision + OpDecorate %58 RelaxedPrecision + OpDecorate %63 RelaxedPrecision + OpDecorate %66 RelaxedPrecision + OpDecorate %67 RelaxedPrecision + OpDecorate %73 RelaxedPrecision + OpDecorate %77 RelaxedPrecision + OpDecorate %82 RelaxedPrecision + OpDecorate %95 RelaxedPrecision + OpDecorate %96 RelaxedPrecision + OpDecorate %99 RelaxedPrecision + OpDecorate %102 Location 0 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypeInt 32 0 + %8 = OpConstant %7 10 + %9 = OpTypeArray %6 %8 + %10 = OpTypeStruct %9 + %11 = OpTypePointer Function %10 + %12 = OpTypeFunction %6 %11 + %21 = OpTypeFloat 32 + %22 = OpTypeVector %21 2 + %23 = OpTypeStruct %22 + %24 = OpTypePointer Uniform %23 + %25 = OpVariable %24 Uniform + %26 = OpConstant %6 0 + %27 = OpConstant %7 0 + %28 = OpTypePointer Uniform %21 + %31 = OpConstant %21 1 + %32 = OpTypeBool + %34 = OpTypePointer Function %6 + %42 = OpConstant %6 1 + %56 = OpConstant %6 10 + %59 = OpConstant %6 3 + %68 = OpConstant %6 4 + %74 = OpConstant %6 11 + %78 = OpConstant %6 6 + %83 = OpConstant %6 17 + %90 = OpConstant %21 0 + %91 = OpConstant %7 1 + %100 = OpTypeVector %21 4 + %101 = OpTypePointer Output %100 + %102 = OpVariable %101 Output + %103 = OpConstantComposite %100 %31 %90 %90 %31 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %49 = OpVariable %34 Function + %72 = OpVariable %11 Function + %97 = OpVariable %11 Function + OpStore %49 %26 + OpBranch %50 + %50 = OpLabel + OpLoopMerge %52 %53 None + OpBranch %54 + %54 = OpLabel + %55 = OpLoad %6 %49 + %57 = OpSLessThan %32 %55 %56 + OpBranchConditional %57 %51 %52 + %51 = OpLabel + %58 = OpLoad %6 %49 + %60 = OpINotEqual %32 %58 %59 + OpSelectionMerge %62 None + OpBranchConditional %60 %61 %62 + %61 = OpLabel + %63 = OpLoad %6 %49 + %64 = OpAccessChain %28 %25 %26 %27 + %65 = OpLoad %21 %64 + %66 = OpConvertFToS %6 %65 + %67 = OpISub %6 %63 %66 + %69 = OpIEqual %32 %67 %68 + OpSelectionMerge %71 None + OpBranchConditional %69 %70 %76 + %70 = OpLabel + %73 = OpLoad %6 %49 + %75 = OpAccessChain %34 %72 %26 %73 + OpStore %75 %74 + OpBranch %71 + %76 = OpLabel + %77 = OpLoad %6 %49 + %79 = OpIEqual %32 %77 %78 + OpSelectionMerge %81 None + OpBranchConditional %79 %80 %81 + %80 = OpLabel + %82 = OpLoad %6 %49 + %84 = OpAccessChain %34 %72 %26 %82 + OpStore %84 %83 + OpBranch %81 + %81 = OpLabel + OpBranch %53 + %71 = OpLabel + OpBranch %62 + %62 = OpLabel + OpBranch %86 + %86 = OpLabel + OpLoopMerge %88 %89 None + OpBranch %87 + %87 = OpLabel + OpBranch %89 + %89 = OpLabel + %92 = OpAccessChain %28 %25 %26 %91 + %93 = OpLoad %21 %92 + %94 = OpFOrdGreaterThan %32 %90 %93 + OpBranchConditional %94 %86 %88 + %88 = OpLabel + OpBranch %53 + %53 = OpLabel + %95 = OpLoad %6 %49 + %96 = OpIAdd %6 %95 %42 + OpStore %49 %96 + OpBranch %50 + %52 = OpLabel + %98 = OpLoad %10 %72 + OpStore %97 %98 + %99 = OpFunctionCall %6 %14 %97 + OpStore %102 %103 + OpReturn + OpFunctionEnd + %14 = OpFunction %6 None %12 + %13 = OpFunctionParameter %11 + %15 = OpLabel + %35 = OpVariable %34 Function + OpBranch %16 + %16 = OpLabel + OpLoopMerge %18 %19 None + OpBranch %20 + %20 = OpLabel + %29 = OpAccessChain %28 %25 %26 %27 + %30 = OpLoad %21 %29 + %33 = OpFOrdGreaterThan %32 %30 %31 + OpBranchConditional %33 %17 %18 + %17 = OpLabel + %36 = OpAccessChain %28 %25 %26 %27 + %37 = OpLoad %21 %36 + %38 = OpConvertFToS %6 %37 + OpStore %35 %38 + %39 = OpLoad %6 %35 + %40 = OpAccessChain %34 %13 %26 %39 + %41 = OpLoad %6 %40 + %43 = OpIEqual %32 %41 %42 + OpSelectionMerge %45 None + OpBranchConditional %43 %44 %45 + %44 = OpLabel + OpReturnValue %42 + %45 = OpLabel + OpBranch %19 + %19 = OpLabel + OpBranch %16 + %18 = OpLabel + OpReturnValue %42 + OpFunctionEnd +END + +# uniforms for variant + +# injectionSwitch +BUFFER variant_injectionSwitch DATA_TYPE vec2 DATA + 0.0 1.0 +END + +BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM + +PIPELINE graphics variant_pipeline + ATTACH variant_vertex_shader + ATTACH variant_fragment_shader + FRAMEBUFFER_SIZE 256 256 + BIND BUFFER variant_framebuffer AS color LOCATION 0 + BIND BUFFER variant_injectionSwitch 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 256 256 + +EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255 diff --git a/external/vulkancts/modules/vulkan/amber/vktAmberGraphicsFuzzTests.cpp b/external/vulkancts/modules/vulkan/amber/vktAmberGraphicsFuzzTests.cpp index f06a3a1..ded4886 100644 --- a/external/vulkancts/modules/vulkan/amber/vktAmberGraphicsFuzzTests.cpp +++ b/external/vulkancts/modules/vulkan/amber/vktAmberGraphicsFuzzTests.cpp @@ -73,6 +73,7 @@ void createAmberTests (tcu::TestCaseGroup* group) { "loop-dead-if-loop.amber", "loop-dead-if-loop", "A fragment shader with a loop, dead if, and a loop" }, { "loop-nested-ifs.amber", "loop-nested-ifs", "A fragment shader with a for loop containing nested ifs" }, { "loops-breaks-returns.amber", "loops-breaks-returns", "A compute shader with loops, breaks, returns" }, + { "loops-ifs-continues-call.amber", "loops-ifs-continues-call", "A fragment shader with nested control flow and a call" }, { "mat-array-deep-control-flow.amber", "mat-array-deep-control-flow", "A fragment shader that uses an array of matrices and has deep control flow" }, { "mat-array-distance.amber", "mat-array-distance", "A fragment shader that uses an array of matrices and distance" }, { "matrices-and-return-in-loop.amber", "matrices-and-return-in-loop", "A fragment shader with matrices and a return in a loop" }, diff --git a/external/vulkancts/mustpass/master/vk-default-no-waivers.txt b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt index 4a46c91..8c3acbf 100644 --- a/external/vulkancts/mustpass/master/vk-default-no-waivers.txt +++ b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt @@ -523244,6 +523244,7 @@ dEQP-VK.graphicsfuzz.loop-call-discard dEQP-VK.graphicsfuzz.loop-dead-if-loop dEQP-VK.graphicsfuzz.loop-nested-ifs dEQP-VK.graphicsfuzz.loops-breaks-returns +dEQP-VK.graphicsfuzz.loops-ifs-continues-call dEQP-VK.graphicsfuzz.mat-array-deep-control-flow dEQP-VK.graphicsfuzz.mat-array-distance dEQP-VK.graphicsfuzz.matrices-and-return-in-loop diff --git a/external/vulkancts/mustpass/master/vk-default.txt b/external/vulkancts/mustpass/master/vk-default.txt index 9eecb2c..37df6b7 100644 --- a/external/vulkancts/mustpass/master/vk-default.txt +++ b/external/vulkancts/mustpass/master/vk-default.txt @@ -523091,6 +523091,7 @@ dEQP-VK.graphicsfuzz.loop-call-discard dEQP-VK.graphicsfuzz.loop-dead-if-loop dEQP-VK.graphicsfuzz.loop-nested-ifs dEQP-VK.graphicsfuzz.loops-breaks-returns +dEQP-VK.graphicsfuzz.loops-ifs-continues-call dEQP-VK.graphicsfuzz.mat-array-deep-control-flow dEQP-VK.graphicsfuzz.mat-array-distance dEQP-VK.graphicsfuzz.matrices-and-return-in-loop