From: Paul Thomson Date: Mon, 2 Sep 2019 20:26:59 +0000 (+0100) Subject: dEQP-VK.graphicsfuzz.loop-nested-ifs X-Git-Tag: upstream/1.3.5~1850 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dc5391d6cbd551c9eb5bc73cb9ab318d13ec9310;p=platform%2Fupstream%2FVK-GL-CTS.git dEQP-VK.graphicsfuzz.loop-nested-ifs Components: Vulkan New Tests: dEQP-VK.graphicsfuzz.loop-nested-ifs Change-Id: I5b06c42ebc27fc513be9538dfde0b2baacc96b0e --- diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index 1ad0b2b..965963e 100644 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -483024,6 +483024,7 @@ dEQP-VK.graphicsfuzz.for-with-ifs-and-return dEQP-VK.graphicsfuzz.fragcoord-control-flow dEQP-VK.graphicsfuzz.fragcoord-control-flow-2 dEQP-VK.graphicsfuzz.if-and-switch +dEQP-VK.graphicsfuzz.loop-nested-ifs 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/loop-nested-ifs.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/loop-nested-ifs.amber new file mode 100644 index 0000000..7515607 --- /dev/null +++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/loop-nested-ifs.amber @@ -0,0 +1,186 @@ +#!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 a for loop containing nested ifs + +# The test passes because the two-iteration loop only writes red to the output color variable. + +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() +# { +# for ( +# int j = 0; +# j < 2; +# j++) +# { +# if (j < 1) +# { +# _GLF_color = vec4(1.0, 0.0, 0.0, 1.0); // red +# } +# if (j != 3) +# { +# if (j != 4) +# { +# if (j == 5) // always false +# { +# _GLF_color[0] = float(ldexp(1.0, 2)); +# } +# else +# { +# float a; +# a = float(ldexp(1.0, 2)); +# _GLF_color = vec4(1.0, 0.0, 0.0, 1.0); // red +# } +# } +# } +# } +# } +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" %27 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + OpName %8 "j" + OpName %27 "_GLF_color" + OpName %53 "a" + OpDecorate %8 RelaxedPrecision + OpDecorate %15 RelaxedPrecision + OpDecorate %19 RelaxedPrecision + OpDecorate %27 Location 0 + OpDecorate %31 RelaxedPrecision + OpDecorate %36 RelaxedPrecision + OpDecorate %41 RelaxedPrecision + OpDecorate %55 RelaxedPrecision + OpDecorate %56 RelaxedPrecision + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypePointer Function %6 + %9 = OpConstant %6 0 + %16 = OpConstant %6 2 + %17 = OpTypeBool + %20 = OpConstant %6 1 + %24 = OpTypeFloat 32 + %25 = OpTypeVector %24 4 + %26 = OpTypePointer Output %25 + %27 = OpVariable %26 Output + %28 = OpConstant %24 1 + %29 = OpConstant %24 0 + %30 = OpConstantComposite %25 %28 %29 %29 %28 + %32 = OpConstant %6 3 + %37 = OpConstant %6 4 + %42 = OpConstant %6 5 + %47 = OpTypeInt 32 0 + %48 = OpConstant %47 0 + %49 = OpTypePointer Output %24 + %52 = OpTypePointer Function %24 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %8 = OpVariable %7 Function + %53 = OpVariable %52 Function + OpStore %8 %9 + OpBranch %10 + %10 = OpLabel + OpLoopMerge %12 %13 None + OpBranch %14 + %14 = OpLabel + %15 = OpLoad %6 %8 + %18 = OpSLessThan %17 %15 %16 + OpBranchConditional %18 %11 %12 + %11 = OpLabel + %19 = OpLoad %6 %8 + %21 = OpSLessThan %17 %19 %20 + OpSelectionMerge %23 None + OpBranchConditional %21 %22 %23 + %22 = OpLabel + OpStore %27 %30 + OpBranch %23 + %23 = OpLabel + %31 = OpLoad %6 %8 + %33 = OpINotEqual %17 %31 %32 + OpSelectionMerge %35 None + OpBranchConditional %33 %34 %35 + %34 = OpLabel + %36 = OpLoad %6 %8 + %38 = OpINotEqual %17 %36 %37 + OpSelectionMerge %40 None + OpBranchConditional %38 %39 %40 + %39 = OpLabel + %41 = OpLoad %6 %8 + %43 = OpIEqual %17 %41 %42 + OpSelectionMerge %45 None + OpBranchConditional %43 %44 %51 + %44 = OpLabel + %46 = OpExtInst %24 %1 Ldexp %28 %16 + %50 = OpAccessChain %49 %27 %48 + OpStore %50 %46 + OpBranch %45 + %51 = OpLabel + %54 = OpExtInst %24 %1 Ldexp %28 %16 + OpStore %53 %54 + OpStore %27 %30 + OpBranch %45 + %45 = OpLabel + OpBranch %40 + %40 = OpLabel + OpBranch %35 + %35 = OpLabel + OpBranch %13 + %13 = OpLabel + %55 = OpLoad %6 %8 + %56 = OpIAdd %6 %55 %20 + OpStore %8 %56 + OpBranch %10 + %12 = 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/modules/vulkan/amber/vktAmberGraphicsFuzzTests.cpp b/external/vulkancts/modules/vulkan/amber/vktAmberGraphicsFuzzTests.cpp index 93d7aad..8519e1b 100644 --- a/external/vulkancts/modules/vulkan/amber/vktAmberGraphicsFuzzTests.cpp +++ b/external/vulkancts/modules/vulkan/amber/vktAmberGraphicsFuzzTests.cpp @@ -59,6 +59,7 @@ void createAmberTests (tcu::TestCaseGroup* group) { "fragcoord-control-flow.amber", "fragcoord-control-flow", "A fragment shader that uses FragCoord and somewhat complex control flow" }, { "fragcoord-control-flow-2.amber", "fragcoord-control-flow-2", "A fragment shader that uses FragCoord and somewhat complex control flow" }, { "if-and-switch.amber", "if-and-switch", "A fragment shader with a switch and some data flow" }, + { "loop-nested-ifs.amber", "loop-nested-ifs", "A fragment shader with a for loop containing nested ifs" }, { "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 a3d113b..0254c95 100644 --- a/external/vulkancts/mustpass/master/vk-default-no-waivers.txt +++ b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt @@ -485170,6 +485170,7 @@ dEQP-VK.graphicsfuzz.for-with-ifs-and-return dEQP-VK.graphicsfuzz.fragcoord-control-flow dEQP-VK.graphicsfuzz.fragcoord-control-flow-2 dEQP-VK.graphicsfuzz.if-and-switch +dEQP-VK.graphicsfuzz.loop-nested-ifs 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 ddc05ef..233fb2f 100644 --- a/external/vulkancts/mustpass/master/vk-default.txt +++ b/external/vulkancts/mustpass/master/vk-default.txt @@ -485017,6 +485017,7 @@ dEQP-VK.graphicsfuzz.for-with-ifs-and-return dEQP-VK.graphicsfuzz.fragcoord-control-flow dEQP-VK.graphicsfuzz.fragcoord-control-flow-2 dEQP-VK.graphicsfuzz.if-and-switch +dEQP-VK.graphicsfuzz.loop-nested-ifs dEQP-VK.graphicsfuzz.mat-array-deep-control-flow dEQP-VK.graphicsfuzz.mat-array-distance dEQP-VK.graphicsfuzz.matrices-and-return-in-loop