spv.debugInfo.frag
error: SPIRV-Tools Validation Errors
error: Invalid SPIR-V binary version 1.3 for target environment SPIR-V 1.0 (under OpenGL 4.5 semantics).
// Module Version 10300
// Generated by (magic number): 80007
// Id's are bound by 124

                              Capability Shader
               2:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 5  "main" 24 52
                              ExecutionMode 5 OriginLowerLeft
               1:             String  "spv.debugInfo.frag"
                              Source GLSL 450 1  "#version 450

struct S {
    int a;
};

uniform ubuf {
    S s;
};

uniform sampler2D s2d;

layout(location = 0) in vec4 inv;
layout(location = 0) out vec4 outv;

vec4 foo(S s)
{
    vec4 r = s.a * inv;
    ++r;
    if (r.x > 3.0)
        --r;
    else
        r *= 2;

    return r;
}

void main()
{
    outv = foo(s);
    outv += texture(s2d, vec2(0.5));

    switch (s.a) {
    case 10:
        ++outv;
        break;
    case 20:
        outv = 2 * outv;
        ++outv;
        break;
    default:
        --outv;
        break;
    }

    for (int i = 0; i < 10; ++i)
        outv *= 3.0;

    outv.x < 10.0 ?
        outv = sin(outv) :
        outv = cos(outv);
}"
                              Name 5  "main"
                              Name 8  "S"
                              MemberName 8(S) 0  "a"
                              Name 14  "foo(struct-S-i11;"
                              Name 13  "s"
                              Name 17  "r"
                              Name 24  "inv"
                              Name 52  "outv"
                              Name 53  "S"
                              MemberName 53(S) 0  "a"
                              Name 54  "ubuf"
                              MemberName 54(ubuf) 0  "s"
                              Name 56  ""
                              Name 57  "param"
                              Name 67  "s2d"
                              Name 97  "i"
                              ModuleProcessed  "no-storage-format"
                              ModuleProcessed  "resource-set-binding 3"
                              ModuleProcessed  "auto-map-locations"
                              ModuleProcessed  "client opengl100"
                              ModuleProcessed  "target-env spirv1.3"
                              ModuleProcessed  "target-env opengl"
                              ModuleProcessed  "relaxed-errors"
                              ModuleProcessed  "suppress-warnings"
                              ModuleProcessed  "hlsl-offsets"
                              ModuleProcessed  "entry-point main"
                              ModuleProcessed  "use-storage-buffer"
                              Decorate 24(inv) Location 0
                              Decorate 52(outv) Location 0
                              MemberDecorate 53(S) 0 Offset 0
                              MemberDecorate 54(ubuf) 0 Offset 0
                              Decorate 54(ubuf) Block
                              Decorate 56 DescriptorSet 3
                              Decorate 56 Binding 0
                              Decorate 67(s2d) Location 0
                              Decorate 67(s2d) DescriptorSet 3
                              Decorate 67(s2d) Binding 0
               3:             TypeVoid
               4:             TypeFunction 3
               7:             TypeInt 32 1
            8(S):             TypeStruct 7(int)
               9:             TypePointer Function 8(S)
              10:             TypeFloat 32
              11:             TypeVector 10(float) 4
              12:             TypeFunction 11(fvec4) 9(ptr)
              16:             TypePointer Function 11(fvec4)
              18:      7(int) Constant 0
              19:             TypePointer Function 7(int)
              23:             TypePointer Input 11(fvec4)
         24(inv):     23(ptr) Variable Input
              28:   10(float) Constant 1065353216
              31:             TypeInt 32 0
              32:     31(int) Constant 0
              33:             TypePointer Function 10(float)
              36:   10(float) Constant 1077936128
              37:             TypeBool
              45:   10(float) Constant 1073741824
              51:             TypePointer Output 11(fvec4)
        52(outv):     51(ptr) Variable Output
           53(S):             TypeStruct 7(int)
        54(ubuf):             TypeStruct 53(S)
              55:             TypePointer Uniform 54(ubuf)
              56:     55(ptr) Variable Uniform
              58:             TypePointer Uniform 53(S)
              64:             TypeImage 10(float) 2D sampled format:Unknown
              65:             TypeSampledImage 64
              66:             TypePointer UniformConstant 65
         67(s2d):     66(ptr) Variable UniformConstant
              69:             TypeVector 10(float) 2
              70:   10(float) Constant 1056964608
              71:   69(fvec2) ConstantComposite 70 70
              75:             TypePointer Uniform 7(int)
             104:      7(int) Constant 10
             109:      7(int) Constant 1
             111:             TypePointer Output 10(float)
             114:   10(float) Constant 1092616192
         5(main):           3 Function None 4
               6:             Label
       57(param):      9(ptr) Variable Function
           97(i):     19(ptr) Variable Function
             116:     16(ptr) Variable Function
                              Line 1 30 0
              59:     58(ptr) AccessChain 56 18
              60:       53(S) Load 59
              61:      7(int) CompositeExtract 60 0
              62:     19(ptr) AccessChain 57(param) 18
                              Store 62 61
              63:   11(fvec4) FunctionCall 14(foo(struct-S-i11;) 57(param)
                              Store 52(outv) 63
                              Line 1 31 0
              68:          65 Load 67(s2d)
              72:   11(fvec4) ImageSampleImplicitLod 68 71
              73:   11(fvec4) Load 52(outv)
              74:   11(fvec4) FAdd 73 72
                              Store 52(outv) 74
                              Line 1 33 0
              76:     75(ptr) AccessChain 56 18 18
              77:      7(int) Load 76
                              SelectionMerge 81 None
                              Switch 77 80 
                                     case 10: 78
                                     case 20: 79
              80:               Label
                                Line 1 42 0
              92:   11(fvec4)   Load 52(outv)
              93:   11(fvec4)   CompositeConstruct 28 28 28 28
              94:   11(fvec4)   FSub 92 93
                                Store 52(outv) 94
                                Line 1 43 0
                                Branch 81
              78:               Label
                                Line 1 35 0
              82:   11(fvec4)   Load 52(outv)
              83:   11(fvec4)   CompositeConstruct 28 28 28 28
              84:   11(fvec4)   FAdd 82 83
                                Store 52(outv) 84
                                Line 1 36 0
                                Branch 81
              79:               Label
                                Line 1 38 0
              86:   11(fvec4)   Load 52(outv)
              87:   11(fvec4)   VectorTimesScalar 86 45
                                Store 52(outv) 87
                                Line 1 39 0
              88:   11(fvec4)   Load 52(outv)
              89:   11(fvec4)   CompositeConstruct 28 28 28 28
              90:   11(fvec4)   FAdd 88 89
                                Store 52(outv) 90
                                Line 1 40 0
                                Branch 81
              81:             Label
                              Line 1 46 0
                              Store 97(i) 18
                              Branch 98
              98:             Label
                              LoopMerge 100 101 None
                              Branch 102
             102:             Label
             103:      7(int) Load 97(i)
             105:    37(bool) SLessThan 103 104
                              BranchConditional 105 99 100
              99:               Label
                                Line 1 47 0
             106:   11(fvec4)   Load 52(outv)
             107:   11(fvec4)   VectorTimesScalar 106 36
                                Store 52(outv) 107
                                Branch 101
             101:               Label
                                Line 1 46 0
             108:      7(int)   Load 97(i)
             110:      7(int)   IAdd 108 109
                                Store 97(i) 110
                                Branch 98
             100:             Label
                              Line 1 49 0
             112:    111(ptr) AccessChain 52(outv) 32
             113:   10(float) Load 112
             115:    37(bool) FOrdLessThan 113 114
                              SelectionMerge 118 None
                              BranchConditional 115 117 121
             117:               Label
                                Line 1 50 0
             119:   11(fvec4)   Load 52(outv)
             120:   11(fvec4)   ExtInst 2(GLSL.std.450) 13(Sin) 119
                                Store 52(outv) 120
                                Store 116 120
                                Branch 118
             121:               Label
                                Line 1 51 0
             122:   11(fvec4)   Load 52(outv)
             123:   11(fvec4)   ExtInst 2(GLSL.std.450) 14(Cos) 122
                                Store 52(outv) 123
                                Store 116 123
                                Branch 118
             118:             Label
                              Return
                              FunctionEnd
14(foo(struct-S-i11;):   11(fvec4) Function None 12
           13(s):      9(ptr) FunctionParameter
              15:             Label
           17(r):     16(ptr) Variable Function
                              Line 1 18 0
              20:     19(ptr) AccessChain 13(s) 18
              21:      7(int) Load 20
              22:   10(float) ConvertSToF 21
              25:   11(fvec4) Load 24(inv)
              26:   11(fvec4) VectorTimesScalar 25 22
                              Store 17(r) 26
                              Line 1 19 0
              27:   11(fvec4) Load 17(r)
              29:   11(fvec4) CompositeConstruct 28 28 28 28
              30:   11(fvec4) FAdd 27 29
                              Store 17(r) 30
                              Line 1 20 0
              34:     33(ptr) AccessChain 17(r) 32
              35:   10(float) Load 34
              38:    37(bool) FOrdGreaterThan 35 36
                              SelectionMerge 40 None
                              BranchConditional 38 39 44
              39:               Label
                                Line 1 21 0
              41:   11(fvec4)   Load 17(r)
              42:   11(fvec4)   CompositeConstruct 28 28 28 28
              43:   11(fvec4)   FSub 41 42
                                Store 17(r) 43
                                Branch 40
              44:               Label
                                Line 1 23 0
              46:   11(fvec4)   Load 17(r)
              47:   11(fvec4)   VectorTimesScalar 46 45
                                Store 17(r) 47
                                Branch 40
              40:             Label
                              Line 1 25 0
              48:   11(fvec4) Load 17(r)
                              ReturnValue 48
                              FunctionEnd
