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

                              Capability Shader
                              Capability Geometry
                              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 Vertex 4  "main" 11 19 23 26
                              Source GLSL 450
                              SourceExtension  "GL_NV_stereo_view_rendering"
                              SourceExtension  "GL_NV_viewport_array2"
                              Name 4  "main"
                              Name 11  "gl_SecondaryViewportMaskNV"
                              Name 19  "gl_SecondaryPositionNV"
                              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 23  ""
                              Name 26  "gl_Layer"
                              Decorate 11(gl_SecondaryViewportMaskNV) BuiltIn SecondaryViewportMaskNV
                              Decorate 19(gl_SecondaryPositionNV) BuiltIn SecondaryPositionNV
                              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 26(gl_Layer) BuiltIn Layer
                              Decorate 26(gl_Layer) ViewportRelativeNV
                              Decorate 26(gl_Layer) SecondaryViewportRelativeNV 2
               2:             TypeVoid
               3:             TypeFunction 2
               6:             TypeInt 32 1
               7:             TypeInt 32 0
               8:      7(int) Constant 1
               9:             TypeArray 6(int) 8
              10:             TypePointer Output 9
11(gl_SecondaryViewportMaskNV):     10(ptr) Variable Output
              12:      6(int) Constant 0
              13:      6(int) Constant 1
              14:             TypePointer Output 6(int)
              16:             TypeFloat 32
              17:             TypeVector 16(float) 4
              18:             TypePointer Output 17(fvec4)
19(gl_SecondaryPositionNV):     18(ptr) Variable Output
              20:             TypeArray 16(float) 8
21(gl_PerVertex):             TypeStruct 17(fvec4) 16(float) 20 20
              22:             TypePointer Output 21(gl_PerVertex)
              23:     22(ptr) Variable Output
    26(gl_Layer):     14(ptr) Variable Output
         4(main):           2 Function None 3
               5:             Label
              15:     14(ptr) AccessChain 11(gl_SecondaryViewportMaskNV) 12
                              Store 15 13
              24:     18(ptr) AccessChain 23 12
              25:   17(fvec4) Load 24
                              Store 19(gl_SecondaryPositionNV) 25
                              Return
                              FunctionEnd
