support SPV_NV_viewport_array2 and SPV_NV_stereo_view_rendering

This commit is contained in:
chaoc
2017-01-13 01:10:53 -08:00
parent 22f25d80c6
commit 771d89fc36
21 changed files with 654 additions and 36 deletions

View File

@@ -71,8 +71,8 @@ ERROR: node is still EOpNull!
0:25 move second child to first child (temp highp 4-component vector of float)
0:25 'p' (temp highp 4-component vector of float)
0:25 gl_Position: direct index for structure (in highp 4-component vector of float Position)
0:25 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
0:25 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
0:25 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:25 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:25 Constant:
0:25 1 (const int)
0:25 Constant:
@@ -81,8 +81,8 @@ ERROR: node is still EOpNull!
0:26 move second child to first child (temp highp float)
0:26 'ps' (temp highp float)
0:26 gl_PointSize: direct index for structure (in highp float PointSize)
0:26 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
0:26 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
0:26 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:26 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:26 Constant:
0:26 1 (const int)
0:26 Constant:
@@ -210,8 +210,8 @@ ERROR: node is still EOpNull!
0:114 move second child to first child (temp highp float)
0:114 'ps' (temp highp float)
0:114 gl_PointSize: direct index for structure (in highp float PointSize)
0:114 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
0:114 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
0:114 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:114 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:114 Constant:
0:114 1 (const int)
0:114 Constant:
@@ -402,8 +402,8 @@ ERROR: node is still EOpNull!
0:25 move second child to first child (temp highp 4-component vector of float)
0:25 'p' (temp highp 4-component vector of float)
0:25 gl_Position: direct index for structure (in highp 4-component vector of float Position)
0:25 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
0:25 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
0:25 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:25 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:25 Constant:
0:25 1 (const int)
0:25 Constant:
@@ -412,8 +412,8 @@ ERROR: node is still EOpNull!
0:26 move second child to first child (temp highp float)
0:26 'ps' (temp highp float)
0:26 gl_PointSize: direct index for structure (in highp float PointSize)
0:26 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
0:26 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
0:26 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:26 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:26 Constant:
0:26 1 (const int)
0:26 Constant:

View File

