From 351109ff00ed8ae86790ed1bac9136b51c477d8c Mon Sep 17 00:00:00 2001 From: Paul Thomson Date: Thu, 16 Jan 2020 14:37:49 +0000 Subject: [PATCH] dEQP-VK.graphicsfuzz.nested-switch-break-discard Components: Vulkan New Tests: dEQP-VK.graphicsfuzz.nested-switch-break-discard Change-Id: I0abb55f319fbd190a4c2fe8ec26f90b52e00222c --- android/cts/master/vk-master.txt | 1 + .../data/vulkan/amber/graphicsfuzz/index.txt | 1 + .../graphicsfuzz/nested-switch-break-discard.amber | 159 +++++++++++++++++++++ .../mustpass/master/vk-default-no-waivers.txt | 1 + external/vulkancts/mustpass/master/vk-default.txt | 1 + 5 files changed, 163 insertions(+) create mode 100644 external/vulkancts/data/vulkan/amber/graphicsfuzz/nested-switch-break-discard.amber diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index b6f8b80..5050042 100644 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -579394,6 +579394,7 @@ dEQP-VK.graphicsfuzz.nested-for-break-mat-color dEQP-VK.graphicsfuzz.nested-for-loops-with-return dEQP-VK.graphicsfuzz.nested-ifs-and-return-in-for-loop dEQP-VK.graphicsfuzz.nested-loops-switch +dEQP-VK.graphicsfuzz.nested-switch-break-discard dEQP-VK.graphicsfuzz.pow-vec4 dEQP-VK.graphicsfuzz.return-before-writing-wrong-color dEQP-VK.graphicsfuzz.return-float-from-while-loop diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/index.txt b/external/vulkancts/data/vulkan/amber/graphicsfuzz/index.txt index 43d4eac..cdb1229 100644 --- a/external/vulkancts/data/vulkan/amber/graphicsfuzz/index.txt +++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/index.txt @@ -74,6 +74,7 @@ { "nested-for-loops-with-return.amber", "nested-for-loops-with-return", "A fragment shader with two nested for loops with return" }, { "nested-ifs-and-return-in-for-loop.amber", "nested-ifs-and-return-in-for-loop", "A fragment shader with return in nest of ifs, inside loop" }, { "nested-loops-switch.amber", "nested-loops-switch", "A fragment shader with nested loops and a switch" }, +{ "nested-switch-break-discard.amber", "nested-switch-break-discard", "Nested switches with break and discard" }, { "pow-vec4.amber", "pow-vec4", "A fragment shader that uses pow" }, { "return-before-writing-wrong-color.amber", "return-before-writing-wrong-color", "A fragment shader with return before writing wrong color" }, { "return-float-from-while-loop.amber", "return-float-from-while-loop", "A fragment shader with unreachable while loop" }, diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/nested-switch-break-discard.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/nested-switch-break-discard.amber new file mode 100644 index 0000000..3265dfb --- /dev/null +++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/nested-switch-break-discard.amber @@ -0,0 +1,159 @@ +#!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 bug found by GraphicsFuzz. + +# Short description: Nested switches with break and discard + +# 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 +# precision highp float; +# +# layout(set = 0, binding = 0) uniform buf0 +# { +# vec2 injectionSwitch; +# }; +# +# layout(location = 0) out vec4 _GLF_color; +# +# void main() +# { +# _GLF_color = vec4(0.0, 0.0, 0.0, 1.0); +# +# switch (int(injectionSwitch.x)) // 0 +# { +# case 0: +# switch (1) +# { +# case 1: +# if (gl_FragCoord.y >= 0.0) // Always true. +# { +# _GLF_color = vec4(1.0, 0.0, 0.0, 1.0); // Red. +# break; +# } +# discard; +# } +# case 42: +# break; +# } +# } +SHADER fragment variant_fragment_shader SPIRV-ASM +; SPIR-V +; Version: 1.0 +; Generator: Khronos Glslang Reference Front End; 8 +; Bound: 47 +; Schema: 0 + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %9 %32 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + OpName %9 "_GLF_color" + OpName %14 "buf0" + OpMemberName %14 0 "injectionSwitch" + OpName %16 "" + OpName %32 "gl_FragCoord" + OpDecorate %9 Location 0 + OpMemberDecorate %14 0 Offset 0 + OpDecorate %14 Block + OpDecorate %16 DescriptorSet 0 + OpDecorate %16 Binding 0 + OpDecorate %32 BuiltIn FragCoord + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeFloat 32 + %7 = OpTypeVector %6 4 + %8 = OpTypePointer Output %7 + %9 = OpVariable %8 Output + %10 = OpConstant %6 0 + %11 = OpConstant %6 1 + %12 = OpConstantComposite %7 %10 %10 %10 %11 + %13 = OpTypeVector %6 2 + %14 = OpTypeStruct %13 + %15 = OpTypePointer Uniform %14 + %16 = OpVariable %15 Uniform + %17 = OpTypeInt 32 1 + %18 = OpConstant %17 0 + %19 = OpTypeInt 32 0 + %20 = OpConstant %19 0 + %21 = OpTypePointer Uniform %6 + %28 = OpConstant %17 1 + %31 = OpTypePointer Input %7 + %32 = OpVariable %31 Input + %33 = OpConstant %19 1 + %34 = OpTypePointer Input %6 + %37 = OpTypeBool + %41 = OpConstantComposite %7 %11 %10 %10 %11 + %4 = OpFunction %2 None %3 + %5 = OpLabel + OpStore %9 %12 + %22 = OpAccessChain %21 %16 %18 %20 + %23 = OpLoad %6 %22 + %24 = OpConvertFToS %17 %23 + OpSelectionMerge %27 None + OpSwitch %24 %27 0 %25 42 %26 + %25 = OpLabel + OpSelectionMerge %30 None + OpSwitch %28 %30 1 %29 + %29 = OpLabel + %35 = OpAccessChain %34 %32 %33 + %36 = OpLoad %6 %35 + %38 = OpFOrdGreaterThanEqual %37 %36 %10 + OpSelectionMerge %40 None + OpBranchConditional %38 %39 %40 + %39 = OpLabel + OpStore %9 %41 + OpBranch %30 + %40 = OpLabel + OpKill + %30 = OpLabel + OpBranch %26 + %26 = OpLabel + OpBranch %27 + %27 = OpLabel + OpReturn + 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/mustpass/master/vk-default-no-waivers.txt b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt index 860e900..65daa70 100644 --- a/external/vulkancts/mustpass/master/vk-default-no-waivers.txt +++ b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt @@ -581650,6 +581650,7 @@ dEQP-VK.graphicsfuzz.nested-for-break-mat-color dEQP-VK.graphicsfuzz.nested-for-loops-with-return dEQP-VK.graphicsfuzz.nested-ifs-and-return-in-for-loop dEQP-VK.graphicsfuzz.nested-loops-switch +dEQP-VK.graphicsfuzz.nested-switch-break-discard dEQP-VK.graphicsfuzz.pow-vec4 dEQP-VK.graphicsfuzz.return-before-writing-wrong-color dEQP-VK.graphicsfuzz.return-float-from-while-loop diff --git a/external/vulkancts/mustpass/master/vk-default.txt b/external/vulkancts/mustpass/master/vk-default.txt index f917c52..acbc685 100644 --- a/external/vulkancts/mustpass/master/vk-default.txt +++ b/external/vulkancts/mustpass/master/vk-default.txt @@ -581497,6 +581497,7 @@ dEQP-VK.graphicsfuzz.nested-for-break-mat-color dEQP-VK.graphicsfuzz.nested-for-loops-with-return dEQP-VK.graphicsfuzz.nested-ifs-and-return-in-for-loop dEQP-VK.graphicsfuzz.nested-loops-switch +dEQP-VK.graphicsfuzz.nested-switch-break-discard dEQP-VK.graphicsfuzz.pow-vec4 dEQP-VK.graphicsfuzz.return-before-writing-wrong-color dEQP-VK.graphicsfuzz.return-float-from-while-loop -- 2.7.4