From 1d63fe79880a9c033b0c6947ccb24f8a0f74f9dc Mon Sep 17 00:00:00 2001 From: Alastair Donaldson Date: Thu, 19 Sep 2019 12:29:42 +0100 Subject: [PATCH] dEQP-VK.graphicsfuzz.discards-in-control-flow Components: Vulkan New Tests: dEQP-VK.graphicsfuzz.discards-in-control-flow Change-Id: I219e0660fc74ba972a5e949cb7cb209cedbfca92 --- android/cts/master/vk-master.txt | 1 + .../graphicsfuzz/discards-in-control-flow.amber | 168 +++++++++++++++++++++ .../data/vulkan/amber/graphicsfuzz/index.txt | 1 + .../mustpass/master/vk-default-no-waivers.txt | 1 + external/vulkancts/mustpass/master/vk-default.txt | 1 + 5 files changed, 172 insertions(+) create mode 100644 external/vulkancts/data/vulkan/amber/graphicsfuzz/discards-in-control-flow.amber diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index 18081b5..23516f6 100644 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -550945,6 +550945,7 @@ dEQP-VK.graphicsfuzz.dead-struct-init dEQP-VK.graphicsfuzz.disc-and-add-in-func-in-loop dEQP-VK.graphicsfuzz.discard-continue-return dEQP-VK.graphicsfuzz.discard-in-array-manipulating-loop +dEQP-VK.graphicsfuzz.discards-in-control-flow dEQP-VK.graphicsfuzz.do-while-loop-in-conditionals dEQP-VK.graphicsfuzz.do-while-with-always-true-if dEQP-VK.graphicsfuzz.early-return-and-barrier diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/discards-in-control-flow.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/discards-in-control-flow.amber new file mode 100644 index 0000000..a82b751 --- /dev/null +++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/discards-in-control-flow.amber @@ -0,0 +1,168 @@ +#!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 discards in loops and conditionals + +# The test passes because the fragment shader writes a red pixel, and then +# terminates without further output manipulation (the discards are not +# dynamically reachable) + +SHADER vertex variant_vertex_shader PASSTHROUGH + +# variant_fragment_shader is derived from the following GLSL: +# #version 310 es +# +# precision highp float; +# +# layout(location = 0) out vec4 _GLF_color; +# +# void main(void) +# { +# _GLF_color = vec4(1.0, 0.0, 0.0, 1.0); +# if(int(gl_FragCoord.x) < 2000) { +# } else { +# for(int ll = 0; ; ll++) { +# if(gl_FragCoord.x < 0.0) { +# discard; +# } +# if(ll >= 5) { +# break; +# } +# } +# if(int(gl_FragCoord.x) >= 2000) { +# discard; +# } +# } +# } +SHADER fragment variant_fragment_shader SPIRV-ASM +; SPIR-V +; Version: 1.0 +; Generator: Khronos Glslang Reference Front End; 7 +; Bound: 57 +; Schema: 0 + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %9 %14 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + OpName %9 "_GLF_color" + OpName %14 "gl_FragCoord" + OpName %29 "ll" + OpDecorate %9 Location 0 + OpDecorate %14 BuiltIn FragCoord + OpDecorate %29 RelaxedPrecision + OpDecorate %41 RelaxedPrecision + OpDecorate %47 RelaxedPrecision + OpDecorate %49 RelaxedPrecision + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeFloat 32 + %7 = OpTypeVector %6 4 + %8 = OpTypePointer Output %7 + %9 = OpVariable %8 Output + %10 = OpConstant %6 1 + %11 = OpConstant %6 0 + %12 = OpConstantComposite %7 %10 %11 %11 %10 + %13 = OpTypePointer Input %7 + %14 = OpVariable %13 Input + %15 = OpTypeInt 32 0 + %16 = OpConstant %15 0 + %17 = OpTypePointer Input %6 + %20 = OpTypeInt 32 1 + %22 = OpConstant %20 2000 + %23 = OpTypeBool + %28 = OpTypePointer Function %20 + %30 = OpConstant %20 0 + %42 = OpConstant %20 5 + %48 = OpConstant %20 1 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %29 = OpVariable %28 Function + OpStore %9 %12 + %18 = OpAccessChain %17 %14 %16 + %19 = OpLoad %6 %18 + %21 = OpConvertFToS %20 %19 + %24 = OpSLessThan %23 %21 %22 + OpSelectionMerge %26 None + OpBranchConditional %24 %25 %27 + %25 = OpLabel + OpBranch %26 + %27 = OpLabel + OpStore %29 %30 + OpBranch %31 + %31 = OpLabel + OpLoopMerge %33 %34 None + OpBranch %32 + %32 = OpLabel + %35 = OpAccessChain %17 %14 %16 + %36 = OpLoad %6 %35 + %37 = OpFOrdLessThan %23 %36 %11 + OpSelectionMerge %39 None + OpBranchConditional %37 %38 %39 + %38 = OpLabel + OpKill + %39 = OpLabel + %41 = OpLoad %20 %29 + %43 = OpSGreaterThanEqual %23 %41 %42 + OpSelectionMerge %45 None + OpBranchConditional %43 %44 %45 + %44 = OpLabel + OpBranch %33 + %45 = OpLabel + OpBranch %34 + %34 = OpLabel + %47 = OpLoad %20 %29 + %49 = OpIAdd %20 %47 %48 + OpStore %29 %49 + OpBranch %31 + %33 = OpLabel + %50 = OpAccessChain %17 %14 %16 + %51 = OpLoad %6 %50 + %52 = OpConvertFToS %20 %51 + %53 = OpSGreaterThanEqual %23 %52 %22 + OpSelectionMerge %55 None + OpBranchConditional %53 %54 %55 + %54 = OpLabel + OpKill + %55 = OpLabel + OpBranch %26 + %26 = OpLabel + OpReturn + OpFunctionEnd +END + +# uniforms for variant + + +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 +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/data/vulkan/amber/graphicsfuzz/index.txt b/external/vulkancts/data/vulkan/amber/graphicsfuzz/index.txt index 930ca17..0fc488c 100644 --- a/external/vulkancts/data/vulkan/amber/graphicsfuzz/index.txt +++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/index.txt @@ -14,6 +14,7 @@ { "disc-and-add-in-func-in-loop.amber", "disc-and-add-in-func-in-loop", "A fragment shader with discard and add in function in loop" }, { "discard-continue-return.amber", "discard-continue-return", "A fragment shader with a discard, continue, and return" }, { "discard-in-array-manipulating-loop.amber", "discard-in-array-manipulating-loop", "An array-manipulating fragment shader with a discard" }, +{ "discards-in-control-flow.amber", "discards-in-control-flow", "A fragment shader with discards in loops and conditionals" }, { "do-while-loop-in-conditionals.amber", "do-while-loop-in-conditionals", "A fragment shader with do-while loop in conditional nest" }, { "do-while-with-always-true-if.amber", "do-while-with-always-true-if", "A fragment shader with a do while that always returns" }, { "early-return-and-barrier.amber", "early-return-and-barrier", "A compute shader with an early return and a barrier" }, diff --git a/external/vulkancts/mustpass/master/vk-default-no-waivers.txt b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt index a8b9a69..39aaa10 100644 --- a/external/vulkancts/mustpass/master/vk-default-no-waivers.txt +++ b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt @@ -553288,6 +553288,7 @@ dEQP-VK.graphicsfuzz.dead-struct-init dEQP-VK.graphicsfuzz.disc-and-add-in-func-in-loop dEQP-VK.graphicsfuzz.discard-continue-return dEQP-VK.graphicsfuzz.discard-in-array-manipulating-loop +dEQP-VK.graphicsfuzz.discards-in-control-flow dEQP-VK.graphicsfuzz.do-while-loop-in-conditionals dEQP-VK.graphicsfuzz.do-while-with-always-true-if dEQP-VK.graphicsfuzz.early-return-and-barrier diff --git a/external/vulkancts/mustpass/master/vk-default.txt b/external/vulkancts/mustpass/master/vk-default.txt index 6368256..893755d 100644 --- a/external/vulkancts/mustpass/master/vk-default.txt +++ b/external/vulkancts/mustpass/master/vk-default.txt @@ -553135,6 +553135,7 @@ dEQP-VK.graphicsfuzz.dead-struct-init dEQP-VK.graphicsfuzz.disc-and-add-in-func-in-loop dEQP-VK.graphicsfuzz.discard-continue-return dEQP-VK.graphicsfuzz.discard-in-array-manipulating-loop +dEQP-VK.graphicsfuzz.discards-in-control-flow dEQP-VK.graphicsfuzz.do-while-loop-in-conditionals dEQP-VK.graphicsfuzz.do-while-with-always-true-if dEQP-VK.graphicsfuzz.early-return-and-barrier -- 2.7.4