Commit 5e0a8f9b by Shahbaz Youssefi Committed by Commit Bot

Translator: Enable geometry and tessellation in ES3.2

Symbols that these extensions introduced were only accepted if the extension directive was present. This is not necessary for es 320 shaders. This change adds a new tag to builtin variable and function declarations in the translator, namely "essl_extension_becomes_core_in" which makes gen_builtin_symbols.py automatically create two entries for the builtin; one with the specified level and extension, one with the core level and without extension. Entries in builtin_function_declarations.txt can potentially be deduplicated as a follow up to take advantage of this tag, though likely an anologous "glsl_extension_becomes_core_in" needs to be introduced. Bug: angleproject:5557 Bug: angleproject:5579 Change-Id: I84c19f48a3ccc89d82d80a4f35f7833205bbc88f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2649449Reviewed-by: 's avatarTim Van Patten <timvp@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
parent badcf3bd
......@@ -4,25 +4,25 @@
"src/compiler/translator/ImmutableString_autogen.cpp":
"5c77d1341ef8f3d506aa918c646a90af",
"src/compiler/translator/ParseContext_ESSL_autogen.h":
"6da863c0ec89166d10a148ddb6178dd1",
"6ee6e9e843ae43d0d8c7576f2104db15",
"src/compiler/translator/ParseContext_complete_autogen.h":
"2db8d7d0efd13afdd4b971c89f785f7e",
"src/compiler/translator/SymbolTable_ESSL_autogen.cpp":
"53cd516345cded422cf61c16c2f4a19a",
"65376822952784b4f81fedb8fc1a216a",
"src/compiler/translator/SymbolTable_autogen.cpp":
"4767d8c23e4db437fa2ab98666bfa535",
"b9bb430ee04e5f4a53479f4fe38b179c",
"src/compiler/translator/SymbolTable_autogen.h":
"f76260fe28587e720590adcedcb65928",
"f5cfa6c5f81416f074c17d2f3245b678",
"src/compiler/translator/builtin_function_declarations.txt":
"29ab2d428cf0079127d22eda430deb36",
"337bdd37f549ee3ba84a8ac45e250c0d",
"src/compiler/translator/builtin_variables.json":
"5c2641aae409184a249d6ad57f93a502",
"a1093fa8db0483716e4644a78d8b5150",
"src/compiler/translator/gen_builtin_symbols.py":
"12f20fb93de0634ca9de5532185e0244",
"0b997ff6e25c823a62264ad618b070ed",
"src/compiler/translator/tree_util/BuiltIn_ESSL_autogen.h":
"63eb495054fa3a28fd0c10981cd77961",
"efc6fbba081842cf29b6c8bb7179e0c1",
"src/compiler/translator/tree_util/BuiltIn_complete_autogen.h":
"b3e5c368ccdf96bf564f32bbf19e5f69",
"81c368111e4594f4ef82d80a918c4748",
"src/tests/compiler_tests/ImmutableString_test_ESSL_autogen.cpp":
"b0ce4e0905740d612471ca1ad68cfaba",
"src/tests/compiler_tests/ImmutableString_test_autogen.cpp":
......
......@@ -1258,7 +1258,7 @@ struct TLayoutQualifier
int invocations;
int maxVertices;
// EXT_tessellation_control shader layout qualifiers
// EXT_tessellation_shader shader layout qualifiers
int vertices;
TLayoutTessEvaluationType tesPrimitiveType;
TLayoutTessEvaluationType tesVertexSpacingType;
......@@ -1414,6 +1414,9 @@ inline const char *getQualifierString(TQualifier q)
case EvqGeometryIn: return "in";
case EvqGeometryOut: return "out";
case EvqPerVertexIn: return "gl_in";
case EvqPrimitiveIDIn: return "gl_PrimitiveIDIn";
case EvqInvocationID: return "gl_InvocationID";
case EvqPrimitiveID: return "gl_PrimitiveID";
case EvqPrecise: return "precise";
case EvqClipDistance: return "ClipDistance";
case EvqSample: return "sample";
......
......@@ -459,9 +459,8 @@ bool TCompiler::checkShaderVersion(TParseContext *parseContext)
"Geometry shader is not supported in this shader version.");
return false;
}
else
else if (mShaderVersion == 310)
{
ASSERT(mShaderVersion == 310 || mShaderVersion == 320);
if (!parseContext->checkCanUseExtension(sh::TSourceLoc(),
TExtension::EXT_geometry_shader))
{
......@@ -470,6 +469,24 @@ bool TCompiler::checkShaderVersion(TParseContext *parseContext)
}
break;
case GL_TESS_CONTROL_SHADER_EXT:
case GL_TESS_EVALUATION_SHADER_EXT:
if (mShaderVersion < 310)
{
mDiagnostics.globalError(
"Tessellation shaders are not supported in this shader version.");
return false;
}
else if (mShaderVersion == 310)
{
if (!parseContext->checkCanUseExtension(sh::TSourceLoc(),
TExtension::EXT_tessellation_shader))
{
return false;
}
}
break;
default:
break;
}
......
......@@ -2499,7 +2499,7 @@ void TParseContext::checkInputOutputTypeIsValidES3(const TQualifier qualifier,
bool typeContainsIntegers =
(type.getBasicType() == EbtInt || type.getBasicType() == EbtUInt ||
type.isStructureContainingType(EbtInt) || type.isStructureContainingType(EbtUInt));
bool extendedShaderTypes = mShaderVersion == 320 ||
bool extendedShaderTypes = mShaderVersion >= 320 ||
isExtensionEnabled(TExtension::EXT_geometry_shader) ||
isExtensionEnabled(TExtension::EXT_tessellation_shader);
if (typeContainsIntegers && qualifier != EvqFlatIn && qualifier != EvqFlatOut &&
......@@ -4135,7 +4135,7 @@ TIntermDeclaration *TParseContext::addInterfaceBlock(
if (isShaderIoBlock)
{
if (!isExtensionEnabled(TExtension::OES_shader_io_blocks) &&
!isExtensionEnabled(TExtension::EXT_shader_io_blocks))
!isExtensionEnabled(TExtension::EXT_shader_io_blocks) && mShaderVersion < 320)
{
error(typeQualifier.line,
"invalid qualifier: shader IO blocks need shader io block extension",
......@@ -4981,8 +4981,9 @@ TLayoutQualifier TParseContext::parseLayoutQualifier(const ImmutableString &qual
qualifier.imageInternalFormat = EiifR32UI;
}
else if (mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader) &&
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310))
(mShaderVersion >= 320 ||
(checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader) &&
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310))))
{
if (qualifierType == "points")
{
......@@ -5018,8 +5019,9 @@ TLayoutQualifier TParseContext::parseLayoutQualifier(const ImmutableString &qual
}
}
else if (mShaderType == GL_TESS_EVALUATION_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::EXT_tessellation_shader) &&
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310))
(mShaderVersion >= 320 ||
(checkCanUseExtension(qualifierTypeLine, TExtension::EXT_tessellation_shader) &&
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310))))
{
if (qualifierType == "triangles")
{
......@@ -5254,12 +5256,14 @@ TLayoutQualifier TParseContext::parseLayoutQualifier(const ImmutableString &qual
}
}
else if (qualifierType == "invocations" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
(mShaderVersion >= 320 ||
checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader)))
{
parseInvocations(intValue, intValueLine, intValueString, &qualifier.invocations);
}
else if (qualifierType == "max_vertices" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
(mShaderVersion >= 320 ||
checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader)))
{
parseMaxVertices(intValue, intValueLine, intValueString, &qualifier.maxVertices);
}
......@@ -5269,7 +5273,8 @@ TLayoutQualifier TParseContext::parseLayoutQualifier(const ImmutableString &qual
parseIndexLayoutQualifier(intValue, intValueLine, intValueString, &qualifier.index);
}
else if (qualifierType == "vertices" && mShaderType == GL_TESS_CONTROL_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::EXT_tessellation_shader))
(mShaderVersion >= 320 ||
checkCanUseExtension(qualifierTypeLine, TExtension::EXT_tessellation_shader)))
{
parseVertices(intValue, intValueLine, intValueString, &qualifier.vertices);
}
......
......@@ -21,77 +21,77 @@ namespace BuiltInGroup
bool isTextureOffsetNoBias(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3729 && id <= 3798;
return id >= 3794 && id <= 3863;
}
bool isTextureOffsetBias(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3799 && id <= 3818;
return id >= 3864 && id <= 3883;
}
bool isTextureGatherOffsetsComp(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3856 && id <= 3868;
return id >= 3921 && id <= 3933;
}
bool isTextureGatherOffsetsNoComp(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3869 && id <= 3884;
return id >= 3934 && id <= 3949;
}
bool isTextureGatherOffsets(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3856 && id <= 3884;
return id >= 3921 && id <= 3949;
}
bool isTextureGatherOffsetComp(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3885 && id <= 3890;
return id >= 3950 && id <= 3955;
}
bool isTextureGatherOffsetNoComp(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3891 && id <= 3898;
return id >= 3956 && id <= 3963;
}
bool isTextureGatherOffset(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3885 && id <= 3898;
return id >= 3950 && id <= 3963;
}
bool isTextureGather(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3832 && id <= 3898;
return id >= 3897 && id <= 3963;
}
bool isInterpolationFS(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3911 && id <= 3934;
return id >= 3976 && id <= 3999;
}
bool isAtomicMemory(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3939 && id <= 3956;
return id >= 4004 && id <= 4021;
}
bool isImageLoad(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3993 && id <= 4010;
return id >= 4058 && id <= 4075;
}
bool isImageAtomic(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 4011 && id <= 4586;
return id >= 4076 && id <= 4651;
}
bool isImageStore(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 4587 && id <= 4604;
return id >= 4652 && id <= 4669;
}
bool isImage(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 3957 && id <= 4604;
return id >= 4022 && id <= 4669;
}
} // namespace BuiltInGroup
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -18,99 +18,144 @@ namespace sh
class TSymbolTableBase
{
public:
TSymbolTableBase() = default;
TSymbol *m_gl_DepthRangeParameters = nullptr;
TSymbol *m_gl_DepthRange = nullptr;
TSymbol *m_gl_MaxVertexAttribs = nullptr;
TSymbol *m_gl_MaxVertexUniformVectors = nullptr;
TSymbol *m_gl_MaxVertexTextureImageUnits = nullptr;
TSymbol *m_gl_MaxCombinedTextureImageUnits = nullptr;
TSymbol *m_gl_MaxTextureImageUnits = nullptr;
TSymbol *m_gl_MaxFragmentUniformVectors = nullptr;
TSymbol *m_gl_MaxVaryingVectors = nullptr;
TSymbol *m_gl_MaxDrawBuffers = nullptr;
TSymbol *m_gl_MaxDualSourceDrawBuffersEXT = nullptr;
TSymbol *m_gl_MaxVertexOutputVectors = nullptr;
TSymbol *m_gl_MaxFragmentInputVectors = nullptr;
TSymbol *m_gl_MinProgramTexelOffset = nullptr;
TSymbol *m_gl_MaxProgramTexelOffset = nullptr;
TSymbol *m_gl_MaxImageUnits = nullptr;
TSymbol *m_gl_MaxVertexImageUniforms = nullptr;
TSymbol *m_gl_MaxFragmentImageUniforms = nullptr;
TSymbol *m_gl_MaxComputeImageUniforms = nullptr;
TSymbol *m_gl_MaxCombinedImageUniforms = nullptr;
TSymbol *m_gl_MaxCombinedShaderOutputResources = nullptr;
TSymbol *m_gl_MaxComputeWorkGroupCount = nullptr;
TSymbol *m_gl_MaxComputeWorkGroupSize = nullptr;
TSymbol *m_gl_MaxComputeUniformComponents = nullptr;
TSymbol *m_gl_MaxComputeTextureImageUnits = nullptr;
TSymbol *m_gl_MaxComputeAtomicCounters = nullptr;
TSymbol *m_gl_MaxComputeAtomicCounterBuffers = nullptr;
TSymbol *m_gl_MaxVertexAtomicCounters = nullptr;
TSymbol *m_gl_MaxFragmentAtomicCounters = nullptr;
TSymbol *m_gl_MaxCombinedAtomicCounters = nullptr;
TSymbol *m_gl_MaxAtomicCounterBindings = nullptr;
TSymbol *m_gl_MaxVertexAtomicCounterBuffers = nullptr;
TSymbol *m_gl_MaxFragmentAtomicCounterBuffers = nullptr;
TSymbol *m_gl_MaxCombinedAtomicCounterBuffers = nullptr;
TSymbol *m_gl_MaxAtomicCounterBufferSize = nullptr;
TSymbol *m_gl_MaxGeometryInputComponents = nullptr;
TSymbol *m_gl_MaxGeometryOutputComponents = nullptr;
TSymbol *m_gl_MaxGeometryImageUniforms = nullptr;
TSymbol *m_gl_MaxGeometryTextureImageUnits = nullptr;
TSymbol *m_gl_MaxGeometryOutputVertices = nullptr;
TSymbol *m_gl_MaxGeometryTotalOutputComponents = nullptr;
TSymbol *m_gl_MaxGeometryUniformComponents = nullptr;
TSymbol *m_gl_MaxGeometryAtomicCounters = nullptr;
TSymbol *m_gl_MaxGeometryAtomicCounterBuffers = nullptr;
TSymbol *m_gl_MaxTessControlInputComponents = nullptr;
TSymbol *m_gl_MaxTessControlOutputComponents = nullptr;
TSymbol *m_gl_MaxTessControlTextureImageUnits = nullptr;
TSymbol *m_gl_MaxTessControlUniformComponents = nullptr;
TSymbol *m_gl_MaxTessControlTotalOutputComponents = nullptr;
TSymbol *m_gl_MaxTessControlImageUniforms = nullptr;
TSymbol *m_gl_MaxTessControlAtomicCounters = nullptr;
TSymbol *m_gl_MaxTessControlAtomicCounterBuffers = nullptr;
TSymbol *m_gl_MaxTessPatchComponents = nullptr;
TSymbol *m_gl_MaxPatchVertices = nullptr;
TSymbol *m_gl_MaxTessGenLevel = nullptr;
TSymbol *m_gl_MaxTessEvaluationInputComponents = nullptr;
TSymbol *m_gl_MaxTessEvaluationOutputComponents = nullptr;
TSymbol *m_gl_MaxTessEvaluationTextureImageUnits = nullptr;
TSymbol *m_gl_MaxTessEvaluationUniformComponents = nullptr;
TSymbol *m_gl_MaxTessEvaluationImageUniforms = nullptr;
TSymbol *m_gl_MaxTessEvaluationAtomicCounters = nullptr;
TSymbol *m_gl_MaxTessEvaluationAtomicCounterBuffers = nullptr;
TSymbol *m_gl_MaxSamples = nullptr;
TSymbol *m_gl_MaxClipDistancesAPPLE = nullptr;
TSymbol *m_gl_MaxCullDistancesEXT = nullptr;
TSymbol *m_gl_MaxCombinedClipAndCullDistancesEXT = nullptr;
TSymbol *m_gl_FragData = nullptr;
TSymbol *m_gl_SecondaryFragDataEXT = nullptr;
TSymbol *m_gl_FragDepthEXT = nullptr;
TSymbol *m_gl_LastFragData = nullptr;
TSymbol *m_gl_LastFragDataNV = nullptr;
TSymbol *m_gl_SampleMaskIn = nullptr;
TSymbol *m_gl_SampleMask = nullptr;
TSymbol *m_gl_CullDistance = nullptr;
TSymbol *m_gl_ClipDistance = nullptr;
TSymbol *m_gl_ClipDistanceAPPLE = nullptr;
TSymbol *m_gl_CullDistanceEXT = nullptr;
TSymbol *m_gl_PerVertex = nullptr;
TSymbol *m_gl_in = nullptr;
TSymbol *m_gl_PositionGS = nullptr;
TSymbol *m_gl_TessLevelOuterTCS = nullptr;
TSymbol *m_gl_TessLevelInnerTCS = nullptr;
TSymbol *m_gl_PerVertexTCS = nullptr;
TSymbol *m_gl_inTCS = nullptr;
TSymbol *m_gl_outTCS = nullptr;
TSymbol *m_gl_PositionTCS = nullptr;
TSymbol *m_gl_TessLevelOuterTES = nullptr;
TSymbol *m_gl_TessLevelInnerTES = nullptr;
TSymbol *m_gl_PerVertexTES = nullptr;
TSymbol *m_gl_inTES = nullptr;
TSymbol *m_gl_outTES = nullptr;
TSymbol *m_gl_PositionTES = nullptr;
TSymbolTableBase() = default;
TSymbol *m_gl_DepthRangeParameters = nullptr;
TSymbol *m_gl_DepthRange = nullptr;
TSymbol *m_gl_MaxVertexAttribs = nullptr;
TSymbol *m_gl_MaxVertexUniformVectors = nullptr;
TSymbol *m_gl_MaxVertexTextureImageUnits = nullptr;
TSymbol *m_gl_MaxCombinedTextureImageUnits = nullptr;
TSymbol *m_gl_MaxTextureImageUnits = nullptr;
TSymbol *m_gl_MaxFragmentUniformVectors = nullptr;
TSymbol *m_gl_MaxVaryingVectors = nullptr;
TSymbol *m_gl_MaxDrawBuffers = nullptr;
TSymbol *m_gl_MaxDualSourceDrawBuffersEXT = nullptr;
TSymbol *m_gl_MaxVertexOutputVectors = nullptr;
TSymbol *m_gl_MaxFragmentInputVectors = nullptr;
TSymbol *m_gl_MinProgramTexelOffset = nullptr;
TSymbol *m_gl_MaxProgramTexelOffset = nullptr;
TSymbol *m_gl_MaxImageUnits = nullptr;
TSymbol *m_gl_MaxVertexImageUniforms = nullptr;
TSymbol *m_gl_MaxFragmentImageUniforms = nullptr;
TSymbol *m_gl_MaxComputeImageUniforms = nullptr;
TSymbol *m_gl_MaxCombinedImageUniforms = nullptr;
TSymbol *m_gl_MaxCombinedShaderOutputResources = nullptr;
TSymbol *m_gl_MaxComputeWorkGroupCount = nullptr;
TSymbol *m_gl_MaxComputeWorkGroupSize = nullptr;
TSymbol *m_gl_MaxComputeUniformComponents = nullptr;
TSymbol *m_gl_MaxComputeTextureImageUnits = nullptr;
TSymbol *m_gl_MaxComputeAtomicCounters = nullptr;
TSymbol *m_gl_MaxComputeAtomicCounterBuffers = nullptr;
TSymbol *m_gl_MaxVertexAtomicCounters = nullptr;
TSymbol *m_gl_MaxFragmentAtomicCounters = nullptr;
TSymbol *m_gl_MaxCombinedAtomicCounters = nullptr;
TSymbol *m_gl_MaxAtomicCounterBindings = nullptr;
TSymbol *m_gl_MaxVertexAtomicCounterBuffers = nullptr;
TSymbol *m_gl_MaxFragmentAtomicCounterBuffers = nullptr;
TSymbol *m_gl_MaxCombinedAtomicCounterBuffers = nullptr;
TSymbol *m_gl_MaxAtomicCounterBufferSize = nullptr;
TSymbol *m_gl_MaxGeometryInputComponents = nullptr;
TSymbol *m_gl_MaxGeometryInputComponentsES3_2 = nullptr;
TSymbol *m_gl_MaxGeometryOutputComponents = nullptr;
TSymbol *m_gl_MaxGeometryOutputComponentsES3_2 = nullptr;
TSymbol *m_gl_MaxGeometryImageUniforms = nullptr;
TSymbol *m_gl_MaxGeometryImageUniformsES3_2 = nullptr;
TSymbol *m_gl_MaxGeometryTextureImageUnits = nullptr;
TSymbol *m_gl_MaxGeometryTextureImageUnitsES3_2 = nullptr;
TSymbol *m_gl_MaxGeometryOutputVertices = nullptr;
TSymbol *m_gl_MaxGeometryOutputVerticesES3_2 = nullptr;
TSymbol *m_gl_MaxGeometryTotalOutputComponents = nullptr;
TSymbol *m_gl_MaxGeometryTotalOutputComponentsES3_2 = nullptr;
TSymbol *m_gl_MaxGeometryUniformComponents = nullptr;
TSymbol *m_gl_MaxGeometryUniformComponentsES3_2 = nullptr;
TSymbol *m_gl_MaxGeometryAtomicCounters = nullptr;
TSymbol *m_gl_MaxGeometryAtomicCountersES3_2 = nullptr;
TSymbol *m_gl_MaxGeometryAtomicCounterBuffers = nullptr;
TSymbol *m_gl_MaxGeometryAtomicCounterBuffersES3_2 = nullptr;
TSymbol *m_gl_MaxTessControlInputComponents = nullptr;
TSymbol *m_gl_MaxTessControlInputComponentsES3_2 = nullptr;
TSymbol *m_gl_MaxTessControlOutputComponents = nullptr;
TSymbol *m_gl_MaxTessControlOutputComponentsES3_2 = nullptr;
TSymbol *m_gl_MaxTessControlTextureImageUnits = nullptr;
TSymbol *m_gl_MaxTessControlTextureImageUnitsES3_2 = nullptr;
TSymbol *m_gl_MaxTessControlUniformComponents = nullptr;
TSymbol *m_gl_MaxTessControlUniformComponentsES3_2 = nullptr;
TSymbol *m_gl_MaxTessControlTotalOutputComponents = nullptr;
TSymbol *m_gl_MaxTessControlTotalOutputComponentsES3_2 = nullptr;
TSymbol *m_gl_MaxTessControlImageUniforms = nullptr;
TSymbol *m_gl_MaxTessControlImageUniformsES3_2 = nullptr;
TSymbol *m_gl_MaxTessControlAtomicCounters = nullptr;
TSymbol *m_gl_MaxTessControlAtomicCountersES3_2 = nullptr;
TSymbol *m_gl_MaxTessControlAtomicCounterBuffers = nullptr;
TSymbol *m_gl_MaxTessControlAtomicCounterBuffersES3_2 = nullptr;
TSymbol *m_gl_MaxTessPatchComponents = nullptr;
TSymbol *m_gl_MaxTessPatchComponentsES3_2 = nullptr;
TSymbol *m_gl_MaxPatchVertices = nullptr;
TSymbol *m_gl_MaxPatchVerticesES3_2 = nullptr;
TSymbol *m_gl_MaxTessGenLevel = nullptr;
TSymbol *m_gl_MaxTessGenLevelES3_2 = nullptr;
TSymbol *m_gl_MaxTessEvaluationInputComponents = nullptr;
TSymbol *m_gl_MaxTessEvaluationInputComponentsES3_2 = nullptr;
TSymbol *m_gl_MaxTessEvaluationOutputComponents = nullptr;
TSymbol *m_gl_MaxTessEvaluationOutputComponentsES3_2 = nullptr;
TSymbol *m_gl_MaxTessEvaluationTextureImageUnits = nullptr;
TSymbol *m_gl_MaxTessEvaluationTextureImageUnitsES3_2 = nullptr;
TSymbol *m_gl_MaxTessEvaluationUniformComponents = nullptr;
TSymbol *m_gl_MaxTessEvaluationUniformComponentsES3_2 = nullptr;
TSymbol *m_gl_MaxTessEvaluationImageUniforms = nullptr;
TSymbol *m_gl_MaxTessEvaluationImageUniformsES3_2 = nullptr;
TSymbol *m_gl_MaxTessEvaluationAtomicCounters = nullptr;
TSymbol *m_gl_MaxTessEvaluationAtomicCountersES3_2 = nullptr;
TSymbol *m_gl_MaxTessEvaluationAtomicCounterBuffers = nullptr;
TSymbol *m_gl_MaxTessEvaluationAtomicCounterBuffersES3_2 = nullptr;
TSymbol *m_gl_MaxSamples = nullptr;
TSymbol *m_gl_MaxSamplesES3_2 = nullptr;
TSymbol *m_gl_MaxClipDistancesAPPLE = nullptr;
TSymbol *m_gl_MaxCullDistancesEXT = nullptr;
TSymbol *m_gl_MaxCombinedClipAndCullDistancesEXT = nullptr;
TSymbol *m_gl_FragData = nullptr;
TSymbol *m_gl_SecondaryFragDataEXT = nullptr;
TSymbol *m_gl_FragDepthEXT = nullptr;
TSymbol *m_gl_LastFragData = nullptr;
TSymbol *m_gl_LastFragDataNV = nullptr;
TSymbol *m_gl_SampleMaskIn = nullptr;
TSymbol *m_gl_SampleMaskInES3_2 = nullptr;
TSymbol *m_gl_SampleMask = nullptr;
TSymbol *m_gl_SampleMaskES3_2 = nullptr;
TSymbol *m_gl_CullDistance = nullptr;
TSymbol *m_gl_ClipDistance = nullptr;
TSymbol *m_gl_ClipDistanceAPPLE = nullptr;
TSymbol *m_gl_CullDistanceEXT = nullptr;
TSymbol *m_gl_PerVertex = nullptr;
TSymbol *m_gl_PerVertexES3_2 = nullptr;
TSymbol *m_gl_in = nullptr;
TSymbol *m_gl_inES3_2 = nullptr;
TSymbol *m_gl_PositionGS = nullptr;
TSymbol *m_gl_PositionGSES3_2 = nullptr;
TSymbol *m_gl_TessLevelOuterTCS = nullptr;
TSymbol *m_gl_TessLevelOuterTCSES3_2 = nullptr;
TSymbol *m_gl_TessLevelInnerTCS = nullptr;
TSymbol *m_gl_TessLevelInnerTCSES3_2 = nullptr;
TSymbol *m_gl_PerVertexTCS = nullptr;
TSymbol *m_gl_PerVertexTCSES3_2 = nullptr;
TSymbol *m_gl_inTCS = nullptr;
TSymbol *m_gl_inTCSES3_2 = nullptr;
TSymbol *m_gl_outTCS = nullptr;
TSymbol *m_gl_outTCSES3_2 = nullptr;
TSymbol *m_gl_PositionTCS = nullptr;
TSymbol *m_gl_PositionTCSES3_2 = nullptr;
TSymbol *m_gl_TessLevelOuterTES = nullptr;
TSymbol *m_gl_TessLevelOuterTESES3_2 = nullptr;
TSymbol *m_gl_TessLevelInnerTES = nullptr;
TSymbol *m_gl_TessLevelInnerTESES3_2 = nullptr;
TSymbol *m_gl_PerVertexTES = nullptr;
TSymbol *m_gl_PerVertexTESES3_2 = nullptr;
TSymbol *m_gl_inTES = nullptr;
TSymbol *m_gl_inTESES3_2 = nullptr;
TSymbol *m_gl_outTES = nullptr;
TSymbol *m_gl_outTESES3_2 = nullptr;
TSymbol *m_gl_PositionTES = nullptr;
TSymbol *m_gl_PositionTESES3_2 = nullptr;
};
} // namespace sh
......
......@@ -34,6 +34,8 @@
// function name from C++ keywords, or disambiguate two functions with the same name.
// "essl_extension"
// string, ESSL extension where the function is defined.
// "essl_extension_becomes_core_in"
// string, ESSL level where functions from this extension have become core.
// "glsl_extension"
// string, GLSL extension where the function is defined.
// "hasSideEffects"
......@@ -1182,12 +1184,12 @@ GROUP BEGIN ESSL310CS {"shader_type": "COMPUTE"}
GROUP END ESSL310CS
GROUP BEGIN ESSL310TCS {"shader_type": "TESS_CONTROL_EXT"}
DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "auto", "essl_extension": "EXT_tessellation_shader", "hasSideEffects": true}
DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "auto", "essl_extension": "EXT_tessellation_shader", "essl_extension_becomes_core_in": "ESSL3_2_BUILTINS", "hasSideEffects": true}
void barrier();
GROUP END ESSL310TCS
GROUP BEGIN ESSL310GS {"shader_type": "GEOMETRY_EXT"}
DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "auto", "essl_extension": "EXT_geometry_shader", "hasSideEffects": true}
DEFAULT METADATA {"essl_level": "ESSL3_1_BUILTINS", "op": "auto", "essl_extension": "EXT_geometry_shader", "essl_extension_becomes_core_in": "ESSL3_2_BUILTINS", "hasSideEffects": true}
void EmitVertex();
void EndPrimitive();
GROUP END ESSL310GS
......
......@@ -21,6 +21,8 @@
" May refer to names of previously listed structs or interface",
" blocks.",
" essl_extension: Optional. Name of the ESSL extension where this variable is from.",
" essl_extension_becomes_core_in: Optional. ESSL level where symbols from this",
" extension have become core.",
" glsl_extension: Optional. Name of the GLSL extension where this variable is from.",
" value: Optional. String that has one valid value: 'resources'. Denotes that the",
" value of the variable should be based on the field of ShBuiltInResources",
......@@ -69,6 +71,7 @@
"gl_NumSamples":{
"essl_level":"ESSL3_BUILTINS",
"essl_extension":"OES_sample_variables",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"type":{
"basic":"Int",
"precision":"Low",
......@@ -394,6 +397,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_geometry_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxGeometryOutputComponents":{
......@@ -404,6 +408,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_geometry_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxGeometryImageUniforms":{
......@@ -414,6 +419,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_geometry_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxGeometryTextureImageUnits":{
......@@ -424,6 +430,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_geometry_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxGeometryOutputVertices":{
......@@ -434,6 +441,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_geometry_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxGeometryTotalOutputComponents":{
......@@ -444,6 +452,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_geometry_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxGeometryUniformComponents":{
......@@ -454,6 +463,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_geometry_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxGeometryAtomicCounters":{
......@@ -464,6 +474,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_geometry_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxGeometryAtomicCounterBuffers":{
......@@ -474,6 +485,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_geometry_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
}
}
......@@ -488,6 +500,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxTessControlOutputComponents":{
......@@ -498,6 +511,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxTessControlTextureImageUnits":{
......@@ -508,6 +522,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxTessControlUniformComponents":{
......@@ -518,6 +533,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxTessControlTotalOutputComponents":{
......@@ -528,6 +544,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxTessControlImageUniforms":{
......@@ -538,6 +555,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxTessControlAtomicCounters":{
......@@ -548,6 +566,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxTessControlAtomicCounterBuffers":{
......@@ -558,6 +577,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxTessPatchComponents":{
......@@ -568,6 +588,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxPatchVertices":{
......@@ -578,6 +599,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxTessGenLevel":{
......@@ -588,6 +610,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxTessEvaluationInputComponents":{
......@@ -598,6 +621,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxTessEvaluationOutputComponents":{
......@@ -608,6 +632,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxTessEvaluationTextureImageUnits":{
......@@ -618,6 +643,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxTessEvaluationUniformComponents":{
......@@ -628,6 +654,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxTessEvaluationImageUniforms":{
......@@ -638,6 +665,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxTessEvaluationAtomicCounters":{
......@@ -648,6 +676,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
},
"gl_MaxTessEvaluationAtomicCounterBuffers":{
......@@ -658,6 +687,7 @@
"qualifier":"Const"
},
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
}
}
......@@ -672,6 +702,7 @@
"qualifier":"Const"
},
"essl_extension":"OES_sample_variables",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"value":"resources"
}
}
......@@ -853,6 +884,7 @@
"gl_PrimitiveID":{
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_geometry_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"type":{
"basic":"Int",
"precision":"High",
......@@ -862,6 +894,7 @@
"gl_Layer":{
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_geometry_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"type":{
"basic":"Int",
"precision":"High",
......@@ -875,6 +908,7 @@
"gl_SampleID":{
"essl_level":"ESSL3_BUILTINS",
"essl_extension":"OES_sample_variables",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"type":{
"basic":"Int",
"precision":"Low",
......@@ -884,6 +918,7 @@
"gl_SamplePosition":{
"essl_level":"ESSL3_BUILTINS",
"essl_extension":"OES_sample_variables",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"type":{
"basic":"Float",
"precision":"Medium",
......@@ -894,11 +929,13 @@
"gl_SampleMaskIn":{
"essl_level":"ESSL3_BUILTINS",
"essl_extension":"OES_sample_variables",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"initDynamicType":"TType *{type_name} = new TType(EbtInt, EbpHigh, EvqSampleMaskIn, 1); {type_name}->makeArray((resources.MaxSamples+31)/32);"
},
"gl_SampleMask":{
"essl_level":"ESSL3_BUILTINS",
"essl_extension":"OES_sample_variables",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"initDynamicType":"TType *{type_name} = new TType(EbtInt, EbpHigh, EvqSampleMask, 1); {type_name}->makeArray((resources.MaxSamples+31)/32);"
}
}
......@@ -1141,6 +1178,7 @@
"gl_PrimitiveIDIn":{
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_geometry_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"type":{
"basic":"Int",
"precision":"High",
......@@ -1150,6 +1188,7 @@
"gl_InvocationID":{
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_geometry_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"type":{
"basic":"Int",
"precision":"High",
......@@ -1160,6 +1199,7 @@
"suffix":"GS",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_geometry_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"type":{
"basic":"Int",
"precision":"High",
......@@ -1170,6 +1210,7 @@
"suffix":"GS",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_geometry_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"type":{
"basic":"Int",
"precision":"High",
......@@ -1179,6 +1220,7 @@
"gl_PerVertex":{
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_geometry_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"class":"TInterfaceBlock",
"fields":{
"gl_Position":{
......@@ -1192,6 +1234,7 @@
"gl_in":{
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_geometry_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexIn, TLayoutQualifier::Create()); {type_name}->makeArray(0u);",
"comment":"The array size of gl_in is undefined until we get a valid input primitive declaration."
}
......@@ -1203,6 +1246,7 @@
"suffix":"OutBlock",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_geometry_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"private":true,
"class":"TInterfaceBlock",
"fields":{
......@@ -1218,7 +1262,8 @@
"suffix":"GS",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_geometry_shader",
"initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutBlock);"
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutBlock{ext_or_core_suffix});"
}
}
}
......@@ -1231,6 +1276,7 @@
"suffix":"TCS",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"type":{
"basic":"Int",
"precision":"High",
......@@ -1241,6 +1287,7 @@
"suffix":"TCS",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"type":{
"basic":"Int",
"precision":"High",
......@@ -1251,6 +1298,7 @@
"suffix":"TCS",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"type":{
"basic":"Int",
"precision":"High",
......@@ -1261,18 +1309,21 @@
"suffix":"TCS",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelOuter, 1); {type_name}->makeArray(4u);"
},
"gl_TessLevelInner":{
"suffix":"TCS",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelInner, 1); {type_name}->makeArray(2u);"
},
"gl_PerVertex":{
"suffix":"TCS",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"class":"TInterfaceBlock",
"fields":{
"gl_Position":{
......@@ -1287,12 +1338,14 @@
"suffix":"TCS",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexIn, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);"
},
"gl_out":{
"suffix":"TCS",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexOut, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);"
}
},
......@@ -1303,6 +1356,7 @@
"suffix":"OutTcsBlock",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"private":true,
"class":"TInterfaceBlock",
"fields":{
......@@ -1318,7 +1372,8 @@
"suffix":"TCS",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutTcsBlock);"
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutTcsBlock{ext_or_core_suffix});"
}
}
}
......@@ -1331,6 +1386,7 @@
"suffix":"TES",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"type":{
"basic":"Int",
"precision":"High",
......@@ -1341,6 +1397,7 @@
"suffix":"TES",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"type":{
"basic":"Int",
"precision":"High",
......@@ -1359,18 +1416,21 @@
"suffix":"TES",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelOuter, 1); {type_name}->makeArray(4u);"
},
"gl_TessLevelInner":{
"suffix":"TES",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqTessLevelInner, 1); {type_name}->makeArray(2u);"
},
"gl_PerVertex":{
"suffix":"TES",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"class":"TInterfaceBlock",
"fields":{
"gl_Position":{
......@@ -1385,12 +1445,14 @@
"suffix":"TES",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexIn, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);"
},
"gl_out":{
"suffix":"TES",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"initDynamicType":"TType *{type_name} = new TType(gl_PerVertex, EvqPerVertexOut, TLayoutQualifier::Create()); {type_name}->makeArray(resources.MaxPatchVertices);"
}
},
......@@ -1401,6 +1463,7 @@
"suffix":"OutTesBlock",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"private":true,
"class":"TInterfaceBlock",
"fields":{
......@@ -1416,7 +1479,8 @@
"suffix":"TES",
"essl_level":"ESSL3_1_BUILTINS",
"essl_extension":"EXT_tessellation_shader",
"initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutTesBlock);"
"essl_extension_becomes_core_in":"ESSL3_2_BUILTINS",
"initDynamicType":"TType *{type_name} = new TType(EbtFloat, EbpHigh, EvqPosition, 4); {type_name}->setInterfaceBlock(gl_PerVertexOutTesBlock{ext_or_core_suffix});"
}
}
}
......
......@@ -15,9 +15,9 @@
# Code generation for the built-in symbol tables.
from collections import OrderedDict
from datetime import date
from perfect_hash import generate_hash, Hash2
import argparse
import copy
import hashlib
import json
import re
......@@ -29,7 +29,7 @@ template_immutablestring_cpp = """// GENERATED FILE - DO NOT EDIT.
// Generated by {script_name} using data from {variable_data_source_name} and
// {function_data_source_name}.
//
// Copyright {copyright_year} The ANGLE Project Authors. All rights reserved.
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
......@@ -135,7 +135,7 @@ uint32_t ImmutableString::unmangledNameHash() const
template_immutablestringtest_cpp = """// GENERATED FILE - DO NOT EDIT.
// Generated by {script_name} using data from {function_data_source_name}.
//
// Copyright {copyright_year} The ANGLE Project Authors. All rights reserved.
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
......@@ -163,7 +163,7 @@ template_builtin_header = """// GENERATED FILE - DO NOT EDIT.
// Generated by {script_name} using data from {variable_data_source_name} and
// {function_data_source_name}.
//
// Copyright {copyright_year} The ANGLE Project Authors. All rights reserved.
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
......@@ -204,7 +204,7 @@ template_symboltable_header = """// GENERATED FILE - DO NOT EDIT.
// Generated by {script_name} using data from {variable_data_source_name} and
// {function_data_source_name}.
//
// Copyright {copyright_year} The ANGLE Project Authors. All rights reserved.
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
......@@ -234,7 +234,7 @@ template_symboltable_cpp = """// GENERATED FILE - DO NOT EDIT.
// Generated by {script_name} using data from {variable_data_source_name} and
// {function_data_source_name}.
//
// Copyright {copyright_year} The ANGLE Project Authors. All rights reserved.
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
......@@ -388,7 +388,7 @@ template_parsecontext_header = """// GENERATED FILE - DO NOT EDIT.
// Generated by {script_name} using data from {variable_data_source_name} and
// {function_data_source_name}.
//
// Copyright {copyright_year} The ANGLE Project Authors. All rights reserved.
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
......@@ -543,6 +543,14 @@ glsl_levels = [
]
def generate_suffix_from_level(level):
assert (level[:4] == 'GLSL' or level[:4] == 'ESSL')
assert (level[-9:] == '_BUILTINS')
# Turn XYSLN_M_BUILTINS to XYN_M
return level[:2] + level[4:-9]
def get_essl_shader_version_for_level(level):
if level == None:
return '-1'
......@@ -626,12 +634,38 @@ class GroupedList:
self.objs[name_hash]['name'] = name
if essl_extension == 'UNDEFINED' and glsl_extension == 'UNDEFINED':
if essl_level:
self.objs[name_hash]['essl_level'] = essl_level
if glsl_level:
self.objs[name_hash]['glsl_level'] = glsl_level
self.objs[name_hash]['symbol'] = symbol
self.objs[name_hash]['shader_type'] = shader_type
if 'symbol' in self.objs[name_hash] and self.objs[name_hash]['symbol'] != symbol:
# Adding a variable that is part of two ESSL extensions that have become core
if 'symbol2' not in self.objs[name_hash]:
if essl_level:
self.objs[name_hash]['essl_level2'] = essl_level
if glsl_level:
self.objs[name_hash]['glsl_level2'] = glsl_level
self.objs[name_hash]['symbol2'] = symbol
self.objs[name_hash]['shader_type2'] = shader_type
elif 'symbol3' not in self.objs[name_hash]:
if essl_level:
self.objs[name_hash]['essl_level3'] = essl_level
if glsl_level:
self.objs[name_hash]['glsl_level3'] = glsl_level
self.objs[name_hash]['symbol3'] = symbol
self.objs[name_hash]['shader_type3'] = shader_type
elif 'symbol4' not in self.objs[name_hash]:
if essl_level:
self.objs[name_hash]['essl_level4'] = essl_level
if glsl_level:
self.objs[name_hash]['glsl_level4'] = glsl_level
self.objs[name_hash]['symbol4'] = symbol
self.objs[name_hash]['shader_type4'] = shader_type
else:
assert (False)
else:
if essl_level:
self.objs[name_hash]['essl_level'] = essl_level
if glsl_level:
self.objs[name_hash]['glsl_level'] = glsl_level
self.objs[name_hash]['symbol'] = symbol
self.objs[name_hash]['shader_type'] = shader_type
if essl_extension != 'UNDEFINED':
if ('essl_ext_symbol' in self.objs[name_hash] and
......@@ -652,6 +686,8 @@ class GroupedList:
self.objs[name_hash]['essl_ext_level4'] = essl_level
self.objs[name_hash]['essl_ext_symbol4'] = symbol
self.objs[name_hash]['essl_ext_shader_type4'] = shader_type
else:
assert (False)
else:
self.objs[name_hash]['essl_extension'] = essl_extension
self.objs[name_hash]['essl_ext_level'] = essl_level
......@@ -712,6 +748,30 @@ class GroupedList:
add_rule(rules, "GLSL", data['glsl_level'], data['shader_type'], None,
data["symbol"])
if "symbol2" in data and "essl_level2" in data:
add_rule(rules, "ESSL", data['essl_level2'], data['shader_type2'], None,
data["symbol2"])
if "symbol2" in data and "glsl_level2" in data:
add_rule(rules, "GLSL", data['glsl_level2'], data['shader_type2'], None,
data["symbol2"])
if "symbol3" in data and "essl_level3" in data:
add_rule(rules, "ESSL", data['essl_level3'], data['shader_type3'], None,
data["symbol3"])
if "symbol3" in data and "glsl_level3" in data:
add_rule(rules, "GLSL", data['glsl_level3'], data['shader_type3'], None,
data["symbol3"])
if "symbol4" in data and "essl_level4" in data:
add_rule(rules, "ESSL", data['essl_level4'], data['shader_type4'], None,
data["symbol4"])
if "symbol4" in data and "glsl_level4" in data:
add_rule(rules, "GLSL", data['glsl_level4'], data['shader_type4'], None,
data["symbol4"])
if "essl_ext_symbol" in data:
add_rule(rules, "ESSL", data["essl_ext_level"], data["essl_ext_shader_type"],
data["essl_extension"], data["essl_ext_symbol"])
......@@ -1324,137 +1384,176 @@ def gen_function_variants(function_props):
return function_variants
def process_single_function_group(
shader_type, group_name, group, parameter_declarations, name_declarations,
unmangled_function_if_statements, defined_function_variants, builtin_id_declarations,
builtin_id_definitions, defined_parameter_names, type_array_sizes_declarations,
variable_declarations, function_declarations, script_generated_hash_tests,
unmangled_script_generated_hash_tests, mangled_builtins):
def process_single_function(shader_type, function_props, parameter_declarations, name_declarations,
unmangled_function_if_statements, defined_function_variants,
builtin_id_declarations, builtin_id_definitions,
defined_parameter_names, type_array_sizes_declarations,
variable_declarations, function_declarations,
script_generated_hash_tests, unmangled_script_generated_hash_tests,
mangled_builtins):
global id_counter
if 'functions' not in group:
return
function_name = function_props['name']
essl_level = function_props['essl_level'] if 'essl_level' in function_props else None
glsl_level = function_props['glsl_level'] if 'glsl_level' in function_props else None
essl_extension = get_essl_extension(function_props)
glsl_extension = get_glsl_extension(function_props)
extension = essl_extension if essl_extension != 'UNDEFINED' else glsl_extension
template_args = {
'name': function_name,
'name_with_suffix': function_name + get_suffix(function_props),
'essl_level': essl_level,
'glsl_level': glsl_level,
'essl_extension': essl_extension,
'glsl_extension': glsl_extension,
# This assumes that functions cannot be part of an ESSL and GLSL extension
# Will need to update after adding GLSL extension functions if this is not the case
'extension': essl_extension if essl_extension != 'UNDEFINED' else glsl_extension,
'op': get_op(function_name, function_props),
'known_to_not_have_side_effects': get_known_to_not_have_side_effects(function_props)
}
for function_props in group['functions']:
function_name = function_props['name']
essl_level = function_props['essl_level'] if 'essl_level' in function_props else None
glsl_level = function_props['glsl_level'] if 'glsl_level' in function_props else None
essl_extension = get_essl_extension(function_props)
glsl_extension = get_glsl_extension(function_props)
extension = essl_extension if essl_extension != 'UNDEFINED' else glsl_extension
template_args = {
'name': function_name,
'name_with_suffix': function_name + get_suffix(function_props),
'essl_level': essl_level,
'glsl_level': glsl_level,
'essl_extension': essl_extension,
'glsl_extension': glsl_extension,
# This assumes that functions cannot be part of an ESSL and GLSL extension
# Will need to update after adding GLSL extension functions if this is not the case
'extension': essl_extension if essl_extension != 'UNDEFINED' else glsl_extension,
'op': get_op(function_name, function_props),
'known_to_not_have_side_effects': get_known_to_not_have_side_effects(function_props)
}
function_variants = gen_function_variants(function_props)
template_name_declaration = 'constexpr const ImmutableString {name_with_suffix}("{name}");'
name_declaration = template_name_declaration.format(**template_args)
if not name_declaration in name_declarations:
name_declarations.add(name_declaration)
essl_ext = '{essl_extension}'.format(**template_args)
glsl_ext = '{glsl_extension}'.format(**template_args)
unmangled_builtin_no_shader_type = unmangled_function_if_statements.get(
essl_level, glsl_level, 'NONE', function_name)
if unmangled_builtin_no_shader_type != None and unmangled_builtin_no_shader_type[
'essl_extension'] == 'UNDEFINED' and unmangled_builtin_no_shader_type[
'glsl_extension'] == 'UNDEFINED':
# We already have this unmangled name without a shader type nor extension on the same level.
# No need to add a duplicate with a type.
pass
elif (not unmangled_function_if_statements.has_key(
essl_level, glsl_level, shader_type, function_name)) or (
unmangled_builtin_no_shader_type and
((essl_extension == 'UNDEFINED' and
unmangled_builtin_no_shader_type['essl_extension'] != 'UNDEFINED') or
(glsl_extension == 'UNDEFINED' and
unmangled_builtin_no_shader_type['glsl_extension'] != 'UNDEFINED'))):
unmangled_function_if_statements.add_entry(essl_level, glsl_level, shader_type,
function_name, essl_ext, glsl_ext,
essl_extension, glsl_extension,
unmangled_script_generated_hash_tests)
for function_props in function_variants:
template_args['id'] = id_counter
parameters = get_parameters(function_props)
template_args['unique_name'] = get_unique_identifier_name(
template_args['name_with_suffix'], parameters)
template_args['param_count'] = len(parameters)
template_args['return_type'] = function_props['returnType'].get_statictype_string()
template_args['mangled_name'] = get_function_mangled_name(function_name, parameters)
template_args['human_readable_name'] = get_function_human_readable_name(
template_args['name_with_suffix'], parameters)
template_args['mangled_name_length'] = len(template_args['mangled_name'])
symbol = '&Func::{unique_name}'.format(**template_args)
mangled_builtins.add_entry(essl_level, glsl_level, shader_type,
template_args['mangled_name'], symbol,
template_args['essl_extension'],
template_args['glsl_extension'], script_generated_hash_tests)
if template_args['unique_name'] in defined_function_variants:
continue
defined_function_variants.add(template_args['unique_name'])
template_builtin_id_declaration = ' static constexpr const TSymbolUniqueId {human_readable_name} = TSymbolUniqueId({id});'
builtin_id_declarations.append(template_builtin_id_declaration.format(**template_args))
template_builtin_id_definition = 'constexpr const TSymbolUniqueId BuiltInId::{human_readable_name};'
builtin_id_definitions.append(template_builtin_id_definition.format(**template_args))
function_variants = gen_function_variants(function_props)
template_name_declaration = 'constexpr const ImmutableString {name_with_suffix}("{name}");'
name_declaration = template_name_declaration.format(**template_args)
if not name_declaration in name_declarations:
name_declarations.add(name_declaration)
essl_ext = '{essl_extension}'.format(**template_args)
glsl_ext = '{glsl_extension}'.format(**template_args)
unmangled_builtin_no_shader_type = unmangled_function_if_statements.get(
essl_level, glsl_level, 'NONE', function_name)
if unmangled_builtin_no_shader_type != None and unmangled_builtin_no_shader_type[
'essl_extension'] == 'UNDEFINED' and unmangled_builtin_no_shader_type[
'glsl_extension'] == 'UNDEFINED':
# We already have this unmangled name without a shader type nor extension on the same level.
# No need to add a duplicate with a type.
pass
elif (not unmangled_function_if_statements.has_key(
essl_level, glsl_level, shader_type, function_name)) or (
unmangled_builtin_no_shader_type and
((essl_extension == 'UNDEFINED' and
unmangled_builtin_no_shader_type['essl_extension'] != 'UNDEFINED') or
(glsl_extension == 'UNDEFINED' and
unmangled_builtin_no_shader_type['glsl_extension'] != 'UNDEFINED'))):
unmangled_function_if_statements.add_entry(
essl_level, glsl_level, shader_type, function_name, essl_ext, glsl_ext,
essl_extension, glsl_extension, unmangled_script_generated_hash_tests)
for function_props in function_variants:
template_args['id'] = id_counter
parameters = get_parameters(function_props)
template_args['unique_name'] = get_unique_identifier_name(
template_args['name_with_suffix'], parameters)
template_args['param_count'] = len(parameters)
template_args['return_type'] = function_props['returnType'].get_statictype_string()
template_args['mangled_name'] = get_function_mangled_name(function_name, parameters)
template_args['human_readable_name'] = get_function_human_readable_name(
template_args['name_with_suffix'], parameters)
template_args['mangled_name_length'] = len(template_args['mangled_name'])
symbol = '&Func::{unique_name}'.format(**template_args)
mangled_builtins.add_entry(
essl_level, glsl_level, shader_type, template_args['mangled_name'], symbol,
template_args['essl_extension'], template_args['glsl_extension'],
script_generated_hash_tests)
if template_args['unique_name'] in defined_function_variants:
continue
defined_function_variants.add(template_args['unique_name'])
template_builtin_id_declaration = ' static constexpr const TSymbolUniqueId {human_readable_name} = TSymbolUniqueId({id});'
builtin_id_declarations.append(template_builtin_id_declaration.format(**template_args))
template_builtin_id_definition = 'constexpr const TSymbolUniqueId BuiltInId::{human_readable_name};'
builtin_id_definitions.append(template_builtin_id_definition.format(**template_args))
parameters_list = []
for param in parameters:
unique_param_name = get_variable_name_to_store_parameter(param)
param_template_args = {
'name': '_empty',
'name_with_suffix': unique_param_name,
'type': param.get_statictype_string(),
'extension': 'UNDEFINED'
}
if unique_param_name not in defined_parameter_names:
id_counter += 1
param_template_args['id'] = id_counter
template_builtin_id_declaration = ' static constexpr const TSymbolUniqueId {name_with_suffix} = TSymbolUniqueId({id});'
builtin_id_declarations.append(
template_builtin_id_declaration.format(**param_template_args))
define_constexpr_variable(param_template_args, variable_declarations)
defined_parameter_names.add(unique_param_name)
if param.has_array_size():
array_size_template_args = {'arraySize': param.data['arraySize']}
define_constexpr_type_array_sizes(array_size_template_args,
type_array_sizes_declarations)
parameters_list.append(
'&BuiltInVariable::k{name_with_suffix}'.format(**param_template_args))
template_args['parameters_var_name'] = get_variable_name_to_store_parameters(
parameters)
if len(parameters) > 0:
template_args['parameters_list'] = ', '.join(parameters_list)
template_parameter_list_declaration = 'constexpr const TVariable *{parameters_var_name}[{param_count}] = {{ {parameters_list} }};'
parameter_declarations[template_args[
'parameters_var_name']] = template_parameter_list_declaration.format(
**template_args)
else:
template_parameter_list_declaration = 'constexpr const TVariable **{parameters_var_name} = nullptr;'
parameter_declarations[template_args[
'parameters_var_name']] = template_parameter_list_declaration.format(
**template_args)
parameters_list = []
for param in parameters:
unique_param_name = get_variable_name_to_store_parameter(param)
param_template_args = {
'name': '_empty',
'name_with_suffix': unique_param_name,
'type': param.get_statictype_string(),
'extension': 'UNDEFINED'
}
if unique_param_name not in defined_parameter_names:
id_counter += 1
param_template_args['id'] = id_counter
template_builtin_id_declaration = ' static constexpr const TSymbolUniqueId {name_with_suffix} = TSymbolUniqueId({id});'
builtin_id_declarations.append(
template_builtin_id_declaration.format(**param_template_args))
define_constexpr_variable(param_template_args, variable_declarations)
defined_parameter_names.add(unique_param_name)
if param.has_array_size():
array_size_template_args = {'arraySize': param.data['arraySize']}
define_constexpr_type_array_sizes(array_size_template_args,
type_array_sizes_declarations)
parameters_list.append(
'&BuiltInVariable::k{name_with_suffix}'.format(**param_template_args))
template_args['parameters_var_name'] = get_variable_name_to_store_parameters(parameters)
if len(parameters) > 0:
template_args['parameters_list'] = ', '.join(parameters_list)
template_parameter_list_declaration = 'constexpr const TVariable *{parameters_var_name}[{param_count}] = {{ {parameters_list} }};'
parameter_declarations[
template_args['parameters_var_name']] = template_parameter_list_declaration.format(
**template_args)
else:
template_parameter_list_declaration = 'constexpr const TVariable **{parameters_var_name} = nullptr;'
parameter_declarations[
template_args['parameters_var_name']] = template_parameter_list_declaration.format(
**template_args)
template_function_declaration = 'constexpr const TFunction {unique_name}(BuiltInId::{human_readable_name}, BuiltInName::{name_with_suffix}, TExtension::{extension}, BuiltInParameters::{parameters_var_name}, {param_count}, {return_type}, EOp{op}, {known_to_not_have_side_effects});'
function_declarations.append(template_function_declaration.format(**template_args))
id_counter += 1
template_function_declaration = 'constexpr const TFunction {unique_name}(BuiltInId::{human_readable_name}, BuiltInName::{name_with_suffix}, TExtension::{extension}, BuiltInParameters::{parameters_var_name}, {param_count}, {return_type}, EOp{op}, {known_to_not_have_side_effects});'
function_declarations.append(template_function_declaration.format(**template_args))
id_counter += 1
def process_single_function_group(shader_type, group, parameter_declarations, name_declarations,
unmangled_function_if_statements, defined_function_variants,
builtin_id_declarations, builtin_id_definitions,
defined_parameter_names, type_array_sizes_declarations,
variable_declarations, function_declarations,
script_generated_hash_tests,
unmangled_script_generated_hash_tests, mangled_builtins):
if 'functions' not in group:
return
for function_props in group['functions']:
process_single_function(shader_type, function_props, parameter_declarations,
name_declarations, unmangled_function_if_statements,
defined_function_variants, builtin_id_declarations,
builtin_id_definitions, defined_parameter_names,
type_array_sizes_declarations, variable_declarations,
function_declarations, script_generated_hash_tests,
unmangled_script_generated_hash_tests, mangled_builtins)
if 'essl_extension_becomes_core_in' in function_props:
assert ('essl_extension' in function_props)
core_props = copy.deepcopy(function_props)
# Adjust the props by updating the level, removing extension and adding suffix
core_level = function_props['essl_extension_becomes_core_in']
core_props['essl_level'] = core_level
del core_props['essl_extension']
suffix = core_props['suffix'] if 'suffix' in core_props else ''
suffix += generate_suffix_from_level(core_level)
core_props['suffix'] = suffix
process_single_function(shader_type, core_props, parameter_declarations,
name_declarations, unmangled_function_if_statements,
defined_function_variants, builtin_id_declarations,
builtin_id_definitions, defined_parameter_names,
type_array_sizes_declarations, variable_declarations,
function_declarations, script_generated_hash_tests,
unmangled_script_generated_hash_tests, mangled_builtins)
def process_function_group(
......@@ -1470,12 +1569,13 @@ def process_function_group(
if 'shader_type' in group:
shader_type = group['shader_type']
process_single_function_group(
shader_type, group_name, group, parameter_declarations, name_declarations,
unmangled_function_if_statements, defined_function_variants, builtin_id_declarations,
builtin_id_definitions, defined_parameter_names, type_array_sizes_declarations,
variable_declarations, function_declarations, script_generated_hash_tests,
unmangled_script_generated_hash_tests, mangled_builtins)
process_single_function_group(shader_type, group, parameter_declarations, name_declarations,
unmangled_function_if_statements, defined_function_variants,
builtin_id_declarations, builtin_id_definitions,
defined_parameter_names, type_array_sizes_declarations,
variable_declarations, function_declarations,
script_generated_hash_tests,
unmangled_script_generated_hash_tests, mangled_builtins)
if 'subgroups' in group:
for subgroup_name, subgroup in group['subgroups'].iteritems():
......@@ -1523,156 +1623,188 @@ def prune_parameters_arrays(parameter_declarations, function_declarations):
]
def process_single_variable_group(shader_type, group_name, group, builtin_id_declarations,
builtin_id_definitions, name_declarations, init_member_variables,
get_variable_declarations, mangled_builtins,
declare_member_variables, variable_declarations,
get_variable_definitions, script_generated_hash_tests):
def process_single_variable(shader_type, variable_name, props, builtin_id_declarations,
builtin_id_definitions, name_declarations, init_member_variables,
get_variable_declarations, mangled_builtins, declare_member_variables,
variable_declarations, get_variable_definitions,
script_generated_hash_tests):
global id_counter
if 'variables' not in group:
return
for variable_name, props in group['variables'].iteritems():
essl_level = props['essl_level'] if 'essl_level' in props else None
glsl_level = props['glsl_level'] if 'glsl_level' in props else None
template_args = {
'id':
id_counter,
'name':
variable_name,
'name_with_suffix':
variable_name + get_suffix(props),
'essl_level':
essl_level,
'glsl_level':
glsl_level,
'essl_extension':
get_essl_extension(props),
'glsl_extension':
get_glsl_extension(props),
# This assumes that variables cannot be part of an ESSL and GLSL extension
# Will need to update after adding GLSL extension variables if this is not the case
'extension':
get_essl_extension(props)
if get_essl_extension(props) != 'UNDEFINED' else get_glsl_extension(props),
'class':
'TVariable'
}
template_builtin_id_declaration = ' static constexpr const TSymbolUniqueId {name_with_suffix} = TSymbolUniqueId({id});'
builtin_id_declarations.append(template_builtin_id_declaration.format(**template_args))
template_builtin_id_definition = 'constexpr const TSymbolUniqueId BuiltInId::{name_with_suffix};'
builtin_id_definitions.append(template_builtin_id_definition.format(**template_args))
essl_level = props['essl_level'] if 'essl_level' in props else None
glsl_level = props['glsl_level'] if 'glsl_level' in props else None
template_args = {
'id':
id_counter,
'name':
variable_name,
'name_with_suffix':
variable_name + get_suffix(props),
'essl_level':
essl_level,
'glsl_level':
glsl_level,
'essl_extension':
get_essl_extension(props),
'glsl_extension':
get_glsl_extension(props),
# This assumes that variables cannot be part of an ESSL and GLSL extension
# Will need to update after adding GLSL extension variables if this is not the case
'extension':
get_essl_extension(props)
if get_essl_extension(props) != 'UNDEFINED' else get_glsl_extension(props),
'class':
'TVariable'
}
template_name_declaration = 'constexpr const ImmutableString {name}("{name}");'
name_declarations.add(template_name_declaration.format(**template_args))
is_member = True
template_init_variable = ''
if 'type' in props:
if props['type']['basic'] != 'Bool' and 'precision' not in props['type']:
raise Exception('Missing precision for variable ' + variable_name)
template_args['type'] = TType(props['type']).get_statictype_string()
if 'fields' in props:
# Handle struct and interface block definitions.
template_args['class'] = props['class']
template_args['fields'] = 'fields_{name_with_suffix}'.format(**template_args)
init_member_variables.append(
' TFieldList *{fields} = new TFieldList();'.format(**template_args))
for field_name, field_type in props['fields'].iteritems():
template_args['field_name'] = field_name
template_args['field_type'] = TType(field_type).get_dynamic_type_string()
template_name_declaration = 'constexpr const ImmutableString {field_name}("{field_name}");'
name_declarations.add(template_name_declaration.format(**template_args))
template_add_field = ' {fields}->push_back(new TField({field_type}, BuiltInName::{field_name}, zeroSourceLoc, SymbolType::BuiltIn));'
init_member_variables.append(template_add_field.format(**template_args))
template_init_temp_variable = ' {class} *{name_with_suffix} = new {class}(BuiltInId::{name_with_suffix}, BuiltInName::{name}, TExtension::{extension}, {fields});'
init_member_variables.append(template_init_temp_variable.format(**template_args))
if 'private' in props and props['private']:
is_member = False
else:
template_init_variable = ' m_{name_with_suffix} = {name_with_suffix};'
elif 'initDynamicType' in props:
# Handle variables whose type can't be expressed as TStaticType
# (type is a struct or has variable array size for example).
template_args['type_name'] = 'type_{name_with_suffix}'.format(**template_args)
template_args['type'] = template_args['type_name']
template_args['initDynamicType'] = props['initDynamicType'].format(**template_args)
template_init_variable = """ {initDynamicType}
{type_name}->realize();
m_{name_with_suffix} = new TVariable(BuiltInId::{name_with_suffix}, BuiltInName::{name}, SymbolType::BuiltIn, TExtension::{extension}, {type});"""
elif 'value' in props:
# Handle variables with constant value, such as gl_MaxDrawBuffers.
if props['value'] != 'resources':
raise Exception('Unrecognized value source in variable properties: ' +
str(props['value']))
resources_key = variable_name[3:]
if 'valueKey' in props:
resources_key = props['valueKey']
template_args['value'] = 'resources.' + resources_key
template_args['object_size'] = TType(props['type']).get_object_size()
template_builtin_id_declaration = ' static constexpr const TSymbolUniqueId {name_with_suffix} = TSymbolUniqueId({id});'
builtin_id_declarations.append(template_builtin_id_declaration.format(**template_args))
template_builtin_id_definition = 'constexpr const TSymbolUniqueId BuiltInId::{name_with_suffix};'
builtin_id_definitions.append(template_builtin_id_definition.format(**template_args))
template_name_declaration = 'constexpr const ImmutableString {name}("{name}");'
name_declarations.add(template_name_declaration.format(**template_args))
is_member = True
template_init_variable = ''
if 'type' in props:
if props['type']['basic'] != 'Bool' and 'precision' not in props['type']:
raise Exception('Missing precision for variable ' + variable_name)
template_args['type'] = TType(props['type']).get_statictype_string()
if 'fields' in props:
# Handle struct and interface block definitions.
template_args['class'] = props['class']
template_args['fields'] = 'fields_{name_with_suffix}'.format(**template_args)
init_member_variables.append(
' TFieldList *{fields} = new TFieldList();'.format(**template_args))
for field_name, field_type in props['fields'].iteritems():
template_args['field_name'] = field_name
template_args['field_type'] = TType(field_type).get_dynamic_type_string()
template_name_declaration = 'constexpr const ImmutableString {field_name}("{field_name}");'
name_declarations.add(template_name_declaration.format(**template_args))
template_add_field = ' {fields}->push_back(new TField({field_type}, BuiltInName::{field_name}, zeroSourceLoc, SymbolType::BuiltIn));'
init_member_variables.append(template_add_field.format(**template_args))
template_init_temp_variable = ' {class} *{name_with_suffix} = new {class}(BuiltInId::{name_with_suffix}, BuiltInName::{name}, TExtension::{extension}, {fields});'
init_member_variables.append(template_init_temp_variable.format(**template_args))
if 'private' in props and props['private']:
is_member = False
else:
template_init_variable = ' m_{name_with_suffix} = {name_with_suffix};'
elif 'initDynamicType' in props:
# Handle variables whose type can't be expressed as TStaticType
# (type is a struct or has variable array size for example).
template_args['type_name'] = 'type_{name_with_suffix}'.format(**template_args)
template_args['type'] = template_args['type_name']
template_args['ext_or_core_suffix'] = ''
if 'essl_extension_becomes_core_in' in props and 'essl_extension' not in props:
template_args['ext_or_core_suffix'] = generate_suffix_from_level(props['essl_level'])
template_args['initDynamicType'] = props['initDynamicType'].format(**template_args)
template_init_variable = """ {initDynamicType}
{type_name}->realize();
m_{name_with_suffix} = new TVariable(BuiltInId::{name_with_suffix}, BuiltInName::{name}, SymbolType::BuiltIn, TExtension::{extension}, {type});"""
elif 'value' in props:
# Handle variables with constant value, such as gl_MaxDrawBuffers.
if props['value'] != 'resources':
raise Exception('Unrecognized value source in variable properties: ' +
str(props['value']))
resources_key = variable_name[3:]
if 'valueKey' in props:
resources_key = props['valueKey']
template_args['value'] = 'resources.' + resources_key
template_args['object_size'] = TType(props['type']).get_object_size()
template_init_variable = """ m_{name_with_suffix} = new TVariable(BuiltInId::{name_with_suffix}, BuiltInName::{name}, SymbolType::BuiltIn, TExtension::{extension}, {type});
{{
TConstantUnion *unionArray = new TConstantUnion[{object_size}];
unionArray[0].setIConst({value});
static_cast<TVariable *>(m_{name_with_suffix})->shareConstPointer(unionArray);
}}"""
if template_args['object_size'] > 1:
template_init_variable = """ m_{name_with_suffix} = new TVariable(BuiltInId::{name_with_suffix}, BuiltInName::{name}, SymbolType::BuiltIn, TExtension::{extension}, {type});
{{
TConstantUnion *unionArray = new TConstantUnion[{object_size}];
for (size_t index = 0u; index < {object_size}; ++index)
{{
TConstantUnion *unionArray = new TConstantUnion[{object_size}];
unionArray[0].setIConst({value});
static_cast<TVariable *>(m_{name_with_suffix})->shareConstPointer(unionArray);
}}"""
if template_args['object_size'] > 1:
template_init_variable = """ m_{name_with_suffix} = new TVariable(BuiltInId::{name_with_suffix}, BuiltInName::{name}, SymbolType::BuiltIn, TExtension::{extension}, {type});
{{
TConstantUnion *unionArray = new TConstantUnion[{object_size}];
for (size_t index = 0u; index < {object_size}; ++index)
{{
unionArray[index].setIConst({value}[index]);
}}
static_cast<TVariable *>(m_{name_with_suffix})->shareConstPointer(unionArray);
}}"""
unionArray[index].setIConst({value}[index]);
}}
static_cast<TVariable *>(m_{name_with_suffix})->shareConstPointer(unionArray);
}}"""
else:
# Handle variables that can be stored as constexpr TVariable like
# gl_Position, gl_FragColor etc.
define_constexpr_variable(template_args, variable_declarations)
is_member = False
else:
# Handle variables that can be stored as constexpr TVariable like
# gl_Position, gl_FragColor etc.
define_constexpr_variable(template_args, variable_declarations)
is_member = False
template_get_variable_declaration = 'const TVariable *{name_with_suffix}();'
get_variable_declarations.append(
template_get_variable_declaration.format(**template_args))
template_get_variable_declaration = 'const TVariable *{name_with_suffix}();'
get_variable_declarations.append(template_get_variable_declaration.format(**template_args))
template_get_variable_definition = """const TVariable *{name_with_suffix}()
template_get_variable_definition = """const TVariable *{name_with_suffix}()
{{
return &k{name_with_suffix};
return &k{name_with_suffix};
}}
"""
get_variable_definitions.append(
template_get_variable_definition.format(**template_args))
if essl_level != 'GLSL_BUILTINS':
obj = '&BuiltInVariable::k{name_with_suffix}'.format(**template_args)
# TODO(http://anglebug.com/3835): Add GLSL level once GLSL built-in vars are added
mangled_builtins.add_entry(
essl_level, 'COMMON_BUILTINS', shader_type, template_args['name'], obj,
template_args['essl_extension'], template_args['glsl_extension'],
script_generated_hash_tests)
if is_member:
init_member_variables.append(template_init_variable.format(**template_args))
template_declare_member_variable = 'TSymbol *m_{name_with_suffix} = nullptr;'
declare_member_variables.append(
template_declare_member_variable.format(**template_args))
obj = 'm_{name_with_suffix}'.format(**template_args)
get_variable_definitions.append(template_get_variable_definition.format(**template_args))
if essl_level != 'GLSL_BUILTINS':
obj = '&BuiltInVariable::k{name_with_suffix}'.format(**template_args)
# TODO(http://anglebug.com/3835): Add GLSL level once GLSL built-in vars are added
mangled_builtins.add_entry(essl_level, 'COMMON_BUILTINS', shader_type,
template_args['name'], obj, template_args['essl_extension'],
template_args['glsl_extension'],
script_generated_hash_tests)
id_counter += 1
if is_member:
init_member_variables.append(template_init_variable.format(**template_args))
template_declare_member_variable = 'TSymbol *m_{name_with_suffix} = nullptr;'
declare_member_variables.append(template_declare_member_variable.format(**template_args))
obj = 'm_{name_with_suffix}'.format(**template_args)
# TODO(http://anglebug.com/3835): Add GLSL level once GLSL built-in vars are added
mangled_builtins.add_entry(essl_level, 'COMMON_BUILTINS', shader_type,
template_args['name'], obj, template_args['essl_extension'],
template_args['glsl_extension'], script_generated_hash_tests)
id_counter += 1
def process_single_variable_group(shader_type, group, builtin_id_declarations,
builtin_id_definitions, name_declarations, init_member_variables,
get_variable_declarations, mangled_builtins,
declare_member_variables, variable_declarations,
get_variable_definitions, script_generated_hash_tests):
global id_counter
if 'variables' not in group:
return
for variable_name, props in group['variables'].iteritems():
process_single_variable(shader_type, variable_name, props, builtin_id_declarations,
builtin_id_definitions, name_declarations, init_member_variables,
get_variable_declarations, mangled_builtins,
declare_member_variables, variable_declarations,
get_variable_definitions, script_generated_hash_tests)
if 'essl_extension_becomes_core_in' in props:
assert ('essl_extension' in props)
core_props = copy.deepcopy(props)
# Adjust the props by updating the level, removing extension and adding suffix
core_level = props['essl_extension_becomes_core_in']
core_props['essl_level'] = core_level
del core_props['essl_extension']
suffix = core_props['suffix'] if 'suffix' in core_props else ''
suffix += generate_suffix_from_level(core_level)
core_props['suffix'] = suffix
process_single_variable(shader_type, variable_name, core_props,
builtin_id_declarations, builtin_id_definitions,
name_declarations, init_member_variables,
get_variable_declarations, mangled_builtins,
declare_member_variables, variable_declarations,
get_variable_definitions, script_generated_hash_tests)
def process_variable_group(shader_type, group_name, group, builtin_id_declarations,
......@@ -1685,7 +1817,7 @@ def process_variable_group(shader_type, group_name, group, builtin_id_declaratio
if 'shader_type' in group:
shader_type = group['shader_type']
process_single_variable_group(shader_type, group_name, group, builtin_id_declarations,
process_single_variable_group(shader_type, group, builtin_id_declarations,
builtin_id_definitions, name_declarations, init_member_variables,
get_variable_declarations, mangled_builtins,
declare_member_variables, variable_declarations,
......@@ -1818,8 +1950,6 @@ def generate_files(essl_only, args, functions_txt_filename, variables_json_filen
output_strings = {
'script_name':
os.path.basename(__file__),
'copyright_year':
date.today().year,
'builtin_id_declarations':
'\n'.join(builtin_id_declarations),
'builtin_id_definitions':
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -4560,190 +4560,278 @@ class BuiltInId
static constexpr const TSymbolUniqueId barrier = TSymbolUniqueId(2789);
static constexpr const TSymbolUniqueId memoryBarrierShared = TSymbolUniqueId(2790);
static constexpr const TSymbolUniqueId groupMemoryBarrier = TSymbolUniqueId(2791);
static constexpr const TSymbolUniqueId EmitVertex = TSymbolUniqueId(2792);
static constexpr const TSymbolUniqueId EndPrimitive = TSymbolUniqueId(2793);
static constexpr const TSymbolUniqueId EmitStreamVertex_Int1 = TSymbolUniqueId(2794);
static constexpr const TSymbolUniqueId EndStreamPrimitive_Int1 = TSymbolUniqueId(2795);
static constexpr const TSymbolUniqueId subpassLoad_SubpassInput1 = TSymbolUniqueId(2796);
static constexpr const TSymbolUniqueId pt01j = TSymbolUniqueId(2797);
static constexpr const TSymbolUniqueId subpassLoad_ISubpassInput1 = TSymbolUniqueId(2798);
static constexpr const TSymbolUniqueId pt01k = TSymbolUniqueId(2799);
static constexpr const TSymbolUniqueId subpassLoad_USubpassInput1 = TSymbolUniqueId(2800);
static constexpr const TSymbolUniqueId pt01l = TSymbolUniqueId(2801);
static constexpr const TSymbolUniqueId subpassLoad_SubpassInputMS1_Int1 = TSymbolUniqueId(2802);
static constexpr const TSymbolUniqueId pt01m = TSymbolUniqueId(2803);
static constexpr const TSymbolUniqueId barrierES3_2 = TSymbolUniqueId(2792);
static constexpr const TSymbolUniqueId EmitVertex = TSymbolUniqueId(2793);
static constexpr const TSymbolUniqueId EmitVertexES3_2 = TSymbolUniqueId(2794);
static constexpr const TSymbolUniqueId EndPrimitive = TSymbolUniqueId(2795);
static constexpr const TSymbolUniqueId EndPrimitiveES3_2 = TSymbolUniqueId(2796);
static constexpr const TSymbolUniqueId EmitStreamVertex_Int1 = TSymbolUniqueId(2797);
static constexpr const TSymbolUniqueId EndStreamPrimitive_Int1 = TSymbolUniqueId(2798);
static constexpr const TSymbolUniqueId subpassLoad_SubpassInput1 = TSymbolUniqueId(2799);
static constexpr const TSymbolUniqueId pt01j = TSymbolUniqueId(2800);
static constexpr const TSymbolUniqueId subpassLoad_ISubpassInput1 = TSymbolUniqueId(2801);
static constexpr const TSymbolUniqueId pt01k = TSymbolUniqueId(2802);
static constexpr const TSymbolUniqueId subpassLoad_USubpassInput1 = TSymbolUniqueId(2803);
static constexpr const TSymbolUniqueId pt01l = TSymbolUniqueId(2804);
static constexpr const TSymbolUniqueId subpassLoad_SubpassInputMS1_Int1 = TSymbolUniqueId(2805);
static constexpr const TSymbolUniqueId pt01m = TSymbolUniqueId(2806);
static constexpr const TSymbolUniqueId subpassLoad_ISubpassInputMS1_Int1 =
TSymbolUniqueId(2804);
static constexpr const TSymbolUniqueId pt01n = TSymbolUniqueId(2805);
TSymbolUniqueId(2807);
static constexpr const TSymbolUniqueId pt01n = TSymbolUniqueId(2808);
static constexpr const TSymbolUniqueId subpassLoad_USubpassInputMS1_Int1 =
TSymbolUniqueId(2806);
static constexpr const TSymbolUniqueId pt01o = TSymbolUniqueId(2807);
static constexpr const TSymbolUniqueId anyInvocation_Bool1 = TSymbolUniqueId(2808);
static constexpr const TSymbolUniqueId allInvocations_Bool1 = TSymbolUniqueId(2809);
static constexpr const TSymbolUniqueId allInvocationsEqual_Bool1 = TSymbolUniqueId(2810);
TSymbolUniqueId(2809);
static constexpr const TSymbolUniqueId pt01o = TSymbolUniqueId(2810);
static constexpr const TSymbolUniqueId anyInvocation_Bool1 = TSymbolUniqueId(2811);
static constexpr const TSymbolUniqueId allInvocations_Bool1 = TSymbolUniqueId(2812);
static constexpr const TSymbolUniqueId allInvocationsEqual_Bool1 = TSymbolUniqueId(2813);
static constexpr const TSymbolUniqueId textureVideoWEBGL_SamplerVideoWEBGL1_Float2 =
TSymbolUniqueId(2811);
static constexpr const TSymbolUniqueId pt00y = TSymbolUniqueId(2812);
TSymbolUniqueId(2814);
static constexpr const TSymbolUniqueId pt00y = TSymbolUniqueId(2815);
static constexpr const TSymbolUniqueId texture_SamplerVideoWEBGL1_Float2 =
TSymbolUniqueId(2813);
static constexpr const TSymbolUniqueId gl_DepthRangeParameters = TSymbolUniqueId(2814);
static constexpr const TSymbolUniqueId gl_DepthRange = TSymbolUniqueId(2815);
static constexpr const TSymbolUniqueId gl_NumSamples = TSymbolUniqueId(2816);
static constexpr const TSymbolUniqueId gl_MaxVertexAttribs = TSymbolUniqueId(2817);
static constexpr const TSymbolUniqueId gl_MaxVertexUniformVectors = TSymbolUniqueId(2818);
static constexpr const TSymbolUniqueId gl_MaxVertexTextureImageUnits = TSymbolUniqueId(2819);
static constexpr const TSymbolUniqueId gl_MaxCombinedTextureImageUnits = TSymbolUniqueId(2820);
static constexpr const TSymbolUniqueId gl_MaxTextureImageUnits = TSymbolUniqueId(2821);
static constexpr const TSymbolUniqueId gl_MaxFragmentUniformVectors = TSymbolUniqueId(2822);
static constexpr const TSymbolUniqueId gl_MaxVaryingVectors = TSymbolUniqueId(2823);
static constexpr const TSymbolUniqueId gl_MaxDrawBuffers = TSymbolUniqueId(2824);
static constexpr const TSymbolUniqueId gl_MaxDualSourceDrawBuffersEXT = TSymbolUniqueId(2825);
static constexpr const TSymbolUniqueId gl_MaxVertexOutputVectors = TSymbolUniqueId(2826);
static constexpr const TSymbolUniqueId gl_MaxFragmentInputVectors = TSymbolUniqueId(2827);
static constexpr const TSymbolUniqueId gl_MinProgramTexelOffset = TSymbolUniqueId(2828);
static constexpr const TSymbolUniqueId gl_MaxProgramTexelOffset = TSymbolUniqueId(2829);
static constexpr const TSymbolUniqueId gl_MaxImageUnits = TSymbolUniqueId(2830);
static constexpr const TSymbolUniqueId gl_MaxVertexImageUniforms = TSymbolUniqueId(2831);
static constexpr const TSymbolUniqueId gl_MaxFragmentImageUniforms = TSymbolUniqueId(2832);
static constexpr const TSymbolUniqueId gl_MaxComputeImageUniforms = TSymbolUniqueId(2833);
static constexpr const TSymbolUniqueId gl_MaxCombinedImageUniforms = TSymbolUniqueId(2834);
TSymbolUniqueId(2816);
static constexpr const TSymbolUniqueId gl_DepthRangeParameters = TSymbolUniqueId(2817);
static constexpr const TSymbolUniqueId gl_DepthRange = TSymbolUniqueId(2818);
static constexpr const TSymbolUniqueId gl_NumSamples = TSymbolUniqueId(2819);
static constexpr const TSymbolUniqueId gl_NumSamplesES3_2 = TSymbolUniqueId(2820);
static constexpr const TSymbolUniqueId gl_MaxVertexAttribs = TSymbolUniqueId(2821);
static constexpr const TSymbolUniqueId gl_MaxVertexUniformVectors = TSymbolUniqueId(2822);
static constexpr const TSymbolUniqueId gl_MaxVertexTextureImageUnits = TSymbolUniqueId(2823);
static constexpr const TSymbolUniqueId gl_MaxCombinedTextureImageUnits = TSymbolUniqueId(2824);
static constexpr const TSymbolUniqueId gl_MaxTextureImageUnits = TSymbolUniqueId(2825);
static constexpr const TSymbolUniqueId gl_MaxFragmentUniformVectors = TSymbolUniqueId(2826);
static constexpr const TSymbolUniqueId gl_MaxVaryingVectors = TSymbolUniqueId(2827);
static constexpr const TSymbolUniqueId gl_MaxDrawBuffers = TSymbolUniqueId(2828);
static constexpr const TSymbolUniqueId gl_MaxDualSourceDrawBuffersEXT = TSymbolUniqueId(2829);
static constexpr const TSymbolUniqueId gl_MaxVertexOutputVectors = TSymbolUniqueId(2830);
static constexpr const TSymbolUniqueId gl_MaxFragmentInputVectors = TSymbolUniqueId(2831);
static constexpr const TSymbolUniqueId gl_MinProgramTexelOffset = TSymbolUniqueId(2832);
static constexpr const TSymbolUniqueId gl_MaxProgramTexelOffset = TSymbolUniqueId(2833);
static constexpr const TSymbolUniqueId gl_MaxImageUnits = TSymbolUniqueId(2834);
static constexpr const TSymbolUniqueId gl_MaxVertexImageUniforms = TSymbolUniqueId(2835);
static constexpr const TSymbolUniqueId gl_MaxFragmentImageUniforms = TSymbolUniqueId(2836);
static constexpr const TSymbolUniqueId gl_MaxComputeImageUniforms = TSymbolUniqueId(2837);
static constexpr const TSymbolUniqueId gl_MaxCombinedImageUniforms = TSymbolUniqueId(2838);
static constexpr const TSymbolUniqueId gl_MaxCombinedShaderOutputResources =
TSymbolUniqueId(2835);
static constexpr const TSymbolUniqueId gl_MaxComputeWorkGroupCount = TSymbolUniqueId(2836);
static constexpr const TSymbolUniqueId gl_MaxComputeWorkGroupSize = TSymbolUniqueId(2837);
static constexpr const TSymbolUniqueId gl_MaxComputeUniformComponents = TSymbolUniqueId(2838);
static constexpr const TSymbolUniqueId gl_MaxComputeTextureImageUnits = TSymbolUniqueId(2839);
static constexpr const TSymbolUniqueId gl_MaxComputeAtomicCounters = TSymbolUniqueId(2840);
TSymbolUniqueId(2839);
static constexpr const TSymbolUniqueId gl_MaxComputeWorkGroupCount = TSymbolUniqueId(2840);
static constexpr const TSymbolUniqueId gl_MaxComputeWorkGroupSize = TSymbolUniqueId(2841);
static constexpr const TSymbolUniqueId gl_MaxComputeUniformComponents = TSymbolUniqueId(2842);
static constexpr const TSymbolUniqueId gl_MaxComputeTextureImageUnits = TSymbolUniqueId(2843);
static constexpr const TSymbolUniqueId gl_MaxComputeAtomicCounters = TSymbolUniqueId(2844);
static constexpr const TSymbolUniqueId gl_MaxComputeAtomicCounterBuffers =
TSymbolUniqueId(2841);
static constexpr const TSymbolUniqueId gl_MaxVertexAtomicCounters = TSymbolUniqueId(2842);
static constexpr const TSymbolUniqueId gl_MaxFragmentAtomicCounters = TSymbolUniqueId(2843);
static constexpr const TSymbolUniqueId gl_MaxCombinedAtomicCounters = TSymbolUniqueId(2844);
static constexpr const TSymbolUniqueId gl_MaxAtomicCounterBindings = TSymbolUniqueId(2845);
static constexpr const TSymbolUniqueId gl_MaxVertexAtomicCounterBuffers = TSymbolUniqueId(2846);
TSymbolUniqueId(2845);
static constexpr const TSymbolUniqueId gl_MaxVertexAtomicCounters = TSymbolUniqueId(2846);
static constexpr const TSymbolUniqueId gl_MaxFragmentAtomicCounters = TSymbolUniqueId(2847);
static constexpr const TSymbolUniqueId gl_MaxCombinedAtomicCounters = TSymbolUniqueId(2848);
static constexpr const TSymbolUniqueId gl_MaxAtomicCounterBindings = TSymbolUniqueId(2849);
static constexpr const TSymbolUniqueId gl_MaxVertexAtomicCounterBuffers = TSymbolUniqueId(2850);
static constexpr const TSymbolUniqueId gl_MaxFragmentAtomicCounterBuffers =
TSymbolUniqueId(2847);
TSymbolUniqueId(2851);
static constexpr const TSymbolUniqueId gl_MaxCombinedAtomicCounterBuffers =
TSymbolUniqueId(2848);
static constexpr const TSymbolUniqueId gl_MaxAtomicCounterBufferSize = TSymbolUniqueId(2849);
static constexpr const TSymbolUniqueId gl_MaxGeometryInputComponents = TSymbolUniqueId(2850);
static constexpr const TSymbolUniqueId gl_MaxGeometryOutputComponents = TSymbolUniqueId(2851);
static constexpr const TSymbolUniqueId gl_MaxGeometryImageUniforms = TSymbolUniqueId(2852);
static constexpr const TSymbolUniqueId gl_MaxGeometryTextureImageUnits = TSymbolUniqueId(2853);
static constexpr const TSymbolUniqueId gl_MaxGeometryOutputVertices = TSymbolUniqueId(2854);
static constexpr const TSymbolUniqueId gl_MaxGeometryTotalOutputComponents =
TSymbolUniqueId(2852);
static constexpr const TSymbolUniqueId gl_MaxAtomicCounterBufferSize = TSymbolUniqueId(2853);
static constexpr const TSymbolUniqueId gl_MaxGeometryInputComponents = TSymbolUniqueId(2854);
static constexpr const TSymbolUniqueId gl_MaxGeometryInputComponentsES3_2 =
TSymbolUniqueId(2855);
static constexpr const TSymbolUniqueId gl_MaxGeometryUniformComponents = TSymbolUniqueId(2856);
static constexpr const TSymbolUniqueId gl_MaxGeometryAtomicCounters = TSymbolUniqueId(2857);
static constexpr const TSymbolUniqueId gl_MaxGeometryOutputComponents = TSymbolUniqueId(2856);
static constexpr const TSymbolUniqueId gl_MaxGeometryOutputComponentsES3_2 =
TSymbolUniqueId(2857);
static constexpr const TSymbolUniqueId gl_MaxGeometryImageUniforms = TSymbolUniqueId(2858);
static constexpr const TSymbolUniqueId gl_MaxGeometryImageUniformsES3_2 = TSymbolUniqueId(2859);
static constexpr const TSymbolUniqueId gl_MaxGeometryTextureImageUnits = TSymbolUniqueId(2860);
static constexpr const TSymbolUniqueId gl_MaxGeometryTextureImageUnitsES3_2 =
TSymbolUniqueId(2861);
static constexpr const TSymbolUniqueId gl_MaxGeometryOutputVertices = TSymbolUniqueId(2862);
static constexpr const TSymbolUniqueId gl_MaxGeometryOutputVerticesES3_2 =
TSymbolUniqueId(2863);
static constexpr const TSymbolUniqueId gl_MaxGeometryTotalOutputComponents =
TSymbolUniqueId(2864);
static constexpr const TSymbolUniqueId gl_MaxGeometryTotalOutputComponentsES3_2 =
TSymbolUniqueId(2865);
static constexpr const TSymbolUniqueId gl_MaxGeometryUniformComponents = TSymbolUniqueId(2866);
static constexpr const TSymbolUniqueId gl_MaxGeometryUniformComponentsES3_2 =
TSymbolUniqueId(2867);
static constexpr const TSymbolUniqueId gl_MaxGeometryAtomicCounters = TSymbolUniqueId(2868);
static constexpr const TSymbolUniqueId gl_MaxGeometryAtomicCountersES3_2 =
TSymbolUniqueId(2869);
static constexpr const TSymbolUniqueId gl_MaxGeometryAtomicCounterBuffers =
TSymbolUniqueId(2858);
static constexpr const TSymbolUniqueId gl_MaxTessControlInputComponents = TSymbolUniqueId(2859);
TSymbolUniqueId(2870);
static constexpr const TSymbolUniqueId gl_MaxGeometryAtomicCounterBuffersES3_2 =
TSymbolUniqueId(2871);
static constexpr const TSymbolUniqueId gl_MaxTessControlInputComponents = TSymbolUniqueId(2872);
static constexpr const TSymbolUniqueId gl_MaxTessControlInputComponentsES3_2 =
TSymbolUniqueId(2873);
static constexpr const TSymbolUniqueId gl_MaxTessControlOutputComponents =
TSymbolUniqueId(2860);
TSymbolUniqueId(2874);
static constexpr const TSymbolUniqueId gl_MaxTessControlOutputComponentsES3_2 =
TSymbolUniqueId(2875);
static constexpr const TSymbolUniqueId gl_MaxTessControlTextureImageUnits =
TSymbolUniqueId(2861);
TSymbolUniqueId(2876);
static constexpr const TSymbolUniqueId gl_MaxTessControlTextureImageUnitsES3_2 =
TSymbolUniqueId(2877);
static constexpr const TSymbolUniqueId gl_MaxTessControlUniformComponents =
TSymbolUniqueId(2862);
TSymbolUniqueId(2878);
static constexpr const TSymbolUniqueId gl_MaxTessControlUniformComponentsES3_2 =
TSymbolUniqueId(2879);
static constexpr const TSymbolUniqueId gl_MaxTessControlTotalOutputComponents =
TSymbolUniqueId(2863);
static constexpr const TSymbolUniqueId gl_MaxTessControlImageUniforms = TSymbolUniqueId(2864);
static constexpr const TSymbolUniqueId gl_MaxTessControlAtomicCounters = TSymbolUniqueId(2865);
TSymbolUniqueId(2880);
static constexpr const TSymbolUniqueId gl_MaxTessControlTotalOutputComponentsES3_2 =
TSymbolUniqueId(2881);
static constexpr const TSymbolUniqueId gl_MaxTessControlImageUniforms = TSymbolUniqueId(2882);
static constexpr const TSymbolUniqueId gl_MaxTessControlImageUniformsES3_2 =
TSymbolUniqueId(2883);
static constexpr const TSymbolUniqueId gl_MaxTessControlAtomicCounters = TSymbolUniqueId(2884);
static constexpr const TSymbolUniqueId gl_MaxTessControlAtomicCountersES3_2 =
TSymbolUniqueId(2885);
static constexpr const TSymbolUniqueId gl_MaxTessControlAtomicCounterBuffers =
TSymbolUniqueId(2866);
static constexpr const TSymbolUniqueId gl_MaxTessPatchComponents = TSymbolUniqueId(2867);
static constexpr const TSymbolUniqueId gl_MaxPatchVertices = TSymbolUniqueId(2868);
static constexpr const TSymbolUniqueId gl_MaxTessGenLevel = TSymbolUniqueId(2869);
TSymbolUniqueId(2886);
static constexpr const TSymbolUniqueId gl_MaxTessControlAtomicCounterBuffersES3_2 =
TSymbolUniqueId(2887);
static constexpr const TSymbolUniqueId gl_MaxTessPatchComponents = TSymbolUniqueId(2888);
static constexpr const TSymbolUniqueId gl_MaxTessPatchComponentsES3_2 = TSymbolUniqueId(2889);
static constexpr const TSymbolUniqueId gl_MaxPatchVertices = TSymbolUniqueId(2890);
static constexpr const TSymbolUniqueId gl_MaxPatchVerticesES3_2 = TSymbolUniqueId(2891);
static constexpr const TSymbolUniqueId gl_MaxTessGenLevel = TSymbolUniqueId(2892);
static constexpr const TSymbolUniqueId gl_MaxTessGenLevelES3_2 = TSymbolUniqueId(2893);
static constexpr const TSymbolUniqueId gl_MaxTessEvaluationInputComponents =
TSymbolUniqueId(2870);
TSymbolUniqueId(2894);
static constexpr const TSymbolUniqueId gl_MaxTessEvaluationInputComponentsES3_2 =
TSymbolUniqueId(2895);
static constexpr const TSymbolUniqueId gl_MaxTessEvaluationOutputComponents =
TSymbolUniqueId(2871);
TSymbolUniqueId(2896);
static constexpr const TSymbolUniqueId gl_MaxTessEvaluationOutputComponentsES3_2 =
TSymbolUniqueId(2897);
static constexpr const TSymbolUniqueId gl_MaxTessEvaluationTextureImageUnits =
TSymbolUniqueId(2872);
TSymbolUniqueId(2898);
static constexpr const TSymbolUniqueId gl_MaxTessEvaluationTextureImageUnitsES3_2 =
TSymbolUniqueId(2899);
static constexpr const TSymbolUniqueId gl_MaxTessEvaluationUniformComponents =
TSymbolUniqueId(2873);
TSymbolUniqueId(2900);
static constexpr const TSymbolUniqueId gl_MaxTessEvaluationUniformComponentsES3_2 =
TSymbolUniqueId(2901);
static constexpr const TSymbolUniqueId gl_MaxTessEvaluationImageUniforms =
TSymbolUniqueId(2874);
TSymbolUniqueId(2902);
static constexpr const TSymbolUniqueId gl_MaxTessEvaluationImageUniformsES3_2 =
TSymbolUniqueId(2903);
static constexpr const TSymbolUniqueId gl_MaxTessEvaluationAtomicCounters =
TSymbolUniqueId(2875);
TSymbolUniqueId(2904);
static constexpr const TSymbolUniqueId gl_MaxTessEvaluationAtomicCountersES3_2 =
TSymbolUniqueId(2905);
static constexpr const TSymbolUniqueId gl_MaxTessEvaluationAtomicCounterBuffers =
TSymbolUniqueId(2876);
static constexpr const TSymbolUniqueId gl_MaxSamples = TSymbolUniqueId(2877);
static constexpr const TSymbolUniqueId gl_MaxClipDistancesAPPLE = TSymbolUniqueId(2878);
static constexpr const TSymbolUniqueId gl_MaxCullDistancesEXT = TSymbolUniqueId(2879);
TSymbolUniqueId(2906);
static constexpr const TSymbolUniqueId gl_MaxTessEvaluationAtomicCounterBuffersES3_2 =
TSymbolUniqueId(2907);
static constexpr const TSymbolUniqueId gl_MaxSamples = TSymbolUniqueId(2908);
static constexpr const TSymbolUniqueId gl_MaxSamplesES3_2 = TSymbolUniqueId(2909);
static constexpr const TSymbolUniqueId gl_MaxClipDistancesAPPLE = TSymbolUniqueId(2910);
static constexpr const TSymbolUniqueId gl_MaxCullDistancesEXT = TSymbolUniqueId(2911);
static constexpr const TSymbolUniqueId gl_MaxCombinedClipAndCullDistancesEXT =
TSymbolUniqueId(2880);
static constexpr const TSymbolUniqueId gl_FragCoord = TSymbolUniqueId(2881);
static constexpr const TSymbolUniqueId gl_FrontFacing = TSymbolUniqueId(2882);
static constexpr const TSymbolUniqueId gl_PointCoord = TSymbolUniqueId(2883);
static constexpr const TSymbolUniqueId gl_FragColor = TSymbolUniqueId(2884);
static constexpr const TSymbolUniqueId gl_FragData = TSymbolUniqueId(2885);
static constexpr const TSymbolUniqueId gl_FragDepth = TSymbolUniqueId(2886);
static constexpr const TSymbolUniqueId gl_HelperInvocation = TSymbolUniqueId(2887);
static constexpr const TSymbolUniqueId gl_SecondaryFragColorEXT = TSymbolUniqueId(2888);
static constexpr const TSymbolUniqueId gl_SecondaryFragDataEXT = TSymbolUniqueId(2889);
static constexpr const TSymbolUniqueId gl_FragDepthEXT = TSymbolUniqueId(2890);
static constexpr const TSymbolUniqueId gl_LastFragData = TSymbolUniqueId(2891);
static constexpr const TSymbolUniqueId gl_LastFragColor = TSymbolUniqueId(2892);
static constexpr const TSymbolUniqueId gl_LastFragDataNV = TSymbolUniqueId(2893);
static constexpr const TSymbolUniqueId gl_LastFragColorARM = TSymbolUniqueId(2894);
static constexpr const TSymbolUniqueId gl_PrimitiveID = TSymbolUniqueId(2895);
static constexpr const TSymbolUniqueId gl_Layer = TSymbolUniqueId(2896);
static constexpr const TSymbolUniqueId gl_SampleID = TSymbolUniqueId(2897);
static constexpr const TSymbolUniqueId gl_SamplePosition = TSymbolUniqueId(2898);
static constexpr const TSymbolUniqueId gl_SampleMaskIn = TSymbolUniqueId(2899);
static constexpr const TSymbolUniqueId gl_SampleMask = TSymbolUniqueId(2900);
static constexpr const TSymbolUniqueId gl_CullDistance = TSymbolUniqueId(2901);
static constexpr const TSymbolUniqueId gl_ClipDistance = TSymbolUniqueId(2902);
static constexpr const TSymbolUniqueId gl_Position = TSymbolUniqueId(2903);
static constexpr const TSymbolUniqueId gl_PointSize = TSymbolUniqueId(2904);
static constexpr const TSymbolUniqueId gl_InstanceID = TSymbolUniqueId(2905);
static constexpr const TSymbolUniqueId gl_InstanceIndex = TSymbolUniqueId(2906);
static constexpr const TSymbolUniqueId gl_VertexID = TSymbolUniqueId(2907);
static constexpr const TSymbolUniqueId gl_VertexIndex = TSymbolUniqueId(2908);
static constexpr const TSymbolUniqueId gl_ViewportIndex = TSymbolUniqueId(2909);
static constexpr const TSymbolUniqueId gl_LayerVS = TSymbolUniqueId(2910);
static constexpr const TSymbolUniqueId gl_DrawID = TSymbolUniqueId(2911);
static constexpr const TSymbolUniqueId gl_BaseVertex = TSymbolUniqueId(2912);
static constexpr const TSymbolUniqueId gl_BaseInstance = TSymbolUniqueId(2913);
static constexpr const TSymbolUniqueId angle_BaseVertex = TSymbolUniqueId(2914);
static constexpr const TSymbolUniqueId angle_BaseInstance = TSymbolUniqueId(2915);
static constexpr const TSymbolUniqueId gl_ClipDistanceAPPLE = TSymbolUniqueId(2916);
static constexpr const TSymbolUniqueId gl_CullDistanceEXT = TSymbolUniqueId(2917);
static constexpr const TSymbolUniqueId gl_NumWorkGroups = TSymbolUniqueId(2918);
static constexpr const TSymbolUniqueId gl_WorkGroupSize = TSymbolUniqueId(2919);
static constexpr const TSymbolUniqueId gl_WorkGroupID = TSymbolUniqueId(2920);
static constexpr const TSymbolUniqueId gl_LocalInvocationID = TSymbolUniqueId(2921);
static constexpr const TSymbolUniqueId gl_GlobalInvocationID = TSymbolUniqueId(2922);
static constexpr const TSymbolUniqueId gl_LocalInvocationIndex = TSymbolUniqueId(2923);
static constexpr const TSymbolUniqueId gl_PrimitiveIDIn = TSymbolUniqueId(2924);
static constexpr const TSymbolUniqueId gl_InvocationID = TSymbolUniqueId(2925);
static constexpr const TSymbolUniqueId gl_PrimitiveIDGS = TSymbolUniqueId(2926);
static constexpr const TSymbolUniqueId gl_LayerGS = TSymbolUniqueId(2927);
static constexpr const TSymbolUniqueId gl_PerVertex = TSymbolUniqueId(2928);
static constexpr const TSymbolUniqueId gl_in = TSymbolUniqueId(2929);
static constexpr const TSymbolUniqueId gl_PerVertexOutBlock = TSymbolUniqueId(2930);
static constexpr const TSymbolUniqueId gl_PositionGS = TSymbolUniqueId(2931);
static constexpr const TSymbolUniqueId gl_PatchVerticesInTCS = TSymbolUniqueId(2932);
static constexpr const TSymbolUniqueId gl_InvocationIDTCS = TSymbolUniqueId(2933);
static constexpr const TSymbolUniqueId gl_PrimitiveIDTCS = TSymbolUniqueId(2934);
static constexpr const TSymbolUniqueId gl_TessLevelOuterTCS = TSymbolUniqueId(2935);
static constexpr const TSymbolUniqueId gl_TessLevelInnerTCS = TSymbolUniqueId(2936);
static constexpr const TSymbolUniqueId gl_PerVertexTCS = TSymbolUniqueId(2937);
static constexpr const TSymbolUniqueId gl_inTCS = TSymbolUniqueId(2938);
static constexpr const TSymbolUniqueId gl_outTCS = TSymbolUniqueId(2939);
static constexpr const TSymbolUniqueId gl_PerVertexOutTcsBlock = TSymbolUniqueId(2940);
static constexpr const TSymbolUniqueId gl_PositionTCS = TSymbolUniqueId(2941);
static constexpr const TSymbolUniqueId gl_PatchVerticesInTES = TSymbolUniqueId(2942);
static constexpr const TSymbolUniqueId gl_PrimitiveIDTES = TSymbolUniqueId(2943);
static constexpr const TSymbolUniqueId gl_TessCoord = TSymbolUniqueId(2944);
static constexpr const TSymbolUniqueId gl_TessLevelOuterTES = TSymbolUniqueId(2945);
static constexpr const TSymbolUniqueId gl_TessLevelInnerTES = TSymbolUniqueId(2946);
static constexpr const TSymbolUniqueId gl_PerVertexTES = TSymbolUniqueId(2947);
static constexpr const TSymbolUniqueId gl_inTES = TSymbolUniqueId(2948);
static constexpr const TSymbolUniqueId gl_outTES = TSymbolUniqueId(2949);
static constexpr const TSymbolUniqueId gl_PerVertexOutTesBlock = TSymbolUniqueId(2950);
static constexpr const TSymbolUniqueId gl_PositionTES = TSymbolUniqueId(2951);
static constexpr const TSymbolUniqueId gl_ViewID_OVR = TSymbolUniqueId(2952);
TSymbolUniqueId(2912);
static constexpr const TSymbolUniqueId gl_FragCoord = TSymbolUniqueId(2913);
static constexpr const TSymbolUniqueId gl_FrontFacing = TSymbolUniqueId(2914);
static constexpr const TSymbolUniqueId gl_PointCoord = TSymbolUniqueId(2915);
static constexpr const TSymbolUniqueId gl_FragColor = TSymbolUniqueId(2916);
static constexpr const TSymbolUniqueId gl_FragData = TSymbolUniqueId(2917);
static constexpr const TSymbolUniqueId gl_FragDepth = TSymbolUniqueId(2918);
static constexpr const TSymbolUniqueId gl_HelperInvocation = TSymbolUniqueId(2919);
static constexpr const TSymbolUniqueId gl_SecondaryFragColorEXT = TSymbolUniqueId(2920);
static constexpr const TSymbolUniqueId gl_SecondaryFragDataEXT = TSymbolUniqueId(2921);
static constexpr const TSymbolUniqueId gl_FragDepthEXT = TSymbolUniqueId(2922);
static constexpr const TSymbolUniqueId gl_LastFragData = TSymbolUniqueId(2923);
static constexpr const TSymbolUniqueId gl_LastFragColor = TSymbolUniqueId(2924);
static constexpr const TSymbolUniqueId gl_LastFragDataNV = TSymbolUniqueId(2925);
static constexpr const TSymbolUniqueId gl_LastFragColorARM = TSymbolUniqueId(2926);
static constexpr const TSymbolUniqueId gl_PrimitiveID = TSymbolUniqueId(2927);
static constexpr const TSymbolUniqueId gl_PrimitiveIDES3_2 = TSymbolUniqueId(2928);
static constexpr const TSymbolUniqueId gl_Layer = TSymbolUniqueId(2929);
static constexpr const TSymbolUniqueId gl_LayerES3_2 = TSymbolUniqueId(2930);
static constexpr const TSymbolUniqueId gl_SampleID = TSymbolUniqueId(2931);
static constexpr const TSymbolUniqueId gl_SampleIDES3_2 = TSymbolUniqueId(2932);
static constexpr const TSymbolUniqueId gl_SamplePosition = TSymbolUniqueId(2933);
static constexpr const TSymbolUniqueId gl_SamplePositionES3_2 = TSymbolUniqueId(2934);
static constexpr const TSymbolUniqueId gl_SampleMaskIn = TSymbolUniqueId(2935);
static constexpr const TSymbolUniqueId gl_SampleMaskInES3_2 = TSymbolUniqueId(2936);
static constexpr const TSymbolUniqueId gl_SampleMask = TSymbolUniqueId(2937);
static constexpr const TSymbolUniqueId gl_SampleMaskES3_2 = TSymbolUniqueId(2938);
static constexpr const TSymbolUniqueId gl_CullDistance = TSymbolUniqueId(2939);
static constexpr const TSymbolUniqueId gl_ClipDistance = TSymbolUniqueId(2940);
static constexpr const TSymbolUniqueId gl_Position = TSymbolUniqueId(2941);
static constexpr const TSymbolUniqueId gl_PointSize = TSymbolUniqueId(2942);
static constexpr const TSymbolUniqueId gl_InstanceID = TSymbolUniqueId(2943);
static constexpr const TSymbolUniqueId gl_InstanceIndex = TSymbolUniqueId(2944);
static constexpr const TSymbolUniqueId gl_VertexID = TSymbolUniqueId(2945);
static constexpr const TSymbolUniqueId gl_VertexIndex = TSymbolUniqueId(2946);
static constexpr const TSymbolUniqueId gl_ViewportIndex = TSymbolUniqueId(2947);
static constexpr const TSymbolUniqueId gl_LayerVS = TSymbolUniqueId(2948);
static constexpr const TSymbolUniqueId gl_DrawID = TSymbolUniqueId(2949);
static constexpr const TSymbolUniqueId gl_BaseVertex = TSymbolUniqueId(2950);
static constexpr const TSymbolUniqueId gl_BaseInstance = TSymbolUniqueId(2951);
static constexpr const TSymbolUniqueId angle_BaseVertex = TSymbolUniqueId(2952);
static constexpr const TSymbolUniqueId angle_BaseInstance = TSymbolUniqueId(2953);
static constexpr const TSymbolUniqueId gl_ClipDistanceAPPLE = TSymbolUniqueId(2954);
static constexpr const TSymbolUniqueId gl_CullDistanceEXT = TSymbolUniqueId(2955);
static constexpr const TSymbolUniqueId gl_NumWorkGroups = TSymbolUniqueId(2956);
static constexpr const TSymbolUniqueId gl_WorkGroupSize = TSymbolUniqueId(2957);
static constexpr const TSymbolUniqueId gl_WorkGroupID = TSymbolUniqueId(2958);
static constexpr const TSymbolUniqueId gl_LocalInvocationID = TSymbolUniqueId(2959);
static constexpr const TSymbolUniqueId gl_GlobalInvocationID = TSymbolUniqueId(2960);
static constexpr const TSymbolUniqueId gl_LocalInvocationIndex = TSymbolUniqueId(2961);
static constexpr const TSymbolUniqueId gl_PrimitiveIDIn = TSymbolUniqueId(2962);
static constexpr const TSymbolUniqueId gl_PrimitiveIDInES3_2 = TSymbolUniqueId(2963);
static constexpr const TSymbolUniqueId gl_InvocationID = TSymbolUniqueId(2964);
static constexpr const TSymbolUniqueId gl_InvocationIDES3_2 = TSymbolUniqueId(2965);
static constexpr const TSymbolUniqueId gl_PrimitiveIDGS = TSymbolUniqueId(2966);
static constexpr const TSymbolUniqueId gl_PrimitiveIDGSES3_2 = TSymbolUniqueId(2967);
static constexpr const TSymbolUniqueId gl_LayerGS = TSymbolUniqueId(2968);
static constexpr const TSymbolUniqueId gl_LayerGSES3_2 = TSymbolUniqueId(2969);
static constexpr const TSymbolUniqueId gl_PerVertex = TSymbolUniqueId(2970);
static constexpr const TSymbolUniqueId gl_PerVertexES3_2 = TSymbolUniqueId(2971);
static constexpr const TSymbolUniqueId gl_in = TSymbolUniqueId(2972);
static constexpr const TSymbolUniqueId gl_inES3_2 = TSymbolUniqueId(2973);
static constexpr const TSymbolUniqueId gl_PerVertexOutBlock = TSymbolUniqueId(2974);
static constexpr const TSymbolUniqueId gl_PerVertexOutBlockES3_2 = TSymbolUniqueId(2975);
static constexpr const TSymbolUniqueId gl_PositionGS = TSymbolUniqueId(2976);
static constexpr const TSymbolUniqueId gl_PositionGSES3_2 = TSymbolUniqueId(2977);
static constexpr const TSymbolUniqueId gl_PatchVerticesInTCS = TSymbolUniqueId(2978);
static constexpr const TSymbolUniqueId gl_PatchVerticesInTCSES3_2 = TSymbolUniqueId(2979);
static constexpr const TSymbolUniqueId gl_InvocationIDTCS = TSymbolUniqueId(2980);
static constexpr const TSymbolUniqueId gl_InvocationIDTCSES3_2 = TSymbolUniqueId(2981);
static constexpr const TSymbolUniqueId gl_PrimitiveIDTCS = TSymbolUniqueId(2982);
static constexpr const TSymbolUniqueId gl_PrimitiveIDTCSES3_2 = TSymbolUniqueId(2983);
static constexpr const TSymbolUniqueId gl_TessLevelOuterTCS = TSymbolUniqueId(2984);
static constexpr const TSymbolUniqueId gl_TessLevelOuterTCSES3_2 = TSymbolUniqueId(2985);
static constexpr const TSymbolUniqueId gl_TessLevelInnerTCS = TSymbolUniqueId(2986);
static constexpr const TSymbolUniqueId gl_TessLevelInnerTCSES3_2 = TSymbolUniqueId(2987);
static constexpr const TSymbolUniqueId gl_PerVertexTCS = TSymbolUniqueId(2988);
static constexpr const TSymbolUniqueId gl_PerVertexTCSES3_2 = TSymbolUniqueId(2989);
static constexpr const TSymbolUniqueId gl_inTCS = TSymbolUniqueId(2990);
static constexpr const TSymbolUniqueId gl_inTCSES3_2 = TSymbolUniqueId(2991);
static constexpr const TSymbolUniqueId gl_outTCS = TSymbolUniqueId(2992);
static constexpr const TSymbolUniqueId gl_outTCSES3_2 = TSymbolUniqueId(2993);
static constexpr const TSymbolUniqueId gl_PerVertexOutTcsBlock = TSymbolUniqueId(2994);
static constexpr const TSymbolUniqueId gl_PerVertexOutTcsBlockES3_2 = TSymbolUniqueId(2995);
static constexpr const TSymbolUniqueId gl_PositionTCS = TSymbolUniqueId(2996);
static constexpr const TSymbolUniqueId gl_PositionTCSES3_2 = TSymbolUniqueId(2997);
static constexpr const TSymbolUniqueId gl_PatchVerticesInTES = TSymbolUniqueId(2998);
static constexpr const TSymbolUniqueId gl_PatchVerticesInTESES3_2 = TSymbolUniqueId(2999);
static constexpr const TSymbolUniqueId gl_PrimitiveIDTES = TSymbolUniqueId(3000);
static constexpr const TSymbolUniqueId gl_PrimitiveIDTESES3_2 = TSymbolUniqueId(3001);
static constexpr const TSymbolUniqueId gl_TessCoord = TSymbolUniqueId(3002);
static constexpr const TSymbolUniqueId gl_TessLevelOuterTES = TSymbolUniqueId(3003);
static constexpr const TSymbolUniqueId gl_TessLevelOuterTESES3_2 = TSymbolUniqueId(3004);
static constexpr const TSymbolUniqueId gl_TessLevelInnerTES = TSymbolUniqueId(3005);
static constexpr const TSymbolUniqueId gl_TessLevelInnerTESES3_2 = TSymbolUniqueId(3006);
static constexpr const TSymbolUniqueId gl_PerVertexTES = TSymbolUniqueId(3007);
static constexpr const TSymbolUniqueId gl_PerVertexTESES3_2 = TSymbolUniqueId(3008);
static constexpr const TSymbolUniqueId gl_inTES = TSymbolUniqueId(3009);
static constexpr const TSymbolUniqueId gl_inTESES3_2 = TSymbolUniqueId(3010);
static constexpr const TSymbolUniqueId gl_outTES = TSymbolUniqueId(3011);
static constexpr const TSymbolUniqueId gl_outTESES3_2 = TSymbolUniqueId(3012);
static constexpr const TSymbolUniqueId gl_PerVertexOutTesBlock = TSymbolUniqueId(3013);
static constexpr const TSymbolUniqueId gl_PerVertexOutTesBlockES3_2 = TSymbolUniqueId(3014);
static constexpr const TSymbolUniqueId gl_PositionTES = TSymbolUniqueId(3015);
static constexpr const TSymbolUniqueId gl_PositionTESES3_2 = TSymbolUniqueId(3016);
static constexpr const TSymbolUniqueId gl_ViewID_OVR = TSymbolUniqueId(3017);
}; // class BuiltInId
......@@ -4764,28 +4852,42 @@ const TVariable *gl_HelperInvocation();
const TVariable *gl_InstanceID();
const TVariable *gl_InstanceIndex();
const TVariable *gl_InvocationID();
const TVariable *gl_InvocationIDES3_2();
const TVariable *gl_InvocationIDTCS();
const TVariable *gl_InvocationIDTCSES3_2();
const TVariable *gl_LastFragColor();
const TVariable *gl_LastFragColorARM();
const TVariable *gl_Layer();
const TVariable *gl_LayerES3_2();
const TVariable *gl_LayerGS();
const TVariable *gl_LayerGSES3_2();
const TVariable *gl_LayerVS();
const TVariable *gl_LocalInvocationID();
const TVariable *gl_LocalInvocationIndex();
const TVariable *gl_NumSamples();
const TVariable *gl_NumSamplesES3_2();
const TVariable *gl_NumWorkGroups();
const TVariable *gl_PatchVerticesInTCS();
const TVariable *gl_PatchVerticesInTCSES3_2();
const TVariable *gl_PatchVerticesInTES();
const TVariable *gl_PatchVerticesInTESES3_2();
const TVariable *gl_PointCoord();
const TVariable *gl_PointSize();
const TVariable *gl_Position();
const TVariable *gl_PrimitiveID();
const TVariable *gl_PrimitiveIDES3_2();
const TVariable *gl_PrimitiveIDGS();
const TVariable *gl_PrimitiveIDGSES3_2();
const TVariable *gl_PrimitiveIDIn();
const TVariable *gl_PrimitiveIDInES3_2();
const TVariable *gl_PrimitiveIDTCS();
const TVariable *gl_PrimitiveIDTCSES3_2();
const TVariable *gl_PrimitiveIDTES();
const TVariable *gl_PrimitiveIDTESES3_2();
const TVariable *gl_SampleID();
const TVariable *gl_SampleIDES3_2();
const TVariable *gl_SamplePosition();
const TVariable *gl_SamplePositionES3_2();
const TVariable *gl_SecondaryFragColorEXT();
const TVariable *gl_TessCoord();
const TVariable *gl_VertexID();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment