spv.420.geom
// Module Version 10000
// Generated by (magic number): 80008
// Id's are bound by 72

                              Capability Geometry
                              Capability GeometryPointSize
                              Capability ImageGatherExtended
                              Capability GeometryStreams
                              Capability MultiViewport
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint Geometry 4  "main" 14 23 28 33 46
                              ExecutionMode 4 Triangles
                              ExecutionMode 4 Invocations 4
                              ExecutionMode 4 OutputLineStrip
                              ExecutionMode 4 OutputVertices 127
                              Source GLSL 420
                              Name 4  "main"
                              Name 8  "p"
                              Name 9  "gl_PerVertex"
                              MemberName 9(gl_PerVertex) 0  "gl_PointSize"
                              Name 14  "gl_in"
                              Name 21  "gl_PerVertex"
                              MemberName 21(gl_PerVertex) 0  "gl_PointSize"
                              Name 23  ""
                              Name 28  "gl_ViewportIndex"
                              Name 31  "id"
                              Name 33  "gl_InvocationID"
                              Name 37  "v"
                              Name 41  "s2D"
                              Name 46  "coord"
                              Name 64  "i"
                              Name 67  "indexable"
                              MemberDecorate 9(gl_PerVertex) 0 BuiltIn PointSize
                              Decorate 9(gl_PerVertex) Block
                              MemberDecorate 21(gl_PerVertex) 0 BuiltIn PointSize
                              Decorate 21(gl_PerVertex) Block
                              Decorate 23 Stream 0
                              Decorate 28(gl_ViewportIndex) Stream 0
                              Decorate 28(gl_ViewportIndex) BuiltIn ViewportIndex
                              Decorate 33(gl_InvocationID) BuiltIn InvocationId
                              Decorate 41(s2D) DescriptorSet 0
                              Decorate 41(s2D) Binding 0
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypePointer Function 6(float)
 9(gl_PerVertex):             TypeStruct 6(float)
              10:             TypeInt 32 0
              11:     10(int) Constant 3
              12:             TypeArray 9(gl_PerVertex) 11
              13:             TypePointer Input 12
       14(gl_in):     13(ptr) Variable Input
              15:             TypeInt 32 1
              16:     15(int) Constant 1
              17:     15(int) Constant 0
              18:             TypePointer Input 6(float)
21(gl_PerVertex):             TypeStruct 6(float)
              22:             TypePointer Output 21(gl_PerVertex)
              23:     22(ptr) Variable Output
              25:             TypePointer Output 6(float)
              27:             TypePointer Output 15(int)
28(gl_ViewportIndex):     27(ptr) Variable Output
              29:     15(int) Constant 7
              30:             TypePointer Function 15(int)
              32:             TypePointer Input 15(int)
33(gl_InvocationID):     32(ptr) Variable Input
              35:             TypeVector 6(float) 4
              36:             TypePointer Function 35(fvec4)
              38:             TypeImage 6(float) 2D sampled format:Unknown
              39:             TypeSampledImage 38
              40:             TypePointer UniformConstant 39
         41(s2D):     40(ptr) Variable UniformConstant
              43:             TypeVector 6(float) 2
              44:             TypeArray 43(fvec2) 11
              45:             TypePointer Input 44
       46(coord):     45(ptr) Variable Input
              47:             TypePointer Input 43(fvec2)
              50:             TypeVector 15(int) 2
              51:     10(int) Constant 5
              52:             TypeArray 50(ivec2) 51
              53:   50(ivec2) ConstantComposite 17 16
              54:     15(int) Constant 4294967294
              55:   50(ivec2) ConstantComposite 16 54
              56:     15(int) Constant 3
              57:   50(ivec2) ConstantComposite 17 56
              58:     15(int) Constant 4294967293
              59:   50(ivec2) ConstantComposite 58 17
              60:     15(int) Constant 2
              61:   50(ivec2) ConstantComposite 60 16
              62:          52 ConstantComposite 53 55 57 59 61
              63:             TypePointer Private 15(int)
           64(i):     63(ptr) Variable Private
              66:             TypePointer Function 52
              68:             TypePointer Function 50(ivec2)
         4(main):           2 Function None 3
               5:             Label
            8(p):      7(ptr) Variable Function
          31(id):     30(ptr) Variable Function
           37(v):     36(ptr) Variable Function
   67(indexable):     66(ptr) Variable Function
              19:     18(ptr) AccessChain 14(gl_in) 16 17
              20:    6(float) Load 19
                              Store 8(p) 20
              24:    6(float) Load 8(p)
              26:     25(ptr) AccessChain 23 17
                              Store 26 24
                              Store 28(gl_ViewportIndex) 29
                              EmitStreamVertex 16
                              EndStreamPrimitive 17
                              EmitVertex
                              EndPrimitive
              34:     15(int) Load 33(gl_InvocationID)
                              Store 31(id) 34
              42:          39 Load 41(s2D)
              48:     47(ptr) AccessChain 46(coord) 17
              49:   43(fvec2) Load 48
              65:     15(int) Load 64(i)
                              Store 67(indexable) 62
              69:     68(ptr) AccessChain 67(indexable) 65
              70:   50(ivec2) Load 69
              71:   35(fvec4) ImageGather 42 49 17 Offset 70
                              Store 37(v) 71
                              Return
                              FunctionEnd
