Implement extensions GL_OVR_multiview and GL_OVR_multiview2
They are almost identical to the already supported GL_EXT_multiview
This commit is contained in:
		
							parent
							
								
									2ae23ca1ca
								
							
						
					
					
						commit
						0fbe02c6a0
					
				@ -185,3 +185,15 @@ void fooDeeparray()
 | 
				
			|||||||
    xp = y; // ERROR, wrong size
 | 
					    xp = y; // ERROR, wrong size
 | 
				
			||||||
    yp = x; // ERROR, wrong size
 | 
					    yp = x; // ERROR, wrong size
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void mwErr()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    gl_ViewID_OVR;   // ERROR, no extension
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#extension GL_OVR_multiview : enable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void mwOk()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    gl_ViewID_OVR;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -43,10 +43,14 @@ ERROR: 0:172: 'std430' : requires the 'buffer' storage qualifier
 | 
				
			|||||||
ERROR: 0:175: '' : array size required 
 | 
					ERROR: 0:175: '' : array size required 
 | 
				
			||||||
ERROR: 0:185: 'assign' :  cannot convert from ' temp 4-element array of highp float' to ' temp 3-element array of highp float'
 | 
					ERROR: 0:185: 'assign' :  cannot convert from ' temp 4-element array of highp float' to ' temp 3-element array of highp float'
 | 
				
			||||||
ERROR: 0:186: 'assign' :  cannot convert from ' temp 3-element array of highp float' to ' temp 4-element array of highp float'
 | 
					ERROR: 0:186: 'assign' :  cannot convert from ' temp 3-element array of highp float' to ' temp 4-element array of highp float'
 | 
				
			||||||
ERROR: 44 compilation errors.  No code generated.
 | 
					ERROR: 0:191: 'gl_ViewID_OVR' : required extension not requested: Possible extensions include:
 | 
				
			||||||
 | 
					GL_OVR_multiview
 | 
				
			||||||
 | 
					GL_OVR_multiview2
 | 
				
			||||||
 | 
					ERROR: 45 compilation errors.  No code generated.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Shader version: 300
 | 
					Shader version: 300
 | 
				
			||||||
 | 
					Requested GL_OVR_multiview
 | 
				
			||||||
ERROR: node is still EOpNull!
 | 
					ERROR: node is still EOpNull!
 | 
				
			||||||
