1065 lines
35 KiB
Plaintext
1065 lines
35 KiB
Plaintext
#!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 TARGET_ENV spv1.0
|
|
; 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<float> 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 |