From 34bfb72ed028e94ef6956e2b1240a435e5be6291 Mon Sep 17 00:00:00 2001 From: Toni Salmivalli Date: Fri, 17 Jul 2020 13:28:50 +0300 Subject: [PATCH] dEQP-VK.graphicsfuzz.stable-rects-vec4-clamp-conditional-min-mix Components: Vulkan New Tests: dEQP-VK.graphicsfuzz.stable-rects-vec4-clamp-conditional-min-mix Change-Id: I1c8c0ff590c7cbb2ab55c9d682c6d643556c5483 --- android/cts/master/vk-master-2020-03-01.txt | 1 + android/cts/master/vk-master.txt | 1 + .../data/vulkan/amber/graphicsfuzz/index.txt | 1 + ...able-rects-vec4-clamp-conditional-min-mix.amber | 742 +++++++++++++++++++++ external/vulkancts/mustpass/master/vk-default.txt | 1 + 5 files changed, 746 insertions(+) create mode 100644 external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix.amber diff --git a/android/cts/master/vk-master-2020-03-01.txt b/android/cts/master/vk-master-2020-03-01.txt index 8cc0cc0..c932ea7 100644 --- a/android/cts/master/vk-master-2020-03-01.txt +++ b/android/cts/master/vk-master-2020-03-01.txt @@ -276076,6 +276076,7 @@ dEQP-VK.graphicsfuzz.set-color-in-one-iteration-while-loop dEQP-VK.graphicsfuzz.similar-nested-ifs dEQP-VK.graphicsfuzz.smoothstep-after-loop dEQP-VK.graphicsfuzz.stable-binarysearch-tree-with-loop-read-write-global +dEQP-VK.graphicsfuzz.stable-rects-vec4-clamp-conditional-min-mix dEQP-VK.graphicsfuzz.struct-and-unreachable-infinite-loop dEQP-VK.graphicsfuzz.struct-array-data-as-loop-iterator dEQP-VK.graphicsfuzz.struct-controlled-loop diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index 90bc87a..1351b26 100644 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -686269,6 +686269,7 @@ dEQP-VK.graphicsfuzz.set-color-in-one-iteration-while-loop dEQP-VK.graphicsfuzz.similar-nested-ifs dEQP-VK.graphicsfuzz.smoothstep-after-loop dEQP-VK.graphicsfuzz.stable-binarysearch-tree-with-loop-read-write-global +dEQP-VK.graphicsfuzz.stable-rects-vec4-clamp-conditional-min-mix dEQP-VK.graphicsfuzz.struct-and-unreachable-infinite-loop dEQP-VK.graphicsfuzz.struct-array-data-as-loop-iterator dEQP-VK.graphicsfuzz.struct-controlled-loop diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/index.txt b/external/vulkancts/data/vulkan/amber/graphicsfuzz/index.txt index 2075cbe..71d1e24 100644 --- a/external/vulkancts/data/vulkan/amber/graphicsfuzz/index.txt +++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/index.txt @@ -188,6 +188,7 @@ { "similar-nested-ifs.amber", "similar-nested-ifs", "A fragment shader with similar nested ifs and loops" }, { "smoothstep-after-loop.amber", "smoothstep-after-loop", "Fragment shader with 1-iteration loop and smoothstep" }, { "stable-binarysearch-tree-with-loop-read-write-global.amber", "stable-binarysearch-tree-with-loop-read-write-global", "A pair of fragment shaders that both render red" }, +{ "stable-rects-vec4-clamp-conditional-min-mix.amber", "stable-rects-vec4-clamp-conditional-min-mix", "A fragment shader with min-mix in always false conditional" }, { "struct-and-unreachable-infinite-loop.amber", "struct-and-unreachable-infinite-loop", "Fragment shader with struct and unreachable infinite loop" }, { "struct-array-data-as-loop-iterator.amber", "struct-array-data-as-loop-iterator", "A fragment shader that uses struct array data for loop iterator value" }, { "struct-controlled-loop.amber", "struct-controlled-loop", "Shader with loop controlled by struct" }, diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix.amber new file mode 100644 index 0000000..9537640 --- /dev/null +++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix.amber @@ -0,0 +1,742 @@ +#!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: A fragment shader with min-mix in always false conditional + +# The test passes because both shaders render the same image. + +SHADER vertex reference_vertex_shader PASSTHROUGH + +# reference_fragment_shader is derived from the following GLSL: +# #version 320 es +# precision highp float; +# +# precision highp int; +# +# layout(location = 0) out vec4 _GLF_color; +# +# layout(set = 0, binding = 0) uniform buf0 { +# vec2 resolution; +# }; +# const vec4 pal[16] = vec4[16](vec4(0.0, 0.0, 0.0, 1.0), vec4(0.5, 0.0, 0.0, 1.0), vec4(0.0, 0.5, 0.0, 1.0), vec4(0.5, 0.5, 0.0, 1.0), vec4(0.0, 0.0, 0.5, 1.0), vec4(0.5, 0.0, 0.5, 1.0), vec4(0.0, 0.5, 0.5, 1.0), vec4(0.5, 0.5, 0.5, 1.0), vec4(0.0, 0.0, 0.0, 1.0), vec4(1.0, 0.0, 0.0, 1.0), vec4(0.0, 1.0, 0.0, 1.0), vec4(1.0, 1.0, 0.0, 1.0), vec4(0.0, 0.0, 1.0, 1.0), vec4(1.0, 0.0, 1.0, 1.0), vec4(0.0, 1.0, 1.0, 1.0), vec4(1.0, 1.0, 1.0, 1.0)); +# +# const vec4 picdata[8] = vec4[8](vec4(4, 4, 20, 4), vec4(4, 4, 4, 20), vec4(4, 20, 20, 4), vec4(20, 4, 4, 8), vec4(8, 6, 4, 2), vec4(2, 12, 2, 4), vec4(16, 2, 4, 4), vec4(12, 22, 4, 4)); +# +# int index; +# +# int state[16]; +# +# bool collision(vec2 pos, vec4 quad) +# { +# if(pos.x < quad.x) +# { +# return false; +# } +# if(pos.y < quad.y) +# { +# return false; +# } +# if(pos.x > quad.x + quad.z) +# { +# return false; +# } +# if(pos.y > quad.y + quad.w) +# { +# return false; +# } +# return true; +# } +# vec4 match(vec2 pos) +# { +# int i; +# vec4 res = vec4(0.5, 0.5, 1.0, 1.0); +# for( i = 0; +# i < 8; i ++) +# { +# if(collision(pos, picdata[i])) +# { +# res = pal[(int(picdata[i].x) * int(picdata[i].y) + i * 9 + 11) % 16]; +# } +# } +# return res; +# } +# void main() +# { +# vec2 lin = gl_FragCoord.xy / resolution; +# lin = floor(lin * 32.0); +# _GLF_color = match(lin.xy); +# } +SHADER fragment reference_fragment_shader SPIRV-ASM +; SPIR-V +; Version: 1.0 +; Generator: Khronos Glslang Reference Front End; 10 +; Bound: 189 +; Schema: 0 + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %165 %180 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 320 + OpName %4 "main" + OpName %15 "collision(vf2;vf4;" + OpName %13 "pos" + OpName %14 "quad" + OpName %19 "match(vf2;" + OpName %18 "pos" + OpName %69 "res" + OpName %75 "i" + OpName %105 "param" + OpName %107 "param" + OpName %109 "indexable" + OpName %135 "indexable" + OpName %140 "indexable" + OpName %154 "indexable" + OpName %163 "lin" + OpName %165 "gl_FragCoord" + OpName %168 "buf0" + OpMemberName %168 0 "resolution" + OpName %170 "" + OpName %180 "_GLF_color" + OpName %181 "param" + OpName %185 "index" + OpName %188 "state" + OpDecorate %165 BuiltIn FragCoord + OpMemberDecorate %168 0 Offset 0 + OpDecorate %168 Block + OpDecorate %170 DescriptorSet 0 + OpDecorate %170 Binding 0 + OpDecorate %180 Location 0 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeFloat 32 + %7 = OpTypeVector %6 2 + %8 = OpTypePointer Function %7 + %9 = OpTypeVector %6 4 + %10 = OpTypePointer Function %9 + %11 = OpTypeBool + %12 = OpTypeFunction %11 %8 %10 + %17 = OpTypeFunction %9 %8 + %21 = OpTypeInt 32 0 + %22 = OpConstant %21 0 + %23 = OpTypePointer Function %6 + %31 = OpConstantFalse %11 + %33 = OpConstant %21 1 + %46 = OpConstant %21 2 + %58 = OpConstant %21 3 + %66 = OpConstantTrue %11 + %70 = OpConstant %6 0.5 + %71 = OpConstant %6 1 + %72 = OpConstantComposite %9 %70 %70 %71 %71 + %73 = OpTypeInt 32 1 + %74 = OpTypePointer Function %73 + %76 = OpConstant %73 0 + %83 = OpConstant %73 8 + %85 = OpConstant %21 8 + %86 = OpTypeArray %9 %85 + %87 = OpConstant %6 4 + %88 = OpConstant %6 20 + %89 = OpConstantComposite %9 %87 %87 %88 %87 + %90 = OpConstantComposite %9 %87 %87 %87 %88 + %91 = OpConstantComposite %9 %87 %88 %88 %87 + %92 = OpConstant %6 8 + %93 = OpConstantComposite %9 %88 %87 %87 %92 + %94 = OpConstant %6 6 + %95 = OpConstant %6 2 + %96 = OpConstantComposite %9 %92 %94 %87 %95 + %97 = OpConstant %6 12 + %98 = OpConstantComposite %9 %95 %97 %95 %87 + %99 = OpConstant %6 16 + %100 = OpConstantComposite %9 %99 %95 %87 %87 + %101 = OpConstant %6 22 + %102 = OpConstantComposite %9 %97 %101 %87 %87 + %103 = OpConstantComposite %86 %89 %90 %91 %93 %96 %98 %100 %102 + %108 = OpTypePointer Function %86 + %115 = OpConstant %21 16 + %116 = OpTypeArray %9 %115 + %117 = OpConstant %6 0 + %118 = OpConstantComposite %9 %117 %117 %117 %71 + %119 = OpConstantComposite %9 %70 %117 %117 %71 + %120 = OpConstantComposite %9 %117 %70 %117 %71 + %121 = OpConstantComposite %9 %70 %70 %117 %71 + %122 = OpConstantComposite %9 %117 %117 %70 %71 + %123 = OpConstantComposite %9 %70 %117 %70 %71 + %124 = OpConstantComposite %9 %117 %70 %70 %71 + %125 = OpConstantComposite %9 %70 %70 %70 %71 + %126 = OpConstantComposite %9 %71 %117 %117 %71 + %127 = OpConstantComposite %9 %117 %71 %117 %71 + %128 = OpConstantComposite %9 %71 %71 %117 %71 + %129 = OpConstantComposite %9 %117 %117 %71 %71 + %130 = OpConstantComposite %9 %71 %117 %71 %71 + %131 = OpConstantComposite %9 %117 %71 %71 %71 + %132 = OpConstantComposite %9 %71 %71 %71 %71 + %133 = OpConstantComposite %116 %118 %119 %120 %121 %122 %123 %124 %125 %118 %126 %127 %128 %129 %130 %131 %132 + %146 = OpConstant %73 9 + %149 = OpConstant %73 11 + %151 = OpConstant %73 16 + %153 = OpTypePointer Function %116 + %158 = OpConstant %73 1 + %164 = OpTypePointer Input %9 + %165 = OpVariable %164 Input + %168 = OpTypeStruct %7 + %169 = OpTypePointer Uniform %168 + %170 = OpVariable %169 Uniform + %171 = OpTypePointer Uniform %7 + %176 = OpConstant %6 32 + %179 = OpTypePointer Output %9 + %180 = OpVariable %179 Output + %184 = OpTypePointer Private %73 + %185 = OpVariable %184 Private + %186 = OpTypeArray %73 %115 + %187 = OpTypePointer Private %186 + %188 = OpVariable %187 Private + %4 = OpFunction %2 None %3 + %5 = OpLabel + %163 = OpVariable %8 Function + %181 = OpVariable %8 Function + %166 = OpLoad %9 %165 + %167 = OpVectorShuffle %7 %166 %166 0 1 + %172 = OpAccessChain %171 %170 %76 + %173 = OpLoad %7 %172 + %174 = OpFDiv %7 %167 %173 + OpStore %163 %174 + %175 = OpLoad %7 %163 + %177 = OpVectorTimesScalar %7 %175 %176 + %178 = OpExtInst %7 %1 Floor %177 + OpStore %163 %178 + %182 = OpLoad %7 %163 + OpStore %181 %182 + %183 = OpFunctionCall %9 %19 %181 + OpStore %180 %183 + OpReturn + OpFunctionEnd + %15 = OpFunction %11 None %12 + %13 = OpFunctionParameter %8 + %14 = OpFunctionParameter %10 + %16 = OpLabel + %24 = OpAccessChain %23 %13 %22 + %25 = OpLoad %6 %24 + %26 = OpAccessChain %23 %14 %22 + %27 = OpLoad %6 %26 + %28 = OpFOrdLessThan %11 %25 %27 + OpSelectionMerge %30 None + OpBranchConditional %28 %29 %30 + %29 = OpLabel + OpReturnValue %31 + %30 = OpLabel + %34 = OpAccessChain %23 %13 %33 + %35 = OpLoad %6 %34 + %36 = OpAccessChain %23 %14 %33 + %37 = OpLoad %6 %36 + %38 = OpFOrdLessThan %11 %35 %37 + OpSelectionMerge %40 None + OpBranchConditional %38 %39 %40 + %39 = OpLabel + OpReturnValue %31 + %40 = OpLabel + %42 = OpAccessChain %23 %13 %22 + %43 = OpLoad %6 %42 + %44 = OpAccessChain %23 %14 %22 + %45 = OpLoad %6 %44 + %47 = OpAccessChain %23 %14 %46 + %48 = OpLoad %6 %47 + %49 = OpFAdd %6 %45 %48 + %50 = OpFOrdGreaterThan %11 %43 %49 + OpSelectionMerge %52 None + OpBranchConditional %50 %51 %52 + %51 = OpLabel + OpReturnValue %31 + %52 = OpLabel + %54 = OpAccessChain %23 %13 %33 + %55 = OpLoad %6 %54 + %56 = OpAccessChain %23 %14 %33 + %57 = OpLoad %6 %56 + %59 = OpAccessChain %23 %14 %58 + %60 = OpLoad %6 %59 + %61 = OpFAdd %6 %57 %60 + %62 = OpFOrdGreaterThan %11 %55 %61 + OpSelectionMerge %64 None + OpBranchConditional %62 %63 %64 + %63 = OpLabel + OpReturnValue %31 + %64 = OpLabel + OpReturnValue %66 + OpFunctionEnd + %19 = OpFunction %9 None %17 + %18 = OpFunctionParameter %8 + %20 = OpLabel + %69 = OpVariable %10 Function + %75 = OpVariable %74 Function + %105 = OpVariable %8 Function + %107 = OpVariable %10 Function + %109 = OpVariable %108 Function + %135 = OpVariable %108 Function + %140 = OpVariable %108 Function + %154 = OpVariable %153 Function + OpStore %69 %72 + OpStore %75 %76 + OpBranch %77 + %77 = OpLabel + OpLoopMerge %79 %80 None + OpBranch %81 + %81 = OpLabel + %82 = OpLoad %73 %75 + %84 = OpSLessThan %11 %82 %83 + OpBranchConditional %84 %78 %79 + %78 = OpLabel + %104 = OpLoad %73 %75 + %106 = OpLoad %7 %18 + OpStore %105 %106 + OpStore %109 %103 + %110 = OpAccessChain %10 %109 %104 + %111 = OpLoad %9 %110 + OpStore %107 %111 + %112 = OpFunctionCall %11 %15 %105 %107 + OpSelectionMerge %114 None + OpBranchConditional %112 %113 %114 + %113 = OpLabel + %134 = OpLoad %73 %75 + OpStore %135 %103 + %136 = OpAccessChain %23 %135 %134 %22 + %137 = OpLoad %6 %136 + %138 = OpConvertFToS %73 %137 + %139 = OpLoad %73 %75 + OpStore %140 %103 + %141 = OpAccessChain %23 %140 %139 %33 + %142 = OpLoad %6 %141 + %143 = OpConvertFToS %73 %142 + %144 = OpIMul %73 %138 %143 + %145 = OpLoad %73 %75 + %147 = OpIMul %73 %145 %146 + %148 = OpIAdd %73 %144 %147 + %150 = OpIAdd %73 %148 %149 + %152 = OpSMod %73 %150 %151 + OpStore %154 %133 + %155 = OpAccessChain %10 %154 %152 + %156 = OpLoad %9 %155 + OpStore %69 %156 + OpBranch %114 + %114 = OpLabel + OpBranch %80 + %80 = OpLabel + %157 = OpLoad %73 %75 + %159 = OpIAdd %73 %157 %158 + OpStore %75 %159 + OpBranch %77 + %79 = OpLabel + %160 = OpLoad %9 %69 + OpReturnValue %160 + OpFunctionEnd +END + +# uniforms for reference + +# resolution +BUFFER reference_resolution DATA_TYPE vec2 DATA + 256.0 256.0 +END + +BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM + +PIPELINE graphics reference_pipeline + ATTACH reference_vertex_shader + ATTACH reference_fragment_shader + FRAMEBUFFER_SIZE 256 256 + BIND BUFFER reference_framebuffer AS color LOCATION 0 + BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0 +END +CLEAR_COLOR reference_pipeline 0 0 0 255 + +CLEAR reference_pipeline +RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256 + + +SHADER vertex variant_vertex_shader PASSTHROUGH + +# variant_fragment_shader is derived from the following GLSL: +# #version 320 es +# precision highp float; +# +# precision highp int; +# +# layout(location = 0) out vec4 _GLF_color; +# +# layout(set = 0, binding = 0) uniform buf0 { +# vec2 resolution; +# }; +# const vec4 pal[16] = vec4[16](vec4(0.0, 0.0, 0.0, 1.0), vec4(0.5, 0.0, 0.0, 1.0), vec4(0.0, 0.5, 0.0, 1.0), vec4(0.5, 0.5, 0.0, 1.0), vec4(0.0, 0.0, 0.5, 1.0), vec4(0.5, 0.0, 0.5, 1.0), vec4(0.0, 0.5, 0.5, 1.0), vec4(0.5, 0.5, 0.5, 1.0), vec4(0.0, 0.0, 0.0, 1.0), vec4(1.0, 0.0, 0.0, 1.0), vec4(0.0, 1.0, 0.0, 1.0), vec4(1.0, 1.0, 0.0, 1.0), vec4(0.0, 0.0, 1.0, 1.0), vec4(1.0, 0.0, 1.0, 1.0), vec4(0.0, 1.0, 1.0, 1.0), vec4(1.0, 1.0, 1.0, 1.0)); +# +# const vec4 picdata[8] = vec4[8](vec4(4, 4, 20, 4), vec4(4, 4, 4, 20), vec4(4, 20, 20, 4), vec4(20, 4, 4, 8), vec4(8, 6, 4, 2), vec4(2, 12, 2, 4), vec4(16, 2, 4, 4), vec4(12, 22, 4, 4)); +# +# bool collision(vec2 pos, vec4 quad) +# { +# if(pos.x < quad.x) +# { +# return false; +# } +# if(pos.y < quad.y) +# { +# return false; +# } +# if(pos.x > quad.x + quad.z) +# { +# return false; +# } +# if(pos.y > quad.y + quad.w) +# { +# return false; +# } +# return true; +# } +# vec4 match(vec2 pos) +# { +# int i; +# // res == vec4 ( x, 0.5, 1.0, 1.0) where x is the result of the calculation, x == 0.5. +# // The end result should be the same as in reference. +# vec4 res = vec4(clamp(0.5, 0.5, (gl_FragCoord.x < 0.0) ? -1.0 : (min(gl_FragCoord.x >= 0.0 ? (mix(1.0, 0.5, (gl_FragCoord.x >= 0.0))) : 1.0, 0.5))), 0.5, 1.0, 1.0); +# for( i = 0; +# i < 8; i ++) +# { +# if(collision(pos, picdata[i])) +# { +# res = pal[(int(picdata[i].x) * int(picdata[i].y) + i * 9 + 11) % 16]; +# } +# } +# return res; +# } +# void main() +# { +# vec2 lin = gl_FragCoord.xy / resolution; +# lin = floor(lin * 32.0); +# _GLF_color = match(lin.xy); +# } +SHADER fragment variant_fragment_shader SPIRV-ASM +; SPIR-V +; Version: 1.0 +; Generator: Khronos Glslang Reference Front End; 10 +; Bound: 208 +; Schema: 0 + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %72 %204 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 320 + OpName %4 "main" + OpName %15 "collision(vf2;vf4;" + OpName %13 "pos" + OpName %14 "quad" + OpName %19 "match(vf2;" + OpName %18 "pos" + OpName %69 "res" + OpName %72 "gl_FragCoord" + OpName %102 "i" + OpName %132 "param" + OpName %134 "param" + OpName %136 "indexable" + OpName %161 "indexable" + OpName %166 "indexable" + OpName %180 "indexable" + OpName %189 "lin" + OpName %192 "buf0" + OpMemberName %192 0 "resolution" + OpName %194 "" + OpName %204 "_GLF_color" + OpName %205 "param" + OpDecorate %72 BuiltIn FragCoord + OpMemberDecorate %192 0 Offset 0 + OpDecorate %192 Block + OpDecorate %194 DescriptorSet 0 + OpDecorate %194 Binding 0 + OpDecorate %204 Location 0 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeFloat 32 + %7 = OpTypeVector %6 2 + %8 = OpTypePointer Function %7 + %9 = OpTypeVector %6 4 + %10 = OpTypePointer Function %9 + %11 = OpTypeBool + %12 = OpTypeFunction %11 %8 %10 + %17 = OpTypeFunction %9 %8 + %21 = OpTypeInt 32 0 + %22 = OpConstant %21 0 + %23 = OpTypePointer Function %6 + %31 = OpConstantFalse %11 + %33 = OpConstant %21 1 + %46 = OpConstant %21 2 + %58 = OpConstant %21 3 + %66 = OpConstantTrue %11 + %70 = OpConstant %6 0.5 + %71 = OpTypePointer Input %9 + %72 = OpVariable %71 Input + %73 = OpTypePointer Input %6 + %76 = OpConstant %6 0 + %81 = OpConstant %6 -1 + %89 = OpConstant %6 1 + %100 = OpTypeInt 32 1 + %101 = OpTypePointer Function %100 + %103 = OpConstant %100 0 + %110 = OpConstant %100 8 + %112 = OpConstant %21 8 + %113 = OpTypeArray %9 %112 + %114 = OpConstant %6 4 + %115 = OpConstant %6 20 + %116 = OpConstantComposite %9 %114 %114 %115 %114 + %117 = OpConstantComposite %9 %114 %114 %114 %115 + %118 = OpConstantComposite %9 %114 %115 %115 %114 + %119 = OpConstant %6 8 + %120 = OpConstantComposite %9 %115 %114 %114 %119 + %121 = OpConstant %6 6 + %122 = OpConstant %6 2 + %123 = OpConstantComposite %9 %119 %121 %114 %122 + %124 = OpConstant %6 12 + %125 = OpConstantComposite %9 %122 %124 %122 %114 + %126 = OpConstant %6 16 + %127 = OpConstantComposite %9 %126 %122 %114 %114 + %128 = OpConstant %6 22 + %129 = OpConstantComposite %9 %124 %128 %114 %114 + %130 = OpConstantComposite %113 %116 %117 %118 %120 %123 %125 %127 %129 + %135 = OpTypePointer Function %113 + %142 = OpConstant %21 16 + %143 = OpTypeArray %9 %142 + %144 = OpConstantComposite %9 %76 %76 %76 %89 + %145 = OpConstantComposite %9 %70 %76 %76 %89 + %146 = OpConstantComposite %9 %76 %70 %76 %89 + %147 = OpConstantComposite %9 %70 %70 %76 %89 + %148 = OpConstantComposite %9 %76 %76 %70 %89 + %149 = OpConstantComposite %9 %70 %76 %70 %89 + %150 = OpConstantComposite %9 %76 %70 %70 %89 + %151 = OpConstantComposite %9 %70 %70 %70 %89 + %152 = OpConstantComposite %9 %89 %76 %76 %89 + %153 = OpConstantComposite %9 %76 %89 %76 %89 + %154 = OpConstantComposite %9 %89 %89 %76 %89 + %155 = OpConstantComposite %9 %76 %76 %89 %89 + %156 = OpConstantComposite %9 %89 %76 %89 %89 + %157 = OpConstantComposite %9 %76 %89 %89 %89 + %158 = OpConstantComposite %9 %89 %89 %89 %89 + %159 = OpConstantComposite %143 %144 %145 %146 %147 %148 %149 %150 %151 %144 %152 %153 %154 %155 %156 %157 %158 + %172 = OpConstant %100 9 + %175 = OpConstant %100 11 + %177 = OpConstant %100 16 + %179 = OpTypePointer Function %143 + %184 = OpConstant %100 1 + %192 = OpTypeStruct %7 + %193 = OpTypePointer Uniform %192 + %194 = OpVariable %193 Uniform + %195 = OpTypePointer Uniform %7 + %200 = OpConstant %6 32 + %203 = OpTypePointer Output %9 + %204 = OpVariable %203 Output + %4 = OpFunction %2 None %3 + %5 = OpLabel + %189 = OpVariable %8 Function + %205 = OpVariable %8 Function + %190 = OpLoad %9 %72 + %191 = OpVectorShuffle %7 %190 %190 0 1 + %196 = OpAccessChain %195 %194 %103 + %197 = OpLoad %7 %196 + %198 = OpFDiv %7 %191 %197 + OpStore %189 %198 + %199 = OpLoad %7 %189 + %201 = OpVectorTimesScalar %7 %199 %200 + %202 = OpExtInst %7 %1 Floor %201 + OpStore %189 %202 + %206 = OpLoad %7 %189 + OpStore %205 %206 + %207 = OpFunctionCall %9 %19 %205 + OpStore %204 %207 + OpReturn + OpFunctionEnd + %15 = OpFunction %11 None %12 + %13 = OpFunctionParameter %8 + %14 = OpFunctionParameter %10 + %16 = OpLabel + %24 = OpAccessChain %23 %13 %22 + %25 = OpLoad %6 %24 + %26 = OpAccessChain %23 %14 %22 + %27 = OpLoad %6 %26 + %28 = OpFOrdLessThan %11 %25 %27 + OpSelectionMerge %30 None + OpBranchConditional %28 %29 %30 + %29 = OpLabel + OpReturnValue %31 + %30 = OpLabel + %34 = OpAccessChain %23 %13 %33 + %35 = OpLoad %6 %34 + %36 = OpAccessChain %23 %14 %33 + %37 = OpLoad %6 %36 + %38 = OpFOrdLessThan %11 %35 %37 + OpSelectionMerge %40 None + OpBranchConditional %38 %39 %40 + %39 = OpLabel + OpReturnValue %31 + %40 = OpLabel + %42 = OpAccessChain %23 %13 %22 + %43 = OpLoad %6 %42 + %44 = OpAccessChain %23 %14 %22 + %45 = OpLoad %6 %44 + %47 = OpAccessChain %23 %14 %46 + %48 = OpLoad %6 %47 + %49 = OpFAdd %6 %45 %48 + %50 = OpFOrdGreaterThan %11 %43 %49 + OpSelectionMerge %52 None + OpBranchConditional %50 %51 %52 + %51 = OpLabel + OpReturnValue %31 + %52 = OpLabel + %54 = OpAccessChain %23 %13 %33 + %55 = OpLoad %6 %54 + %56 = OpAccessChain %23 %14 %33 + %57 = OpLoad %6 %56 + %59 = OpAccessChain %23 %14 %58 + %60 = OpLoad %6 %59 + %61 = OpFAdd %6 %57 %60 + %62 = OpFOrdGreaterThan %11 %55 %61 + OpSelectionMerge %64 None + OpBranchConditional %62 %63 %64 + %63 = OpLabel + OpReturnValue %31 + %64 = OpLabel + OpReturnValue %66 + OpFunctionEnd + %19 = OpFunction %9 None %17 + %18 = OpFunctionParameter %8 + %20 = OpLabel + %69 = OpVariable %10 Function + %78 = OpVariable %23 Function + %86 = OpVariable %23 Function + %102 = OpVariable %101 Function + %132 = OpVariable %8 Function + %134 = OpVariable %10 Function + %136 = OpVariable %135 Function + %161 = OpVariable %135 Function + %166 = OpVariable %135 Function + %180 = OpVariable %179 Function + %74 = OpAccessChain %73 %72 %22 + %75 = OpLoad %6 %74 + %77 = OpFOrdLessThan %11 %75 %76 + OpSelectionMerge %80 None + OpBranchConditional %77 %79 %82 + %79 = OpLabel + OpStore %78 %81 + OpBranch %80 + %82 = OpLabel + %83 = OpAccessChain %73 %72 %22 + %84 = OpLoad %6 %83 + %85 = OpFOrdGreaterThanEqual %11 %84 %76 + OpSelectionMerge %88 None + OpBranchConditional %85 %87 %94 + %87 = OpLabel + %90 = OpAccessChain %73 %72 %22 + %91 = OpLoad %6 %90 + %92 = OpFOrdGreaterThanEqual %11 %91 %76 + %93 = OpSelect %6 %92 %70 %89 + OpStore %86 %93 + OpBranch %88 + %94 = OpLabel + OpStore %86 %89 + OpBranch %88 + %88 = OpLabel + %95 = OpLoad %6 %86 + %96 = OpExtInst %6 %1 FMin %95 %70 + OpStore %78 %96 + OpBranch %80 + %80 = OpLabel + %97 = OpLoad %6 %78 + %98 = OpExtInst %6 %1 FClamp %70 %70 %97 + %99 = OpCompositeConstruct %9 %98 %70 %89 %89 + OpStore %69 %99 + OpStore %102 %103 + OpBranch %104 + %104 = OpLabel + OpLoopMerge %106 %107 None + OpBranch %108 + %108 = OpLabel + %109 = OpLoad %100 %102 + %111 = OpSLessThan %11 %109 %110 + OpBranchConditional %111 %105 %106 + %105 = OpLabel + %131 = OpLoad %100 %102 + %133 = OpLoad %7 %18 + OpStore %132 %133 + OpStore %136 %130 + %137 = OpAccessChain %10 %136 %131 + %138 = OpLoad %9 %137 + OpStore %134 %138 + %139 = OpFunctionCall %11 %15 %132 %134 + OpSelectionMerge %141 None + OpBranchConditional %139 %140 %141 + %140 = OpLabel + %160 = OpLoad %100 %102 + OpStore %161 %130 + %162 = OpAccessChain %23 %161 %160 %22 + %163 = OpLoad %6 %162 + %164 = OpConvertFToS %100 %163 + %165 = OpLoad %100 %102 + OpStore %166 %130 + %167 = OpAccessChain %23 %166 %165 %33 + %168 = OpLoad %6 %167 + %169 = OpConvertFToS %100 %168 + %170 = OpIMul %100 %164 %169 + %171 = OpLoad %100 %102 + %173 = OpIMul %100 %171 %172 + %174 = OpIAdd %100 %170 %173 + %176 = OpIAdd %100 %174 %175 + %178 = OpSMod %100 %176 %177 + OpStore %180 %159 + %181 = OpAccessChain %10 %180 %178 + %182 = OpLoad %9 %181 + OpStore %69 %182 + OpBranch %141 + %141 = OpLabel + OpBranch %107 + %107 = OpLabel + %183 = OpLoad %100 %102 + %185 = OpIAdd %100 %183 %184 + OpStore %102 %185 + OpBranch %104 + %106 = OpLabel + %186 = OpLoad %9 %69 + OpReturnValue %186 + OpFunctionEnd +END + +# uniforms for variant + +# resolution +BUFFER variant_resolution DATA_TYPE vec2 DATA + 256.0 256.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_resolution 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 reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005 diff --git a/external/vulkancts/mustpass/master/vk-default.txt b/external/vulkancts/mustpass/master/vk-default.txt index ea2b2f2..dc27d45 100644 --- a/external/vulkancts/mustpass/master/vk-default.txt +++ b/external/vulkancts/mustpass/master/vk-default.txt @@ -688487,6 +688487,7 @@ dEQP-VK.graphicsfuzz.set-color-in-one-iteration-while-loop dEQP-VK.graphicsfuzz.similar-nested-ifs dEQP-VK.graphicsfuzz.smoothstep-after-loop dEQP-VK.graphicsfuzz.stable-binarysearch-tree-with-loop-read-write-global +dEQP-VK.graphicsfuzz.stable-rects-vec4-clamp-conditional-min-mix dEQP-VK.graphicsfuzz.struct-and-unreachable-infinite-loop dEQP-VK.graphicsfuzz.struct-array-data-as-loop-iterator dEQP-VK.graphicsfuzz.struct-controlled-loop -- 2.7.4