+++ /dev/null
-#!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 that has a function with mat2x3
-
-# The test passes because shader always writes red.
-
-SHADER vertex variant_vertex_shader PASSTHROUGH
-
-# variant_fragment_shader is derived from the following GLSL:
-# #version 310 es
-# precision highp float;
-# precision highp int;
-#
-# layout(location = 0) out vec4 _GLF_color;
-#
-# float a = 22.0;
-#
-# // Returns variable "a" clamped to 0..25.
-# int func()
-# {
-# float b;
-# // Despite b being uninitialized,
-# // the result of the clamp will be 1.
-# int c = clamp(int(b), 1, 1);
-#
-# // Always true.
-# if (gl_FragCoord.x > -1.0)
-# c = int(mat2x3(vec4(0), clamp(a, 0.0, 25.0), b)[c][c]);
-# else
-# c = 2;
-#
-# return c;
-# }
-#
-# void main()
-# {
-# // a becomes 23.0.
-# a = float(func() + 1);
-#
-# do
-# {
-# if (func() == 23)
-# _GLF_color = vec4(1, 0, 0, 1);
-# else
-# _GLF_color = vec4(0, 0, 0, 0);
-# }
-# while(a > 23.0); // Always false
-# }
-SHADER fragment variant_fragment_shader SPIRV-ASM
-; SPIR-V
-; Version: 1.0
-; Generator: Khronos Glslang Reference Front End; 8
-; Bound: 82
-; Schema: 0
- OpCapability Shader
- %1 = OpExtInstImport "GLSL.std.450"
- OpMemoryModel Logical GLSL450
- OpEntryPoint Fragment %4 "main" %24 %76
- OpExecutionMode %4 OriginUpperLeft
- OpSource ESSL 310
- OpName %4 "main"
- OpName %8 "func("
- OpName %12 "a"
- OpName %15 "c"
- OpName %17 "b"
- OpName %24 "gl_FragCoord"
- OpName %54 "indexable"
- OpName %76 "_GLF_color"
- OpDecorate %24 BuiltIn FragCoord
- OpDecorate %76 Location 0
- %2 = OpTypeVoid
- %3 = OpTypeFunction %2
- %6 = OpTypeInt 32 1
- %7 = OpTypeFunction %6
- %10 = OpTypeFloat 32
- %11 = OpTypePointer Private %10
- %12 = OpVariable %11 Private
- %13 = OpConstant %10 22
- %14 = OpTypePointer Function %6
- %16 = OpTypePointer Function %10
- %20 = OpConstant %6 1
- %22 = OpTypeVector %10 4
- %23 = OpTypePointer Input %22
- %24 = OpVariable %23 Input
- %25 = OpTypeInt 32 0
- %26 = OpConstant %25 0
- %27 = OpTypePointer Input %10
- %30 = OpConstant %10 -1
- %31 = OpTypeBool
- %35 = OpConstant %10 0
- %36 = OpConstantComposite %22 %35 %35 %35 %35
- %38 = OpConstant %10 25
- %41 = OpTypeVector %10 3
- %42 = OpTypeMatrix %41 2
- %43 = OpConstant %10 1
- %53 = OpTypePointer Function %42
- %59 = OpConstant %6 2
- %71 = OpConstant %6 23
- %75 = OpTypePointer Output %22
- %76 = OpVariable %75 Output
- %77 = OpConstantComposite %22 %43 %35 %35 %43
- %80 = OpConstant %10 23
- %4 = OpFunction %2 None %3
- %5 = OpLabel
- OpStore %12 %13
- %63 = OpFunctionCall %6 %8
- %64 = OpIAdd %6 %63 %20
- %65 = OpConvertSToF %10 %64
- OpStore %12 %65
- OpBranch %66
- %66 = OpLabel
- OpLoopMerge %68 %69 None
- OpBranch %67
- %67 = OpLabel
- %70 = OpFunctionCall %6 %8
- %72 = OpIEqual %31 %70 %71
- OpSelectionMerge %74 None
- OpBranchConditional %72 %73 %78
- %73 = OpLabel
- OpStore %76 %77
- OpBranch %74
- %78 = OpLabel
- OpStore %76 %36
- OpBranch %74
- %74 = OpLabel
- OpBranch %69
- %69 = OpLabel
- %79 = OpLoad %10 %12
- %81 = OpFOrdGreaterThan %31 %79 %80
- OpBranchConditional %81 %66 %68
- %68 = OpLabel
- OpReturn
- OpFunctionEnd
- %8 = OpFunction %6 None %7
- %9 = OpLabel
- %15 = OpVariable %14 Function
- %17 = OpVariable %16 Function
- %54 = OpVariable %53 Function
- %18 = OpLoad %10 %17
- %19 = OpConvertFToS %6 %18
- %21 = OpExtInst %6 %1 SClamp %19 %20 %20
- OpStore %15 %21
- %28 = OpAccessChain %27 %24 %26
- %29 = OpLoad %10 %28
- %32 = OpFOrdGreaterThan %31 %29 %30
- OpSelectionMerge %34 None
- OpBranchConditional %32 %33 %58
- %33 = OpLabel
- %37 = OpLoad %10 %12
- %39 = OpExtInst %10 %1 FClamp %37 %35 %38
- %40 = OpLoad %10 %17
- %44 = OpCompositeExtract %10 %36 0
- %45 = OpCompositeExtract %10 %36 1
- %46 = OpCompositeExtract %10 %36 2
- %47 = OpCompositeExtract %10 %36 3
- %48 = OpCompositeConstruct %41 %44 %45 %46
- %49 = OpCompositeConstruct %41 %47 %39 %40
- %50 = OpCompositeConstruct %42 %48 %49
- %51 = OpLoad %6 %15
- %52 = OpLoad %6 %15
- OpStore %54 %50
- %55 = OpAccessChain %16 %54 %51 %52
- %56 = OpLoad %10 %55
- %57 = OpConvertFToS %6 %56
- OpStore %15 %57
- OpBranch %34
- %58 = OpLabel
- OpStore %15 %59
- OpBranch %34
- %34 = OpLabel
- %60 = OpLoad %6 %15
- OpReturnValue %60
- OpFunctionEnd
-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
-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