Tie "location = " to the right stages/versions/extensions. Also add "#define extension 1" extension support and instructions.
git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@23633 e7fa87d3-cd2b-0410-9028-fcbf551c1848
This commit is contained in:
		
							parent
							
								
									bf688510a8
								
							
						
					
					
						commit
						c78a126ba6
					
				
										
											Binary file not shown.
										
									
								
							@ -22,3 +22,13 @@ void main()
 | 
				
			|||||||
    iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 1+2);
 | 
					    iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 1+2);
 | 
				
			||||||
    iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(i));
 | 
					    iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(i));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					layout(location = 4) in vec4 vl; // ERROR, not supported
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef GL_ARB_separate_shader_objects
 | 
				
			||||||
 | 
					#extension GL_ARB_separate_shader_objects : enable
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					layout(location = 4) in vec4 vl2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					layout(location = 3) uniform vec3 uv3;
 | 
				
			||||||
 | 
				
			|||||||
@ -8,3 +8,5 @@ void main()
 | 
				
			|||||||
	memoryBarrierImage();
 | 
						memoryBarrierImage();
 | 
				
			||||||
	groupMemoryBarrier();
 | 
						groupMemoryBarrier();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					layout(location = 2) in vec3 v3;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										8
									
								
								Test/430.vert
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Test/430.vert
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					#version 430 core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					layout(location = 3) vec4 v4;  // ERROR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					layout(location = 3) uniform vec4 uv4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					layout(location = 2) in   inb1 { vec4 v; } b1;  // ERROR
 | 
				
			||||||
 | 
					layout(location = 2) out outb1 { vec4 v; } b2;  // ERROR
 | 
				
			||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
ERROR: 0:4: 'input location layout qualifier' : not supported in this stage: fragment
 | 
					ERROR: 0:4: 'location qualifier on input' : not supported in this stage: fragment
 | 
				
			||||||
ERROR: 1 compilation errors.  No code generated.
 | 
					ERROR: 1 compilation errors.  No code generated.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ERROR: node is still EOpNull!
 | 
					ERROR: node is still EOpNull!
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@ ERROR: 0:19: 'badf' : member of uniform block cannot have an auxiliary or interp
 | 
				
			|||||||
ERROR: 0:20: 'badg' : member storage qualifier cannot contradict block storage qualifier 
 | 
					ERROR: 0:20: 'badg' : member storage qualifier cannot contradict block storage qualifier 
 | 
				
			||||||
ERROR: 0:28: 'T3' : nameless block contains a member that already has a name at global scope 
 | 
					ERROR: 0:28: 'T3' : nameless block contains a member that already has a name at global scope 
 | 
				
			||||||
ERROR: 0:35: 'output block' : not supported with this profile: es
 | 
					ERROR: 0:35: 'output block' : not supported with this profile: es
 | 
				
			||||||
ERROR: 0:39: 'output location layout qualifier' : not supported in this stage: vertex
 | 
					ERROR: 0:39: 'location qualifier on output' : not supported in this stage: vertex
 | 
				
			||||||
ERROR: 0:47: 'shared' : not supported with this profile: es
 | 
					ERROR: 0:47: 'shared' : not supported with this profile: es
 | 
				
			||||||
ERROR: 0:47: 'shared' : not supported in this stage: vertex
 | 
					ERROR: 0:47: 'shared' : not supported in this stage: vertex
 | 
				
			||||||
ERROR: 12 compilation errors.  No code generated.
 | 
					ERROR: 12 compilation errors.  No code generated.
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,9 @@
 | 
				
			|||||||
Warning, version 400 is not yet complete; some version-specific features are present, but many are missing.
 | 
					Warning, version 400 is not yet complete; some version-specific features are present, but many are missing.
 | 
				
			||||||
ERROR: 0:20: 'texture gather component' : must be a constant 
 | 
					ERROR: 0:20: 'texture gather component' : must be a constant 
 | 
				
			||||||