@@ -78,8 +78,8 @@ ERROR: node is still EOpNull!
0:36 move second child to first child (temp highp 4-component vector of float)
0:36 'p' (temp highp 4-component vector of float)
0:36 gl_Position: direct index for structure (in highp 4-component vector of float Position)
0:36 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
0:36 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
0:36 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:36 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:36 Constant:
0:36 1 (const int)
0:36 Constant:
@@ -88,8 +88,8 @@ ERROR: node is still EOpNull!
0:37 move second child to first child (temp highp float)
0:37 'ps' (temp highp float)
0:37 gl_PointSize: direct index for structure (in highp float PointSize)
0:37 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
0:37 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
0:37 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:37 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:37 Constant:
0:37 1 (const int)
0:37 Constant:
@@ -211,8 +211,8 @@ ERROR: node is still EOpNull!
0:36 move second child to first child (temp highp 4-component vector of float)
0:36 'p' (temp highp 4-component vector of float)
0:36 gl_Position: direct index for structure (in highp 4-component vector of float Position)
0:36 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
0:36 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
0:36 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:36 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:36 Constant:
0:36 1 (const int)
0:36 Constant:
@@ -221,8 +221,8 @@ ERROR: node is still EOpNull!
0:37 move second child to first child (temp highp float)
0:37 'ps' (temp highp float)
0:37 gl_PointSize: direct index for structure (in highp float PointSize)
0:37 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
0:37 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize})
0:37 direct index (temp block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:37 'gl_in' (in 32-element array of block{in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV})
0:37 Constant:
0:37 1 (const int)
0:37 Constant:

View File

@@ -0,0 +1,86 @@
spv.stereoViewRendering.tesc
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 38
Capability Geometry
Capability Tessellation
Capability ShaderViewportMaskNV
Capability ShaderStereoViewNV
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 32
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_Layer"
MemberName 12(gl_PerVertex) 1 "gl_SecondaryPositionNV"
MemberName 12(gl_PerVertex) 2 "gl_SecondaryViewportMaskNV"
Name 16 "gl_out"
Name 18 "gl_InvocationID"
Name 28 "gl_PerVertex"
MemberName 28(gl_PerVertex) 0 "gl_Position"
MemberName 28(gl_PerVertex) 1 "gl_PointSize"
MemberName 28(gl_PerVertex) 2 "gl_ClipDistance"
MemberName 28(gl_PerVertex) 3 "gl_CullDistance"
MemberName 28(gl_PerVertex) 4 "gl_SecondaryPositionNV"
Name 32 "gl_in"
MemberDecorate 12(gl_PerVertex) 0 BuiltIn Layer
MemberDecorate 12(gl_PerVertex) 0 ViewportRelativeNV
MemberDecorate 12(gl_PerVertex) 0 SecondaryViewportRelativeNV 1
MemberDecorate 12(gl_PerVertex) 1 BuiltIn SecondaryPositionNV
MemberDecorate 12(gl_PerVertex) 2 BuiltIn SecondaryViewportMaskNV
Decorate 12(gl_PerVertex) Block
Decorate 18(gl_InvocationID) BuiltIn InvocationId
MemberDecorate 28(gl_PerVertex) 0 BuiltIn Position
MemberDecorate 28(gl_PerVertex) 1 BuiltIn PointSize
MemberDecorate 28(gl_PerVertex) 2 BuiltIn ClipDistance
MemberDecorate 28(gl_PerVertex) 3 BuiltIn CullDistance
Decorate 28(gl_PerVertex) Block
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypeFloat 32
8: TypeVector 7(float) 4
9: TypeInt 32 0
10: 9(int) Constant 2
11: TypeArray 6(int) 10
12(gl_PerVertex): TypeStruct 6(int) 8(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 6(int)
18(gl_InvocationID): 17(ptr) Variable Input
20: 6(int) Constant 2
21: 6(int) Constant 0
22: 6(int) Constant 1
23: TypePointer Output 6(int)
26: 9(int) Constant 1
27: TypeArray 7(float) 26
28(gl_PerVertex): TypeStruct 8(fvec4) 7(float) 27 27 8(fvec4)
29: 9(int) Constant 32
30: TypeArray 28(gl_PerVertex) 29
31: TypePointer Input 30
32(gl_in): 31(ptr) Variable Input
33: TypePointer Input 8(fvec4)
36: TypePointer Output 8(fvec4)
4(main): 2 Function None 3
5: Label
19: 6(int) Load 18(gl_InvocationID)
24: 23(ptr) AccessChain 16(gl_out) 19 20 21
Store 24 22
25: 6(int) Load 18(gl_InvocationID)
34: 33(ptr) AccessChain 32(gl_in) 22 21
35: 8(fvec4) Load 34
37: 36(ptr) AccessChain 16(gl_out) 25 22
Store 37 35
Return
FunctionEnd

View File

@@ -0,0 +1,69 @@
spv.stereoViewRendering.vert
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 27
Capability Shader
Capability Geometry
Capability ShaderViewportIndexLayerNV
Capability ShaderViewportMaskNV
Capability ShaderStereoViewNV
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

View File

@@ -0,0 +1,59 @@
spv.viewportArray2.tesc
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 25
Capability Geometry
Capability Tessellation
Capability MultiViewport
Capability ShaderViewportIndexLayerNV
Capability ShaderViewportMaskNV
Extension "SPV_NV_viewport_array2"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint TessellationControl 4 "main" 14 16
ExecutionMode 4 OutputVertices 4
Source GLSL 450
SourceExtension "GL_NV_viewport_array2"
Name 4 "main"
Name 10 "gl_PerVertex"
MemberName 10(gl_PerVertex) 0 "gl_ViewportIndex"
MemberName 10(gl_PerVertex) 1 "gl_Layer"
MemberName 10(gl_PerVertex) 2 "gl_ViewportMask"
Name 14 "gl_out"
Name 16 "gl_InvocationID"
MemberDecorate 10(gl_PerVertex) 0 BuiltIn ViewportIndex
MemberDecorate 10(gl_PerVertex) 1 BuiltIn Layer
MemberDecorate 10(gl_PerVertex) 1 ViewportRelativeNV
MemberDecorate 10(gl_PerVertex) 2 BuiltIn ViewportMaskNV
Decorate 10(gl_PerVertex) Block
Decorate 16(gl_InvocationID) BuiltIn InvocationId
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypeInt 32 0
8: 7(int) Constant 2
9: TypeArray 6(int) 8
10(gl_PerVertex): TypeStruct 6(int) 6(int) 9
11: 7(int) Constant 4
12: TypeArray 10(gl_PerVertex) 11
13: TypePointer Output 12
14(gl_out): 13(ptr) Variable Output
15: TypePointer Input 6(int)
16(gl_InvocationID): 15(ptr) Variable Input
18: 6(int) Constant 2
19: 6(int) Constant 0
20: 6(int) Constant 1
21: TypePointer Output 6(int)
4(main): 2 Function None 3
5: Label
17: 6(int) Load 16(gl_InvocationID)
22: 21(ptr) AccessChain 14(gl_out) 17 18 19
Store 22 20
23: 6(int) Load 16(gl_InvocationID)
24: 21(ptr) AccessChain 14(gl_out) 23 19
Store 24 18
Return
FunctionEnd

View File

@@ -0,0 +1,48 @@
spv.viewportArray2.vert
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 19
Capability Shader
Capability Geometry
Capability MultiViewport
Capability ShaderViewportIndexLayerNV
Capability ShaderViewportMaskNV
Extension "SPV_NV_viewport_array2"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 11 16 18
Source GLSL 450
SourceExtension "GL_ARB_shader_viewport_layer_array"
SourceExtension "GL_NV_viewport_array2"
Name 4 "main"
Name 11 "gl_ViewportMask"
Name 16 "gl_ViewportIndex"
Name 18 "gl_Layer"
Decorate 11(gl_ViewportMask) BuiltIn ViewportMaskNV
Decorate 16(gl_ViewportIndex) BuiltIn ViewportIndex
Decorate 18(gl_Layer) BuiltIn Layer
Decorate 18(gl_Layer) ViewportRelativeNV
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_ViewportMask): 10(ptr) Variable Output
12: 6(int) Constant 0
13: 6(int) Constant 1
14: TypePointer Output 6(int)
16(gl_ViewportIndex): 14(ptr) Variable Output
17: 6(int) Constant 2
18(gl_Layer): 14(ptr) Variable Output
4(main): 2 Function None 3
5: Label
15: 14(ptr) AccessChain 11(gl_ViewportMask) 12
Store 15 13
Store 16(gl_ViewportIndex) 17
Return
FunctionEnd

View File

@@ -0,0 +1,18 @@
#version 450
#extension GL_NV_viewport_array2 :require
#extension GL_NV_stereo_view_rendering : require
layout(vertices = 4) out;
out gl_PerVertex {
int gl_SecondaryViewportMaskNV[2];
vec4 gl_SecondaryPositionNV;
layout (viewport_relative, secondary_view_offset = 1) out highp int gl_Layer;
} gl_out[4];
void main()
{
gl_out[gl_InvocationID].gl_SecondaryViewportMaskNV[0] = 1;
gl_out[gl_InvocationID].gl_SecondaryPositionNV = gl_in[1].gl_Position;
}

View File

@@ -0,0 +1,12 @@
#version 450
#extension GL_NV_viewport_array2 :require
#extension GL_NV_stereo_view_rendering : require
layout (viewport_relative, secondary_view_offset = 2) out highp int gl_Layer;
void main()
{
gl_SecondaryViewportMaskNV[0] = 1;
gl_SecondaryPositionNV = gl_Position;
}

View File

@@ -0,0 +1,16 @@
#version 450
#extension GL_NV_viewport_array2 :require
layout(vertices = 4) out;
out gl_PerVertex {
int gl_ViewportMask[2];
int gl_ViewportIndex;
layout (viewport_relative) out highp int gl_Layer;
} gl_out[4];
void main()
{
gl_out[gl_InvocationID].gl_ViewportMask[0] = 1;
gl_out[gl_InvocationID].gl_ViewportIndex = 2;
}

View File

@@ -0,0 +1,10 @@
#version 450
#extension GL_ARB_shader_viewport_layer_array : require
#extension GL_NV_viewport_array2 : require
layout (viewport_relative) out highp int gl_Layer;
void main()
{
gl_ViewportMask[0] = 1;
gl_ViewportIndex = 2;
}