853 lines
29 KiB
Plaintext
853 lines
29 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 with a lot of control flow
|
|
|
|
# The test passes because the fragment shader does not enter the first if statement, then writes
|
|
# the color red.
|
|
|
|
SHADER vertex variant_vertex_shader PASSTHROUGH
|
|
|
|
# variant_fragment_shader is derived from the following GLSL:
|
|
# #version 310 es
|
|
# precision highp float;
|
|
#
|
|
# layout(set = 0, binding = 0) uniform buf0
|
|
# {
|
|
# vec2 injectionSwitch;
|
|
# };
|
|
# layout(location = 0) out vec4 _GLF_color;
|
|
#
|
|
# vec3 drawShape(vec2 pos)
|
|
# {
|
|
# bool c2;
|
|
# c2 = pos.x > 1.0;
|
|
# if (c2)
|
|
# {
|
|
# return vec3(1.0);
|
|
# }
|
|
# bool c3;
|
|
# c3 = pos.y < 1.0;
|
|
# if (c3)
|
|
# {
|
|
# return vec3(1.0);
|
|
# }
|
|
# bool c4;
|
|
# c4 = pos.y > 1.0;
|
|
# if (c4)
|
|
# {
|
|
# return vec3(1.0);
|
|
# }
|
|
# bool c5;
|
|
# c5 = pos.x < 1.0;
|
|
# if (c5)
|
|
# {
|
|
# return vec3(1.0);
|
|
# }
|
|
# bool c6;
|
|
# c6 = pos.x + 1.0 > 1.0;
|
|
# if (c6)
|
|
# {
|
|
# return vec3(1.0);
|
|
# }
|
|
# int GLF_live4_looplimiter5;
|
|
# for (
|
|
# int GLF_live4i = 0;
|
|
# GLF_live4i < 4;
|
|
# ++GLF_live4i)
|
|
# {
|
|
# if (GLF_live4_looplimiter5 >= 7)
|
|
# {
|
|
# break;
|
|
# }
|
|
# GLF_live4_looplimiter5++;
|
|
# mat4x2 GLF_live7m42;
|
|
# GLF_live7m42 = mat4x2(1.0);
|
|
# mat3 GLF_live7m33;
|
|
# GLF_live7m33 = mat3(1.0);
|
|
# int GLF_live7_looplimiter3;
|
|
# for (
|
|
# int GLF_live7cols = 2;
|
|
# GLF_live7cols < 4;
|
|
# ++GLF_live7cols)
|
|
# {
|
|
# if (GLF_live7_looplimiter3 >= 7)
|
|
# {
|
|
# break;
|
|
# }
|
|
# GLF_live7_looplimiter3++;
|
|
# int GLF_live7_looplimiter2;
|
|
# for (
|
|
# int GLF_live7rows = 2;
|
|
# GLF_live7rows < 4;
|
|
# ++GLF_live7rows)
|
|
# {
|
|
# if (GLF_live7_looplimiter2 >= 7)
|
|
# {
|
|
# break;
|
|
# }
|
|
# GLF_live7_looplimiter2++;
|
|
# int GLF_live7_looplimiter1;
|
|
# GLF_live7_looplimiter1 = 0;
|
|
# for (
|
|
# int GLF_live7c = 0;
|
|
# GLF_live7c < 3;
|
|
# GLF_live7c++)
|
|
# {
|
|
# if (GLF_live7_looplimiter1 >= 7)
|
|
# {
|
|
# break;
|
|
# }
|
|
# GLF_live7_looplimiter1++;
|
|
# int GLF_live7_looplimiter0;
|
|
# for (
|
|
# int GLF_live7r = 0;
|
|
# GLF_live7r < 2;
|
|
# ++GLF_live7r)
|
|
# {
|
|
# if (GLF_live7_looplimiter0 >= 7)
|
|
# {
|
|
# break;
|
|
# }
|
|
# GLF_live7_looplimiter0++;
|
|
# GLF_live7m33[GLF_live7c >= 0 && GLF_live7c < 3 ? GLF_live7c : 0][GLF_live7r >= 0 && GLF_live7r < 3 ? GLF_live7r : 0] = 1.0;
|
|
# if (0.0 > injectionSwitch.y)
|
|
# {
|
|
# }
|
|
# else
|
|
# {
|
|
# GLF_live7m42[GLF_live7c >= 0 && GLF_live7c < 4 ? GLF_live7c : 0][GLF_live7r >= 0 && GLF_live7r < 2 ? GLF_live7r : 0] = 1.0;
|
|
# }
|
|
# }
|
|
# }
|
|
# }
|
|
# }
|
|
# float GLF_live7sums[9];
|
|
# int GLF_live7sum_index;
|
|
# GLF_live7sum_index = 0;
|
|
# int GLF_live7_looplimiter7;
|
|
# GLF_live7_looplimiter7 = 0;
|
|
# for (
|
|
# int GLF_live7cols = 2;
|
|
# GLF_live7cols < 4;
|
|
# ++GLF_live7cols)
|
|
# {
|
|
# if (GLF_live7_looplimiter7 >= 7)
|
|
# {
|
|
# break;
|
|
# }
|
|
# GLF_live7_looplimiter7++;
|
|
# int GLF_live7rows;
|
|
# GLF_live7rows = 2;
|
|
# GLF_live7sums[GLF_live7sum_index >= 0 && GLF_live7sum_index < 9 ? GLF_live7sum_index : 0] = 0.0;
|
|
# for (
|
|
# int GLF_live7c = 0;
|
|
# GLF_live7c < 1;
|
|
# GLF_live7c++)
|
|
# {
|
|
# for (
|
|
# int GLF_live7r = 0;
|
|
# GLF_live7r < GLF_live7rows;
|
|
# GLF_live7r++)
|
|
# {
|
|
# GLF_live7sums[GLF_live7sum_index >= 0 && GLF_live7sum_index < 9 ? GLF_live7sum_index : 0] += transpose(GLF_live7m33)[GLF_live7c < 3 ? 1 : int(injectionSwitch.x)][GLF_live7r < 3 ? 1 : 0];
|
|
# GLF_live7sums[GLF_live7sum_index >= 0 && GLF_live7sum_index < 9 ? GLF_live7sum_index : 0] += GLF_live7m42[1][GLF_live7r];
|
|
# }
|
|
# }
|
|
# GLF_live7sum_index++;
|
|
# }
|
|
# }
|
|
# return vec3(1.0);
|
|
# }
|
|
# void main()
|
|
# {
|
|
# if (injectionSwitch.x >= 2.0) // always false
|
|
# {
|
|
# vec2 position = gl_FragCoord.xy;
|
|
# drawShape(position);
|
|
# drawShape(position);
|
|
#
|
|
# for (
|
|
# int i = 25;
|
|
# i > 0;
|
|
# --i)
|
|
# {
|
|
# drawShape(position);
|
|
# }
|
|
# }
|
|
# _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
|
|
# }
|
|
SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
|
|
; SPIR-V
|
|
; Version: 1.0
|
|
; Generator: Khronos Glslang Reference Front End; 7
|
|
; Bound: 352
|
|
; Schema: 0
|
|
OpCapability Shader
|
|
%1 = OpExtInstImport "GLSL.std.450"
|
|
OpMemoryModel Logical GLSL450
|
|
OpEntryPoint Fragment %4 "main" %326 %350
|
|
OpExecutionMode %4 OriginUpperLeft
|
|
OpSource ESSL 310
|
|
OpName %4 "main"
|
|
OpName %12 "drawShape(vf2;"
|
|
OpName %11 "pos"
|
|
OpName %16 "c2"
|
|
OpName %29 "c3"
|
|
OpName %38 "c4"
|
|
OpName %46 "c5"
|
|
OpName %54 "c6"
|
|
OpName %65 "GLF_live4i"
|
|
OpName %75 "GLF_live4_looplimiter5"
|
|
OpName %87 "GLF_live7m42"
|
|
OpName %95 "GLF_live7m33"
|
|
OpName %100 "GLF_live7cols"
|
|
OpName %109 "GLF_live7_looplimiter3"
|
|
OpName %117 "GLF_live7rows"
|
|
OpName %125 "GLF_live7_looplimiter2"
|
|
OpName %133 "GLF_live7_looplimiter1"
|
|
OpName %134 "GLF_live7c"
|
|
OpName %150 "GLF_live7r"
|
|
OpName %158 "GLF_live7_looplimiter0"
|
|
OpName %181 "buf0"
|
|
OpMemberName %181 0 "injectionSwitch"
|
|
OpName %183 ""
|
|
OpName %214 "GLF_live7sum_index"
|
|
OpName %215 "GLF_live7_looplimiter7"
|
|
OpName %216 "GLF_live7cols"
|
|
OpName %231 "GLF_live7rows"
|
|
OpName %235 "GLF_live7sums"
|
|
OpName %245 "GLF_live7c"
|
|
OpName %253 "GLF_live7r"
|
|
OpName %284 "indexable"
|
|
OpName %323 "position"
|
|
OpName %326 "gl_FragCoord"
|
|
OpName %329 "param"
|
|
OpName %332 "param"
|
|
OpName %335 "i"
|
|
OpName %344 "param"
|
|
OpName %350 "_GLF_color"
|
|
OpDecorate %65 RelaxedPrecision
|
|
OpDecorate %72 RelaxedPrecision
|
|
OpDecorate %75 RelaxedPrecision
|
|
OpDecorate %76 RelaxedPrecision
|
|
OpDecorate %82 RelaxedPrecision
|
|
OpDecorate %84 RelaxedPrecision
|
|
OpDecorate %100 RelaxedPrecision
|
|
OpDecorate %107 RelaxedPrecision
|
|
OpDecorate %109 RelaxedPrecision
|
|
OpDecorate %110 RelaxedPrecision
|
|
OpDecorate %115 RelaxedPrecision
|
|
OpDecorate %116 RelaxedPrecision
|
|
OpDecorate %117 RelaxedPrecision
|
|
OpDecorate %123 RelaxedPrecision
|
|
OpDecorate %125 RelaxedPrecision
|
|
OpDecorate %126 RelaxedPrecision
|
|
OpDecorate %131 RelaxedPrecision
|
|
OpDecorate %132 RelaxedPrecision
|
|
OpDecorate %133 RelaxedPrecision
|
|
OpDecorate %134 RelaxedPrecision
|
|
OpDecorate %140 RelaxedPrecision
|
|
OpDecorate %143 RelaxedPrecision
|
|
OpDecorate %148 RelaxedPrecision
|
|
OpDecorate %149 RelaxedPrecision
|
|
OpDecorate %150 RelaxedPrecision
|
|
OpDecorate %156 RelaxedPrecision
|
|
OpDecorate %158 RelaxedPrecision
|
|
OpDecorate %159 RelaxedPrecision
|
|
OpDecorate %164 RelaxedPrecision
|
|
OpDecorate %165 RelaxedPrecision
|
|
OpDecorate %166 RelaxedPrecision
|
|
OpDecorate %168 RelaxedPrecision
|
|
OpDecorate %171 RelaxedPrecision
|
|
OpDecorate %173 RelaxedPrecision
|
|
OpDecorate %175 RelaxedPrecision
|
|
OpDecorate %178 RelaxedPrecision
|
|
OpMemberDecorate %181 0 Offset 0
|
|
OpDecorate %181 Block
|
|
OpDecorate %183 DescriptorSet 0
|
|
OpDecorate %183 Binding 0
|
|
OpDecorate %191 RelaxedPrecision
|
|
OpDecorate %193 RelaxedPrecision
|
|
OpDecorate %196 RelaxedPrecision
|
|
OpDecorate %198 RelaxedPrecision
|
|
OpDecorate %200 RelaxedPrecision
|
|
OpDecorate %203 RelaxedPrecision
|
|
OpDecorate %206 RelaxedPrecision
|
|
OpDecorate %207 RelaxedPrecision
|
|
OpDecorate %208 RelaxedPrecision
|
|
OpDecorate %209 RelaxedPrecision
|
|
OpDecorate %210 RelaxedPrecision
|
|
OpDecorate %211 RelaxedPrecision
|
|
OpDecorate %212 RelaxedPrecision
|
|
OpDecorate %213 RelaxedPrecision
|
|
OpDecorate %214 RelaxedPrecision
|
|
OpDecorate %215 RelaxedPrecision
|
|
OpDecorate %216 RelaxedPrecision
|
|
OpDecorate %222 RelaxedPrecision
|
|
OpDecorate %224 RelaxedPrecision
|
|
OpDecorate %229 RelaxedPrecision
|
|
OpDecorate %230 RelaxedPrecision
|
|
OpDecorate %231 RelaxedPrecision
|
|
OpDecorate %236 RelaxedPrecision
|
|
OpDecorate %238 RelaxedPrecision
|
|
OpDecorate %242 RelaxedPrecision
|
|
OpDecorate %245 RelaxedPrecision
|
|
OpDecorate %251 RelaxedPrecision
|
|
OpDecorate %253 RelaxedPrecision
|
|
OpDecorate %259 RelaxedPrecision
|
|
OpDecorate %260 RelaxedPrecision
|
|
OpDecorate %262 RelaxedPrecision
|
|
OpDecorate %264 RelaxedPrecision
|
|
OpDecorate %267 RelaxedPrecision
|
|
OpDecorate %271 RelaxedPrecision
|
|
OpDecorate %281 RelaxedPrecision
|
|
OpDecorate %291 RelaxedPrecision
|
|
OpDecorate %293 RelaxedPrecision
|
|
OpDecorate %296 RelaxedPrecision
|
|
OpDecorate %298 RelaxedPrecision
|
|
OpDecorate %305 RelaxedPrecision
|
|
OpDecorate %306 RelaxedPrecision
|
|
OpDecorate %307 RelaxedPrecision
|
|
OpDecorate %308 RelaxedPrecision
|
|
OpDecorate %309 RelaxedPrecision
|
|
OpDecorate %310 RelaxedPrecision
|
|
OpDecorate %311 RelaxedPrecision
|
|
OpDecorate %312 RelaxedPrecision
|
|
OpDecorate %313 RelaxedPrecision
|
|
OpDecorate %314 RelaxedPrecision
|
|
OpDecorate %326 BuiltIn FragCoord
|
|
OpDecorate %335 RelaxedPrecision
|
|
OpDecorate %342 RelaxedPrecision
|
|
OpDecorate %347 RelaxedPrecision
|
|
OpDecorate %348 RelaxedPrecision
|
|
OpDecorate %350 Location 0
|
|
%2 = OpTypeVoid
|
|
%3 = OpTypeFunction %2
|
|
%6 = OpTypeFloat 32
|
|
%7 = OpTypeVector %6 2
|
|
%8 = OpTypePointer Function %7
|
|
%9 = OpTypeVector %6 3
|
|
%10 = OpTypeFunction %9 %8
|
|
%14 = OpTypeBool
|
|
%15 = OpTypePointer Function %14
|
|
%17 = OpTypeInt 32 0
|
|
%18 = OpConstant %17 0
|
|
%19 = OpTypePointer Function %6
|
|
%22 = OpConstant %6 1
|
|
%27 = OpConstantComposite %9 %22 %22 %22
|
|
%30 = OpConstant %17 1
|
|
%63 = OpTypeInt 32 1
|
|
%64 = OpTypePointer Function %63
|
|
%66 = OpConstant %63 0
|
|
%73 = OpConstant %63 4
|
|
%77 = OpConstant %63 7
|
|
%83 = OpConstant %63 1
|
|
%85 = OpTypeMatrix %7 4
|
|
%86 = OpTypePointer Function %85
|
|
%88 = OpConstant %6 0
|
|
%89 = OpConstantComposite %7 %22 %88
|
|
%90 = OpConstantComposite %7 %88 %22
|
|
%91 = OpConstantComposite %7 %88 %88
|
|
%92 = OpConstantComposite %85 %89 %90 %91 %89
|
|
%93 = OpTypeMatrix %9 3
|
|
%94 = OpTypePointer Function %93
|
|
%96 = OpConstantComposite %9 %22 %88 %88
|
|
%97 = OpConstantComposite %9 %88 %22 %88
|
|
%98 = OpConstantComposite %9 %88 %88 %22
|
|
%99 = OpConstantComposite %93 %96 %97 %98
|
|
%101 = OpConstant %63 2
|
|
%141 = OpConstant %63 3
|
|
%181 = OpTypeStruct %7
|
|
%182 = OpTypePointer Uniform %181
|
|
%183 = OpVariable %182 Uniform
|
|
%184 = OpTypePointer Uniform %6
|
|
%232 = OpConstant %17 9
|
|
%233 = OpTypeArray %6 %232
|
|
%234 = OpTypePointer Function %233
|
|
%239 = OpConstant %63 9
|
|
%319 = OpConstant %6 2
|
|
%324 = OpTypeVector %6 4
|
|
%325 = OpTypePointer Input %324
|
|
%326 = OpVariable %325 Input
|
|
%336 = OpConstant %63 25
|
|
%349 = OpTypePointer Output %324
|
|
%350 = OpVariable %349 Output
|
|
%351 = OpConstantComposite %324 %22 %88 %88 %22
|
|
%4 = OpFunction %2 None %3
|
|
%5 = OpLabel
|
|
%323 = OpVariable %8 Function
|
|
%329 = OpVariable %8 Function
|
|
%332 = OpVariable %8 Function
|
|
%335 = OpVariable %64 Function
|
|
%344 = OpVariable %8 Function
|
|
%317 = OpAccessChain %184 %183 %66 %18
|
|
%318 = OpLoad %6 %317
|
|
%320 = OpFOrdGreaterThanEqual %14 %318 %319
|
|
OpSelectionMerge %322 None
|
|
OpBranchConditional %320 %321 %322
|
|
%321 = OpLabel
|
|
%327 = OpLoad %324 %326
|
|
%328 = OpVectorShuffle %7 %327 %327 0 1
|
|
OpStore %323 %328
|
|
%330 = OpLoad %7 %323
|
|
OpStore %329 %330
|
|
%331 = OpFunctionCall %9 %12 %329
|
|
%333 = OpLoad %7 %323
|
|
OpStore %332 %333
|
|
%334 = OpFunctionCall %9 %12 %332
|
|
OpStore %335 %336
|
|
OpBranch %337
|
|
%337 = OpLabel
|
|
OpLoopMerge %339 %340 None
|
|
OpBranch %341
|
|
%341 = OpLabel
|
|
%342 = OpLoad %63 %335
|
|
%343 = OpSGreaterThan %14 %342 %66
|
|
OpBranchConditional %343 %338 %339
|
|
%338 = OpLabel
|
|
%345 = OpLoad %7 %323
|
|
OpStore %344 %345
|
|
%346 = OpFunctionCall %9 %12 %344
|
|
OpBranch %340
|
|
%340 = OpLabel
|
|
%347 = OpLoad %63 %335
|
|
%348 = OpISub %63 %347 %83
|
|
OpStore %335 %348
|
|
OpBranch %337
|
|
%339 = OpLabel
|
|
OpBranch %322
|
|
%322 = OpLabel
|
|
OpStore %350 %351
|
|
OpReturn
|
|
OpFunctionEnd
|
|
%12 = OpFunction %9 None %10
|
|
%11 = OpFunctionParameter %8
|
|
%13 = OpLabel
|
|
%16 = OpVariable %15 Function
|
|
%29 = OpVariable %15 Function
|
|
%38 = OpVariable %15 Function
|
|
%46 = OpVariable %15 Function
|
|
%54 = OpVariable %15 Function
|
|
%65 = OpVariable %64 Function
|
|
%75 = OpVariable %64 Function
|
|
%87 = OpVariable %86 Function
|
|
%95 = OpVariable %94 Function
|
|
%100 = OpVariable %64 Function
|
|
%109 = OpVariable %64 Function
|
|
%117 = OpVariable %64 Function
|
|
%125 = OpVariable %64 Function
|
|
%133 = OpVariable %64 Function
|
|
%134 = OpVariable %64 Function
|
|
%150 = OpVariable %64 Function
|
|
%158 = OpVariable %64 Function
|
|
%214 = OpVariable %64 Function
|
|
%215 = OpVariable %64 Function
|
|
%216 = OpVariable %64 Function
|
|
%231 = OpVariable %64 Function
|
|
%235 = OpVariable %234 Function
|
|
%245 = OpVariable %64 Function
|
|
%253 = OpVariable %64 Function
|
|
%273 = OpVariable %64 Function
|
|
%284 = OpVariable %94 Function
|
|
%20 = OpAccessChain %19 %11 %18
|
|
%21 = OpLoad %6 %20
|
|
%23 = OpFOrdGreaterThan %14 %21 %22
|
|
OpStore %16 %23
|
|
%24 = OpLoad %14 %16
|
|
OpSelectionMerge %26 None
|
|
OpBranchConditional %24 %25 %26
|
|
%25 = OpLabel
|
|
OpReturnValue %27
|
|
%26 = OpLabel
|
|
%31 = OpAccessChain %19 %11 %30
|
|
%32 = OpLoad %6 %31
|
|
%33 = OpFOrdLessThan %14 %32 %22
|
|
OpStore %29 %33
|
|
%34 = OpLoad %14 %29
|
|
OpSelectionMerge %36 None
|
|
OpBranchConditional %34 %35 %36
|
|
%35 = OpLabel
|
|
OpReturnValue %27
|
|
%36 = OpLabel
|
|
%39 = OpAccessChain %19 %11 %30
|
|
%40 = OpLoad %6 %39
|
|
%41 = OpFOrdGreaterThan %14 %40 %22
|
|
OpStore %38 %41
|
|
%42 = OpLoad %14 %38
|
|
OpSelectionMerge %44 None
|
|
OpBranchConditional %42 %43 %44
|
|
%43 = OpLabel
|
|
OpReturnValue %27
|
|
%44 = OpLabel
|
|
%47 = OpAccessChain %19 %11 %18
|
|
%48 = OpLoad %6 %47
|
|
%49 = OpFOrdLessThan %14 %48 %22
|
|
OpStore %46 %49
|
|
%50 = OpLoad %14 %46
|
|
OpSelectionMerge %52 None
|
|
OpBranchConditional %50 %51 %52
|
|
%51 = OpLabel
|
|
OpReturnValue %27
|
|
%52 = OpLabel
|
|
%55 = OpAccessChain %19 %11 %18
|
|
%56 = OpLoad %6 %55
|
|
%57 = OpFAdd %6 %56 %22
|
|
%58 = OpFOrdGreaterThan %14 %57 %22
|
|
OpStore %54 %58
|
|
%59 = OpLoad %14 %54
|
|
OpSelectionMerge %61 None
|
|
OpBranchConditional %59 %60 %61
|
|
%60 = OpLabel
|
|
OpReturnValue %27
|
|
%61 = OpLabel
|
|
OpStore %65 %66
|
|
OpBranch %67
|
|
%67 = OpLabel
|
|
OpLoopMerge %69 %70 None
|
|
OpBranch %71
|
|
%71 = OpLabel
|
|
%72 = OpLoad %63 %65
|
|
%74 = OpSLessThan %14 %72 %73
|
|
OpBranchConditional %74 %68 %69
|
|
%68 = OpLabel
|
|
%76 = OpLoad %63 %75
|
|
%78 = OpSGreaterThanEqual %14 %76 %77
|
|
OpSelectionMerge %80 None
|
|
OpBranchConditional %78 %79 %80
|
|
%79 = OpLabel
|
|
OpBranch %69
|
|
%80 = OpLabel
|
|
%82 = OpLoad %63 %75
|
|
%84 = OpIAdd %63 %82 %83
|
|
OpStore %75 %84
|
|
OpStore %87 %92
|
|
OpStore %95 %99
|
|
OpStore %100 %101
|
|
OpBranch %102
|
|
%102 = OpLabel
|
|
OpLoopMerge %104 %105 None
|
|
OpBranch %106
|
|
%106 = OpLabel
|
|
%107 = OpLoad %63 %100
|
|
%108 = OpSLessThan %14 %107 %73
|
|
OpBranchConditional %108 %103 %104
|
|
%103 = OpLabel
|
|
%110 = OpLoad %63 %109
|
|
%111 = OpSGreaterThanEqual %14 %110 %77
|
|
OpSelectionMerge %113 None
|
|
OpBranchConditional %111 %112 %113
|
|
%112 = OpLabel
|
|
OpBranch %104
|
|
%113 = OpLabel
|
|
%115 = OpLoad %63 %109
|
|
%116 = OpIAdd %63 %115 %83
|
|
OpStore %109 %116
|
|
OpStore %117 %101
|
|
OpBranch %118
|
|
%118 = OpLabel
|
|
OpLoopMerge %120 %121 None
|
|
OpBranch %122
|
|
%122 = OpLabel
|
|
%123 = OpLoad %63 %117
|
|
%124 = OpSLessThan %14 %123 %73
|
|
OpBranchConditional %124 %119 %120
|
|
%119 = OpLabel
|
|
%126 = OpLoad %63 %125
|
|
%127 = OpSGreaterThanEqual %14 %126 %77
|
|
OpSelectionMerge %129 None
|
|
OpBranchConditional %127 %128 %129
|
|
%128 = OpLabel
|
|
OpBranch %120
|
|
%129 = OpLabel
|
|
%131 = OpLoad %63 %125
|
|
%132 = OpIAdd %63 %131 %83
|
|
OpStore %125 %132
|
|
OpStore %133 %66
|
|
OpStore %134 %66
|
|
OpBranch %135
|
|
%135 = OpLabel
|
|
OpLoopMerge %137 %138 None
|
|
OpBranch %139
|
|
%139 = OpLabel
|
|
%140 = OpLoad %63 %134
|
|
%142 = OpSLessThan %14 %140 %141
|
|
OpBranchConditional %142 %136 %137
|
|
%136 = OpLabel
|
|
%143 = OpLoad %63 %133
|
|
%144 = OpSGreaterThanEqual %14 %143 %77
|
|
OpSelectionMerge %146 None
|
|
OpBranchConditional %144 %145 %146
|
|
%145 = OpLabel
|
|
OpBranch %137
|
|
%146 = OpLabel
|
|
%148 = OpLoad %63 %133
|
|
%149 = OpIAdd %63 %148 %83
|
|
OpStore %133 %149
|
|
OpStore %150 %66
|
|
OpBranch %151
|
|
%151 = OpLabel
|
|
OpLoopMerge %153 %154 None
|
|
OpBranch %155
|
|
%155 = OpLabel
|
|
%156 = OpLoad %63 %150
|
|
%157 = OpSLessThan %14 %156 %101
|
|
OpBranchConditional %157 %152 %153
|
|
%152 = OpLabel
|
|
%159 = OpLoad %63 %158
|
|
%160 = OpSGreaterThanEqual %14 %159 %77
|
|
OpSelectionMerge %162 None
|
|
OpBranchConditional %160 %161 %162
|
|
%161 = OpLabel
|
|
OpBranch %153
|
|
%162 = OpLabel
|
|
%164 = OpLoad %63 %158
|
|
%165 = OpIAdd %63 %164 %83
|
|
OpStore %158 %165
|
|
%166 = OpLoad %63 %134
|
|
%167 = OpSGreaterThanEqual %14 %166 %66
|
|
%168 = OpLoad %63 %134
|
|
%169 = OpSLessThan %14 %168 %141
|
|
%170 = OpLogicalAnd %14 %167 %169
|
|
%171 = OpLoad %63 %134
|
|
%172 = OpSelect %63 %170 %171 %66
|
|
%173 = OpLoad %63 %150
|
|
%174 = OpSGreaterThanEqual %14 %173 %66
|
|
%175 = OpLoad %63 %150
|
|
%176 = OpSLessThan %14 %175 %141
|
|
%177 = OpLogicalAnd %14 %174 %176
|
|
%178 = OpLoad %63 %150
|
|
%179 = OpSelect %63 %177 %178 %66
|
|
%180 = OpAccessChain %19 %95 %172 %179
|
|
OpStore %180 %22
|
|
%185 = OpAccessChain %184 %183 %66 %30
|
|
%186 = OpLoad %6 %185
|
|
%187 = OpFOrdGreaterThan %14 %88 %186
|
|
OpSelectionMerge %189 None
|
|
OpBranchConditional %187 %188 %190
|
|
%188 = OpLabel
|
|
OpBranch %189
|
|
%190 = OpLabel
|
|
%191 = OpLoad %63 %134
|
|
%192 = OpSGreaterThanEqual %14 %191 %66
|
|
%193 = OpLoad %63 %134
|
|
%194 = OpSLessThan %14 %193 %73
|
|
%195 = OpLogicalAnd %14 %192 %194
|
|
%196 = OpLoad %63 %134
|
|
%197 = OpSelect %63 %195 %196 %66
|
|
%198 = OpLoad %63 %150
|
|
%199 = OpSGreaterThanEqual %14 %198 %66
|
|
%200 = OpLoad %63 %150
|
|
%201 = OpSLessThan %14 %200 %101
|
|
%202 = OpLogicalAnd %14 %199 %201
|
|
%203 = OpLoad %63 %150
|
|
%204 = OpSelect %63 %202 %203 %66
|
|
%205 = OpAccessChain %19 %87 %197 %204
|
|
OpStore %205 %22
|
|
OpBranch %189
|
|
%189 = OpLabel
|
|
OpBranch %154
|
|
%154 = OpLabel
|
|
%206 = OpLoad %63 %150
|
|
%207 = OpIAdd %63 %206 %83
|
|
OpStore %150 %207
|
|
OpBranch %151
|
|
%153 = OpLabel
|
|
OpBranch %138
|
|
%138 = OpLabel
|
|
%208 = OpLoad %63 %134
|
|
%209 = OpIAdd %63 %208 %83
|
|
OpStore %134 %209
|
|
OpBranch %135
|
|
%137 = OpLabel
|
|
OpBranch %121
|
|
%121 = OpLabel
|
|
%210 = OpLoad %63 %117
|
|
%211 = OpIAdd %63 %210 %83
|
|
OpStore %117 %211
|
|
OpBranch %118
|
|
%120 = OpLabel
|
|
OpBranch %105
|
|
%105 = OpLabel
|
|
%212 = OpLoad %63 %100
|
|
%213 = OpIAdd %63 %212 %83
|
|
OpStore %100 %213
|
|
OpBranch %102
|
|
%104 = OpLabel
|
|
OpStore %214 %66
|
|
OpStore %215 %66
|
|
OpStore %216 %101
|
|
OpBranch %217
|
|
%217 = OpLabel
|
|
OpLoopMerge %219 %220 None
|
|
OpBranch %221
|
|
%221 = OpLabel
|
|
%222 = OpLoad %63 %216
|
|
%223 = OpSLessThan %14 %222 %73
|
|
OpBranchConditional %223 %218 %219
|
|
%218 = OpLabel
|
|
%224 = OpLoad %63 %215
|
|
%225 = OpSGreaterThanEqual %14 %224 %77
|
|
OpSelectionMerge %227 None
|
|
OpBranchConditional %225 %226 %227
|
|
%226 = OpLabel
|
|
OpBranch %219
|
|
%227 = OpLabel
|
|
%229 = OpLoad %63 %215
|
|
%230 = OpIAdd %63 %229 %83
|
|
OpStore %215 %230
|
|
OpStore %231 %101
|
|
%236 = OpLoad %63 %214
|
|
%237 = OpSGreaterThanEqual %14 %236 %66
|
|
%238 = OpLoad %63 %214
|
|
%240 = OpSLessThan %14 %238 %239
|
|
%241 = OpLogicalAnd %14 %237 %240
|
|
%242 = OpLoad %63 %214
|
|
%243 = OpSelect %63 %241 %242 %66
|
|
%244 = OpAccessChain %19 %235 %243
|
|
OpStore %244 %88
|
|
OpStore %245 %66
|
|
OpBranch %246
|
|
%246 = OpLabel
|
|
OpLoopMerge %248 %249 None
|
|
OpBranch %250
|
|
%250 = OpLabel
|
|
%251 = OpLoad %63 %245
|
|
%252 = OpSLessThan %14 %251 %83
|
|
OpBranchConditional %252 %247 %248
|
|
%247 = OpLabel
|
|
OpStore %253 %66
|
|
OpBranch %254
|
|
%254 = OpLabel
|
|
OpLoopMerge %256 %257 None
|
|
OpBranch %258
|
|
%258 = OpLabel
|
|
%259 = OpLoad %63 %253
|
|
%260 = OpLoad %63 %231
|
|
%261 = OpSLessThan %14 %259 %260
|
|
OpBranchConditional %261 %255 %256
|
|
%255 = OpLabel
|
|
%262 = OpLoad %63 %214
|
|
%263 = OpSGreaterThanEqual %14 %262 %66
|
|
%264 = OpLoad %63 %214
|
|
%265 = OpSLessThan %14 %264 %239
|
|
%266 = OpLogicalAnd %14 %263 %265
|
|
%267 = OpLoad %63 %214
|
|
%268 = OpSelect %63 %266 %267 %66
|
|
%269 = OpLoad %93 %95
|
|
%270 = OpTranspose %93 %269
|
|
%271 = OpLoad %63 %245
|
|
%272 = OpSLessThan %14 %271 %141
|
|
OpSelectionMerge %275 None
|
|
OpBranchConditional %272 %274 %276
|
|
%274 = OpLabel
|
|
OpStore %273 %83
|
|
OpBranch %275
|
|
%276 = OpLabel
|
|
%277 = OpAccessChain %184 %183 %66 %18
|
|
%278 = OpLoad %6 %277
|
|
%279 = OpConvertFToS %63 %278
|
|
OpStore %273 %279
|
|
OpBranch %275
|
|
%275 = OpLabel
|
|
%280 = OpLoad %63 %273
|
|
%281 = OpLoad %63 %253
|
|
%282 = OpSLessThan %14 %281 %141
|
|
%283 = OpSelect %63 %282 %83 %66
|
|
OpStore %284 %270
|
|
%285 = OpAccessChain %19 %284 %280 %283
|
|
%286 = OpLoad %6 %285
|
|
%287 = OpAccessChain %19 %235 %268
|
|
%288 = OpLoad %6 %287
|
|
%289 = OpFAdd %6 %288 %286
|
|
%290 = OpAccessChain %19 %235 %268
|
|
OpStore %290 %289
|
|
%291 = OpLoad %63 %214
|
|
%292 = OpSGreaterThanEqual %14 %291 %66
|
|
%293 = OpLoad %63 %214
|
|
%294 = OpSLessThan %14 %293 %239
|
|
%295 = OpLogicalAnd %14 %292 %294
|
|
%296 = OpLoad %63 %214
|
|
%297 = OpSelect %63 %295 %296 %66
|
|
%298 = OpLoad %63 %253
|
|
%299 = OpAccessChain %19 %87 %83 %298
|
|
%300 = OpLoad %6 %299
|
|
%301 = OpAccessChain %19 %235 %297
|
|
%302 = OpLoad %6 %301
|
|
%303 = OpFAdd %6 %302 %300
|
|
%304 = OpAccessChain %19 %235 %297
|
|
OpStore %304 %303
|
|
OpBranch %257
|
|
%257 = OpLabel
|
|
%305 = OpLoad %63 %253
|
|
%306 = OpIAdd %63 %305 %83
|
|
OpStore %253 %306
|
|
OpBranch %254
|
|
%256 = OpLabel
|
|
OpBranch %249
|
|
%249 = OpLabel
|
|
%307 = OpLoad %63 %245
|
|
%308 = OpIAdd %63 %307 %83
|
|
OpStore %245 %308
|
|
OpBranch %246
|
|
%248 = OpLabel
|
|
%309 = OpLoad %63 %214
|
|
%310 = OpIAdd %63 %309 %83
|
|
OpStore %214 %310
|
|
OpBranch %220
|
|
%220 = OpLabel
|
|
%311 = OpLoad %63 %216
|
|
%312 = OpIAdd %63 %311 %83
|
|
OpStore %216 %312
|
|
OpBranch %217
|
|
%219 = OpLabel
|
|
OpBranch %70
|
|
%70 = OpLabel
|
|
%313 = OpLoad %63 %65
|
|
%314 = OpIAdd %63 %313 %83
|
|
OpStore %65 %314
|
|
OpBranch %67
|
|
%69 = OpLabel
|
|
OpReturnValue %27
|
|
OpFunctionEnd
|
|
END
|
|
|
|
# uniforms for variant
|
|
|
|
# injectionSwitch
|
|
BUFFER variant_injectionSwitch DATA_TYPE vec2<float> DATA
|
|
0.0 1.0
|
|
END
|
|
|
|
BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
|
|
|
|
PIPELINE graphics variant_pipeline
|
|
ATTACH variant_vertex_shader
|
|
ATTACH variant_fragment_shader
|
|
FRAMEBUFFER_SIZE 256 256
|
|
BIND BUFFER variant_framebuffer AS color LOCATION 0
|
|
BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
|
|
END
|
|
CLEAR_COLOR variant_pipeline 0 0 0 255
|
|
|
|
CLEAR variant_pipeline
|
|
RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
|
|
|
|
EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
|