; SPIR-V
; Version: 1.1
; Generator: rspirv
; Bound: 100
OpCapability Shader
OpCapability ImageQuery
OpCapability Linkage
OpExtension "SPV_KHR_storage_buffer_storage_class"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpMemberName %8 0 "a"
OpName %8 "InStorage"
OpMemberName %11 0 "a"
OpName %11 "InUniform"
OpName %21 "in_storage"
OpName %24 "in_uniform"
OpName %27 "image_2d_array"
OpName %29 "in_workgroup"
OpName %31 "in_private"
OpName %35 "c"
OpName %36 "i"
OpName %37 "l"
OpName %38 "mock_function"
OpName %52 "in_function"
OpDecorate %5 ArrayStride 16
OpMemberDecorate %8 0 Offset 0
OpDecorate %9 ArrayStride 16
OpMemberDecorate %11 0 Offset 0
OpDecorate %13 ArrayStride 4
OpDecorate %15 ArrayStride 4
OpDecorate %19 ArrayStride 16
OpDecorate %21 NonWritable
OpDecorate %21 DescriptorSet 0
OpDecorate %21 Binding 0
OpDecorate %22 Block
OpMemberDecorate %22 0 Offset 0
OpDecorate %24 DescriptorSet 0
OpDecorate %24 Binding 1
OpDecorate %25 Block
OpMemberDecorate %25 0 Offset 0
OpDecorate %27 DescriptorSet 0
OpDecorate %27 Binding 2
%2 = OpTypeVoid
%4 = OpTypeFloat 32
%3 = OpTypeVector %4 4
%7 = OpTypeInt 32 0
%6 = OpConstant  %7  10
%5 = OpTypeArray %3 %6
%8 = OpTypeStruct %5
%10 = OpConstant  %7  20
%9 = OpTypeArray %3 %10
%11 = OpTypeStruct %9
%12 = OpTypeImage %4 2D 0 1 0 1 Unknown
%14 = OpConstant  %7  30
%13 = OpTypeArray %4 %14
%16 = OpConstant  %7  40
%15 = OpTypeArray %4 %16
%18 = OpTypeInt 32 1
%17 = OpTypeVector %18 2
%20 = OpConstant  %7  2
%19 = OpTypeArray %3 %20
%22 = OpTypeStruct %8
%23 = OpTypePointer StorageBuffer %22
%21 = OpVariable  %23  StorageBuffer
%25 = OpTypeStruct %11
%26 = OpTypePointer Uniform %25
%24 = OpVariable  %26  Uniform
%28 = OpTypePointer UniformConstant %12
%27 = OpVariable  %28  UniformConstant
%30 = OpTypePointer Workgroup %13
%29 = OpVariable  %30  Workgroup
%32 = OpTypePointer Private %15
%33 = OpConstantNull  %15
%31 = OpVariable  %32  Private %33
%39 = OpTypeFunction %3 %17 %18 %18
%40 = OpTypePointer StorageBuffer %8
%41 = OpConstant  %7  0
%43 = OpTypePointer Uniform %11
%46 = OpConstant  %4  0.707
%47 = OpConstant  %4  0.0
%48 = OpConstant  %4  1.0
%49 = OpConstantComposite  %3  %46 %47 %47 %48
%50 = OpConstantComposite  %3  %47 %46 %47 %48
%51 = OpConstantComposite  %19  %49 %50
%53 = OpTypePointer Function %19
%55 = OpTypePointer StorageBuffer %5
%56 = OpTypePointer StorageBuffer %3
%59 = OpTypePointer Uniform %9
%60 = OpTypePointer Uniform %3
%64 = OpTypeVector %18 3
%66 = OpTypeBool
%67 = OpConstantNull  %3
%73 = OpTypeVector %66 3
%80 = OpTypePointer Workgroup %4
%81 = OpConstant  %7  29
%87 = OpTypePointer Private %4
%88 = OpConstant  %7  39
%94 = OpTypePointer Function %3
%95 = OpConstant  %7  1
%38 = OpFunction  %3  None %39
%35 = OpFunctionParameter  %17
%36 = OpFunctionParameter  %18
%37 = OpFunctionParameter  %18
%34 = OpLabel
%52 = OpVariable  %53  Function %51
%42 = OpAccessChain  %40  %21 %41
%44 = OpAccessChain  %43  %24 %41
%45 = OpLoad  %12  %27
OpBranch %54
%54 = OpLabel
%57 = OpAccessChain  %56  %42 %41 %36
%58 = OpLoad  %3  %57
%61 = OpAccessChain  %60  %44 %41 %36
%62 = OpLoad  %3  %61
%63 = OpFAdd  %3  %58 %62
%65 = OpCompositeConstruct  %64  %35 %36
%68 = OpImageQueryLevels  %18  %45
%69 = OpULessThan  %66  %37 %68
OpSelectionMerge %70 None
OpBranchConditional %69 %71 %70
%71 = OpLabel
%72 = OpImageQuerySizeLod  %64  %45 %37
%74 = OpULessThan  %73  %65 %72
%75 = OpAll  %66  %74
OpBranchConditional %75 %76 %70
%76 = OpLabel
%77 = OpImageFetch  %3  %45 %65 Lod %37
OpBranch %70
%70 = OpLabel
%78 = OpPhi  %3  %67 %54 %67 %71 %77 %76
%79 = OpFAdd  %3  %63 %78
%82 = OpExtInst  %7  %1 UMin %36 %81
%83 = OpAccessChain  %80  %29 %82
%84 = OpLoad  %4  %83
%85 = OpCompositeConstruct  %3  %84 %84 %84 %84
%86 = OpFAdd  %3  %79 %85
%89 = OpExtInst  %7  %1 UMin %36 %88
%90 = OpAccessChain  %87  %31 %89
%91 = OpLoad  %4  %90
%92 = OpCompositeConstruct  %3  %91 %91 %91 %91
%93 = OpFAdd  %3  %86 %92
%96 = OpExtInst  %7  %1 UMin %36 %95
%97 = OpAccessChain  %94  %52 %96
%98 = OpLoad  %3  %97
%99 = OpFAdd  %3  %93 %98
OpReturnValue %99
OpFunctionEnd