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

                              Capability Geometry
                              Capability Tessellation
                              Capability ShaderViewportIndexLayerNV
                              Capability ShaderViewportMaskNV
                              Capability ShaderStereoViewNV
                              Extension  "SPV_EXT_shader_viewport_index_layer"
                              Extension  "SPV_NV_stereo_view_rendering"
                              Extension  "SPV_NV_viewport_array2"
               1:             ExtInstImport  "GLSL.std.450"
                              MemoryModel Logical GLSL450
                              EntryPoint TessellationControl 4  "main" 16 18 31 41
                              ExecutionMode 4 OutputVertices 4
                              Source GLSL 450
                              SourceExtension  "GL_NV_stereo_view_rendering"
                              SourceExtension  "GL_NV_viewport_array2"
                              Name 4  "main"
                              Name 12  "gl_PerVertex"
                              MemberName 12(gl_PerVertex) 0  "gl_SecondaryPositionNV"
                              MemberName 12(gl_PerVertex) 1  "gl_SecondaryViewportMaskNV"
                              Name 16  "gl_out"
                              Name 18  "gl_InvocationID"
                              Name 27  "gl_PerVertex"
                              MemberName 27(gl_PerVertex) 0  "gl_Position"
                              MemberName 27(gl_PerVertex) 1  "gl_PointSize"
                              MemberName 27(gl_PerVertex) 2  "gl_ClipDistance"
                              MemberName 27(gl_PerVertex) 3  "gl_CullDistance"
                              MemberName 27(gl_PerVertex) 4  "gl_SecondaryPositionNV"
                              Name 31  "gl_in"
                              Name 41  "gl_Layer"
                              MemberDecorate 12(gl_PerVertex) 0 BuiltIn SecondaryPositionNV
                              MemberDecorate 12(gl_PerVertex) 1 BuiltIn SecondaryViewportMaskNV
                              Decorate 12(gl_PerVertex) Block
                              Decorate 18(gl_InvocationID) BuiltIn InvocationId
                              MemberDecorate 27(gl_PerVertex) 0 BuiltIn Position
                              MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize
                              MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance
                              MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance
                              MemberDecorate 27(gl_PerVertex) 4 BuiltIn SecondaryPositionNV
                              Decorate 27(gl_PerVertex) Block
                              Decorate 41(gl_Layer) BuiltIn Layer
                              Decorate 41(gl_Layer) ViewportRelativeNV
                              Decorate 41(gl_Layer) SecondaryViewportRelativeNV 1
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeFloat 32
               7:             TypeVector 6(float) 4
               8:             TypeInt 32 1
               9:             TypeInt 32 0
              10:      9(int) Constant 2
              11:             TypeArray 8(int) 10
12(gl_PerVertex):             TypeStruct 7(fvec4) 11
              13:      9(int) Constant 4
              14:             TypeArray 12(gl_PerVertex) 13
              15:             TypePointer Output 14
      16(gl_out):     15(ptr) Variable Output
              17:             TypePointer Input 8(int)
18(gl_InvocationID):     17(ptr) Variable Input
              20:      8(int) Constant 1
              21:      8(int) Constant 0
              22:             TypePointer Output 8(int)
              25:      9(int) Constant 1
              26:             TypeArray 6(float) 25
27(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 26 26 7(fvec4)
              28:      9(int) Constant 32
              29:             TypeArray 27(gl_PerVertex) 28
              30:             TypePointer Input 29
       31(gl_in):     30(ptr) Variable Input
              32:             TypePointer Input 7(fvec4)
              35:      8(int) Constant 4
              39:             TypePointer Output 7(fvec4)
    41(gl_Layer):     22(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
              19:      8(int) Load 18(gl_InvocationID)
              23:     22(ptr) AccessChain 16(gl_out) 19 20 21
                              Store 23 20
              24:      8(int) Load 18(gl_InvocationID)
              33:     32(ptr) AccessChain 31(gl_in) 20 21
              34:    7(fvec4) Load 33
              36:     32(ptr) AccessChain 31(gl_in) 20 35
              37:    7(fvec4) Load 36
              38:    7(fvec4) FAdd 34 37
              40:     39(ptr) AccessChain 16(gl_out) 24 21
                              Store 40 38
                              Return
                              FunctionEnd
