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

                              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 37
                              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 37  "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
                              Decorate 27(gl_PerVertex) Block
                              Decorate 37(gl_Layer) BuiltIn Layer
                              Decorate 37(gl_Layer) ViewportRelativeNV
                              Decorate 37(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:             TypePointer Output 7(fvec4)
    37(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:     35(ptr) AccessChain 16(gl_out) 24 21
                              Store 36 34
                              Return
                              FunctionEnd
