From 2b5f75c980d63c01261ce1433079d2efc82f3f9f Mon Sep 17 00:00:00 2001 From: Paul Thomson Date: Mon, 9 Sep 2019 11:36:58 +0100 Subject: [PATCH] dEQP-VK.graphicsfuzz.max-mix-conditional-discard Components: Vulkan New Tests: dEQP-VK.graphicsfuzz.max-mix-conditional-discard Change-Id: Ie9ada9c6e7a71a4ad09ad6f09f0ee8264e02d9c1 --- android/cts/master/vk-master.txt | 1 + .../graphicsfuzz/max-mix-conditional-discard.amber | 173 +++++++++++++++++++++ .../vulkan/amber/vktAmberGraphicsFuzzTests.cpp | 1 + .../mustpass/master/vk-default-no-waivers.txt | 1 + external/vulkancts/mustpass/master/vk-default.txt | 1 + 5 files changed, 177 insertions(+) create mode 100644 external/vulkancts/data/vulkan/amber/graphicsfuzz/max-mix-conditional-discard.amber diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index ee93d96..1ad0b2b 100644 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -483027,6 +483027,7 @@ dEQP-VK.graphicsfuzz.if-and-switch dEQP-VK.graphicsfuzz.mat-array-deep-control-flow dEQP-VK.graphicsfuzz.mat-array-distance dEQP-VK.graphicsfuzz.matrices-and-return-in-loop +dEQP-VK.graphicsfuzz.max-mix-conditional-discard dEQP-VK.graphicsfuzz.nested-ifs-and-return-in-for-loop dEQP-VK.graphicsfuzz.pow-vec4 dEQP-VK.graphicsfuzz.return-in-loop-in-function diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/max-mix-conditional-discard.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/max-mix-conditional-discard.amber new file mode 100644 index 0000000..ec7446c --- /dev/null +++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/max-mix-conditional-discard.amber @@ -0,0 +1,173 @@ +#!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 an expression used in two discard guards + +# The test passes because most of the code never executes; the shader just writes the color red. + +SHADER vertex variant_vertex_shader PASSTHROUGH + +# variant_fragment_shader is derived from the following GLSL: +# #version 310 es +# precision highp float; +# precision highp int; +# +# layout(set = 0, binding = 0) uniform buf0 +# { +# vec2 injectionSwitch; +# }; +# layout(location = 0) out vec4 _GLF_color; +# +# mediump vec4 gv; +# +# void main() +# { +# if (injectionSwitch.x > 2.0) // always false +# { +# int temp = int(max(mix(vec4(1.0), vec4(1.0), gv), 8.6)[1]); +# +# if (temp < 150) +# { +# discard; +# } +# +# if (temp < 180) +# { +# discard; +# } +# } +# _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: 54 +; Schema: 0 + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %51 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + OpName %8 "buf0" + OpMemberName %8 0 "injectionSwitch" + OpName %10 "" + OpName %24 "temp" + OpName %29 "gv" + OpName %51 "_GLF_color" + OpMemberDecorate %8 0 Offset 0 + OpDecorate %8 Block + OpDecorate %10 DescriptorSet 0 + OpDecorate %10 Binding 0 + OpDecorate %29 RelaxedPrecision + OpDecorate %30 RelaxedPrecision + OpDecorate %31 RelaxedPrecision + OpDecorate %33 RelaxedPrecision + OpDecorate %34 RelaxedPrecision + OpDecorate %36 RelaxedPrecision + OpDecorate %51 Location 0 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeFloat 32 + %7 = OpTypeVector %6 2 + %8 = OpTypeStruct %7 + %9 = OpTypePointer Uniform %8 + %10 = OpVariable %9 Uniform + %11 = OpTypeInt 32 1 + %12 = OpConstant %11 0 + %13 = OpTypeInt 32 0 + %14 = OpConstant %13 0 + %15 = OpTypePointer Uniform %6 + %18 = OpConstant %6 2 + %19 = OpTypeBool + %23 = OpTypePointer Function %11 + %25 = OpTypeVector %6 4 + %26 = OpConstant %6 1 + %27 = OpConstantComposite %25 %26 %26 %26 %26 + %28 = OpTypePointer Private %25 + %29 = OpVariable %28 Private + %32 = OpConstant %6 8.60000038 + %35 = OpConstant %13 1 + %39 = OpConstant %11 150 + %45 = OpConstant %11 180 + %50 = OpTypePointer Output %25 + %51 = OpVariable %50 Output + %52 = OpConstant %6 0 + %53 = OpConstantComposite %25 %26 %52 %52 %26 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %24 = OpVariable %23 Function + %16 = OpAccessChain %15 %10 %12 %14 + %17 = OpLoad %6 %16 + %20 = OpFOrdGreaterThan %19 %17 %18 + OpSelectionMerge %22 None + OpBranchConditional %20 %21 %22 + %21 = OpLabel + %30 = OpLoad %25 %29 + %31 = OpExtInst %25 %1 FMix %27 %27 %30 + %33 = OpCompositeConstruct %25 %32 %32 %32 %32 + %34 = OpExtInst %25 %1 FMax %31 %33 + %36 = OpCompositeExtract %6 %34 1 + %37 = OpConvertFToS %11 %36 + OpStore %24 %37 + %38 = OpLoad %11 %24 + %40 = OpSLessThan %19 %38 %39 + OpSelectionMerge %42 None + OpBranchConditional %40 %41 %42 + %41 = OpLabel + OpKill + %42 = OpLabel + %44 = OpLoad %11 %24 + %46 = OpSLessThan %19 %44 %45 + OpSelectionMerge %48 None + OpBranchConditional %46 %47 %48 + %47 = OpLabel + OpKill + %48 = OpLabel + OpBranch %22 + %22 = OpLabel + OpStore %51 %53 + 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/modules/vulkan/amber/vktAmberGraphicsFuzzTests.cpp b/external/vulkancts/modules/vulkan/amber/vktAmberGraphicsFuzzTests.cpp index 9e776e2..93d7aad 100644 --- a/external/vulkancts/modules/vulkan/amber/vktAmberGraphicsFuzzTests.cpp +++ b/external/vulkancts/modules/vulkan/amber/vktAmberGraphicsFuzzTests.cpp @@ -62,6 +62,7 @@ void createAmberTests (tcu::TestCaseGroup* group) { "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" }, + { "max-mix-conditional-discard.amber", "max-mix-conditional-discard", "A fragment shader with an expression used in two discard guards" }, { "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" }, { "pow-vec4.amber", "pow-vec4", "A fragment shader that uses pow" }, { "return-in-loop-in-function.amber", "return-in-loop-in-function", "A fragment shader with early return from loop in function" }, diff --git a/external/vulkancts/mustpass/master/vk-default-no-waivers.txt b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt index fa8ef12..a3d113b 100644 --- a/external/vulkancts/mustpass/master/vk-default-no-waivers.txt +++ b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt @@ -485173,6 +485173,7 @@ dEQP-VK.graphicsfuzz.if-and-switch dEQP-VK.graphicsfuzz.mat-array-deep-control-flow dEQP-VK.graphicsfuzz.mat-array-distance dEQP-VK.graphicsfuzz.matrices-and-return-in-loop +dEQP-VK.graphicsfuzz.max-mix-conditional-discard dEQP-VK.graphicsfuzz.nested-ifs-and-return-in-for-loop dEQP-VK.graphicsfuzz.pow-vec4 dEQP-VK.graphicsfuzz.return-in-loop-in-function diff --git a/external/vulkancts/mustpass/master/vk-default.txt b/external/vulkancts/mustpass/master/vk-default.txt index 4c12ddb..ddc05ef 100644 --- a/external/vulkancts/mustpass/master/vk-default.txt +++ b/external/vulkancts/mustpass/master/vk-default.txt @@ -485020,6 +485020,7 @@ dEQP-VK.graphicsfuzz.if-and-switch dEQP-VK.graphicsfuzz.mat-array-deep-control-flow dEQP-VK.graphicsfuzz.mat-array-distance dEQP-VK.graphicsfuzz.matrices-and-return-in-loop +dEQP-VK.graphicsfuzz.max-mix-conditional-discard dEQP-VK.graphicsfuzz.nested-ifs-and-return-in-for-loop dEQP-VK.graphicsfuzz.pow-vec4 dEQP-VK.graphicsfuzz.return-in-loop-in-function -- 2.7.4