spv.structure.frag
// Module Version 10000
// Generated by (magic number): 80006
// Id's are bound by 60

                              Capability Shader
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Fragment 4  "main" 45 54
                              ExecutionMode 4 OriginUpperLeft
                              Source GLSL 140
                              Name 4  "main"
                              Name 8  "scale"
                              Name 18  "lunarStruct1"
                              MemberName 18(lunarStruct1) 0  "i"
                              MemberName 18(lunarStruct1) 1  "f"
                              MemberName 18(lunarStruct1) 2  "color"
                              Name 21  "lunarStruct2"
                              MemberName 21(lunarStruct2) 0  "i"
                              MemberName 21(lunarStruct2) 1  "f"
                              MemberName 21(lunarStruct2) 2  "s1_1"
                              Name 24  "foo2"
                              Name 45  "gl_FragColor"
                              Name 50  "samp2D"
                              Name 54  "coord"
                              Name 59  "foo"
                              Decorate 45(gl_FragColor) Location 0
                              Decorate 50(samp2D) DescriptorSet 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypePointer Function 6(float)
               9:    6(float) Constant 0
              10:             TypeInt 32 1
              11:             TypeInt 32 0
              12:     11(int) Constant 5
              13:             TypeArray 10(int) 12
              14:     11(int) Constant 4
              15:             TypeArray 6(float) 14
              16:             TypeVector 6(float) 4
              17:             TypeArray 16(fvec4) 12
18(lunarStruct1):             TypeStruct 10(int) 15 17
              19:     11(int) Constant 7
              20:             TypeArray 18(lunarStruct1) 19
21(lunarStruct2):             TypeStruct 13 6(float) 20
              22:             TypeArray 21(lunarStruct2) 12
              23:             TypePointer Private 22
        24(foo2):     23(ptr) Variable Private
              25:     10(int) Constant 3
              26:     10(int) Constant 0
              27:     10(int) Constant 4
              28:             TypePointer Private 10(int)
              31:             TypeBool
              35:     10(int) Constant 2
              36:     11(int) Constant 0
              37:             TypePointer Private 6(float)
              41:     10(int) Constant 1
              44:             TypePointer Output 16(fvec4)
45(gl_FragColor):     44(ptr) Variable Output
              47:             TypeImage 6(float) 2D sampled format:Unknown
              48:             TypeSampledImage 47
              49:             TypePointer UniformConstant 48
      50(samp2D):     49(ptr) Variable UniformConstant
              52:             TypeVector 6(float) 2
              53:             TypePointer Input 52(fvec2)
       54(coord):     53(ptr) Variable Input
              58:             TypePointer Private 18(lunarStruct1)
         59(foo):     58(ptr) Variable Private
         4(main):           2 Function None 3
               5:             Label
        8(scale):      7(ptr) Variable Function
                              Store 8(scale) 9
              29:     28(ptr) AccessChain 24(foo2) 25 26 27
              30:     10(int) Load 29
              32:    31(bool) SGreaterThan 30 26
                              SelectionMerge 34 None
                              BranchConditional 32 33 40
              33:               Label
              38:     37(ptr)   AccessChain 24(foo2) 25 35 35 35 25 36
              39:    6(float)   Load 38
                                Store 8(scale) 39
                                Branch 34
              40:               Label
              42:     37(ptr)   AccessChain 24(foo2) 25 35 35 41 25
              43:    6(float)   Load 42
                                Store 8(scale) 43
                                Branch 34
              34:             Label
              46:    6(float) Load 8(scale)
              51:          48 Load 50(samp2D)
              55:   52(fvec2) Load 54(coord)
              56:   16(fvec4) ImageSampleImplicitLod 51 55
              57:   16(fvec4) VectorTimesScalar 56 46
                              Store 45(gl_FragColor) 57
                              Return
                              FunctionEnd
