Refer to GLSL extensions through TExtension enum
Extensions are now referred to by enum values instead of strings most
of the time. This gets rid of unnecessary copying of strings. The code
is easier to work with than before as typoing the extension enum names
will be caught by the compiler.
BUG=angleproject:2147
TEST=angle_unittests
Change-Id: Ifa61b9f86ef03211188fc23bc23a5ce4e4d8c390
Reviewed-on: https://chromium-review.googlesource.com/571002
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/compiler/translator/Initialize.cpp b/src/compiler/translator/Initialize.cpp
index f72a6eb..bf026be 100644
--- a/src/compiler/translator/Initialize.cpp
+++ b/src/compiler/translator/Initialize.cpp
@@ -302,13 +302,13 @@
/* The *Grad* variants are new to both vertex and fragment shaders; the fragment
* shader specific pieces are added separately below.
*/
- symbolTable.insertBuiltIn(ESSL1_BUILTINS, "GL_EXT_shader_texture_lod", float4,
+ symbolTable.insertBuiltIn(ESSL1_BUILTINS, TExtension::EXT_shader_texture_lod, float4,
"texture2DGradEXT", sampler2D, float2, float2, float2);
- symbolTable.insertBuiltIn(ESSL1_BUILTINS, "GL_EXT_shader_texture_lod", float4,
+ symbolTable.insertBuiltIn(ESSL1_BUILTINS, TExtension::EXT_shader_texture_lod, float4,
"texture2DProjGradEXT", sampler2D, float3, float2, float2);
- symbolTable.insertBuiltIn(ESSL1_BUILTINS, "GL_EXT_shader_texture_lod", float4,
+ symbolTable.insertBuiltIn(ESSL1_BUILTINS, TExtension::EXT_shader_texture_lod, float4,
"texture2DProjGradEXT", sampler2D, float4, float2, float2);
- symbolTable.insertBuiltIn(ESSL1_BUILTINS, "GL_EXT_shader_texture_lod", float4,
+ symbolTable.insertBuiltIn(ESSL1_BUILTINS, TExtension::EXT_shader_texture_lod, float4,
"textureCubeGradEXT", samplerCube, float3, float3, float3);
}
@@ -324,23 +324,23 @@
if (resources.OES_standard_derivatives)
{
- symbolTable.insertBuiltInOp(ESSL1_BUILTINS, EOpDFdx, "GL_OES_standard_derivatives",
- genType, genType);
- symbolTable.insertBuiltInOp(ESSL1_BUILTINS, EOpDFdy, "GL_OES_standard_derivatives",
- genType, genType);
- symbolTable.insertBuiltInOp(ESSL1_BUILTINS, EOpFwidth, "GL_OES_standard_derivatives",
- genType, genType);
+ symbolTable.insertBuiltInOp(ESSL1_BUILTINS, EOpDFdx,
+ TExtension::OES_standard_derivatives, genType, genType);
+ symbolTable.insertBuiltInOp(ESSL1_BUILTINS, EOpDFdy,
+ TExtension::OES_standard_derivatives, genType, genType);
+ symbolTable.insertBuiltInOp(ESSL1_BUILTINS, EOpFwidth,
+ TExtension::OES_standard_derivatives, genType, genType);
}
if (resources.EXT_shader_texture_lod)
{
- symbolTable.insertBuiltIn(ESSL1_BUILTINS, "GL_EXT_shader_texture_lod", float4,
+ symbolTable.insertBuiltIn(ESSL1_BUILTINS, TExtension::EXT_shader_texture_lod, float4,
"texture2DLodEXT", sampler2D, float2, float1);
- symbolTable.insertBuiltIn(ESSL1_BUILTINS, "GL_EXT_shader_texture_lod", float4,
+ symbolTable.insertBuiltIn(ESSL1_BUILTINS, TExtension::EXT_shader_texture_lod, float4,
"texture2DProjLodEXT", sampler2D, float3, float1);
- symbolTable.insertBuiltIn(ESSL1_BUILTINS, "GL_EXT_shader_texture_lod", float4,
+ symbolTable.insertBuiltIn(ESSL1_BUILTINS, TExtension::EXT_shader_texture_lod, float4,
"texture2DProjLodEXT", sampler2D, float4, float1);
- symbolTable.insertBuiltIn(ESSL1_BUILTINS, "GL_EXT_shader_texture_lod", float4,
+ symbolTable.insertBuiltIn(ESSL1_BUILTINS, TExtension::EXT_shader_texture_lod, float4,
"textureCubeLodEXT", samplerCube, float3, float1);
}
}
@@ -395,19 +395,19 @@
{
const TType *samplerExternal2DY2YEXT = TCache::getType(EbtSamplerExternal2DY2YEXT);
- symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "texture",
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, TExtension::EXT_YUV_target, float4, "texture",
samplerExternal2DY2YEXT, float2);
- symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "textureProj",
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, TExtension::EXT_YUV_target, float4, "textureProj",
samplerExternal2DY2YEXT, float3);
- symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "textureProj",
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, TExtension::EXT_YUV_target, float4, "textureProj",
samplerExternal2DY2YEXT, float4);
const TType *yuvCscStandardEXT = TCache::getType(EbtYuvCscStandardEXT);
- symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float3, "rgb_2_yuv", float3,
- yuvCscStandardEXT);
- symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float3, "yuv_2_rgb", float3,
- yuvCscStandardEXT);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, TExtension::EXT_YUV_target, float3, "rgb_2_yuv",
+ float3, yuvCscStandardEXT);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, TExtension::EXT_YUV_target, float3, "yuv_2_rgb",
+ float3, yuvCscStandardEXT);
}
if (type == GL_FRAGMENT_SHADER)
@@ -437,12 +437,12 @@
{
const TType *samplerExternal2DY2YEXT = TCache::getType(EbtSamplerExternal2DY2YEXT);
- symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "texture",
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, TExtension::EXT_YUV_target, float4, "texture",
samplerExternal2DY2YEXT, float2, float1);
- symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "textureProj",
- samplerExternal2DY2YEXT, float3, float1);
- symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "textureProj",
- samplerExternal2DY2YEXT, float4, float1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, TExtension::EXT_YUV_target, float4,
+ "textureProj", samplerExternal2DY2YEXT, float3, float1);
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, TExtension::EXT_YUV_target, float4,
+ "textureProj", samplerExternal2DY2YEXT, float4, float1);
}
}
@@ -487,7 +487,7 @@
{
const TType *samplerExternal2DY2YEXT = TCache::getType(EbtSamplerExternal2DY2YEXT);
- symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", int2, "textureSize",
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, TExtension::EXT_YUV_target, int2, "textureSize",
samplerExternal2DY2YEXT, int1);
}
@@ -575,7 +575,7 @@
{
const TType *samplerExternal2DY2YEXT = TCache::getType(EbtSamplerExternal2DY2YEXT);
- symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "texelFetch",
+ symbolTable.insertBuiltIn(ESSL3_BUILTINS, TExtension::EXT_YUV_target, float4, "texelFetch",
samplerExternal2DY2YEXT, int2, int1);
}
@@ -678,7 +678,7 @@
if (type == GL_GEOMETRY_SHADER_OES)
{
- const char *extension = "GL_OES_geometry_shader";
+ TExtension extension = TExtension::OES_geometry_shader;
symbolTable.insertBuiltInFunctionNoParametersExt(ESSL3_1_BUILTINS, extension, EOpEmitVertex,
voidType, "EmitVertex");
symbolTable.insertBuiltInFunctionNoParametersExt(ESSL3_1_BUILTINS, extension,
@@ -727,7 +727,7 @@
EbpMedium);
if (resources.EXT_blend_func_extended)
{
- symbolTable.insertConstIntExt(COMMON_BUILTINS, "GL_EXT_blend_func_extended",
+ symbolTable.insertConstIntExt(COMMON_BUILTINS, TExtension::EXT_blend_func_extended,
"gl_MaxDualSourceDrawBuffersEXT",
resources.MaxDualSourceDrawBuffers, EbpMedium);
}
@@ -789,7 +789,7 @@
if (resources.OES_geometry_shader)
{
- const char *ext = "GL_OES_geometry_shader";
+ TExtension ext = TExtension::OES_geometry_shader;
symbolTable.insertConstIntExt(ESSL3_1_BUILTINS, ext, "gl_MaxGeometryInputComponents",
resources.MaxGeometryInputComponents, EbpMedium);
symbolTable.insertConstIntExt(ESSL3_1_BUILTINS, ext, "gl_MaxGeometryOutputComponents",
@@ -823,12 +823,12 @@
if (resources.OVR_multiview && type != GL_COMPUTE_SHADER)
{
- symbolTable.insertVariableExt(ESSL3_BUILTINS, "GL_OVR_multiview", "gl_ViewID_OVR",
+ symbolTable.insertVariableExt(ESSL3_BUILTINS, TExtension::OVR_multiview, "gl_ViewID_OVR",
TType(EbtUInt, EbpHigh, EvqViewIDOVR, 1));
// ESSL 1.00 doesn't have unsigned integers, so gl_ViewID_OVR is a signed integer in ESSL
// 1.00. This is specified in the WEBGL_multiview spec.
- symbolTable.insertVariableExt(ESSL1_BUILTINS, "GL_OVR_multiview", "gl_ViewID_OVR",
+ symbolTable.insertVariableExt(ESSL1_BUILTINS, TExtension::OVR_multiview, "gl_ViewID_OVR",
TType(EbtInt, EbpHigh, EvqViewIDOVR, 1));
}
@@ -859,18 +859,18 @@
if (resources.EXT_blend_func_extended)
{
symbolTable.insertVariableExt(
- ESSL1_BUILTINS, "GL_EXT_blend_func_extended", "gl_SecondaryFragColorEXT",
+ ESSL1_BUILTINS, TExtension::EXT_blend_func_extended, "gl_SecondaryFragColorEXT",
TType(EbtFloat, EbpMedium, EvqSecondaryFragColorEXT, 4));
TType secondaryFragData(EbtFloat, EbpMedium, EvqSecondaryFragDataEXT, 4, 1);
secondaryFragData.makeArray(resources.MaxDualSourceDrawBuffers);
- symbolTable.insertVariableExt(ESSL1_BUILTINS, "GL_EXT_blend_func_extended",
+ symbolTable.insertVariableExt(ESSL1_BUILTINS, TExtension::EXT_blend_func_extended,
"gl_SecondaryFragDataEXT", secondaryFragData);
}
if (resources.EXT_frag_depth)
{
symbolTable.insertVariableExt(
- ESSL1_BUILTINS, "GL_EXT_frag_depth", "gl_FragDepthEXT",
+ ESSL1_BUILTINS, TExtension::EXT_frag_depth, "gl_FragDepthEXT",
TType(EbtFloat, resources.FragmentPrecisionHigh ? EbpHigh : EbpMedium,
EvqFragDepthEXT, 1));
}
@@ -885,28 +885,30 @@
if (resources.EXT_shader_framebuffer_fetch)
{
- symbolTable.insertVariableExt(ESSL1_BUILTINS, "GL_EXT_shader_framebuffer_fetch",
+ symbolTable.insertVariableExt(ESSL1_BUILTINS,
+ TExtension::EXT_shader_framebuffer_fetch,
"gl_LastFragData", lastFragData);
}
else if (resources.NV_shader_framebuffer_fetch)
{
- symbolTable.insertVariableExt(ESSL1_BUILTINS, "GL_NV_shader_framebuffer_fetch",
- "gl_LastFragColor",
- TType(EbtFloat, EbpMedium, EvqLastFragColor, 4));
- symbolTable.insertVariableExt(ESSL1_BUILTINS, "GL_NV_shader_framebuffer_fetch",
+ symbolTable.insertVariableExt(
+ ESSL1_BUILTINS, TExtension::NV_shader_framebuffer_fetch, "gl_LastFragColor",
+ TType(EbtFloat, EbpMedium, EvqLastFragColor, 4));
+ symbolTable.insertVariableExt(ESSL1_BUILTINS,
+ TExtension::NV_shader_framebuffer_fetch,
"gl_LastFragData", lastFragData);
}
}
else if (resources.ARM_shader_framebuffer_fetch)
{
- symbolTable.insertVariableExt(ESSL1_BUILTINS, "GL_ARM_shader_framebuffer_fetch",
- "gl_LastFragColorARM",
- TType(EbtFloat, EbpMedium, EvqLastFragColor, 4));
+ symbolTable.insertVariableExt(
+ ESSL1_BUILTINS, TExtension::ARM_shader_framebuffer_fetch, "gl_LastFragColorARM",
+ TType(EbtFloat, EbpMedium, EvqLastFragColor, 4));
}
if (resources.OES_geometry_shader)
{
- const char *extension = "GL_OES_geometry_shader";
+ TExtension extension = TExtension::OES_geometry_shader;
symbolTable.insertVariableExt(ESSL3_1_BUILTINS, extension, "gl_PrimitiveID",
TType(EbtInt, EbpHigh, EvqPrimitiveID, 1));
symbolTable.insertVariableExt(ESSL3_1_BUILTINS, extension, "gl_Layer",
@@ -950,7 +952,7 @@
case GL_GEOMETRY_SHADER_OES:
{
- const char *extension = "GL_OES_geometry_shader";
+ TExtension extension = TExtension::OES_geometry_shader;
// Add built-in interface block gl_PerVertex and the built-in array gl_in.
// TODO(jiawei.shao@intel.com): implement GL_OES_geometry_point_size.
@@ -996,40 +998,64 @@
void InitExtensionBehavior(const ShBuiltInResources &resources, TExtensionBehavior &extBehavior)
{
if (resources.OES_standard_derivatives)
- extBehavior["GL_OES_standard_derivatives"] = EBhUndefined;
+ {
+ extBehavior[TExtension::OES_standard_derivatives] = EBhUndefined;
+ }
if (resources.OES_EGL_image_external)
- extBehavior["GL_OES_EGL_image_external"] = EBhUndefined;
+ {
+ extBehavior[TExtension::OES_EGL_image_external] = EBhUndefined;
+ }
if (resources.OES_EGL_image_external_essl3)
- extBehavior["GL_OES_EGL_image_external_essl3"] = EBhUndefined;
+ {
+ extBehavior[TExtension::OES_EGL_image_external_essl3] = EBhUndefined;
+ }
if (resources.NV_EGL_stream_consumer_external)
- extBehavior["GL_NV_EGL_stream_consumer_external"] = EBhUndefined;
+ {
+ extBehavior[TExtension::NV_EGL_stream_consumer_external] = EBhUndefined;
+ }
if (resources.ARB_texture_rectangle)
- extBehavior["GL_ARB_texture_rectangle"] = EBhUndefined;
+ {
+ extBehavior[TExtension::ARB_texture_rectangle] = EBhUndefined;
+ }
if (resources.EXT_blend_func_extended)
- extBehavior["GL_EXT_blend_func_extended"] = EBhUndefined;
+ {
+ extBehavior[TExtension::EXT_blend_func_extended] = EBhUndefined;
+ }
if (resources.EXT_draw_buffers)
- extBehavior["GL_EXT_draw_buffers"] = EBhUndefined;
+ {
+ extBehavior[TExtension::EXT_draw_buffers] = EBhUndefined;
+ }
if (resources.EXT_frag_depth)
- extBehavior["GL_EXT_frag_depth"] = EBhUndefined;
+ {
+ extBehavior[TExtension::EXT_frag_depth] = EBhUndefined;
+ }
if (resources.EXT_shader_texture_lod)
- extBehavior["GL_EXT_shader_texture_lod"] = EBhUndefined;
+ {
+ extBehavior[TExtension::EXT_shader_texture_lod] = EBhUndefined;
+ }
if (resources.EXT_shader_framebuffer_fetch)
- extBehavior["GL_EXT_shader_framebuffer_fetch"] = EBhUndefined;
+ {
+ extBehavior[TExtension::EXT_shader_framebuffer_fetch] = EBhUndefined;
+ }
if (resources.NV_shader_framebuffer_fetch)
- extBehavior["GL_NV_shader_framebuffer_fetch"] = EBhUndefined;
+ {
+ extBehavior[TExtension::NV_shader_framebuffer_fetch] = EBhUndefined;
+ }
if (resources.ARM_shader_framebuffer_fetch)
- extBehavior["GL_ARM_shader_framebuffer_fetch"] = EBhUndefined;
+ {
+ extBehavior[TExtension::ARM_shader_framebuffer_fetch] = EBhUndefined;
+ }
if (resources.OVR_multiview)
{
- extBehavior["GL_OVR_multiview"] = EBhUndefined;
+ extBehavior[TExtension::OVR_multiview] = EBhUndefined;
}
if (resources.EXT_YUV_target)
{
- extBehavior["GL_EXT_YUV_target"] = EBhUndefined;
+ extBehavior[TExtension::EXT_YUV_target] = EBhUndefined;
}
if (resources.OES_geometry_shader)
{
- extBehavior["GL_OES_geometry_shader"] = EBhUndefined;
+ extBehavior[TExtension::OES_geometry_shader] = EBhUndefined;
}
}