From: Alastair Donaldson Date: Fri, 16 Aug 2019 16:21:24 +0000 (+0100) Subject: dEQP-VK.graphicsfuzz.write-red-after-search X-Git-Tag: upstream/1.3.5~1903 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a38f1dc928cd1a9cd868216ea42d218d77d01e56;p=platform%2Fupstream%2FVK-GL-CTS.git dEQP-VK.graphicsfuzz.write-red-after-search Components: Vulkan New Tests: dEQP-VK.graphicsfuzz.write-red-after-search Change-Id: Ibf93d1408b29fcdb40acc6026457e355a0294d9f --- diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index e64de23..c415699 100644 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -464753,6 +464753,7 @@ dEQP-VK.graphicsfuzz.return-in-loop-in-function dEQP-VK.graphicsfuzz.swizzle-struct-init-min dEQP-VK.graphicsfuzz.unreachable-loops-in-switch dEQP-VK.graphicsfuzz.while-inside-switch +dEQP-VK.graphicsfuzz.write-red-after-search dEQP-VK.transform_feedback.simple.basic_1_256 dEQP-VK.transform_feedback.simple.basic_beginqueryindexed_streamid_0_1_256 dEQP-VK.transform_feedback.simple.basic_endqueryindexed_streamid_0_1_256 diff --git a/external/vulkancts/data/vulkan/amber/graphicsfuzz/write-red-after-search.amber b/external/vulkancts/data/vulkan/amber/graphicsfuzz/write-red-after-search.amber new file mode 100644 index 0000000..4af33cf --- /dev/null +++ b/external/vulkancts/data/vulkan/amber/graphicsfuzz/write-red-after-search.amber @@ -0,0 +1,1065 @@ +#!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 performing a search computation, then writing red regardless + +# The test passes because the uniform values used to run the shader guarantee +# that red will be written at the end, regardless of what the prior computation +# does. + +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; +# +# layout(set = 0, binding = 0) uniform buf0 { +# vec2 injectionSwitch; +# }; +# struct BST { +# int data; +# int leftIndex; +# int rightIndex; +# } ; +# +# BST tree[10]; +# +# struct Obj { +# float odd_numbers[10]; +# float even_numbers[10]; +# } ; +# +# void makeTreeNode(inout BST tree, int data) +# { +# tree.data = data; +# tree.leftIndex = - 1; +# tree.rightIndex = - 1; +# } +# void insert(int treeIndex, int data) +# { +# int baseIndex = 0; +# while(baseIndex <= treeIndex) +# { +# if(data <= tree[baseIndex].data) +# { +# if(tree[baseIndex].leftIndex == - 1) +# { +# tree[baseIndex].leftIndex = treeIndex; +# makeTreeNode(tree[treeIndex], data); +# return; +# } +# else +# { +# baseIndex = tree[baseIndex].leftIndex; +# continue; +# } +# } +# else +# { +# if(tree[baseIndex].rightIndex == - 1) +# { +# tree[baseIndex].rightIndex = treeIndex; +# makeTreeNode(tree[treeIndex], data); +# return; +# } +# else +# { +# int GLF_live8i = 1; +# float GLF_live8A[50]; +# GLF_live8A[GLF_live8i >= 0 && GLF_live8i < 50 ? GLF_live8i : 0] += GLF_live8A[(1 - 1) >= 0 && (1 - 1) < 50 ? 1 - 1 : 0]; +# do +# { +# baseIndex = tree[baseIndex].rightIndex; +# } +# while((injectionSwitch.x > injectionSwitch.y)); +# continue; +# } +# } +# } +# } +# int search(int target) +# { +# BST currentNode; +# int index = 0; +# while(index != - 1) +# { +# currentNode = tree[index]; +# if(currentNode.data == target) +# { +# return target; +# } +# index = target > currentNode.data ? currentNode.rightIndex : currentNode.leftIndex; +# } +# return - 1; +# } +# vec3 hueColor(float angle) +# { +# float nodeData = float(search(15)); +# return (30.0 + angle * vec3(1.0, 5.0, nodeData)) / 50.0; +# } +# float makeFrame(float v) +# { +# v *= 6.5; +# if(v < 1.5) +# { +# return float(search(100)); +# } +# if(v < 4.0) +# { +# return 0.0; +# } +# if(v < float(search(6))) +# { +# return 1.0; +# } +# return 10.0 + float(search(30)); +# } +# void main() +# { +# int treeIndex = 0; +# makeTreeNode(tree[0], 9); +# treeIndex ++; +# insert(treeIndex, 5); +# treeIndex ++; +# int GLF_live1_looplimiter2 = 0; +# for( +# int GLF_live1i = 0; +# 1 < 4; +# GLF_live1i ++ +# ) +# { +# if(GLF_live1_looplimiter2 >= 7) +# { +# break; +# } +# GLF_live1_looplimiter2 ++; +# } +# insert(treeIndex, 12); +# treeIndex ++; +# insert(treeIndex, 15); +# treeIndex ++; +# insert(treeIndex, 7); +# treeIndex ++; +# insert(treeIndex, 8); +# treeIndex ++; +# insert(treeIndex, 2); +# treeIndex ++; +# insert(treeIndex, 6); +# treeIndex ++; +# Obj GLF_live4obj; +# int GLF_live4_looplimiter3 = 0; +# for( +# int GLF_live4i = 0; +# 1 < 9; +# GLF_live4i ++ +# ) +# { +# if(GLF_live4_looplimiter3 >= 3) +# { +# break; +# } +# GLF_live4_looplimiter3 ++; +# int GLF_live4index = 1; +# GLF_live4obj.even_numbers[GLF_live4index >= 0 && GLF_live4index < 10 ? GLF_live4index : 0] = GLF_live4obj.even_numbers[1 >= 0 && 1 < 10 ? 1 : 0]; +# GLF_live4obj.even_numbers[GLF_live4i >= 0 && GLF_live4i < 10 ? GLF_live4i : 0] = 1.0; +# } +# insert(treeIndex, 17); +# if((injectionSwitch.x > injectionSwitch.y)) +# { +# return; +# } +# treeIndex ++; +# insert(treeIndex, 13); +# vec2 z = (gl_FragCoord.yx / vec2(256.0, 256.0)); +# float x = makeFrame(z.x); +# float y = makeFrame(z.y); +# int sum = - 100; +# for( +# int target = 0; +# target < 20; +# target ++ +# ) +# { +# int result = search(target); +# if(result > 0) +# { +# } +# else +# { +# switch(result) +# { +# case - 1: +# sum += 1; +# break; +# case 0: +# return; +# } +# } +# } +# float a = x + y * float(sum); +# _GLF_color = vec4(injectionSwitch.x < injectionSwitch.y ? vec3(1.0, 0.0, 0.0) : hueColor(a), 1.); +# } +SHADER fragment variant_fragment_shader SPIRV-ASM +; SPIR-V +; Version: 1.0 +; Generator: Khronos Glslang Reference Front End; 7 +; Bound: 456 +; Schema: 0 + OpCapability Shader + %1 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Fragment %4 "main" %381 %436 + OpExecutionMode %4 OriginUpperLeft + OpSource ESSL 310 + OpName %4 "main" + OpName %7 "BST" + OpMemberName %7 0 "data" + OpMemberName %7 1 "leftIndex" + OpMemberName %7 2 "rightIndex" + OpName %13 "makeTreeNode(struct-BST-i1-i1-i11;i1;" + OpName %11 "tree" + OpName %12 "data" + OpName %18 "insert(i1;i1;" + OpName %16 "treeIndex" + OpName %17 "data" + OpName %22 "search(i1;" + OpName %21 "target" + OpName %29 "hueColor(f1;" + OpName %28 "angle" + OpName %33 "makeFrame(f1;" + OpName %32 "v" + OpName %43 "baseIndex" + OpName %58 "tree" + OpName %76 "param" + OpName %80 "param" + OpName %102 "param" + OpName %105 "param" + OpName %112 "GLF_live8i" + OpName %116 "GLF_live8A" + OpName %139 "buf0" + OpMemberName %139 0 "injectionSwitch" + OpName %141 "" + OpName %151 "index" + OpName %159 "currentNode" + OpName %186 "nodeData" + OpName %188 "param" + OpName %214 "param" + OpName %227 "param" + OpName %236 "param" + OpName %242 "treeIndex" + OpName %244 "param" + OpName %247 "param" + OpName %254 "param" + OpName %256 "param" + OpName %260 "GLF_live1_looplimiter2" + OpName %261 "GLF_live1i" + OpName %279 "param" + OpName %281 "param" + OpName %285 "param" + OpName %287 "param" + OpName %291 "param" + OpName %293 "param" + OpName %298 "param" + OpName %300 "param" + OpName %304 "param" + OpName %306 "param" + OpName %310 "param" + OpName %312 "param" + OpName %316 "GLF_live4_looplimiter3" + OpName %317 "GLF_live4i" + OpName %331 "GLF_live4index" + OpName %333 "Obj" + OpMemberName %333 0 "odd_numbers" + OpMemberName %333 1 "even_numbers" + OpName %335 "GLF_live4obj" + OpName %358 "param" + OpName %360 "param" + OpName %373 "param" + OpName %375 "param" + OpName %378 "z" + OpName %381 "gl_FragCoord" + OpName %387 "x" + OpName %388 "param" + OpName %392 "y" + OpName %393 "param" + OpName %397 "sum" + OpName %399 "target" + OpName %408 "result" + OpName %409 "param" + OpName %428 "a" + OpName %436 "_GLF_color" + OpName %448 "param" + OpMemberDecorate %7 0 RelaxedPrecision + OpMemberDecorate %7 1 RelaxedPrecision + OpMemberDecorate %7 2 RelaxedPrecision + OpDecorate %12 RelaxedPrecision + OpDecorate %16 RelaxedPrecision + OpDecorate %17 RelaxedPrecision + OpDecorate %22 RelaxedPrecision + OpDecorate %21 RelaxedPrecision + OpDecorate %36 RelaxedPrecision + OpDecorate %43 RelaxedPrecision + OpDecorate %49 RelaxedPrecision + OpDecorate %50 RelaxedPrecision + OpDecorate %53 RelaxedPrecision + OpDecorate %59 RelaxedPrecision + OpDecorate %62 RelaxedPrecision + OpDecorate %66 RelaxedPrecision + OpDecorate %68 RelaxedPrecision + OpDecorate %72 RelaxedPrecision + OpDecorate %73 RelaxedPrecision + OpDecorate %75 RelaxedPrecision + OpDecorate %81 RelaxedPrecision + OpDecorate %87 RelaxedPrecision + OpDecorate %89 RelaxedPrecision + OpDecorate %92 RelaxedPrecision + OpDecorate %94 RelaxedPrecision + OpDecorate %98 RelaxedPrecision + OpDecorate %99 RelaxedPrecision + OpDecorate %101 RelaxedPrecision + OpDecorate %106 RelaxedPrecision + OpDecorate %112 RelaxedPrecision + OpDecorate %117 RelaxedPrecision + OpDecorate %119 RelaxedPrecision + OpDecorate %123 RelaxedPrecision + OpDecorate %135 RelaxedPrecision + OpDecorate %137 RelaxedPrecision + OpMemberDecorate %139 0 Offset 0 + OpDecorate %139 Block + OpDecorate %141 DescriptorSet 0 + OpDecorate %141 Binding 0 + OpDecorate %151 RelaxedPrecision + OpDecorate %157 RelaxedPrecision + OpDecorate %160 RelaxedPrecision + OpDecorate %164 RelaxedPrecision + OpDecorate %165 RelaxedPrecision + OpDecorate %169 RelaxedPrecision + OpDecorate %171 RelaxedPrecision + OpDecorate %173 RelaxedPrecision + OpDecorate %179 RelaxedPrecision + OpDecorate %182 RelaxedPrecision + OpDecorate %183 RelaxedPrecision + OpDecorate %189 RelaxedPrecision + OpDecorate %215 RelaxedPrecision + OpDecorate %228 RelaxedPrecision + OpDecorate %237 RelaxedPrecision + OpDecorate %242 RelaxedPrecision + OpDecorate %251 RelaxedPrecision + OpDecorate %252 RelaxedPrecision + OpDecorate %255 RelaxedPrecision + OpDecorate %258 RelaxedPrecision + OpDecorate %259 RelaxedPrecision + OpDecorate %260 RelaxedPrecision + OpDecorate %261 RelaxedPrecision + OpDecorate %268 RelaxedPrecision + OpDecorate %274 RelaxedPrecision + OpDecorate %275 RelaxedPrecision + OpDecorate %276 RelaxedPrecision + OpDecorate %277 RelaxedPrecision + OpDecorate %280 RelaxedPrecision + OpDecorate %283 RelaxedPrecision + OpDecorate %284 RelaxedPrecision + OpDecorate %286 RelaxedPrecision + OpDecorate %289 RelaxedPrecision + OpDecorate %290 RelaxedPrecision + OpDecorate %292 RelaxedPrecision + OpDecorate %295 RelaxedPrecision + OpDecorate %296 RelaxedPrecision + OpDecorate %299 RelaxedPrecision + OpDecorate %302 RelaxedPrecision + OpDecorate %303 RelaxedPrecision + OpDecorate %305 RelaxedPrecision + OpDecorate %308 RelaxedPrecision + OpDecorate %309 RelaxedPrecision + OpDecorate %311 RelaxedPrecision + OpDecorate %314 RelaxedPrecision + OpDecorate %315 RelaxedPrecision + OpDecorate %316 RelaxedPrecision + OpDecorate %317 RelaxedPrecision + OpDecorate %323 RelaxedPrecision + OpDecorate %329 RelaxedPrecision + OpDecorate %330 RelaxedPrecision + OpDecorate %331 RelaxedPrecision + OpDecorate %336 RelaxedPrecision + OpDecorate %338 RelaxedPrecision + OpDecorate %342 RelaxedPrecision + OpDecorate %347 RelaxedPrecision + OpDecorate %349 RelaxedPrecision + OpDecorate %352 RelaxedPrecision + OpDecorate %355 RelaxedPrecision + OpDecorate %356 RelaxedPrecision + OpDecorate %359 RelaxedPrecision + OpDecorate %370 RelaxedPrecision + OpDecorate %371 RelaxedPrecision + OpDecorate %374 RelaxedPrecision + OpDecorate %381 BuiltIn FragCoord + OpDecorate %397 RelaxedPrecision + OpDecorate %399 RelaxedPrecision + OpDecorate %405 RelaxedPrecision + OpDecorate %408 RelaxedPrecision + OpDecorate %410 RelaxedPrecision + OpDecorate %411 RelaxedPrecision + OpDecorate %412 RelaxedPrecision + OpDecorate %417 RelaxedPrecision + OpDecorate %421 RelaxedPrecision + OpDecorate %422 RelaxedPrecision + OpDecorate %426 RelaxedPrecision + OpDecorate %427 RelaxedPrecision + OpDecorate %431 RelaxedPrecision + OpDecorate %436 Location 0 + %2 = OpTypeVoid + %3 = OpTypeFunction %2 + %6 = OpTypeInt 32 1 + %7 = OpTypeStruct %6 %6 %6 + %8 = OpTypePointer Function %7 + %9 = OpTypePointer Function %6 + %10 = OpTypeFunction %2 %8 %9 + %15 = OpTypeFunction %2 %9 %9 + %20 = OpTypeFunction %6 %9 + %24 = OpTypeFloat 32 + %25 = OpTypePointer Function %24 + %26 = OpTypeVector %24 3 + %27 = OpTypeFunction %26 %25 + %31 = OpTypeFunction %24 %25 + %35 = OpConstant %6 0 + %38 = OpConstant %6 1 + %39 = OpConstant %6 -1 + %41 = OpConstant %6 2 + %51 = OpTypeBool + %54 = OpTypeInt 32 0 + %55 = OpConstant %54 10 + %56 = OpTypeArray %7 %55 + %57 = OpTypePointer Private %56 + %58 = OpVariable %57 Private + %60 = OpTypePointer Private %6 + %77 = OpTypePointer Private %7 + %113 = OpConstant %54 50 + %114 = OpTypeArray %24 %113 + %115 = OpTypePointer Function %114 + %120 = OpConstant %6 50 + %138 = OpTypeVector %24 2 + %139 = OpTypeStruct %138 + %140 = OpTypePointer Uniform %139 + %141 = OpVariable %140 Uniform + %142 = OpConstant %54 0 + %143 = OpTypePointer Uniform %24 + %146 = OpConstant %54 1 + %187 = OpConstant %6 15 + %191 = OpConstant %24 30 + %193 = OpConstant %24 1 + %194 = OpConstant %24 5 + %200 = OpConstant %24 50 + %205 = OpConstant %24 6.5 + %209 = OpConstant %24 1.5 + %213 = OpConstant %6 100 + %219 = OpConstant %24 4 + %223 = OpConstant %24 0 + %226 = OpConstant %6 6 + %234 = OpConstant %24 10 + %235 = OpConstant %6 30 + %243 = OpConstant %6 9 + %253 = OpConstant %6 5 + %267 = OpConstantTrue %51 + %269 = OpConstant %6 7 + %278 = OpConstant %6 12 + %297 = OpConstant %6 8 + %324 = OpConstant %6 3 + %332 = OpTypeArray %24 %55 + %333 = OpTypeStruct %332 %332 + %334 = OpTypePointer Function %333 + %339 = OpConstant %6 10 + %357 = OpConstant %6 17 + %372 = OpConstant %6 13 + %377 = OpTypePointer Function %138 + %379 = OpTypeVector %24 4 + %380 = OpTypePointer Input %379 + %381 = OpVariable %380 Input + %384 = OpConstant %24 256 + %385 = OpConstantComposite %138 %384 %384 + %398 = OpConstant %6 -100 + %406 = OpConstant %6 20 + %435 = OpTypePointer Output %379 + %436 = OpVariable %435 Output + %442 = OpTypePointer Function %26 + %446 = OpConstantComposite %26 %193 %223 %223 + %4 = OpFunction %2 None %3 + %5 = OpLabel + %242 = OpVariable %9 Function + %244 = OpVariable %8 Function + %247 = OpVariable %9 Function + %254 = OpVariable %9 Function + %256 = OpVariable %9 Function + %260 = OpVariable %9 Function + %261 = OpVariable %9 Function + %279 = OpVariable %9 Function + %281 = OpVariable %9 Function + %285 = OpVariable %9 Function + %287 = OpVariable %9 Function + %291 = OpVariable %9 Function + %293 = OpVariable %9 Function + %298 = OpVariable %9 Function + %300 = OpVariable %9 Function + %304 = OpVariable %9 Function + %306 = OpVariable %9 Function + %310 = OpVariable %9 Function + %312 = OpVariable %9 Function + %316 = OpVariable %9 Function + %317 = OpVariable %9 Function + %331 = OpVariable %9 Function + %335 = OpVariable %334 Function + %358 = OpVariable %9 Function + %360 = OpVariable %9 Function + %373 = OpVariable %9 Function + %375 = OpVariable %9 Function + %378 = OpVariable %377 Function + %387 = OpVariable %25 Function + %388 = OpVariable %25 Function + %392 = OpVariable %25 Function + %393 = OpVariable %25 Function + %397 = OpVariable %9 Function + %399 = OpVariable %9 Function + %408 = OpVariable %9 Function + %409 = OpVariable %9 Function + %428 = OpVariable %25 Function + %443 = OpVariable %442 Function + %448 = OpVariable %25 Function + OpStore %242 %35 + %245 = OpAccessChain %77 %58 %35 + %246 = OpLoad %7 %245 + OpStore %244 %246 + OpStore %247 %243 + %248 = OpFunctionCall %2 %13 %244 %247 + %249 = OpLoad %7 %244 + %250 = OpAccessChain %77 %58 %35 + OpStore %250 %249 + %251 = OpLoad %6 %242 + %252 = OpIAdd %6 %251 %38 + OpStore %242 %252 + %255 = OpLoad %6 %242 + OpStore %254 %255 + OpStore %256 %253 + %257 = OpFunctionCall %2 %18 %254 %256 + %258 = OpLoad %6 %242 + %259 = OpIAdd %6 %258 %38 + OpStore %242 %259 + OpStore %260 %35 + OpStore %261 %35 + OpBranch %262 + %262 = OpLabel + OpLoopMerge %264 %265 None + OpBranch %266 + %266 = OpLabel + OpBranchConditional %267 %263 %264 + %263 = OpLabel + %268 = OpLoad %6 %260 + %270 = OpSGreaterThanEqual %51 %268 %269 + OpSelectionMerge %272 None + OpBranchConditional %270 %271 %272 + %271 = OpLabel + OpBranch %264 + %272 = OpLabel + %274 = OpLoad %6 %260 + %275 = OpIAdd %6 %274 %38 + OpStore %260 %275 + OpBranch %265 + %265 = OpLabel + %276 = OpLoad %6 %261 + %277 = OpIAdd %6 %276 %38 + OpStore %261 %277 + OpBranch %262 + %264 = OpLabel + %280 = OpLoad %6 %242 + OpStore %279 %280 + OpStore %281 %278 + %282 = OpFunctionCall %2 %18 %279 %281 + %283 = OpLoad %6 %242 + %284 = OpIAdd %6 %283 %38 + OpStore %242 %284 + %286 = OpLoad %6 %242 + OpStore %285 %286 + OpStore %287 %187 + %288 = OpFunctionCall %2 %18 %285 %287 + %289 = OpLoad %6 %242 + %290 = OpIAdd %6 %289 %38 + OpStore %242 %290 + %292 = OpLoad %6 %242 + OpStore %291 %292 + OpStore %293 %269 + %294 = OpFunctionCall %2 %18 %291 %293 + %295 = OpLoad %6 %242 + %296 = OpIAdd %6 %295 %38 + OpStore %242 %296 + %299 = OpLoad %6 %242 + OpStore %298 %299 + OpStore %300 %297 + %301 = OpFunctionCall %2 %18 %298 %300 + %302 = OpLoad %6 %242 + %303 = OpIAdd %6 %302 %38 + OpStore %242 %303 + %305 = OpLoad %6 %242 + OpStore %304 %305 + OpStore %306 %41 + %307 = OpFunctionCall %2 %18 %304 %306 + %308 = OpLoad %6 %242 + %309 = OpIAdd %6 %308 %38 + OpStore %242 %309 + %311 = OpLoad %6 %242 + OpStore %310 %311 + OpStore %312 %226 + %313 = OpFunctionCall %2 %18 %310 %312 + %314 = OpLoad %6 %242 + %315 = OpIAdd %6 %314 %38 + OpStore %242 %315 + OpStore %316 %35 + OpStore %317 %35 + OpBranch %318 + %318 = OpLabel + OpLoopMerge %320 %321 None + OpBranch %322 + %322 = OpLabel + OpBranchConditional %267 %319 %320 + %319 = OpLabel + %323 = OpLoad %6 %316 + %325 = OpSGreaterThanEqual %51 %323 %324 + OpSelectionMerge %327 None + OpBranchConditional %325 %326 %327 + %326 = OpLabel + OpBranch %320 + %327 = OpLabel + %329 = OpLoad %6 %316 + %330 = OpIAdd %6 %329 %38 + OpStore %316 %330 + OpStore %331 %38 + %336 = OpLoad %6 %331 + %337 = OpSGreaterThanEqual %51 %336 %35 + %338 = OpLoad %6 %331 + %340 = OpSLessThan %51 %338 %339 + %341 = OpLogicalAnd %51 %337 %340 + %342 = OpLoad %6 %331 + %343 = OpSelect %6 %341 %342 %35 + %344 = OpAccessChain %25 %335 %38 %38 + %345 = OpLoad %24 %344 + %346 = OpAccessChain %25 %335 %38 %343 + OpStore %346 %345 + %347 = OpLoad %6 %317 + %348 = OpSGreaterThanEqual %51 %347 %35 + %349 = OpLoad %6 %317 + %350 = OpSLessThan %51 %349 %339 + %351 = OpLogicalAnd %51 %348 %350 + %352 = OpLoad %6 %317 + %353 = OpSelect %6 %351 %352 %35 + %354 = OpAccessChain %25 %335 %38 %353 + OpStore %354 %193 + OpBranch %321 + %321 = OpLabel + %355 = OpLoad %6 %317 + %356 = OpIAdd %6 %355 %38 + OpStore %317 %356 + OpBranch %318 + %320 = OpLabel + %359 = OpLoad %6 %242 + OpStore %358 %359 + OpStore %360 %357 + %361 = OpFunctionCall %2 %18 %358 %360 + %362 = OpAccessChain %143 %141 %35 %142 + %363 = OpLoad %24 %362 + %364 = OpAccessChain %143 %141 %35 %146 + %365 = OpLoad %24 %364 + %366 = OpFOrdGreaterThan %51 %363 %365 + OpSelectionMerge %368 None + OpBranchConditional %366 %367 %368 + %367 = OpLabel + OpReturn + %368 = OpLabel + %370 = OpLoad %6 %242 + %371 = OpIAdd %6 %370 %38 + OpStore %242 %371 + %374 = OpLoad %6 %242 + OpStore %373 %374 + OpStore %375 %372 + %376 = OpFunctionCall %2 %18 %373 %375 + %382 = OpLoad %379 %381 + %383 = OpVectorShuffle %138 %382 %382 1 0 + %386 = OpFDiv %138 %383 %385 + OpStore %378 %386 + %389 = OpAccessChain %25 %378 %142 + %390 = OpLoad %24 %389 + OpStore %388 %390 + %391 = OpFunctionCall %24 %33 %388 + OpStore %387 %391 + %394 = OpAccessChain %25 %378 %146 + %395 = OpLoad %24 %394 + OpStore %393 %395 + %396 = OpFunctionCall %24 %33 %393 + OpStore %392 %396 + OpStore %397 %398 + OpStore %399 %35 + OpBranch %400 + %400 = OpLabel + OpLoopMerge %402 %403 None + OpBranch %404 + %404 = OpLabel + %405 = OpLoad %6 %399 + %407 = OpSLessThan %51 %405 %406 + OpBranchConditional %407 %401 %402 + %401 = OpLabel + %410 = OpLoad %6 %399 + OpStore %409 %410 + %411 = OpFunctionCall %6 %22 %409 + OpStore %408 %411 + %412 = OpLoad %6 %408 + %413 = OpSGreaterThan %51 %412 %35 + OpSelectionMerge %415 None + OpBranchConditional %413 %414 %416 + %414 = OpLabel + OpBranch %415 + %416 = OpLabel + %417 = OpLoad %6 %408 + OpSelectionMerge %420 None + OpSwitch %417 %420 -1 %418 0 %419 + %418 = OpLabel + %421 = OpLoad %6 %397 + %422 = OpIAdd %6 %421 %38 + OpStore %397 %422 + OpBranch %420 + %419 = OpLabel + OpReturn + %420 = OpLabel + OpBranch %415 + %415 = OpLabel + OpBranch %403 + %403 = OpLabel + %426 = OpLoad %6 %399 + %427 = OpIAdd %6 %426 %38 + OpStore %399 %427 + OpBranch %400 + %402 = OpLabel + %429 = OpLoad %24 %387 + %430 = OpLoad %24 %392 + %431 = OpLoad %6 %397 + %432 = OpConvertSToF %24 %431 + %433 = OpFMul %24 %430 %432 + %434 = OpFAdd %24 %429 %433 + OpStore %428 %434 + %437 = OpAccessChain %143 %141 %35 %142 + %438 = OpLoad %24 %437 + %439 = OpAccessChain %143 %141 %35 %146 + %440 = OpLoad %24 %439 + %441 = OpFOrdLessThan %51 %438 %440 + OpSelectionMerge %445 None + OpBranchConditional %441 %444 %447 + %444 = OpLabel + OpStore %443 %446 + OpBranch %445 + %447 = OpLabel + %449 = OpLoad %24 %428 + OpStore %448 %449 + %450 = OpFunctionCall %26 %29 %448 + OpStore %443 %450 + OpBranch %445 + %445 = OpLabel + %451 = OpLoad %26 %443 + %452 = OpCompositeExtract %24 %451 0 + %453 = OpCompositeExtract %24 %451 1 + %454 = OpCompositeExtract %24 %451 2 + %455 = OpCompositeConstruct %379 %452 %453 %454 %193 + OpStore %436 %455 + OpReturn + OpFunctionEnd + %13 = OpFunction %2 None %10 + %11 = OpFunctionParameter %8 + %12 = OpFunctionParameter %9 + %14 = OpLabel + %36 = OpLoad %6 %12 + %37 = OpAccessChain %9 %11 %35 + OpStore %37 %36 + %40 = OpAccessChain %9 %11 %38 + OpStore %40 %39 + %42 = OpAccessChain %9 %11 %41 + OpStore %42 %39 + OpReturn + OpFunctionEnd + %18 = OpFunction %2 None %15 + %16 = OpFunctionParameter %9 + %17 = OpFunctionParameter %9 + %19 = OpLabel + %43 = OpVariable %9 Function + %76 = OpVariable %8 Function + %80 = OpVariable %9 Function + %102 = OpVariable %8 Function + %105 = OpVariable %9 Function + %112 = OpVariable %9 Function + %116 = OpVariable %115 Function + OpStore %43 %35 + OpBranch %44 + %44 = OpLabel + OpLoopMerge %46 %47 None + OpBranch %48 + %48 = OpLabel + %49 = OpLoad %6 %43 + %50 = OpLoad %6 %16 + %52 = OpSLessThanEqual %51 %49 %50 + OpBranchConditional %52 %45 %46 + %45 = OpLabel + %53 = OpLoad %6 %17 + %59 = OpLoad %6 %43 + %61 = OpAccessChain %60 %58 %59 %35 + %62 = OpLoad %6 %61 + %63 = OpSLessThanEqual %51 %53 %62 + OpSelectionMerge %65 None + OpBranchConditional %63 %64 %91 + %64 = OpLabel + %66 = OpLoad %6 %43 + %67 = OpAccessChain %60 %58 %66 %38 + %68 = OpLoad %6 %67 + %69 = OpIEqual %51 %68 %39 + OpSelectionMerge %71 None + OpBranchConditional %69 %70 %86 + %70 = OpLabel + %72 = OpLoad %6 %43 + %73 = OpLoad %6 %16 + %74 = OpAccessChain %60 %58 %72 %38 + OpStore %74 %73 + %75 = OpLoad %6 %16 + %78 = OpAccessChain %77 %58 %75 + %79 = OpLoad %7 %78 + OpStore %76 %79 + %81 = OpLoad %6 %17 + OpStore %80 %81 + %82 = OpFunctionCall %2 %13 %76 %80 + %83 = OpLoad %7 %76 + %84 = OpAccessChain %77 %58 %75 + OpStore %84 %83 + OpReturn + %86 = OpLabel + %87 = OpLoad %6 %43 + %88 = OpAccessChain %60 %58 %87 %38 + %89 = OpLoad %6 %88 + OpStore %43 %89 + OpBranch %47 + %71 = OpLabel + OpBranch %65 + %91 = OpLabel + %92 = OpLoad %6 %43 + %93 = OpAccessChain %60 %58 %92 %41 + %94 = OpLoad %6 %93 + %95 = OpIEqual %51 %94 %39 + OpSelectionMerge %97 None + OpBranchConditional %95 %96 %111 + %96 = OpLabel + %98 = OpLoad %6 %43 + %99 = OpLoad %6 %16 + %100 = OpAccessChain %60 %58 %98 %41 + OpStore %100 %99 + %101 = OpLoad %6 %16 + %103 = OpAccessChain %77 %58 %101 + %104 = OpLoad %7 %103 + OpStore %102 %104 + %106 = OpLoad %6 %17 + OpStore %105 %106 + %107 = OpFunctionCall %2 %13 %102 %105 + %108 = OpLoad %7 %102 + %109 = OpAccessChain %77 %58 %101 + OpStore %109 %108 + OpReturn + %111 = OpLabel + OpStore %112 %38 + %117 = OpLoad %6 %112 + %118 = OpSGreaterThanEqual %51 %117 %35 + %119 = OpLoad %6 %112 + %121 = OpSLessThan %51 %119 %120 + %122 = OpLogicalAnd %51 %118 %121 + %123 = OpLoad %6 %112 + %124 = OpSelect %6 %122 %123 %35 + %125 = OpAccessChain %25 %116 %35 + %126 = OpLoad %24 %125 + %127 = OpAccessChain %25 %116 %124 + %128 = OpLoad %24 %127 + %129 = OpFAdd %24 %128 %126 + %130 = OpAccessChain %25 %116 %124 + OpStore %130 %129 + OpBranch %131 + %131 = OpLabel + OpLoopMerge %133 %134 None + OpBranch %132 + %132 = OpLabel + %135 = OpLoad %6 %43 + %136 = OpAccessChain %60 %58 %135 %41 + %137 = OpLoad %6 %136 + OpStore %43 %137 + OpBranch %134 + %134 = OpLabel + %144 = OpAccessChain %143 %141 %35 %142 + %145 = OpLoad %24 %144 + %147 = OpAccessChain %143 %141 %35 %146 + %148 = OpLoad %24 %147 + %149 = OpFOrdGreaterThan %51 %145 %148 + OpBranchConditional %149 %131 %133 + %133 = OpLabel + OpBranch %47 + %97 = OpLabel + OpBranch %65 + %65 = OpLabel + OpBranch %47 + %47 = OpLabel + OpBranch %44 + %46 = OpLabel + OpReturn + OpFunctionEnd + %22 = OpFunction %6 None %20 + %21 = OpFunctionParameter %9 + %23 = OpLabel + %151 = OpVariable %9 Function + %159 = OpVariable %8 Function + %175 = OpVariable %9 Function + OpStore %151 %35 + OpBranch %152 + %152 = OpLabel + OpLoopMerge %154 %155 None + OpBranch %156 + %156 = OpLabel + %157 = OpLoad %6 %151 + %158 = OpINotEqual %51 %157 %39 + OpBranchConditional %158 %153 %154 + %153 = OpLabel + %160 = OpLoad %6 %151 + %161 = OpAccessChain %77 %58 %160 + %162 = OpLoad %7 %161 + OpStore %159 %162 + %163 = OpAccessChain %9 %159 %35 + %164 = OpLoad %6 %163 + %165 = OpLoad %6 %21 + %166 = OpIEqual %51 %164 %165 + OpSelectionMerge %168 None + OpBranchConditional %166 %167 %168 + %167 = OpLabel + %169 = OpLoad %6 %21 + OpReturnValue %169 + %168 = OpLabel + %171 = OpLoad %6 %21 + %172 = OpAccessChain %9 %159 %35 + %173 = OpLoad %6 %172 + %174 = OpSGreaterThan %51 %171 %173 + OpSelectionMerge %177 None + OpBranchConditional %174 %176 %180 + %176 = OpLabel + %178 = OpAccessChain %9 %159 %41 + %179 = OpLoad %6 %178 + OpStore %175 %179 + OpBranch %177 + %180 = OpLabel + %181 = OpAccessChain %9 %159 %38 + %182 = OpLoad %6 %181 + OpStore %175 %182 + OpBranch %177 + %177 = OpLabel + %183 = OpLoad %6 %175 + OpStore %151 %183 + OpBranch %155 + %155 = OpLabel + OpBranch %152 + %154 = OpLabel + OpReturnValue %39 + OpFunctionEnd + %29 = OpFunction %26 None %27 + %28 = OpFunctionParameter %25 + %30 = OpLabel + %186 = OpVariable %25 Function + %188 = OpVariable %9 Function + OpStore %188 %187 + %189 = OpFunctionCall %6 %22 %188 + %190 = OpConvertSToF %24 %189 + OpStore %186 %190 + %192 = OpLoad %24 %28 + %195 = OpLoad %24 %186 + %196 = OpCompositeConstruct %26 %193 %194 %195 + %197 = OpVectorTimesScalar %26 %196 %192 + %198 = OpCompositeConstruct %26 %191 %191 %191 + %199 = OpFAdd %26 %198 %197 + %201 = OpCompositeConstruct %26 %200 %200 %200 + %202 = OpFDiv %26 %199 %201 + OpReturnValue %202 + OpFunctionEnd + %33 = OpFunction %24 None %31 + %32 = OpFunctionParameter %25 + %34 = OpLabel + %214 = OpVariable %9 Function + %227 = OpVariable %9 Function + %236 = OpVariable %9 Function + %206 = OpLoad %24 %32 + %207 = OpFMul %24 %206 %205 + OpStore %32 %207 + %208 = OpLoad %24 %32 + %210 = OpFOrdLessThan %51 %208 %209 + OpSelectionMerge %212 None + OpBranchConditional %210 %211 %212 + %211 = OpLabel + OpStore %214 %213 + %215 = OpFunctionCall %6 %22 %214 + %216 = OpConvertSToF %24 %215 + OpReturnValue %216 + %212 = OpLabel + %218 = OpLoad %24 %32 + %220 = OpFOrdLessThan %51 %218 %219 + OpSelectionMerge %222 None + OpBranchConditional %220 %221 %222 + %221 = OpLabel + OpReturnValue %223 + %222 = OpLabel + %225 = OpLoad %24 %32 + OpStore %227 %226 + %228 = OpFunctionCall %6 %22 %227 + %229 = OpConvertSToF %24 %228 + %230 = OpFOrdLessThan %51 %225 %229 + OpSelectionMerge %232 None + OpBranchConditional %230 %231 %232 + %231 = OpLabel + OpReturnValue %193 + %232 = OpLabel + OpStore %236 %235 + %237 = OpFunctionCall %6 %22 %236 + %238 = OpConvertSToF %24 %237 + %239 = OpFAdd %24 %234 %238 + OpReturnValue %239 + OpFunctionEnd +END + +# uniforms for variant + +# injectionSwitch +BUFFER variant_injectionSwitch DATA_TYPE vec2 DATA + 0.0 1.0 +END + +BUFFER framebuffer FORMAT B8G8R8A8_UNORM + +PIPELINE graphics gfz_pipeline + ATTACH variant_vertex_shader + ATTACH variant_fragment_shader + FRAMEBUFFER_SIZE 256 256 + BIND BUFFER framebuffer AS color LOCATION 0 + BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0 +END +CLEAR_COLOR gfz_pipeline 0 0 0 255 + +CLEAR gfz_pipeline +RUN gfz_pipeline DRAW_RECT POS 0 0 SIZE 256 256 +EXPECT framebuffer IDX 0 0 SIZE 256 256 EQ_RGB 255 0 0 \ No newline at end of file diff --git a/external/vulkancts/modules/vulkan/amber/vktAmberGraphicsFuzzTests.cpp b/external/vulkancts/modules/vulkan/amber/vktAmberGraphicsFuzzTests.cpp index 7e6d864..fc0b5c5 100644 --- a/external/vulkancts/modules/vulkan/amber/vktAmberGraphicsFuzzTests.cpp +++ b/external/vulkancts/modules/vulkan/amber/vktAmberGraphicsFuzzTests.cpp @@ -64,6 +64,7 @@ void createAmberTests (tcu::TestCaseGroup* group) { "swizzle-struct-init-min.amber", "swizzle-struct-init-min", "A fragment shader that uses vector swizzles, struct initializers, and min" }, { "unreachable-loops-in-switch.amber", "unreachable-loops-in-switch", "A fragment shader with unreachable loops in a switch" }, { "while-inside-switch.amber", "while-inside-switch", "A fragment shader that uses a while loop inside a switch" }, + { "write-red-after-search.amber", "write-red-after-search", "A fragment shader performing a search computation, then writing red regardless" }, }; for (size_t i = 0; i < sizeof tests / sizeof tests[0]; i++) diff --git a/external/vulkancts/mustpass/master/vk-default-no-waivers.txt b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt index 3c99c96..5e179a6 100644 --- a/external/vulkancts/mustpass/master/vk-default-no-waivers.txt +++ b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt @@ -466899,6 +466899,7 @@ dEQP-VK.graphicsfuzz.return-in-loop-in-function dEQP-VK.graphicsfuzz.swizzle-struct-init-min dEQP-VK.graphicsfuzz.unreachable-loops-in-switch dEQP-VK.graphicsfuzz.while-inside-switch +dEQP-VK.graphicsfuzz.write-red-after-search dEQP-VK.transform_feedback.simple.basic_1_256 dEQP-VK.transform_feedback.simple.basic_beginqueryindexed_streamid_0_1_256 dEQP-VK.transform_feedback.simple.basic_endqueryindexed_streamid_0_1_256 diff --git a/external/vulkancts/mustpass/master/vk-default.txt b/external/vulkancts/mustpass/master/vk-default.txt index f6e8d6b..e1a9382 100644 --- a/external/vulkancts/mustpass/master/vk-default.txt +++ b/external/vulkancts/mustpass/master/vk-default.txt @@ -466746,6 +466746,7 @@ dEQP-VK.graphicsfuzz.return-in-loop-in-function dEQP-VK.graphicsfuzz.swizzle-struct-init-min dEQP-VK.graphicsfuzz.unreachable-loops-in-switch dEQP-VK.graphicsfuzz.while-inside-switch +dEQP-VK.graphicsfuzz.write-red-after-search dEQP-VK.transform_feedback.simple.basic_1_256 dEQP-VK.transform_feedback.simple.basic_beginqueryindexed_streamid_0_1_256 dEQP-VK.transform_feedback.simple.basic_endqueryindexed_streamid_0_1_256