ERROR: 0:21: 'texture gather component' : must be 0, 1, 2, or 3 
 | 
					ERROR: 0:21: 'texture gather component' : must be 0, 1, 2, or 3 
 | 
				
			||||||
ERROR: 2 compilation errors.  No code generated.
 | 
					ERROR: 0:26: 'location qualifier on input' : not supported for this version or the enabled extensions 
 | 
				
			||||||
 | 
					ERROR: 0:34: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
 | 
				
			||||||
 | 
					ERROR: 4 compilation errors.  No code generated.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ERROR: node is still EOpNull!
 | 
					ERROR: node is still EOpNull!
 | 
				
			||||||
0:10  Function Definition: main( (void)
 | 
					0:10  Function Definition: main( (void)
 | 
				
			||||||
@ -110,4 +112,7 @@ ERROR: node is still EOpNull!
 | 
				
			|||||||
0:?     'arrayedSampler' (uniform 5-element array of sampler2D)
 | 
					0:?     'arrayedSampler' (uniform 5-element array of sampler2D)
 | 
				
			||||||
0:?     'samp2dr' (uniform usampler2DRect)
 | 
					0:?     'samp2dr' (uniform usampler2DRect)
 | 
				
			||||||
0:?     'isamp2DA' (uniform isampler2DArray)
 | 
					0:?     'isamp2DA' (uniform isampler2DArray)
 | 
				
			||||||
 | 
					0:?     'vl' (layout(location=4 ) smooth in 4-component vector of float)
 | 
				
			||||||
 | 
					0:?     'vl2' (layout(location=4 ) smooth in 4-component vector of float)
 | 
				
			||||||
 | 
					0:?     'uv3' (layout(location=3 ) uniform 3-component vector of float)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,8 @@
 | 
				
			|||||||
Warning, version 430 is not yet complete; some version-specific features are present, but many are missing.
 | 
					Warning, version 430 is not yet complete; some version-specific features are present, but many are missing.
 | 
				
			||||||
0:? Sequence
 | 
					ERROR: 0:12: 'location qualifier on input' : not supported in this stage: compute
 | 
				
			||||||
 | 
					ERROR: 1 compilation errors.  No code generated.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ERROR: node is still EOpNull!
 | 
				
			||||||
0:3  Function Definition: main( (void)
 | 
					0:3  Function Definition: main( (void)
 | 
				
			||||||
0:3    Function Parameters: 
 | 
					0:3    Function Parameters: 
 | 
				
			||||||
0:5    Sequence
 | 
					0:5    Sequence
 | 
				
			||||||
@ -9,4 +12,5 @@ Warning, version 430 is not yet complete; some version-specific features are pre
 | 
				
			|||||||
0:8      MemoryBarrierImage (void)
 | 
					0:8      MemoryBarrierImage (void)
 | 
				
			||||||
0:9      GroupMemoryBarrier (void)
 | 
					0:9      GroupMemoryBarrier (void)
 | 
				
			||||||
0:?   Linker Objects
 | 
					0:?   Linker Objects
 | 
				
			||||||
 | 
					0:?     'v3' (layout(location=2 ) in 3-component vector of float)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										15
									
								
								Test/baseResults/430.vert.out
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								Test/baseResults/430.vert.out
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					Warning, version 430 is not yet complete; some version-specific features are present, but many are missing.
 | 
				
			||||||
 | 
					ERROR: 0:3: 'v4' : location qualifiers only appy to uniform, buffer, in, or out storage qualifiers 
 | 
				
			||||||
 | 
					ERROR: 0:7: 'location qualifier on input block' : not supported for this version or the enabled extensions 
 | 
				
			||||||
 | 
					ERROR: 0:8: 'location qualifier on output block' : not supported for this version or the enabled extensions 
 | 
				
			||||||
 | 
					ERROR: 3 compilation errors.  No code generated.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ERROR: node is still EOpNull!
 | 
				
			||||||
 | 
					0:?   Linker Objects
 | 
				
			||||||
 | 
					0:?     'v4' (layout(location=3 ) 4-component vector of float)
 | 
				
			||||||
 | 
					0:?     'uv4' (layout(location=3 ) uniform 4-component vector of float)
 | 
				
			||||||
 | 
					0:?     'b1' (layout(location=2 ) in block)
 | 
				
			||||||
 | 
					0:?     'b2' (layout(location=2 ) out block)
 | 
				
			||||||
 | 
					0:?     'gl_VertexID' (gl_VertexId int)
 | 
				
			||||||
 | 
					0:?     'gl_InstanceID' (gl_InstanceId int)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
Warning, version 430 is not yet complete; some version-specific features are present, but many are missing.
 | 
					Warning, version 430 is not yet complete; some version-specific features are present, but many are missing.
 | 
				
			||||||
ERROR: 0:23: 'transforms' : redeclaration of array with size 
 | 
					ERROR: 0:23: 'transforms' : redeclaration of array with size 
 | 
				
			||||||
ERROR: 0:29: 's' : location qualifiers only appy to uniform, in, or out storage qualifiers 
 | 
					ERROR: 0:29: 's' : location qualifiers only appy to uniform, buffer, in, or out storage qualifiers 
 | 
				
			||||||
ERROR: 0:31: 'triangles' : unrecognized layout identifier 
 | 
					ERROR: 0:31: 'triangles' : unrecognized layout identifier 
 | 
				
			||||||
ERROR: 0:31: 'invocations' : there is no such layout identifier taking an assigned value 
 | 
					ERROR: 0:31: 'invocations' : there is no such layout identifier taking an assigned value 
 | 
				
			||||||
ERROR: 0:33: 'lines' : unrecognized layout identifier 
 | 
					ERROR: 0:33: 'lines' : unrecognized layout identifier 
 | 
				
			||||||
 | 
				
			|||||||
@ -55,6 +55,7 @@ numeral.frag
 | 
				
			|||||||
400.tese
 | 
					400.tese
 | 
				
			||||||
410.geom
 | 
					410.geom
 | 
				
			||||||
420.tese
 | 
					420.tese
 | 
				
			||||||
 | 
					430.vert
 | 
				
			||||||
430.comp
 | 
					430.comp
 | 
				
			||||||
dce.frag
 | 
					dce.frag
 | 
				
			||||||
../../LunarGLASS/test/aggOps.frag
 | 
					../../LunarGLASS/test/aggOps.frag
 | 
				
			||||||
 | 
				
			|||||||
@ -106,16 +106,6 @@ TParseContext::TParseContext(TSymbolTable& symt, TIntermediate& interm, bool pb,
 | 
				
			|||||||
    globalOutputDefaults.clear();
 | 
					    globalOutputDefaults.clear();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Get code that is not part of a shared symbol table, is specific to this shader,
 | 
					 | 
				
			||||||
// or needed by CPP (which does not use a shared symbol table).
 | 
					 | 
				
			||||||
const char* TParseContext::getPreamble()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if (profile == EEsProfile)
 | 
					 | 
				
			||||||
        return "#define GL_ES 1\n";
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// Parse an array of strings using yyparse, going through the
 | 
					// Parse an array of strings using yyparse, going through the
 | 
				
			||||||
// preprocessor to tokenize the shader strings, then through
 | 
					// preprocessor to tokenize the shader strings, then through
 | 
				
			||||||
@ -2190,8 +2180,50 @@ void TParseContext::layoutCheck(TSourceLoc loc, const TSymbol& symbol)
 | 
				
			|||||||
    const TQualifier& qualifier = type.getQualifier();
 | 
					    const TQualifier& qualifier = type.getQualifier();
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    if (qualifier.hasLocation()) {
 | 
					    if (qualifier.hasLocation()) {
 | 
				
			||||||
        // TODO: location = functionality, when is it allowed?
 | 
					        switch (qualifier.storage) {
 | 
				
			||||||
 | 
					        case EvqVaryingIn:
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            const char* feature = "location qualifier on input";
 | 
				
			||||||
 | 
					            if (profile == EEsProfile)
 | 
				
			||||||
 | 
					                requireStage(loc, EShLangVertex, feature);
 | 
				
			||||||
 | 
					            requireStage(loc, (EShLanguageMask)~EShLangComputeMask, feature);
 | 
				
			||||||
 | 
					            if (language == EShLangVertex)
 | 
				
			||||||
 | 
					                profileRequires(loc, ECoreProfile | ECompatibilityProfile, 330, 0, feature);
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					                profileRequires(loc, ECoreProfile | ECompatibilityProfile, 410, GL_ARB_separate_shader_objects, feature);
 | 
				
			||||||
 | 
					            if (type.getBasicType() == EbtBlock)
 | 
				
			||||||
 | 
					                profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, 0 /* TODO ARB_enhanced_layouts*/, "location qualifier on input block");
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        case EvqVaryingOut:
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            const char* feature = "location qualifier on output";
 | 
				
			||||||
 | 
					            if (profile == EEsProfile)
 | 
				
			||||||
 | 
					                requireStage(loc, EShLangFragment, feature);
 | 
				
			||||||
 | 
					            requireStage(loc, (EShLanguageMask)~EShLangComputeMask, feature);
 | 
				
			||||||
 | 
					            if (language == EShLangFragment)
 | 
				
			||||||
 | 
					                profileRequires(loc, ECoreProfile | ECompatibilityProfile, 330, 0, feature);
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					                profileRequires(loc, ECoreProfile | ECompatibilityProfile, 410, GL_ARB_separate_shader_objects, feature);
 | 
				
			||||||
 | 
					            if (type.getBasicType() == EbtBlock)
 | 
				
			||||||
 | 
					                profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, 0 /* TODO ARB_enhanced_layouts*/, "location qualifier on output block");
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        case EvqUniform:
 | 
				
			||||||
 | 
					        case EvqBuffer:
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            const char* feature = "location qualifier on uniform or buffer";
 | 
				
			||||||
 | 
					            requireProfile(loc, ECoreProfile | ECompatibilityProfile, feature);
 | 
				
			||||||
 | 
					            profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, 0, feature);
 | 
				
			||||||
 | 
					            if (symbol.getAsVariable() == 0)
 | 
				
			||||||
 | 
					                error(loc, "can only be used on variable declaration", feature, "");
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (qualifier.hasBinding()) {
 | 
					    if (qualifier.hasBinding()) {
 | 
				
			||||||
        // Binding checking, from the spec:
 | 
					        // Binding checking, from the spec:
 | 
				
			||||||
        //
 | 
					        //
 | 
				
			||||||
@ -2716,7 +2748,7 @@ void TParseContext::addBlock(TSourceLoc loc, TTypeList& typeList, const TString*
 | 
				
			|||||||
        requireProfile(loc, ECoreProfile | ECompatibilityProfile, "output block");
 | 
					        requireProfile(loc, ECoreProfile | ECompatibilityProfile, "output block");
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        error(loc, "only uniform, in, or out interface blocks are supported", blockName->c_str(), "");
 | 
					        error(loc, "only uniform, buffer, in, or out blocks are supported", blockName->c_str(), "");
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2911,8 +2943,8 @@ void TParseContext::updateQualifierDefaults(TSourceLoc loc, TQualifier qualifier
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// Update defaults for qualifiers when declared with a type, and optionally an id.
 | 
					// Update defaults for qualifiers when declared with a type, and optionally an identifier.
 | 
				
			||||||
// (But, not the case of just a qualifier; this is called when a type is present.)
 | 
					// (But, not the case of just a qualifier; only when a type is present.)
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
void TParseContext::updateTypedDefaults(TSourceLoc loc, TQualifier qualifier, const TString* id)
 | 
					void TParseContext::updateTypedDefaults(TSourceLoc loc, TQualifier qualifier, const TString* id)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -2925,27 +2957,24 @@ void TParseContext::updateTypedDefaults(TSourceLoc loc, TQualifier qualifier, co
 | 
				
			|||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (qualifier.storage == EvqUniform) {
 | 
					    switch (qualifier.storage) {
 | 
				
			||||||
 | 
					    case EvqBuffer:
 | 
				
			||||||
 | 
					    case EvqUniform:
 | 
				
			||||||
        if (qualifier.layoutMatrix != ElmNone)
 | 
					        if (qualifier.layoutMatrix != ElmNone)
 | 
				
			||||||
            error(loc, "cannot specify matrix layout on a variable declaration", id->c_str(), "");
 | 
					            error(loc, "cannot specify matrix layout on a variable declaration", id->c_str(), "");
 | 
				
			||||||
        if (qualifier.layoutPacking != ElpNone)
 | 
					        if (qualifier.layoutPacking != ElpNone)
 | 
				
			||||||
            error(loc, "cannot specify packing on a variable declaration", id->c_str(), "");
 | 
					            error(loc, "cannot specify packing on a variable declaration", id->c_str(), "");
 | 
				
			||||||
    } else if (qualifier.storage == EvqVaryingIn) {
 | 
					        break;
 | 
				
			||||||
        if (qualifier.hasLocation()) {
 | 
					    case EvqVaryingIn:
 | 
				
			||||||
            if (profile == EEsProfile)
 | 
					        break;
 | 
				
			||||||
                requireStage(loc, EShLangVertex, "input location layout qualifier");
 | 
					    case EvqVaryingOut:
 | 
				
			||||||
        }
 | 
					        break;
 | 
				
			||||||
    } else if (qualifier.storage == EvqVaryingOut) {
 | 
					    default:
 | 
				
			||||||
        if (qualifier.hasLocation()) {
 | 
					 | 
				
			||||||
            if (profile == EEsProfile)
 | 
					 | 
				
			||||||
                requireStage(loc, EShLangFragment, "output location layout qualifier");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
        if (qualifier.layoutMatrix != ElmNone ||
 | 
					        if (qualifier.layoutMatrix != ElmNone ||
 | 
				
			||||||
            qualifier.layoutPacking != ElpNone)
 | 
					            qualifier.layoutPacking != ElpNone)
 | 
				
			||||||
            error(loc, "layout qualifiers for matrix layout and packing only apply to uniform blocks", id->c_str(), "");
 | 
					            error(loc, "layout qualifiers for matrix layout and packing only apply to uniform or buffer blocks", id->c_str(), "");
 | 
				
			||||||
        else if (qualifier.hasLocation())
 | 
					        else if (qualifier.hasLocation())
 | 
				
			||||||
            error(loc, "location qualifiers only appy to uniform, in, or out storage qualifiers", id->c_str(), "");
 | 
					            error(loc, "location qualifiers only appy to uniform, buffer, in, or out storage qualifiers", id->c_str(), "");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (cantHaveId)
 | 
					    if (cantHaveId)
 | 
				
			||||||
 | 
				
			|||||||
@ -78,7 +78,13 @@
 | 
				
			|||||||
// 
 | 
					// 
 | 
				
			||||||
//     extensionBehavior[XXX_extension_X] = EBhDisable;
 | 
					//     extensionBehavior[XXX_extension_X] = EBhDisable;
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// 3) Insert a profile check in the feature's path (unless all profiles support the feature,
 | 
					// 3) Add any preprocessor directives etc. in the next function, TParseContext::getPreamble():
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//           "#define XXX_extension_X 1\n"
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//    The new-line is important, as that ends preprocess tokens.
 | 
				
			||||||
 | 
					// 
 | 
				
			||||||
 | 
					// 4) Insert a profile check in the feature's path (unless all profiles support the feature,
 | 
				
			||||||
//    for some version level).  That is, call requireProfile() to constrain the profiles, e.g.:
 | 
					//    for some version level).  That is, call requireProfile() to constrain the profiles, e.g.:
 | 
				
			||||||
// 
 | 
					// 
 | 
				
			||||||
//         // ... in a path specific to Feature F...
 | 
					//         // ... in a path specific to Feature F...
 | 
				
			||||||
@ -86,7 +92,7 @@
 | 
				
			|||||||
//                        ECoreProfile | ECompatibilityProfile,
 | 
					//                        ECoreProfile | ECompatibilityProfile,
 | 
				
			||||||
//                        "Feature F");
 | 
					//                        "Feature F");
 | 
				
			||||||
// 
 | 
					// 
 | 
				
			||||||
// 4) For each profile that supports the feature, insert version/extension checks:
 | 
					// 5) For each profile that supports the feature, insert version/extension checks:
 | 
				
			||||||
// 
 | 
					// 
 | 
				
			||||||
//    The mostly likely scenario is that Feature F can only be used with a
 | 
					//    The mostly likely scenario is that Feature F can only be used with a
 | 
				
			||||||
//    particular profile if XXX_extension_X is present or the version is
 | 
					//    particular profile if XXX_extension_X is present or the version is
 | 
				
			||||||
@ -123,7 +129,7 @@
 | 
				
			|||||||
// 
 | 
					// 
 | 
				
			||||||
//        ~EEsProfile
 | 
					//        ~EEsProfile
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// 5) If built-in symbols are added by the extension, add them in Initialize.cpp; see
 | 
					// 6) If built-in symbols are added by the extension, add them in Initialize.cpp; see
 | 
				
			||||||
//    the comment at the top of that file for where to put them.
 | 
					//    the comment at the top of that file for where to put them.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -142,6 +148,23 @@ void TParseContext::initializeExtensionBehavior()
 | 
				
			|||||||
    extensionBehavior[GL_3DL_array_objects]            = EBhDisable;
 | 
					    extensionBehavior[GL_3DL_array_objects]            = EBhDisable;
 | 
				
			||||||
    extensionBehavior[GL_ARB_shading_language_420pack] = EBhDisable;
 | 
					    extensionBehavior[GL_ARB_shading_language_420pack] = EBhDisable;
 | 
				
			||||||
    extensionBehavior[GL_ARB_texture_gather]           = EBhDisable;
 | 
					    extensionBehavior[GL_ARB_texture_gather]           = EBhDisable;
 | 
				
			||||||
 | 
					    extensionBehavior[GL_ARB_separate_shader_objects]  = EBhDisable;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get code that is not part of a shared symbol table, is specific to this shader,
 | 
				
			||||||
 | 
					// or needed by the preprocessor (which does not use a shared symbol table).
 | 
				
			||||||
 | 
					const char* TParseContext::getPreamble()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (profile == EEsProfile) {
 | 
				
			||||||
 | 
					        return 
 | 
				
			||||||
 | 
					            "#define GL_ES 1\n";
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        return 
 | 
				
			||||||
 | 
					            "#define GL_ARB_texture_rectangle 1\n"
 | 
				
			||||||
 | 
					            "#define GL_ARB_shading_language_420pack 1\n"
 | 
				
			||||||
 | 
					            "#define GL_ARB_texture_gather 1\n"
 | 
				
			||||||
 | 
					            "#define GL_ARB_separate_shader_objects 1\n";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
 | 
				
			|||||||
@ -75,6 +75,7 @@ const char* const GL_ARB_texture_rectangle        = "GL_ARB_texture_rectangle";
 | 
				
			|||||||
const char* const GL_3DL_array_objects            = "GL_3DL_array_objects";
 | 
					const char* const GL_3DL_array_objects            = "GL_3DL_array_objects";
 | 
				
			||||||
const char* const GL_ARB_shading_language_420pack = "GL_ARB_shading_language_420pack";
 | 
					const char* const GL_ARB_shading_language_420pack = "GL_ARB_shading_language_420pack";
 | 
				
			||||||
const char* const GL_ARB_texture_gather           = "GL_ARB_texture_gather";
 | 
					const char* const GL_ARB_texture_gather           = "GL_ARB_texture_gather";
 | 
				
			||||||
 | 
					const char* const GL_ARB_separate_shader_objects  = "GL_ARB_separate_shader_objects";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // end namespace glslang
 | 
					} // end namespace glslang
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user