1#!amber 2 3# Copyright 2021 Google LLC 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); 6# you may not use this file except in compliance with the License. 7# You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, 13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14# See the License for the specific language governing permissions and 15# limitations under the License. 16 17 18# A test for a coverage-gap found by the GraphicsFuzz project. 19 20# Short description: A fragment shader that covers specific LLVM code paths 21 22# The test passes because the shader always writes red. 23 24SHADER vertex variant_vertex_shader PASSTHROUGH 25 26# variant_fragment_shader is derived from the following GLSL: 27# #version 320 es 28# #define _int_1 _GLF_uniform_int_values[0] 29# #define _int_0 _GLF_uniform_int_values[1] 30# #define _float_1_0 _GLF_uniform_float_values[0] 31# #define _float_0_0 _GLF_uniform_float_values[1] 32# 33# precision highp float; 34# precision highp int; 35# 36# // Contents of _GLF_uniform_int_values: [1, 0] 37# layout(set = 0, binding = 0) uniform buf0 38# { 39# int _GLF_uniform_int_values[2]; 40# }; 41# 42# // Contents of _GLF_uniform_float_values: [1.0, 0.0] 43# layout(set = 0, binding = 1) uniform buf1 44# { 45# float _GLF_uniform_float_values[2]; 46# }; 47# 48# layout(location = 0) out vec4 _GLF_color; 49# 50# void main() 51# { 52# mat3 m = mat3(_float_1_0, _float_1_0, _float_1_0, 0.0, _float_0_0, _float_1_0, _float_0_0, _float_1_0, _float_1_0); 53# 54# // Always true. 55# if(determinant(m) < _float_0_0) 56# { 57# _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1); 58# } 59# else 60# { 61# _GLF_color = vec4(_int_0); 62# } 63# } 64SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 65; SPIR-V 66; Version: 1.0 67; Generator: Khronos Glslang Reference Front End; 10 68; Bound: 77 69; Schema: 0 70 OpCapability Shader 71 %1 = OpExtInstImport "GLSL.std.450" 72 OpMemoryModel Logical GLSL450 73 OpEntryPoint Fragment %4 "main" %53 74 OpExecutionMode %4 OriginUpperLeft 75 OpSource ESSL 320 76 OpName %4 "main" 77 OpName %10 "m" 78 OpName %14 "buf1" 79 OpMemberName %14 0 "_GLF_uniform_float_values" 80 OpName %16 "" 81 OpName %53 "_GLF_color" 82 OpName %55 "buf0" 83 OpMemberName %55 0 "_GLF_uniform_int_values" 84 OpName %57 "" 85 OpDecorate %13 ArrayStride 16 86 OpMemberDecorate %14 0 Offset 0 87 OpDecorate %14 Block 88 OpDecorate %16 DescriptorSet 0 89 OpDecorate %16 Binding 1 90 OpDecorate %53 Location 0 91 OpDecorate %54 ArrayStride 16 92 OpMemberDecorate %55 0 Offset 0 93 OpDecorate %55 Block 94 OpDecorate %57 DescriptorSet 0 95 OpDecorate %57 Binding 0 96 %2 = OpTypeVoid 97 %3 = OpTypeFunction %2 98 %6 = OpTypeFloat 32 99 %7 = OpTypeVector %6 3 100 %8 = OpTypeMatrix %7 3 101 %9 = OpTypePointer Function %8 102 %11 = OpTypeInt 32 0 103 %12 = OpConstant %11 2 104 %13 = OpTypeArray %6 %12 105 %14 = OpTypeStruct %13 106 %15 = OpTypePointer Uniform %14 107 %16 = OpVariable %15 Uniform 108 %17 = OpTypeInt 32 1 109 %18 = OpConstant %17 0 110 %19 = OpTypePointer Uniform %6 111 %26 = OpConstant %6 0 112 %27 = OpConstant %17 1 113 %38 = OpConstant %6 1 114 %47 = OpTypeBool 115 %51 = OpTypeVector %6 4 116 %52 = OpTypePointer Output %51 117 %53 = OpVariable %52 Output 118 %54 = OpTypeArray %17 %12 119 %55 = OpTypeStruct %54 120 %56 = OpTypePointer Uniform %55 121 %57 = OpVariable %56 Uniform 122 %58 = OpTypePointer Uniform %17 123 %4 = OpFunction %2 None %3 124 %5 = OpLabel 125 %10 = OpVariable %9 Function 126 %20 = OpAccessChain %19 %16 %18 %18 127 %21 = OpLoad %6 %20 128 %22 = OpAccessChain %19 %16 %18 %18 129 %23 = OpLoad %6 %22 130 %24 = OpAccessChain %19 %16 %18 %18 131 %25 = OpLoad %6 %24 132 %28 = OpAccessChain %19 %16 %18 %27 133 %29 = OpLoad %6 %28 134 %30 = OpAccessChain %19 %16 %18 %18 135 %31 = OpLoad %6 %30 136 %32 = OpAccessChain %19 %16 %18 %27 137 %33 = OpLoad %6 %32 138 %34 = OpAccessChain %19 %16 %18 %18 139 %35 = OpLoad %6 %34 140 %36 = OpAccessChain %19 %16 %18 %18 141 %37 = OpLoad %6 %36 142 %39 = OpCompositeConstruct %7 %21 %23 %25 143 %40 = OpCompositeConstruct %7 %26 %29 %31 144 %41 = OpCompositeConstruct %7 %33 %35 %37 145 %42 = OpCompositeConstruct %8 %39 %40 %41 146 OpStore %10 %42 147 %43 = OpLoad %8 %10 148 %44 = OpExtInst %6 %1 Determinant %43 149 %45 = OpAccessChain %19 %16 %18 %27 150 %46 = OpLoad %6 %45 151 %48 = OpFOrdLessThan %47 %44 %46 152 OpSelectionMerge %50 None 153 OpBranchConditional %48 %49 %72 154 %49 = OpLabel 155 %59 = OpAccessChain %58 %57 %18 %18 156 %60 = OpLoad %17 %59 157 %61 = OpConvertSToF %6 %60 158 %62 = OpAccessChain %58 %57 %18 %27 159 %63 = OpLoad %17 %62 160 %64 = OpConvertSToF %6 %63 161 %65 = OpAccessChain %58 %57 %18 %27 162 %66 = OpLoad %17 %65 163 %67 = OpConvertSToF %6 %66 164 %68 = OpAccessChain %58 %57 %18 %18 165 %69 = OpLoad %17 %68 166 %70 = OpConvertSToF %6 %69 167 %71 = OpCompositeConstruct %51 %61 %64 %67 %70 168 OpStore %53 %71 169 OpBranch %50 170 %72 = OpLabel 171 %73 = OpAccessChain %58 %57 %18 %27 172 %74 = OpLoad %17 %73 173 %75 = OpConvertSToF %6 %74 174 %76 = OpCompositeConstruct %51 %75 %75 %75 %75 175 OpStore %53 %76 176 OpBranch %50 177 %50 = OpLabel 178 OpReturn 179 OpFunctionEnd 180END 181 182# uniforms for variant 183 184# _GLF_uniform_float_values 185BUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA 186 1.0 0.0 187END 188# _GLF_uniform_int_values 189BUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA 190 1 0 191END 192 193BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 194 195PIPELINE graphics variant_pipeline 196 ATTACH variant_vertex_shader 197 ATTACH variant_fragment_shader 198 FRAMEBUFFER_SIZE 256 256 199 BIND BUFFER variant_framebuffer AS color LOCATION 0 200 BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1 201 BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0 202END 203CLEAR_COLOR variant_pipeline 0 0 0 255 204 205CLEAR variant_pipeline 206RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256 207 208EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255 209