Merge pull request #2205 from pmistryNV/GL_EXT_blend_func_extended
Add support for es extension GL_EXT_blend_func_extended
This commit is contained in:
		
						commit
						bfaf88ee6a
					
				@ -134,6 +134,7 @@ const TBuiltInResource DefaultTBuiltInResource = {
 | 
				
			|||||||
    /* .maxTaskWorkGroupSizeY_NV = */ 1,
 | 
					    /* .maxTaskWorkGroupSizeY_NV = */ 1,
 | 
				
			||||||
    /* .maxTaskWorkGroupSizeZ_NV = */ 1,
 | 
					    /* .maxTaskWorkGroupSizeZ_NV = */ 1,
 | 
				
			||||||
    /* .maxMeshViewCountNV = */ 4,
 | 
					    /* .maxMeshViewCountNV = */ 4,
 | 
				
			||||||
 | 
					    /* .maxDualSourceDrawBuffersEXT = */ 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* .limits = */ {
 | 
					    /* .limits = */ {
 | 
				
			||||||
        /* .nonInductiveForLoops = */ 1,
 | 
					        /* .nonInductiveForLoops = */ 1,
 | 
				
			||||||
@ -243,6 +244,7 @@ std::string GetDefaultTBuiltInResourceString()
 | 
				
			|||||||
            << "MaxTaskWorkGroupSizeY_NV "                  << DefaultTBuiltInResource.maxTaskWorkGroupSizeY_NV << "\n"
 | 
					            << "MaxTaskWorkGroupSizeY_NV "                  << DefaultTBuiltInResource.maxTaskWorkGroupSizeY_NV << "\n"
 | 
				
			||||||
            << "MaxTaskWorkGroupSizeZ_NV "                  << DefaultTBuiltInResource.maxTaskWorkGroupSizeZ_NV << "\n"
 | 
					            << "MaxTaskWorkGroupSizeZ_NV "                  << DefaultTBuiltInResource.maxTaskWorkGroupSizeZ_NV << "\n"
 | 
				
			||||||
            << "MaxMeshViewCountNV "                        << DefaultTBuiltInResource.maxMeshViewCountNV << "\n"
 | 
					            << "MaxMeshViewCountNV "                        << DefaultTBuiltInResource.maxMeshViewCountNV << "\n"
 | 
				
			||||||
 | 
					            << "MaxDualSourceDrawBuffersEXT "               << DefaultTBuiltInResource.maxDualSourceDrawBuffersEXT << "\n"
 | 
				
			||||||
            << "nonInductiveForLoops "                      << DefaultTBuiltInResource.limits.nonInductiveForLoops << "\n"
 | 
					            << "nonInductiveForLoops "                      << DefaultTBuiltInResource.limits.nonInductiveForLoops << "\n"
 | 
				
			||||||
            << "whileLoops "                                << DefaultTBuiltInResource.limits.whileLoops << "\n"
 | 
					            << "whileLoops "                                << DefaultTBuiltInResource.limits.whileLoops << "\n"
 | 
				
			||||||
            << "doWhileLoops "                              << DefaultTBuiltInResource.limits.doWhileLoops << "\n"
 | 
					            << "doWhileLoops "                              << DefaultTBuiltInResource.limits.doWhileLoops << "\n"
 | 
				
			||||||
 | 
				
			|||||||
@ -201,6 +201,19 @@ float fooinittest()
 | 
				
			|||||||
    return fooinit();
 | 
					    return fooinit();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Test extension GL_EXT_blend_func_extended
 | 
				
			||||||
 | 
					void blendFuncFail() // Error since extension GL_EXT_blend_func_extended is disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    gl_SecondaryFragColorEXT = vec4(1.0);   
 | 
				
			||||||
 | 
					    gl_SecondaryFragDataEXT[gl_MaxDualSourceDrawBuffersEXT - 1] = vec4(0.1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#extension GL_EXT_blend_func_extended : enable
 | 
				
			||||||
 | 
					void blendFunc() 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    gl_SecondaryFragColorEXT = vec4(1.0);
 | 
				
			||||||
 | 
					    gl_SecondaryFragDataEXT[gl_MaxDualSourceDrawBuffersEXT - 1] = vec4(0.1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Test extra-function initializers
 | 
					// Test extra-function initializers
 | 
				
			||||||
const float fi1 = 3.0;
 | 
					const float fi1 = 3.0;
 | 
				
			||||||
const float fi2 = 4.0;
 | 
					const float fi2 = 4.0;
 | 
				
			||||||
 | 
				
			|||||||
@ -177,6 +177,11 @@ void testmixFail()
 | 
				
			|||||||
    int ival  = mix(x, y, b); // Error since extenson GL_EXT_shader_integer_mix is disabled
 | 
					    int ival  = mix(x, y, b); // Error since extenson GL_EXT_shader_integer_mix is disabled
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Test layout qualifier "index" with extension GL_EXT_blend_func_extended
 | 
				
			||||||
 | 
					layout(location = 0, index = 1) out vec4 outVarFail; // Error Index supported with extension GL_EXT_blend_func_extended enabled
 | 
				
			||||||
 | 
					#extension GL_EXT_blend_func_extended : enable
 | 
				
			||||||
 | 
					layout(location = 0, index = 2) out vec4 outVarPass;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef GL_FRAGMENT_PRECISION_HIGH
 | 
					#ifndef GL_FRAGMENT_PRECISION_HIGH
 | 
				
			||||||
#error missing GL_FRAGMENT_PRECISION_HIGH
 | 
					#error missing GL_FRAGMENT_PRECISION_HIGH
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
@ -82,15 +82,19 @@ ERROR: 0:192: '.' : cannot apply to an array: nothing
 | 
				
			|||||||
ERROR: 0:193: '.length' : not supported for this version or the enabled extensions 
 | 
					ERROR: 0:193: '.length' : not supported for this version or the enabled extensions 
 | 
				
			||||||
ERROR: 0:194: '.' : cannot apply to an array: method
 | 
					ERROR: 0:194: '.' : cannot apply to an array: method
 | 
				
			||||||
ERROR: 0:194: 'a' : can't use function syntax on variable 
 | 
					ERROR: 0:194: 'a' : can't use function syntax on variable 
 | 
				
			||||||
ERROR: 0:214: 'non-constant global initializer (needs GL_EXT_shader_non_constant_global_initializers)' : not supported for this version or the enabled extensions 
 | 
					ERROR: 0:207: 'gl_SecondaryFragColorEXT' : required extension not requested: GL_EXT_blend_func_extended
 | 
				
			||||||
ERROR: 0:222: '#define' : names containing consecutive underscores are reserved, and an error if version < 300: A__B
 | 
					ERROR: 0:208: 'gl_SecondaryFragDataEXT' : required extension not requested: GL_EXT_blend_func_extended
 | 
				
			||||||
ERROR: 0:223: 'a__b' : identifiers containing consecutive underscores ("__") are reserved, and an error if version < 300 
 | 
					ERROR: 0:208: 'gl_MaxDualSourceDrawBuffersEXT' : required extension not requested: GL_EXT_blend_func_extended
 | 
				
			||||||
 | 
					ERROR: 0:227: 'non-constant global initializer (needs GL_EXT_shader_non_constant_global_initializers)' : not supported for this version or the enabled extensions 
 | 
				
			||||||
 | 
					ERROR: 0:235: '#define' : names containing consecutive underscores are reserved, and an error if version < 300: A__B
 | 
				
			||||||
 | 
					ERROR: 0:236: 'a__b' : identifiers containing consecutive underscores ("__") are reserved, and an error if version < 300 
 | 
				
			||||||
ERROR: 0:3000: '#error' : line of this error should be 3000  
 | 
					ERROR: 0:3000: '#error' : line of this error should be 3000  
 | 
				
			||||||
ERROR: 0:3002: '' :  syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
 | 
					ERROR: 0:3002: '' :  syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
 | 
				
			||||||
ERROR: 79 compilation errors.  No code generated.
 | 
					ERROR: 82 compilation errors.  No code generated.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Shader version: 100
 | 
					Shader version: 100
 | 
				
			||||||
 | 
					Requested GL_EXT_blend_func_extended
 | 
				
			||||||
Requested GL_EXT_frag_depth
 | 
					Requested GL_EXT_frag_depth
 | 
				
			||||||
Requested GL_EXT_shader_non_constant_global_initializers
 | 
					Requested GL_EXT_shader_non_constant_global_initializers
 | 
				
			||||||
Requested GL_EXT_shader_texture_lod
 | 
					Requested GL_EXT_shader_texture_lod
 | 
				
			||||||
@ -361,36 +365,76 @@ ERROR: node is still EOpNull!
 | 
				
			|||||||
0:201    Sequence
 | 
					0:201    Sequence
 | 
				
			||||||
0:201      Branch: Return with expression
 | 
					0:201      Branch: Return with expression
 | 
				
			||||||
0:201        Function Call: fooinit( ( global mediump float)
 | 
					0:201        Function Call: fooinit( ( global mediump float)
 | 
				
			||||||
0:209  Function Definition: fooinit( ( global mediump float)
 | 
					0:205  Function Definition: blendFuncFail( ( global void)
 | 
				
			||||||
0:209    Function Parameters: 
 | 
					0:205    Function Parameters: 
 | 
				
			||||||
0:211    Sequence
 | 
					0:207    Sequence
 | 
				
			||||||
0:211      Branch: Return with expression
 | 
					0:207      move second child to first child ( temp mediump 4-component vector of float)
 | 
				
			||||||
0:211        Constant:
 | 
					0:207        'gl_SecondaryFragColorEXT' ( out mediump 4-component vector of float SecondaryFragColorEXT)
 | 
				
			||||||
0:211          12.000000
 | 
					0:207        Constant:
 | 
				
			||||||
0:214  Sequence
 | 
					0:207          1.000000
 | 
				
			||||||
0:214    move second child to first child ( temp mediump int)
 | 
					0:207          1.000000
 | 
				
			||||||
0:214      'init1' ( global mediump int)
 | 
					0:207          1.000000
 | 
				
			||||||
0:214      Test condition and select ( temp mediump int)
 | 
					0:207          1.000000
 | 
				
			||||||
0:214        Condition
 | 
					0:208      move second child to first child ( temp mediump 4-component vector of float)
 | 
				
			||||||
0:214        'gl_FrontFacing' ( gl_FrontFacing bool Face)
 | 
					0:208        direct index ( temp mediump 4-component vector of float SecondaryFragDataEXT)
 | 
				
			||||||
0:214        true case
 | 
					0:208          'gl_SecondaryFragDataEXT' ( out 1-element array of mediump 4-component vector of float SecondaryFragDataEXT)
 | 
				
			||||||
 | 
					0:208          Constant:
 | 
				
			||||||
 | 
					0:208            0 (const int)
 | 
				
			||||||
 | 
					0:208        Constant:
 | 
				
			||||||
 | 
					0:208          0.100000
 | 
				
			||||||
 | 
					0:208          0.100000
 | 
				
			||||||
 | 
					0:208          0.100000
 | 
				
			||||||
 | 
					0:208          0.100000
 | 
				
			||||||
 | 
					0:211  Function Definition: blendFunc( ( global void)
 | 
				
			||||||
 | 
					0:211    Function Parameters: 
 | 
				
			||||||
 | 
					0:213    Sequence
 | 
				
			||||||
 | 
					0:213      move second child to first child ( temp mediump 4-component vector of float)
 | 
				
			||||||
 | 
					0:213        'gl_SecondaryFragColorEXT' ( out mediump 4-component vector of float SecondaryFragColorEXT)
 | 
				
			||||||
 | 
					0:213        Constant:
 | 
				
			||||||
 | 
					0:213          1.000000
 | 
				
			||||||
 | 
					0:213          1.000000
 | 
				
			||||||
 | 
					0:213          1.000000
 | 
				
			||||||
 | 
					0:213          1.000000
 | 
				
			||||||
 | 
					0:214      move second child to first child ( temp mediump 4-component vector of float)
 | 
				
			||||||
 | 
					0:214        direct index ( temp mediump 4-component vector of float SecondaryFragDataEXT)
 | 
				
			||||||
 | 
					0:214          'gl_SecondaryFragDataEXT' ( out 1-element array of mediump 4-component vector of float SecondaryFragDataEXT)
 | 
				
			||||||
 | 
					0:214          Constant:
 | 
				
			||||||
 | 
					0:214            0 (const int)
 | 
				
			||||||
0:214        Constant:
 | 
					0:214        Constant:
 | 
				
			||||||
0:214          1 (const int)
 | 
					0:214          0.100000
 | 
				
			||||||
0:214        false case
 | 
					0:214          0.100000
 | 
				
			||||||
0:214        Constant:
 | 
					0:214          0.100000
 | 
				
			||||||
0:214          2 (const int)
 | 
					0:214          0.100000
 | 
				
			||||||
0:220  Sequence
 | 
					0:222  Function Definition: fooinit( ( global mediump float)
 | 
				
			||||||
0:220    move second child to first child ( temp mediump int)
 | 
					0:222    Function Parameters: 
 | 
				
			||||||
0:220      'init2' ( global mediump int)
 | 
					0:224    Sequence
 | 
				
			||||||
0:220      Test condition and select ( temp mediump int)
 | 
					0:224      Branch: Return with expression
 | 
				
			||||||
0:220        Condition
 | 
					0:224        Constant:
 | 
				
			||||||
0:220        'gl_FrontFacing' ( gl_FrontFacing bool Face)
 | 
					0:224          12.000000
 | 
				
			||||||
0:220        true case
 | 
					0:227  Sequence
 | 
				
			||||||
0:220        Constant:
 | 
					0:227    move second child to first child ( temp mediump int)
 | 
				
			||||||
0:220          1 (const int)
 | 
					0:227      'init1' ( global mediump int)
 | 
				
			||||||
0:220        false case
 | 
					0:227      Test condition and select ( temp mediump int)
 | 
				
			||||||
0:220        Constant:
 | 
					0:227        Condition
 | 
				
			||||||
0:220          2 (const int)
 | 
					0:227        'gl_FrontFacing' ( gl_FrontFacing bool Face)
 | 
				
			||||||
 | 
					0:227        true case
 | 
				
			||||||
 | 
					0:227        Constant:
 | 
				
			||||||
 | 
					0:227          1 (const int)
 | 
				
			||||||
 | 
					0:227        false case
 | 
				
			||||||
 | 
					0:227        Constant:
 | 
				
			||||||
 | 
					0:227          2 (const int)
 | 
				
			||||||
 | 
					0:233  Sequence
 | 
				
			||||||
 | 
					0:233    move second child to first child ( temp mediump int)
 | 
				
			||||||
 | 
					0:233      'init2' ( global mediump int)
 | 
				
			||||||
 | 
					0:233      Test condition and select ( temp mediump int)
 | 
				
			||||||
 | 
					0:233        Condition
 | 
				
			||||||
 | 
					0:233        'gl_FrontFacing' ( gl_FrontFacing bool Face)
 | 
				
			||||||
 | 
					0:233        true case
 | 
				
			||||||
 | 
					0:233        Constant:
 | 
				
			||||||
 | 
					0:233          1 (const int)
 | 
				
			||||||
 | 
					0:233        false case
 | 
				
			||||||
 | 
					0:233        Constant:
 | 
				
			||||||
 | 
					0:233          2 (const int)
 | 
				
			||||||
0:?   Linker Objects
 | 
					0:?   Linker Objects
 | 
				
			||||||
0:?     'a' ( global 3-element array of mediump int)
 | 
					0:?     'a' ( global 3-element array of mediump int)
 | 
				
			||||||
0:?     'uint' ( global mediump int)
 | 
					0:?     'uint' ( global mediump int)
 | 
				
			||||||
@ -430,6 +474,7 @@ Linked fragment stage:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Shader version: 100
 | 
					Shader version: 100
 | 
				
			||||||
 | 
					Requested GL_EXT_blend_func_extended
 | 
				
			||||||
Requested GL_EXT_frag_depth
 | 
					Requested GL_EXT_frag_depth
 | 
				
			||||||
Requested GL_EXT_shader_non_constant_global_initializers
 | 
					Requested GL_EXT_shader_non_constant_global_initializers
 | 
				
			||||||
Requested GL_EXT_shader_texture_lod
 | 
					Requested GL_EXT_shader_texture_lod
 | 
				
			||||||
@ -520,30 +565,30 @@ ERROR: node is still EOpNull!
 | 
				
			|||||||
0:152      'f124' ( global mediump float)
 | 
					0:152      'f124' ( global mediump float)
 | 
				
			||||||
0:152      Constant:
 | 
					0:152      Constant:
 | 
				
			||||||
0:152        50000000000.000000
 | 
					0:152        50000000000.000000
 | 
				
			||||||
0:214  Sequence
 | 
					0:227  Sequence
 | 
				
			||||||
0:214    move second child to first child ( temp mediump int)
 | 
					0:227    move second child to first child ( temp mediump int)
 | 
				
			||||||
0:214      'init1' ( global mediump int)
 | 
					0:227      'init1' ( global mediump int)
 | 
				
			||||||
0:214      Test condition and select ( temp mediump int)
 | 
					0:227      Test condition and select ( temp mediump int)
 | 
				
			||||||
0:214        Condition
 | 
					0:227        Condition
 | 
				
			||||||
0:214        'gl_FrontFacing' ( gl_FrontFacing bool Face)
 | 
					0:227        'gl_FrontFacing' ( gl_FrontFacing bool Face)
 | 
				
			||||||
0:214        true case
 | 
					0:227        true case
 | 
				
			||||||
0:214        Constant:
 | 
					0:227        Constant:
 | 
				
			||||||
0:214          1 (const int)
 | 
					0:227          1 (const int)
 | 
				
			||||||
0:214        false case
 | 
					0:227        false case
 | 
				
			||||||
0:214        Constant:
 | 
					0:227        Constant:
 | 
				
			||||||
0:214          2 (const int)
 | 
					0:227          2 (const int)
 | 
				
			||||||
0:220  Sequence
 | 
					0:233  Sequence
 | 
				
			||||||
0:220    move second child to first child ( temp mediump int)
 | 
					0:233    move second child to first child ( temp mediump int)
 | 
				
			||||||
0:220      'init2' ( global mediump int)
 | 
					0:233      'init2' ( global mediump int)
 | 
				
			||||||
0:220      Test condition and select ( temp mediump int)
 | 
					0:233      Test condition and select ( temp mediump int)
 | 
				
			||||||
0:220        Condition
 | 
					0:233        Condition
 | 
				
			||||||
0:220        'gl_FrontFacing' ( gl_FrontFacing bool Face)
 | 
					0:233        'gl_FrontFacing' ( gl_FrontFacing bool Face)
 | 
				
			||||||
0:220        true case
 | 
					0:233        true case
 | 
				
			||||||
0:220        Constant:
 | 
					0:233        Constant:
 | 
				
			||||||
0:220          1 (const int)
 | 
					0:233          1 (const int)
 | 
				
			||||||
0:220        false case
 | 
					0:233        false case
 | 
				
			||||||
0:220        Constant:
 | 
					0:233        Constant:
 | 
				
			||||||
0:220          2 (const int)
 | 
					0:233          2 (const int)
 | 
				
			||||||
0:?   Linker Objects
 | 
					0:?   Linker Objects
 | 
				
			||||||
0:?     'a' ( global 3-element array of mediump int)
 | 
					0:?     'a' ( global 3-element array of mediump int)
 | 
				
			||||||
0:?     'uint' ( global mediump int)
 | 
					0:?     'uint' ( global mediump int)
 | 
				
			||||||
 | 
				
			|||||||
@ -41,15 +41,18 @@ ERROR: 0:129: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset,
 | 
				
			|||||||
ERROR: 0:148: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) 
 | 
					ERROR: 0:148: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) 
 | 
				
			||||||
ERROR: 0:150: 'early_fragment_tests' : not supported for this version or the enabled extensions 
 | 
					ERROR: 0:150: 'early_fragment_tests' : not supported for this version or the enabled extensions 
 | 
				
			||||||
ERROR: 0:177: 'specific signature of builtin mix' : required extension not requested: GL_EXT_shader_integer_mix
 | 
					ERROR: 0:177: 'specific signature of builtin mix' : required extension not requested: GL_EXT_shader_integer_mix
 | 
				
			||||||
ERROR: 0:184: 'invariant' : can only apply to an output 
 | 
					ERROR: 0:181: 'index layout qualifier on fragment output' : not supported for this version or the enabled extensions 
 | 
				
			||||||
ERROR: 0:185: 'invariant' : can only apply to an output 
 | 
					ERROR: 0:183: 'index' : value must be 0 or 1 
 | 
				
			||||||
ERROR: 0:186: 'invariant' : can only apply to an output 
 | 
					ERROR: 0:189: 'invariant' : can only apply to an output 
 | 
				
			||||||
ERROR: 0:188: 'imageBuffer' : Reserved word. 
 | 
					ERROR: 0:190: 'invariant' : can only apply to an output 
 | 
				
			||||||
ERROR: 0:188: '' :  syntax error, unexpected IMAGEBUFFER, expecting COMMA or SEMICOLON
 | 
					ERROR: 0:191: 'invariant' : can only apply to an output 
 | 
				
			||||||
ERROR: 47 compilation errors.  No code generated.
 | 
					ERROR: 0:193: 'imageBuffer' : Reserved word. 
 | 
				
			||||||
 | 
					ERROR: 0:193: '' :  syntax error, unexpected IMAGEBUFFER, expecting COMMA or SEMICOLON
 | 
				
			||||||
 | 
					ERROR: 49 compilation errors.  No code generated.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Shader version: 300
 | 
					Shader version: 300
 | 
				
			||||||
 | 
					Requested GL_EXT_blend_func_extended
 | 
				
			||||||
Requested GL_EXT_shader_integer_mix
 | 
					Requested GL_EXT_shader_integer_mix
 | 
				
			||||||
using early_fragment_tests
 | 
					using early_fragment_tests
 | 
				
			||||||
ERROR: node is still EOpNull!
 | 
					ERROR: node is still EOpNull!
 | 
				
			||||||
@ -530,6 +533,8 @@ ERROR: node is still EOpNull!
 | 
				
			|||||||
0:?     'y' ( global mediump int)
 | 
					0:?     'y' ( global mediump int)
 | 
				
			||||||
0:?     'z' ( global mediump uint)
 | 
					0:?     'z' ( global mediump uint)
 | 
				
			||||||
0:?     'w' ( global mediump uint)
 | 
					0:?     'w' ( global mediump uint)
 | 
				
			||||||
 | 
					0:?     'outVarFail' (layout( location=0 index=1) out lowp 4-component vector of float)
 | 
				
			||||||
 | 
					0:?     'outVarPass' (layout( location=0 index=0) out lowp 4-component vector of float)
 | 
				
			||||||
0:?     'fooinv' ( invariant smooth in lowp 4-component vector of float)
 | 
					0:?     'fooinv' ( invariant smooth in lowp 4-component vector of float)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -538,6 +543,7 @@ Linked fragment stage:
 | 
				
			|||||||
ERROR: Linking fragment stage: when more than one fragment shader output, all must have location qualifiers
 | 
					ERROR: Linking fragment stage: when more than one fragment shader output, all must have location qualifiers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Shader version: 300
 | 
					Shader version: 300
 | 
				
			||||||
 | 
					Requested GL_EXT_blend_func_extended
 | 
				
			||||||
Requested GL_EXT_shader_integer_mix
 | 
					Requested GL_EXT_shader_integer_mix
 | 
				
			||||||
using early_fragment_tests
 | 
					using early_fragment_tests
 | 
				
			||||||
ERROR: node is still EOpNull!
 | 
					ERROR: node is still EOpNull!
 | 
				
			||||||
@ -769,5 +775,7 @@ ERROR: node is still EOpNull!
 | 
				
			|||||||
0:?     'y' ( global mediump int)
 | 
					0:?     'y' ( global mediump int)
 | 
				
			||||||
0:?     'z' ( global mediump uint)
 | 
					0:?     'z' ( global mediump uint)
 | 
				
			||||||
0:?     'w' ( global mediump uint)
 | 
					0:?     'w' ( global mediump uint)
 | 
				
			||||||
 | 
					0:?     'outVarFail' (layout( location=0 index=1) out lowp 4-component vector of float)
 | 
				
			||||||
 | 
					0:?     'outVarPass' (layout( location=0 index=0) out lowp 4-component vector of float)
 | 
				
			||||||
0:?     'fooinv' ( invariant smooth in lowp 4-component vector of float)
 | 
					0:?     'fooinv' ( invariant smooth in lowp 4-component vector of float)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -90,6 +90,7 @@ MaxTaskWorkGroupSizeX_NV 32
 | 
				
			|||||||
MaxTaskWorkGroupSizeY_NV 1
 | 
					MaxTaskWorkGroupSizeY_NV 1
 | 
				
			||||||
MaxTaskWorkGroupSizeZ_NV 1
 | 
					MaxTaskWorkGroupSizeZ_NV 1
 | 
				
			||||||
MaxMeshViewCountNV 4
 | 
					MaxMeshViewCountNV 4
 | 
				
			||||||
 | 
					MaxDualSourceDrawBuffersEXT 1
 | 
				
			||||||
nonInductiveForLoops 1
 | 
					nonInductiveForLoops 1
 | 
				
			||||||
whileLoops 1
 | 
					whileLoops 1
 | 
				
			||||||
doWhileLoops 1
 | 
					doWhileLoops 1
 | 
				
			||||||
 | 
				
			|||||||
@ -231,6 +231,9 @@ enum TBuiltInVariable {
 | 
				
			|||||||
    EbvFragSizeEXT,
 | 
					    EbvFragSizeEXT,
 | 
				
			||||||
    EbvFragInvocationCountEXT,
 | 
					    EbvFragInvocationCountEXT,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    EbvSecondaryFragDataEXT,
 | 
				
			||||||
 | 
					    EbvSecondaryFragColorEXT,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    EbvViewportMaskNV,
 | 
					    EbvViewportMaskNV,
 | 
				
			||||||
    EbvSecondaryPositionNV,
 | 
					    EbvSecondaryPositionNV,
 | 
				
			||||||
    EbvSecondaryViewportMaskNV,
 | 
					    EbvSecondaryViewportMaskNV,
 | 
				
			||||||
@ -433,6 +436,9 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v)
 | 
				
			|||||||
    case EbvFragSizeEXT:                return "FragSizeEXT";
 | 
					    case EbvFragSizeEXT:                return "FragSizeEXT";
 | 
				
			||||||
    case EbvFragInvocationCountEXT:     return "FragInvocationCountEXT";
 | 
					    case EbvFragInvocationCountEXT:     return "FragInvocationCountEXT";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    case EbvSecondaryFragDataEXT:       return "SecondaryFragDataEXT";
 | 
				
			||||||
 | 
					    case EbvSecondaryFragColorEXT:      return "SecondaryFragColorEXT";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case EbvViewportMaskNV:             return "ViewportMaskNV";
 | 
					    case EbvViewportMaskNV:             return "ViewportMaskNV";
 | 
				
			||||||
    case EbvSecondaryPositionNV:        return "SecondaryPositionNV";
 | 
					    case EbvSecondaryPositionNV:        return "SecondaryPositionNV";
 | 
				
			||||||
    case EbvSecondaryViewportMaskNV:    return "SecondaryViewportMaskNV";
 | 
					    case EbvSecondaryViewportMaskNV:    return "SecondaryViewportMaskNV";
 | 
				
			||||||
 | 
				
			|||||||
@ -142,6 +142,7 @@ struct TBuiltInResource {
 | 
				
			|||||||
    int maxTaskWorkGroupSizeY_NV;
 | 
					    int maxTaskWorkGroupSizeY_NV;
 | 
				
			||||||
    int maxTaskWorkGroupSizeZ_NV;
 | 
					    int maxTaskWorkGroupSizeZ_NV;
 | 
				
			||||||
    int maxMeshViewCountNV;
 | 
					    int maxMeshViewCountNV;
 | 
				
			||||||
 | 
					    int maxDualSourceDrawBuffersEXT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    TLimits limits;
 | 
					    TLimits limits;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -148,6 +148,7 @@ typedef struct glslang_resource_s {
 | 
				
			|||||||
    int max_task_work_group_size_y_nv;
 | 
					    int max_task_work_group_size_y_nv;
 | 
				
			||||||
    int max_task_work_group_size_z_nv;
 | 
					    int max_task_work_group_size_z_nv;
 | 
				
			||||||
    int max_mesh_view_count_nv;
 | 
					    int max_mesh_view_count_nv;
 | 
				
			||||||
 | 
					    int maxDualSourceDrawBuffersEXT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glslang_limits_t limits;
 | 
					    glslang_limits_t limits;
 | 
				
			||||||
} glslang_resource_t;
 | 
					} glslang_resource_t;
 | 
				
			||||||
 | 
				
			|||||||
@ -6755,6 +6755,18 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
 | 
				
			|||||||
            s.append(builtInConstant);
 | 
					            s.append(builtInConstant);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (version >= 100) {
 | 
				
			||||||
 | 
					            // GL_EXT_blend_func_extended
 | 
				
			||||||
 | 
					            snprintf(builtInConstant, maxSize, "const mediump int gl_MaxDualSourceDrawBuffersEXT = %d;", resources.maxDualSourceDrawBuffersEXT);
 | 
				
			||||||
 | 
					            s.append(builtInConstant);
 | 
				
			||||||
 | 
					            // this is here instead of with the others in initialize(version, profile) due to the dependence on gl_MaxDualSourceDrawBuffersEXT
 | 
				
			||||||
 | 
					            if (language == EShLangFragment) {
 | 
				
			||||||
 | 
					                s.append(
 | 
				
			||||||
 | 
					                    "mediump vec4 gl_SecondaryFragColorEXT;"
 | 
				
			||||||
 | 
					                    "mediump vec4 gl_SecondaryFragDataEXT[gl_MaxDualSourceDrawBuffersEXT];"
 | 
				
			||||||
 | 
					                    "\n");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        // non-ES profile
 | 
					        // non-ES profile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -9119,6 +9131,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
 | 
				
			|||||||
            symbolTable.insert(*new TVariable(NewPoolTString("gl_FragData"), fragData));
 | 
					            symbolTable.insert(*new TVariable(NewPoolTString("gl_FragData"), fragData));
 | 
				
			||||||
            SpecialQualifier("gl_FragData", EvqFragColor, EbvFragData, symbolTable);
 | 
					            SpecialQualifier("gl_FragData", EvqFragColor, EbvFragData, symbolTable);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // GL_EXT_blend_func_extended
 | 
				
			||||||
 | 
					        if (profile == EEsProfile && version >= 100) {
 | 
				
			||||||
 | 
					           symbolTable.setVariableExtensions("gl_MaxDualSourceDrawBuffersEXT",    1, &E_GL_EXT_blend_func_extended);
 | 
				
			||||||
 | 
					           symbolTable.setVariableExtensions("gl_SecondaryFragColorEXT",    1, &E_GL_EXT_blend_func_extended);
 | 
				
			||||||
 | 
					           symbolTable.setVariableExtensions("gl_SecondaryFragDataEXT",    1, &E_GL_EXT_blend_func_extended);
 | 
				
			||||||
 | 
					           SpecialQualifier("gl_SecondaryFragColorEXT", EvqVaryingOut, EbvSecondaryFragColorEXT, symbolTable);
 | 
				
			||||||
 | 
					           SpecialQualifier("gl_SecondaryFragDataEXT", EvqVaryingOut, EbvSecondaryFragDataEXT, symbolTable);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case EShLangTessControl:
 | 
					    case EShLangTessControl:
 | 
				
			||||||
 | 
				
			|||||||
@ -5412,10 +5412,10 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    case EShLangFragment:
 | 
					    case EShLangFragment:
 | 
				
			||||||
        if (id == "index") {
 | 
					        if (id == "index") {
 | 
				
			||||||
            requireProfile(loc, ECompatibilityProfile | ECoreProfile, "index layout qualifier on fragment output");
 | 
					            requireProfile(loc, ECompatibilityProfile | ECoreProfile | EEsProfile, "index layout qualifier on fragment output");
 | 
				
			||||||
            const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location };
 | 
					            const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location };
 | 
				
			||||||
            profileRequires(loc, ECompatibilityProfile | ECoreProfile, 330, 2, exts, "index layout qualifier on fragment output");
 | 
					            profileRequires(loc, ECompatibilityProfile | ECoreProfile, 330, 2, exts, "index layout qualifier on fragment output");
 | 
				
			||||||
 | 
					            profileRequires(loc, EEsProfile ,310, E_GL_EXT_blend_func_extended, "index layout qualifier on fragment output");
 | 
				
			||||||
            // "It is also a compile-time error if a fragment shader sets a layout index to less than 0 or greater than 1."
 | 
					            // "It is also a compile-time error if a fragment shader sets a layout index to less than 0 or greater than 1."
 | 
				
			||||||
            if (value < 0 || value > 1) {
 | 
					            if (value < 0 || value > 1) {
 | 
				
			||||||
                value = 0;
 | 
					                value = 0;
 | 
				
			||||||
 | 
				
			|||||||
@ -306,6 +306,7 @@ void TParseVersions::initializeExtensionBehavior()
 | 
				
			|||||||
    extensionBehavior[E_GL_EXT_ray_tracing]                 = EBhDisable;
 | 
					    extensionBehavior[E_GL_EXT_ray_tracing]                 = EBhDisable;
 | 
				
			||||||
    extensionBehavior[E_GL_EXT_ray_query]                   = EBhDisable;
 | 
					    extensionBehavior[E_GL_EXT_ray_query]                   = EBhDisable;
 | 
				
			||||||
    extensionBehavior[E_GL_EXT_ray_flags_primitive_culling] = EBhDisable;
 | 
					    extensionBehavior[E_GL_EXT_ray_flags_primitive_culling] = EBhDisable;
 | 
				
			||||||
 | 
					    extensionBehavior[E_GL_EXT_blend_func_extended]         = EBhDisable;
 | 
				
			||||||
    extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable;
 | 
					    extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // OVR extensions
 | 
					    // OVR extensions
 | 
				
			||||||
@ -367,6 +368,7 @@ void TParseVersions::getPreamble(std::string& preamble)
 | 
				
			|||||||
            "#define GL_EXT_texture_cube_map_array 1\n"
 | 
					            "#define GL_EXT_texture_cube_map_array 1\n"
 | 
				
			||||||
            "#define GL_EXT_shader_implicit_conversions 1\n"
 | 
					            "#define GL_EXT_shader_implicit_conversions 1\n"
 | 
				
			||||||
            "#define GL_EXT_shader_integer_mix 1\n"
 | 
					            "#define GL_EXT_shader_integer_mix 1\n"
 | 
				
			||||||
 | 
					            "#define GL_EXT_blend_func_extended 1\n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // OES matching AEP
 | 
					            // OES matching AEP
 | 
				
			||||||
            "#define GL_OES_geometry_shader 1\n"
 | 
					            "#define GL_OES_geometry_shader 1\n"
 | 
				
			||||||
 | 
				
			|||||||
@ -196,6 +196,7 @@ const char* const E_GL_EXT_debug_printf                     = "GL_EXT_debug_prin
 | 
				
			|||||||
const char* const E_GL_EXT_ray_tracing                      = "GL_EXT_ray_tracing";
 | 
					const char* const E_GL_EXT_ray_tracing                      = "GL_EXT_ray_tracing";
 | 
				
			||||||
const char* const E_GL_EXT_ray_query                        = "GL_EXT_ray_query";
 | 
					const char* const E_GL_EXT_ray_query                        = "GL_EXT_ray_query";
 | 
				
			||||||
const char* const E_GL_EXT_ray_flags_primitive_culling      = "GL_EXT_ray_flags_primitive_culling";
 | 
					const char* const E_GL_EXT_ray_flags_primitive_culling      = "GL_EXT_ray_flags_primitive_culling";
 | 
				
			||||||
 | 
					const char* const E_GL_EXT_blend_func_extended              = "GL_EXT_blend_func_extended";
 | 
				
			||||||
const char* const E_GL_EXT_shader_implicit_conversions      = "GL_EXT_shader_implicit_conversions";
 | 
					const char* const E_GL_EXT_shader_implicit_conversions      = "GL_EXT_shader_implicit_conversions";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Arrays of extensions for the above viewportEXTs duplications
 | 
					// Arrays of extensions for the above viewportEXTs duplications
 | 
				
			||||||
 | 
				
			|||||||
@ -141,6 +141,7 @@ const TBuiltInResource DefaultTBuiltInResource = {
 | 
				
			|||||||
    /* .maxTaskWorkGroupSizeY_NV = */ 1,
 | 
					    /* .maxTaskWorkGroupSizeY_NV = */ 1,
 | 
				
			||||||
    /* .maxTaskWorkGroupSizeZ_NV = */ 1,
 | 
					    /* .maxTaskWorkGroupSizeZ_NV = */ 1,
 | 
				
			||||||
    /* .maxMeshViewCountNV = */ 4,
 | 
					    /* .maxMeshViewCountNV = */ 4,
 | 
				
			||||||
 | 
					    /* .maxDualSourceDrawBuffersEXT = */ 1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* .limits = */ {
 | 
					    /* .limits = */ {
 | 
				
			||||||
        /* .nonInductiveForLoops = */ 1,
 | 
					        /* .nonInductiveForLoops = */ 1,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user