зеркало из https://github.com/stride3d/xkslang.git
Merge pull request #14 from google/extensionturnedon
Simplify function calls for extensionsTurnedOn(). Lots of places in the code use extensionsTurnedOn(1, ...). This patch introduces a new method, extensionTurnedOn(), for testing if a single extension is turned on.
This commit is contained in:
Коммит
4d036c455e
|
@ -1841,7 +1841,7 @@ bool TParseContext::lineContinuationCheck(TSourceLoc loc, bool endOfComment)
|
|||
const char* message = "line continuation";
|
||||
|
||||
bool lineContinuationAllowed = (profile == EEsProfile && version >= 300) ||
|
||||
(profile != EEsProfile && (version >= 420 || extensionsTurnedOn(1, &E_GL_ARB_shading_language_420pack)));
|
||||
(profile != EEsProfile && (version >= 420 || extensionTurnedOn(E_GL_ARB_shading_language_420pack)));
|
||||
|
||||
if (endOfComment) {
|
||||
if (lineContinuationAllowed)
|
||||
|
@ -2228,7 +2228,7 @@ void TParseContext::mergeQualifiers(TSourceLoc loc, TQualifier& dst, const TQual
|
|||
// Ordering
|
||||
if (! force && ((profile != EEsProfile && version < 420) ||
|
||||
(profile == EEsProfile && version < 310))
|
||||
&& ! extensionsTurnedOn(1, &E_GL_ARB_shading_language_420pack)) {
|
||||
&& ! extensionTurnedOn(E_GL_ARB_shading_language_420pack)) {
|
||||
// non-function parameters
|
||||
if (src.invariant && (dst.isInterpolation() || dst.isAuxiliary() || dst.storage != EvqTemporary || dst.precision != EpqNone))
|
||||
error(loc, "invariant qualifier must appear first", "", "");
|
||||
|
@ -2691,7 +2691,7 @@ TSymbol* TParseContext::redeclareBuiltinVariable(TSourceLoc loc, const TString&
|
|||
|
||||
// Special case when using GL_ARB_separate_shader_objects
|
||||
bool ssoPre150 = false; // means the only reason this variable is redeclared is due to this combination
|
||||
if (profile != EEsProfile && version <= 140 && extensionsTurnedOn(1, &E_GL_ARB_separate_shader_objects)) {
|
||||
if (profile != EEsProfile && version <= 140 && extensionTurnedOn(E_GL_ARB_separate_shader_objects)) {
|
||||
if (identifier == "gl_Position" ||
|
||||
identifier == "gl_PointSize" ||
|
||||
identifier == "gl_ClipVertex" ||
|
||||
|
|
|
@ -227,6 +227,7 @@ public:
|
|||
void requireNotRemoved(TSourceLoc, int queryProfiles, int removedVersion, const char* featureDesc);
|
||||
void requireExtensions(TSourceLoc, int numExtensions, const char* const extensions[], const char* featureDesc);
|
||||
TExtensionBehavior getExtensionBehavior(const char*);
|
||||
bool extensionTurnedOn(const char* const extension);
|
||||
bool extensionsTurnedOn(int numExtensions, const char* const extensions[]);
|
||||
void updateExtensionBehavior(int line, const char* const extension, const char* behavior);
|
||||
void fullIntegerCheck(TSourceLoc, const char* op);
|
||||
|
|
|
@ -686,7 +686,7 @@ int TScanContext::tokenizeIdentifier()
|
|||
|
||||
case ATOMIC_UINT:
|
||||
if ((parseContext.profile == EEsProfile && parseContext.version >= 310) ||
|
||||
parseContext.extensionsTurnedOn(1, &E_GL_ARB_shader_atomic_counters))
|
||||
parseContext.extensionTurnedOn(E_GL_ARB_shader_atomic_counters))
|
||||
return keyword;
|
||||
return es30ReservedFromGLSL(420);
|
||||
|
||||
|
@ -696,12 +696,12 @@ int TScanContext::tokenizeIdentifier()
|
|||
case WRITEONLY:
|
||||
if (parseContext.profile == EEsProfile && parseContext.version >= 310)
|
||||
return keyword;
|
||||
return es30ReservedFromGLSL(parseContext.extensionsTurnedOn(1, &E_GL_ARB_shader_image_load_store) ? 130 : 420);
|
||||
return es30ReservedFromGLSL(parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store) ? 130 : 420);
|
||||
|
||||
case VOLATILE:
|
||||
if (parseContext.profile == EEsProfile && parseContext.version >= 310)
|
||||
return keyword;
|
||||
if (! parseContext.symbolTable.atBuiltInLevel() && (parseContext.profile == EEsProfile || (parseContext.version < 420 && ! parseContext.extensionsTurnedOn(1, &E_GL_ARB_shader_image_load_store))))
|
||||
if (! parseContext.symbolTable.atBuiltInLevel() && (parseContext.profile == EEsProfile || (parseContext.version < 420 && ! parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))))
|
||||
reservedWord();
|
||||
return keyword;
|
||||
|
||||
|
@ -725,7 +725,7 @@ int TScanContext::tokenizeIdentifier()
|
|||
case PATCH:
|
||||
if (parseContext.symbolTable.atBuiltInLevel() ||
|
||||
(parseContext.profile == EEsProfile && parseContext.extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader)) ||
|
||||
(parseContext.profile != EEsProfile && parseContext.extensionsTurnedOn(1, &E_GL_ARB_tessellation_shader)))
|
||||
(parseContext.profile != EEsProfile && parseContext.extensionTurnedOn(E_GL_ARB_tessellation_shader)))
|
||||
return keyword;
|
||||
|
||||
return es30ReservedFromGLSL(400);
|
||||
|
@ -818,7 +818,7 @@ int TScanContext::tokenizeIdentifier()
|
|||
case ISAMPLERCUBEARRAY:
|
||||
case USAMPLERCUBEARRAY:
|
||||
afterType = true;
|
||||
if (parseContext.profile == EEsProfile || (parseContext.version < 400 && ! parseContext.extensionsTurnedOn(1, &E_GL_ARB_texture_cube_map_array)))
|
||||
if (parseContext.profile == EEsProfile || (parseContext.version < 400 && ! parseContext.extensionTurnedOn(E_GL_ARB_texture_cube_map_array)))
|
||||
reservedWord();
|
||||
return keyword;
|
||||
|
||||
|
@ -880,7 +880,7 @@ int TScanContext::tokenizeIdentifier()
|
|||
case SAMPLER3D:
|
||||
afterType = true;
|
||||
if (parseContext.profile == EEsProfile && parseContext.version < 300) {
|
||||
if (! parseContext.extensionsTurnedOn(1, &E_GL_OES_texture_3D))
|
||||
if (! parseContext.extensionTurnedOn(E_GL_OES_texture_3D))
|
||||
reservedWord();
|
||||
}
|
||||
return keyword;
|
||||
|
@ -896,7 +896,7 @@ int TScanContext::tokenizeIdentifier()
|
|||
afterType = true;
|
||||
if (parseContext.profile == EEsProfile)
|
||||
reservedWord();
|
||||
else if (parseContext.version < 140 && ! parseContext.symbolTable.atBuiltInLevel() && ! parseContext.extensionsTurnedOn(1, &E_GL_ARB_texture_rectangle)) {
|
||||
else if (parseContext.version < 140 && ! parseContext.symbolTable.atBuiltInLevel() && ! parseContext.extensionTurnedOn(E_GL_ARB_texture_rectangle)) {
|
||||
if (parseContext.relaxedErrors())
|
||||
parseContext.requireExtensions(loc, 1, &E_GL_ARB_texture_rectangle, "texture-rectangle sampler keyword");
|
||||
else
|
||||
|
@ -915,7 +915,7 @@ int TScanContext::tokenizeIdentifier()
|
|||
|
||||
case SAMPLEREXTERNALOES:
|
||||
afterType = true;
|
||||
if (parseContext.symbolTable.atBuiltInLevel() || parseContext.extensionsTurnedOn(1, &E_GL_OES_EGL_image_external))
|
||||
if (parseContext.symbolTable.atBuiltInLevel() || parseContext.extensionTurnedOn(E_GL_OES_EGL_image_external))
|
||||
return keyword;
|
||||
return identifierOrType();
|
||||
|
||||
|
@ -1107,7 +1107,7 @@ int TScanContext::firstGenerationImage(bool inEs310)
|
|||
afterType = true;
|
||||
|
||||
if (parseContext.symbolTable.atBuiltInLevel() ||
|
||||
(parseContext.profile != EEsProfile && (parseContext.version >= 420 || parseContext.extensionsTurnedOn(1, &E_GL_ARB_shader_image_load_store))) ||
|
||||
(parseContext.profile != EEsProfile && (parseContext.version >= 420 || parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))) ||
|
||||
(inEs310 && parseContext.profile == EEsProfile && parseContext.version >= 310))
|
||||
return keyword;
|
||||
|
||||
|
@ -1135,7 +1135,7 @@ int TScanContext::secondGenerationImage()
|
|||
|
||||
if (parseContext.symbolTable.atBuiltInLevel() ||
|
||||
(parseContext.profile != EEsProfile &&
|
||||
(parseContext.version >= 420 || parseContext.extensionsTurnedOn(1, &E_GL_ARB_shader_image_load_store))))
|
||||
(parseContext.version >= 420 || parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))))
|
||||
return keyword;
|
||||
|
||||
if (parseContext.forwardCompatible)
|
||||
|
|
|
@ -448,20 +448,25 @@ TExtensionBehavior TParseContext::getExtensionBehavior(const char* extension)
|
|||
return iter->second;
|
||||
}
|
||||
|
||||
// Returns true if the given extension is set to enable, require, or warn.
|
||||
bool TParseContext::extensionTurnedOn(const char* const extension)
|
||||
{
|
||||
switch (getExtensionBehavior(extension)) {
|
||||
case EBhEnable:
|
||||
case EBhRequire:
|
||||
case EBhWarn:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// See if any of the extensions are set to enable, require, or warn.
|
||||
bool TParseContext::extensionsTurnedOn(int numExtensions, const char* const extensions[])
|
||||
{
|
||||
for (int i = 0; i < numExtensions; ++i) {
|
||||
switch (getExtensionBehavior(extensions[i])) {
|
||||
case EBhEnable:
|
||||
case EBhRequire:
|
||||
case EBhWarn:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (extensionTurnedOn(extensions[i])) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче