spv.450.tesc
// Module Version 10000
// Generated by (magic number): 80008
// Id's are bound by 45

                              Capability Tessellation
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint TessellationControl 4  "main" 15 18 25 32 38 41 44
                              ExecutionMode 4 OutputVertices 4
                              Source GLSL 450
                              Name 4  "main"
                              Name 11  "gl_PerVertex"
                              MemberName 11(gl_PerVertex) 0  "gl_Position"
                              MemberName 11(gl_PerVertex) 1  "gl_PointSize"
                              MemberName 11(gl_PerVertex) 2  "gl_ClipDistance"
                              MemberName 11(gl_PerVertex) 3  "gl_CullDistance"
                              Name 15  "gl_out"
                              Name 18  "gl_InvocationID"
                              Name 21  "gl_PerVertex"
                              MemberName 21(gl_PerVertex) 0  "gl_Position"
                              MemberName 21(gl_PerVertex) 1  "gl_PointSize"
                              MemberName 21(gl_PerVertex) 2  "gl_ClipDistance"
                              MemberName 21(gl_PerVertex) 3  "gl_CullDistance"
                              Name 25  "gl_in"
                              Name 32  "patchOut"
                              Name 33  "S"
                              MemberName 33(S) 0  "sMem1"
                              MemberName 33(S) 1  "sMem2"
                              Name 34  "TheBlock"
                              MemberName 34(TheBlock) 0  "bMem1"
                              MemberName 34(TheBlock) 1  "bMem2"
                              MemberName 34(TheBlock) 2  "s"
                              Name 38  "tcBlock"
                              Name 39  "SingleBlock"
                              MemberName 39(SingleBlock) 0  "bMem1"
                              MemberName 39(SingleBlock) 1  "bMem2"
                              MemberName 39(SingleBlock) 2  "s"
                              Name 41  "singleBlock"
                              Name 42  "bn"
                              MemberName 42(bn) 0  "v1"
                              MemberName 42(bn) 1  "v2"
                              MemberName 42(bn) 2  "v3"
                              Name 44  ""
                              MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
                              MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
                              MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
                              MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance
                              Decorate 11(gl_PerVertex) Block
                              Decorate 18(gl_InvocationID) BuiltIn InvocationId
                              MemberDecorate 21(gl_PerVertex) 0 BuiltIn Position
                              MemberDecorate 21(gl_PerVertex) 1 BuiltIn PointSize
                              MemberDecorate 21(gl_PerVertex) 2 BuiltIn ClipDistance
                              MemberDecorate 21(gl_PerVertex) 3 BuiltIn CullDistance
                              Decorate 21(gl_PerVertex) Block
                              Decorate 32(patchOut) Patch
                              Decorate 32(patchOut) Location 1
                              MemberDecorate 34(TheBlock) 0 Patch
                              MemberDecorate 34(TheBlock) 1 Patch
                              MemberDecorate 34(TheBlock) 2 Patch
                              Decorate 34(TheBlock) Block
                              Decorate 38(tcBlock) Location 12
                              MemberDecorate 39(SingleBlock) 0 Patch
                              MemberDecorate 39(SingleBlock) 1 Patch
                              MemberDecorate 39(SingleBlock) 2 Patch
                              Decorate 39(SingleBlock) Block
                              Decorate 41(singleBlock) Location 2
                              MemberDecorate 42(bn) 0 Patch
                              MemberDecorate 42(bn) 0 Location 20
                              MemberDecorate 42(bn) 1 Patch
                              MemberDecorate 42(bn) 1 Location 24
                              MemberDecorate 42(bn) 2 Patch
                              MemberDecorate 42(bn) 2 Location 25
                              Decorate 42(bn) Block
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypeInt 32 0
               9:      8(int) Constant 1
              10:             TypeArray 6(float) 9
11(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 10 10
              12:      8(int) Constant 4
              13:             TypeArray 11(gl_PerVertex) 12
              14:             TypePointer Output 13
      15(gl_out):     14(ptr) Variable Output
              16:             TypeInt 32 1
              17:             TypePointer Input 16(int)
18(gl_InvocationID):     17(ptr) Variable Input
              20:     16(int) Constant 0
21(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 10 10
              22:      8(int) Constant 32
              23:             TypeArray 21(gl_PerVertex) 22
              24:             TypePointer Input 23
       25(gl_in):     24(ptr) Variable Input
              27:             TypePointer Input 7(fvec4)
              30:             TypePointer Output 7(fvec4)
    32(patchOut):     30(ptr) Variable Output
           33(S):             TypeStruct 6(float) 6(float)
    34(TheBlock):             TypeStruct 6(float) 6(float) 33(S)
              35:      8(int) Constant 2
              36:             TypeArray 34(TheBlock) 35
              37:             TypePointer Output 36
     38(tcBlock):     37(ptr) Variable Output
 39(SingleBlock):             TypeStruct 6(float) 6(float) 33(S)
              40:             TypePointer Output 39(SingleBlock)
 41(singleBlock):     40(ptr) Variable Output
          42(bn):             TypeStruct 7(fvec4) 7(fvec4) 7(fvec4)
              43:             TypePointer Output 42(bn)
              44:     43(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
              19:     16(int) Load 18(gl_InvocationID)
              26:     16(int) Load 18(gl_InvocationID)
              28:     27(ptr) AccessChain 25(gl_in) 26 20
              29:    7(fvec4) Load 28
              31:     30(ptr) AccessChain 15(gl_out) 19 20
                              Store 31 29
                              Return
                              FunctionEnd