0:27  Function Definition: main( ( global void)
 | 
					0:27  Function Definition: main( ( global void)
 | 
				
			||||||
0:27    Function Parameters: 
 | 
					0:27    Function Parameters: 
 | 
				
			||||||
@ -289,6 +293,14 @@ ERROR: node is still EOpNull!
 | 
				
			|||||||
0:184        'y' ( temp 4-element array of highp float)
 | 
					0:184        'y' ( temp 4-element array of highp float)
 | 
				
			||||||
0:185      'xp' ( temp 3-element array of highp float)
 | 
					0:185      'xp' ( temp 3-element array of highp float)
 | 
				
			||||||
0:186      'yp' ( temp 4-element array of highp float)
 | 
					0:186      'yp' ( temp 4-element array of highp float)
 | 
				
			||||||
 | 
					0:189  Function Definition: mwErr( ( global void)
 | 
				
			||||||
 | 
					0:189    Function Parameters: 
 | 
				
			||||||
 | 
					0:191    Sequence
 | 
				
			||||||
 | 
					0:191      'gl_ViewID_OVR' ( in highp uint ViewIndex)
 | 
				
			||||||
 | 
					0:196  Function Definition: mwOk( ( global void)
 | 
				
			||||||
 | 
					0:196    Function Parameters: 
 | 
				
			||||||
 | 
					0:198    Sequence
 | 
				
			||||||
 | 
					0:198      'gl_ViewID_OVR' ( in highp uint ViewIndex)
 | 
				
			||||||
0:?   Linker Objects
 | 
					0:?   Linker Objects
 | 
				
			||||||
0:?     'm43' ( uniform highp 4X3 matrix of float)
 | 
					0:?     'm43' ( uniform highp 4X3 matrix of float)
 | 
				
			||||||
0:?     'm33' ( uniform highp 3X3 matrix of float)
 | 
					0:?     'm33' ( uniform highp 3X3 matrix of float)
 | 
				
			||||||
@ -331,6 +343,7 @@ Linked vertex stage:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Shader version: 300
 | 
					Shader version: 300
 | 
				
			||||||
 | 
					Requested GL_OVR_multiview
 | 
				
			||||||
ERROR: node is still EOpNull!
 | 
					ERROR: node is still EOpNull!
 | 
				
			||||||
0:27  Function Definition: main( ( global void)
 | 
					0:27  Function Definition: main( ( global void)
 | 
				
			||||||
0:27    Function Parameters: 
 | 
					0:27    Function Parameters: 
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										57
									
								
								Test/baseResults/spv.OVR_multiview.vert.out
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								Test/baseResults/spv.OVR_multiview.vert.out
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,57 @@
 | 
				
			|||||||
 | 
					spv.OVR_multiview.vert
 | 
				
			||||||
 | 
					// Module Version 10000
 | 
				
			||||||
 | 
					// Generated by (magic number): 80001
 | 
				
			||||||
 | 
					// Id's are bound by 27
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                              Capability Shader
 | 
				
			||||||
 | 
					                              Capability MultiView
 | 
				
			||||||
 | 
					                              Extension  "SPV_KHR_multiview"
 | 
				
			||||||
 | 
					               1:             ExtInstImport  "GLSL.std.450"
 | 
				
			||||||
 | 
					                              MemoryModel Logical GLSL450
 | 
				
			||||||
 | 
					                              EntryPoint Vertex 4  "main" 13 17 25 26
 | 
				
			||||||
 | 
					                              Source GLSL 330
 | 
				
			||||||
 | 
					                              SourceExtension  "GL_OVR_multiview"
 | 
				
			||||||
 | 
					                              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"
 | 
				
			||||||
 | 
					                              Name 13  ""
 | 
				
			||||||
 | 
					                              Name 17  "gl_ViewID_OVR"
 | 
				
			||||||
 | 
					                              Name 25  "gl_VertexID"
 | 
				
			||||||
 | 
					                              Name 26  "gl_InstanceID"
 | 
				
			||||||
 | 
					                              MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
 | 
				
			||||||
 | 
					                              MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
 | 
				
			||||||
 | 
					                              MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
 | 
				
			||||||
 | 
					                              Decorate 11(gl_PerVertex) Block
 | 
				
			||||||
 | 
					                              Decorate 17(gl_ViewID_OVR) BuiltIn ViewIndex
 | 
				
			||||||
 | 
					                              Decorate 25(gl_VertexID) BuiltIn VertexId
 | 
				
			||||||
 | 
					                              Decorate 26(gl_InstanceID) BuiltIn InstanceId
 | 
				
			||||||
 | 
					               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
 | 
				
			||||||
 | 
					              12:             TypePointer Output 11(gl_PerVertex)
 | 
				
			||||||
 | 
					              13:     12(ptr) Variable Output
 | 
				
			||||||
 | 
					              14:             TypeInt 32 1
 | 
				
			||||||
 | 
					              15:     14(int) Constant 0
 | 
				
			||||||
 | 
					              16:             TypePointer Input 8(int)
 | 
				
			||||||
 | 
					17(gl_ViewID_OVR):     16(ptr) Variable Input
 | 
				
			||||||
 | 
					              20:    6(float) Constant 0
 | 
				
			||||||
 | 
					              22:             TypePointer Output 7(fvec4)
 | 
				
			||||||
 | 
					              24:             TypePointer Input 14(int)
 | 
				
			||||||
 | 
					 25(gl_VertexID):     24(ptr) Variable Input
 | 
				
			||||||
 | 
					26(gl_InstanceID):     24(ptr) Variable Input
 | 
				
			||||||
 | 
					         4(main):           2 Function None 3
 | 
				
			||||||
 | 
					               5:             Label
 | 
				
			||||||
 | 
					              18:      8(int) Load 17(gl_ViewID_OVR)
 | 
				
			||||||
 | 
					              19:    6(float) ConvertUToF 18
 | 
				
			||||||
 | 
					              21:    7(fvec4) CompositeConstruct 19 20 20 20
 | 
				
			||||||
 | 
					              23:     22(ptr) AccessChain 13 15
 | 
				
			||||||
 | 
					                              Store 23 21
 | 
				
			||||||
 | 
					                              Return
 | 
				
			||||||
 | 
					                              FunctionEnd
 | 
				
			||||||
@ -11,7 +11,7 @@ spv.specConstant.vert
 | 
				
			|||||||
                              Source GLSL 400
 | 
					                              Source GLSL 400
 | 
				
			||||||
                              Name 4  "main"
 | 
					                              Name 4  "main"
 | 
				
			||||||
                              Name 9  "arraySize"
 | 
					                              Name 9  "arraySize"
 | 
				
			||||||
                              Name 14  "foo(vf4[s1521];"
 | 
					                              Name 14  "foo(vf4[s1522];"
 | 
				
			||||||
                              Name 13  "p"
 | 
					                              Name 13  "p"
 | 
				
			||||||
                              Name 17  "builtin_spec_constant("
 | 
					                              Name 17  "builtin_spec_constant("
 | 
				
			||||||
                              Name 20  "color"
 | 
					                              Name 20  "color"
 | 
				
			||||||
@ -102,10 +102,10 @@ spv.specConstant.vert
 | 
				
			|||||||
                              Store 20(color) 46
 | 
					                              Store 20(color) 46
 | 
				
			||||||
              48:          10 Load 22(ucol)
 | 
					              48:          10 Load 22(ucol)
 | 
				
			||||||
                              Store 47(param) 48
 | 
					                              Store 47(param) 48
 | 
				
			||||||
              49:           2 FunctionCall 14(foo(vf4[s1521];) 47(param)
 | 
					              49:           2 FunctionCall 14(foo(vf4[s1522];) 47(param)
 | 
				
			||||||
                              Return
 | 
					                              Return
 | 
				
			||||||
                              FunctionEnd
 | 
					                              FunctionEnd
 | 
				
			||||||
14(foo(vf4[s1521];):           2 Function None 12
 | 
					14(foo(vf4[s1522];):           2 Function None 12
 | 
				
			||||||
           13(p):     11(ptr) FunctionParameter
 | 
					           13(p):     11(ptr) FunctionParameter
 | 
				
			||||||
              15:             Label
 | 
					              15:             Label
 | 
				
			||||||
              54:     24(ptr) AccessChain 53(dupUcol) 23
 | 
					              54:     24(ptr) AccessChain 53(dupUcol) 23
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										7
									
								
								Test/spv.OVR_multiview.vert
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Test/spv.OVR_multiview.vert
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					#version 330
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#extension GL_OVR_multiview : enable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void main() {
 | 
				
			||||||
 | 
					    gl_Position = vec4(gl_ViewID_OVR, 0, 0, 0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -3457,6 +3457,12 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 | 
				
			|||||||
            "\n");
 | 
					            "\n");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (version >= 300 /* both ES and non-ES */) {
 | 
				
			||||||
 | 
					        stageBuiltins[EShLangVertex].append(
 | 
				
			||||||
 | 
					            "in highp uint gl_ViewID_OVR;"     // GL_OVR_multiview, GL_OVR_multiview2
 | 
				
			||||||
 | 
					            "\n");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //============================================================================
 | 
					    //============================================================================
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
@ -3905,6 +3911,12 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 | 
				
			|||||||
            "\n");
 | 
					            "\n");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (version >= 300 /* both ES and non-ES */) {
 | 
				
			||||||
 | 
					        stageBuiltins[EShLangFragment].append(
 | 
				
			||||||
 | 
					            "flat in highp uint gl_ViewID_OVR;"     // GL_OVR_multiview, GL_OVR_multiview2
 | 
				
			||||||
 | 
					            "\n");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // printf("%s\n", commonBuiltins.c_str());
 | 
					    // printf("%s\n", commonBuiltins.c_str());
 | 
				
			||||||
    // printf("%s\n", stageBuiltins[EShLangFragment].c_str());
 | 
					    // printf("%s\n", stageBuiltins[EShLangFragment].c_str());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -5331,6 +5343,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
 | 
				
			|||||||
            BuiltInVariable("gl_InstanceIndex", EbvInstanceIndex, symbolTable);
 | 
					            BuiltInVariable("gl_InstanceIndex", EbvInstanceIndex, symbolTable);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (version >= 300 /* both ES and non-ES */) {
 | 
				
			||||||
 | 
					            symbolTable.setVariableExtensions("gl_ViewID_OVR", Num_OVR_multiview_EXTs, OVR_multiview_EXTs);
 | 
				
			||||||
 | 
					            BuiltInVariable("gl_ViewID_OVR", EbvViewIndex, symbolTable);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (profile == EEsProfile) {
 | 
					        if (profile == EEsProfile) {
 | 
				
			||||||
            symbolTable.setFunctionExtensions("shadow2DEXT",        1, &E_GL_EXT_shadow_samplers);
 | 
					            symbolTable.setFunctionExtensions("shadow2DEXT",        1, &E_GL_EXT_shadow_samplers);
 | 
				
			||||||
            symbolTable.setFunctionExtensions("shadow2DProjEXT",    1, &E_GL_EXT_shadow_samplers);
 | 
					            symbolTable.setFunctionExtensions("shadow2DProjEXT",    1, &E_GL_EXT_shadow_samplers);
 | 
				
			||||||
@ -5678,6 +5695,10 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
 | 
				
			|||||||
        BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
 | 
					        BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
 | 
				
			||||||
        symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
 | 
					        symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
 | 
				
			||||||
        BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
 | 
					        BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
 | 
				
			||||||
 | 
					        if (version >= 300 /* both ES and non-ES */) {
 | 
				
			||||||
 | 
					            symbolTable.setVariableExtensions("gl_ViewID_OVR", Num_OVR_multiview_EXTs, OVR_multiview_EXTs);
 | 
				
			||||||
 | 
					            BuiltInVariable("gl_ViewID_OVR", EbvViewIndex, symbolTable);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (profile == EEsProfile) {
 | 
					        if (profile == EEsProfile) {
 | 
				
			||||||
            symbolTable.setFunctionExtensions("shadow2DEXT",        1, &E_GL_EXT_shadow_samplers);
 | 
					            symbolTable.setFunctionExtensions("shadow2DEXT",        1, &E_GL_EXT_shadow_samplers);
 | 
				
			||||||
 | 
				
			|||||||
@ -239,6 +239,10 @@ void TParseVersions::initializeExtensionBehavior()
 | 
				
			|||||||
    // EXT extensions
 | 
					    // EXT extensions
 | 
				
			||||||
    extensionBehavior[E_GL_EXT_device_group]             = EBhDisable;
 | 
					    extensionBehavior[E_GL_EXT_device_group]             = EBhDisable;
 | 
				
			||||||
    extensionBehavior[E_GL_EXT_multiview]                = EBhDisable;
 | 
					    extensionBehavior[E_GL_EXT_multiview]                = EBhDisable;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // OVR extensions
 | 
				
			||||||
 | 
					    extensionBehavior[E_GL_OVR_multiview]                = EBhDisable;
 | 
				
			||||||
 | 
					    extensionBehavior[E_GL_OVR_multiview2]               = EBhDisable;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Get code that is not part of a shared symbol table, is specific to this shader,
 | 
					// Get code that is not part of a shared symbol table, is specific to this shader,
 | 
				
			||||||
@ -349,6 +353,13 @@ void TParseVersions::getPreamble(std::string& preamble)
 | 
				
			|||||||
            ;
 | 
					            ;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (version >= 300 /* both ES and non-ES */) {
 | 
				
			||||||
 | 
					        preamble +=
 | 
				
			||||||
 | 
					            "#define GL_OVR_multiview 1\n"
 | 
				
			||||||
 | 
					            "#define GL_OVR_multiview2 1\n"
 | 
				
			||||||
 | 
					            ;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // #line and #include
 | 
					    // #line and #include
 | 
				
			||||||
    preamble +=
 | 
					    preamble +=
 | 
				
			||||||
            "#define GL_GOOGLE_cpp_style_line_directive 1\n"
 | 
					            "#define GL_GOOGLE_cpp_style_line_directive 1\n"
 | 
				
			||||||
 | 
				
			|||||||
@ -143,6 +143,13 @@ const char* const E_GL_EXT_shader_image_load_formatted = "GL_EXT_shader_image_lo
 | 
				
			|||||||
const char* const E_GL_EXT_device_group                 = "GL_EXT_device_group";
 | 
					const char* const E_GL_EXT_device_group                 = "GL_EXT_device_group";
 | 
				
			||||||
const char* const E_GL_EXT_multiview                    = "GL_EXT_multiview";
 | 
					const char* const E_GL_EXT_multiview                    = "GL_EXT_multiview";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// OVR extensions
 | 
				
			||||||
 | 
					const char* const E_GL_OVR_multiview                    = "GL_OVR_multiview";
 | 
				
			||||||
 | 
					const char* const E_GL_OVR_multiview2                   = "GL_OVR_multiview2";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const char* const OVR_multiview_EXTs[] = { E_GL_OVR_multiview, E_GL_OVR_multiview2 };
 | 
				
			||||||
 | 
					const int Num_OVR_multiview_EXTs = sizeof(OVR_multiview_EXTs) / sizeof(OVR_multiview_EXTs[0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// #line and #include
 | 
					// #line and #include
 | 
				
			||||||
const char* const E_GL_GOOGLE_cpp_style_line_directive          = "GL_GOOGLE_cpp_style_line_directive";
 | 
					const char* const E_GL_GOOGLE_cpp_style_line_directive          = "GL_GOOGLE_cpp_style_line_directive";
 | 
				
			||||||
const char* const E_GL_GOOGLE_include_directive                 = "GL_GOOGLE_include_directive";
 | 
					const char* const E_GL_GOOGLE_include_directive                 = "GL_GOOGLE_include_directive";
 | 
				
			||||||
 | 
				
			|||||||
@ -358,6 +358,7 @@ INSTANTIATE_TEST_CASE_P(
 | 
				
			|||||||
        "spv.atomic.comp",
 | 
					        "spv.atomic.comp",
 | 
				
			||||||
        "spv.glFragColor.frag",
 | 
					        "spv.glFragColor.frag",
 | 
				
			||||||
        "spv.specConst.vert",
 | 
					        "spv.specConst.vert",
 | 
				
			||||||
 | 
					        "spv.OVR_multiview.vert",
 | 
				
			||||||
    })),
 | 
					    })),
 | 
				
			||||||
    FileNameAsCustomTestSuffix
 | 
					    FileNameAsCustomTestSuffix
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user