Commit bd924af1 by Jiawei Shao Committed by Commit Bot

ES31: Remove support of GL_OES_geometry_shader in compiler

This patch intends to remove the support of GL_OES_geometry_shader in ANGLE compiler. To make the implementation simpler, currently we decide to only support "GL_EXT_geometry_shader" as the extension string of geometry shader in ANGLE. This patch also updates all the related shaders in angle_unittests into R"()" format. BUG=angleproject:1941 TEST=angle_unittests Change-Id: Ife9858abeedfb46b02c5c2fb1cda16fa27198511 Reviewed-on: https://chromium-review.googlesource.com/773451 Commit-Queue: Corentin Wallez <cwallez@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org>
parent f15f9cec
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
// Version number for shader translation API. // Version number for shader translation API.
// It is incremented every time the API changes. // It is incremented every time the API changes.
#define ANGLE_SH_VERSION 192 #define ANGLE_SH_VERSION 193
enum ShShaderSpec enum ShShaderSpec
{ {
...@@ -300,7 +300,7 @@ struct ShBuiltInResources ...@@ -300,7 +300,7 @@ struct ShBuiltInResources
int ARM_shader_framebuffer_fetch; int ARM_shader_framebuffer_fetch;
int OVR_multiview; int OVR_multiview;
int EXT_YUV_target; int EXT_YUV_target;
int OES_geometry_shader; int EXT_geometry_shader;
// Set to 1 to enable replacing GL_EXT_draw_buffers #extension directives // Set to 1 to enable replacing GL_EXT_draw_buffers #extension directives
// with GL_NV_draw_buffers in ESSL output. This flag can be used to emulate // with GL_NV_draw_buffers in ESSL output. This flag can be used to emulate
...@@ -426,7 +426,7 @@ struct ShBuiltInResources ...@@ -426,7 +426,7 @@ struct ShBuiltInResources
// maximum point size (higher limit from ALIASED_POINT_SIZE_RANGE) // maximum point size (higher limit from ALIASED_POINT_SIZE_RANGE)
float MaxPointSize; float MaxPointSize;
// OES_geometry_shader constants // EXT_geometry_shader constants
int MaxGeometryUniformComponents; int MaxGeometryUniformComponents;
int MaxGeometryUniformBlocks; int MaxGeometryUniformBlocks;
int MaxGeometryInputComponents; int MaxGeometryInputComponents;
......
...@@ -63,7 +63,7 @@ void GenerateResources(ShBuiltInResources *resources) ...@@ -63,7 +63,7 @@ void GenerateResources(ShBuiltInResources *resources)
resources->OES_standard_derivatives = 0; resources->OES_standard_derivatives = 0;
resources->OES_EGL_image_external = 0; resources->OES_EGL_image_external = 0;
resources->OES_geometry_shader = 1; resources->EXT_geometry_shader = 1;
} }
int main(int argc, char *argv[]) int main(int argc, char *argv[])
...@@ -270,11 +270,11 @@ int main(int argc, char *argv[]) ...@@ -270,11 +270,11 @@ int main(int argc, char *argv[])
} }
compiler = computeCompiler; compiler = computeCompiler;
break; break;
case GL_GEOMETRY_SHADER_OES: case GL_GEOMETRY_SHADER_EXT:
if (geometryCompiler == 0) if (geometryCompiler == 0)
{ {
geometryCompiler = geometryCompiler =
sh::ConstructCompiler(GL_GEOMETRY_SHADER_OES, spec, output, &resources); sh::ConstructCompiler(GL_GEOMETRY_SHADER_EXT, spec, output, &resources);
} }
compiler = geometryCompiler; compiler = geometryCompiler;
break; break;
...@@ -402,7 +402,7 @@ sh::GLenum FindShaderType(const char *fileName) ...@@ -402,7 +402,7 @@ sh::GLenum FindShaderType(const char *fileName)
if (strncmp(ext, ".comp", 5) == 0) if (strncmp(ext, ".comp", 5) == 0)
return GL_COMPUTE_SHADER; return GL_COMPUTE_SHADER;
if (strncmp(ext, ".geom", 5) == 0) if (strncmp(ext, ".geom", 5) == 0)
return GL_GEOMETRY_SHADER_OES; return GL_GEOMETRY_SHADER_EXT;
} }
return GL_FRAGMENT_SHADER; return GL_FRAGMENT_SHADER;
......
...@@ -710,7 +710,7 @@ enum TQualifier ...@@ -710,7 +710,7 @@ enum TQualifier
EvqRestrict, EvqRestrict,
EvqVolatile, EvqVolatile,
// GLSL ES 3.1 extension OES_geometry_shader qualifiers // GLSL ES 3.1 extension EXT_geometry_shader qualifiers
EvqGeometryIn, EvqGeometryIn,
EvqGeometryOut, EvqGeometryOut,
EvqPerVertexIn, // gl_in EvqPerVertexIn, // gl_in
...@@ -814,7 +814,7 @@ struct TLayoutQualifier ...@@ -814,7 +814,7 @@ struct TLayoutQualifier
1; 1;
} }
bool isLocalSizeEqual(const sh::WorkGroupSize &localSizeIn) const bool isLocalSizeEqual(const WorkGroupSize &localSizeIn) const
{ {
return localSize.isWorkGroupSizeMatching(localSizeIn); return localSize.isWorkGroupSizeMatching(localSizeIn);
} }
...@@ -825,7 +825,7 @@ struct TLayoutQualifier ...@@ -825,7 +825,7 @@ struct TLayoutQualifier
TLayoutBlockStorage blockStorage; TLayoutBlockStorage blockStorage;
// Compute shader layout qualifiers. // Compute shader layout qualifiers.
sh::WorkGroupSize localSize; WorkGroupSize localSize;
int binding; int binding;
int offset; int offset;
......
...@@ -38,7 +38,7 @@ BlockLayoutType GetBlockLayoutType(TLayoutBlockStorage blockStorage) ...@@ -38,7 +38,7 @@ BlockLayoutType GetBlockLayoutType(TLayoutBlockStorage blockStorage)
} }
} }
// TODO(jiawei.shao@intel.com): implement GL_OES_shader_io_blocks. // TODO(jiawei.shao@intel.com): implement GL_EXT_shader_io_blocks.
BlockType GetBlockType(TQualifier qualifier) BlockType GetBlockType(TQualifier qualifier)
{ {
switch (qualifier) switch (qualifier)
...@@ -517,7 +517,7 @@ void CollectVariablesTraverser::visitSymbol(TIntermSymbol *symbol) ...@@ -517,7 +517,7 @@ void CollectVariablesTraverser::visitSymbol(TIntermSymbol *symbol)
recordBuiltInVaryingUsed("gl_PrimitiveIDIn", &mPrimitiveIDInAdded, mInputVaryings); recordBuiltInVaryingUsed("gl_PrimitiveIDIn", &mPrimitiveIDInAdded, mInputVaryings);
break; break;
case EvqPrimitiveID: case EvqPrimitiveID:
if (mShaderType == GL_GEOMETRY_SHADER_OES) if (mShaderType == GL_GEOMETRY_SHADER_EXT)
{ {
recordBuiltInVaryingUsed("gl_PrimitiveID", &mPrimitiveIDAdded, mOutputVaryings); recordBuiltInVaryingUsed("gl_PrimitiveID", &mPrimitiveIDAdded, mOutputVaryings);
} }
...@@ -528,7 +528,7 @@ void CollectVariablesTraverser::visitSymbol(TIntermSymbol *symbol) ...@@ -528,7 +528,7 @@ void CollectVariablesTraverser::visitSymbol(TIntermSymbol *symbol)
} }
break; break;
case EvqLayer: case EvqLayer:
if (mShaderType == GL_GEOMETRY_SHADER_OES) if (mShaderType == GL_GEOMETRY_SHADER_EXT)
{ {
recordBuiltInVaryingUsed("gl_Layer", &mLayerAdded, mOutputVaryings); recordBuiltInVaryingUsed("gl_Layer", &mLayerAdded, mOutputVaryings);
} }
...@@ -646,7 +646,7 @@ Varying CollectVariablesTraverser::recordVarying(const TIntermSymbol &variable) ...@@ -646,7 +646,7 @@ Varying CollectVariablesTraverser::recordVarying(const TIntermSymbol &variable)
return varying; return varying;
} }
// TODO(jiawei.shao@intel.com): implement GL_OES_shader_io_blocks. // TODO(jiawei.shao@intel.com): implement GL_EXT_shader_io_blocks.
void CollectVariablesTraverser::recordInterfaceBlock(const TString &instanceName, void CollectVariablesTraverser::recordInterfaceBlock(const TString &instanceName,
const TType &interfaceBlockType, const TType &interfaceBlockType,
InterfaceBlock *interfaceBlock) const InterfaceBlock *interfaceBlock) const
...@@ -726,7 +726,7 @@ bool CollectVariablesTraverser::visitDeclaration(Visit, TIntermDeclaration *node ...@@ -726,7 +726,7 @@ bool CollectVariablesTraverser::visitDeclaration(Visit, TIntermDeclaration *node
continue; continue;
} }
// TODO(jiawei.shao@intel.com): implement GL_OES_shader_io_blocks. // TODO(jiawei.shao@intel.com): implement GL_EXT_shader_io_blocks.
if (typedNode.getBasicType() == EbtInterfaceBlock) if (typedNode.getBasicType() == EbtInterfaceBlock)
{ {
InterfaceBlock interfaceBlock; InterfaceBlock interfaceBlock;
...@@ -779,7 +779,7 @@ bool CollectVariablesTraverser::visitDeclaration(Visit, TIntermDeclaration *node ...@@ -779,7 +779,7 @@ bool CollectVariablesTraverser::visitDeclaration(Visit, TIntermDeclaration *node
} }
// TODO(jiawei.shao@intel.com): add search on mInBlocks and mOutBlocks when implementing // TODO(jiawei.shao@intel.com): add search on mInBlocks and mOutBlocks when implementing
// GL_OES_shader_io_blocks. // GL_EXT_shader_io_blocks.
InterfaceBlock *CollectVariablesTraverser::findNamedInterfaceBlock(const TString &blockName) const InterfaceBlock *CollectVariablesTraverser::findNamedInterfaceBlock(const TString &blockName) const
{ {
InterfaceBlock *namedBlock = FindVariable(blockName, mUniformBlocks); InterfaceBlock *namedBlock = FindVariable(blockName, mUniformBlocks);
......
...@@ -157,7 +157,7 @@ int GetMaxUniformVectorsForShaderType(GLenum shaderType, const ShBuiltInResource ...@@ -157,7 +157,7 @@ int GetMaxUniformVectorsForShaderType(GLenum shaderType, const ShBuiltInResource
// TODO (jiawei.shao@intel.com): check if we need finer-grained component counting // TODO (jiawei.shao@intel.com): check if we need finer-grained component counting
case GL_COMPUTE_SHADER: case GL_COMPUTE_SHADER:
return resources.MaxComputeUniformComponents / 4; return resources.MaxComputeUniformComponents / 4;
case GL_GEOMETRY_SHADER_OES: case GL_GEOMETRY_SHADER_EXT:
return resources.MaxGeometryUniformComponents / 4; return resources.MaxGeometryUniformComponents / 4;
default: default:
UNREACHABLE(); UNREACHABLE();
...@@ -380,7 +380,7 @@ void TCompiler::setASTMetadata(const TParseContext &parseContext) ...@@ -380,7 +380,7 @@ void TCompiler::setASTMetadata(const TParseContext &parseContext)
// Highp might have been auto-enabled based on shader version // Highp might have been auto-enabled based on shader version
fragmentPrecisionHigh = parseContext.getFragmentPrecisionHigh(); fragmentPrecisionHigh = parseContext.getFragmentPrecisionHigh();
if (shaderType == GL_GEOMETRY_SHADER_OES) if (shaderType == GL_GEOMETRY_SHADER_EXT)
{ {
mGeometryShaderInputPrimitiveType = parseContext.getGeometryShaderInputPrimitiveType(); mGeometryShaderInputPrimitiveType = parseContext.getGeometryShaderInputPrimitiveType();
mGeometryShaderOutputPrimitiveType = parseContext.getGeometryShaderOutputPrimitiveType(); mGeometryShaderOutputPrimitiveType = parseContext.getGeometryShaderOutputPrimitiveType();
...@@ -711,7 +711,7 @@ bool TCompiler::InitBuiltInSymbolTable(const ShBuiltInResources &resources) ...@@ -711,7 +711,7 @@ bool TCompiler::InitBuiltInSymbolTable(const ShBuiltInResources &resources)
break; break;
case GL_VERTEX_SHADER: case GL_VERTEX_SHADER:
case GL_COMPUTE_SHADER: case GL_COMPUTE_SHADER:
case GL_GEOMETRY_SHADER_OES: case GL_GEOMETRY_SHADER_EXT:
symbolTable.setDefaultPrecision(EbtInt, EbpHigh); symbolTable.setDefaultPrecision(EbtInt, EbpHigh);
symbolTable.setDefaultPrecision(EbtFloat, EbpHigh); symbolTable.setDefaultPrecision(EbtFloat, EbpHigh);
break; break;
...@@ -778,7 +778,7 @@ void TCompiler::setResourceString() ...@@ -778,7 +778,7 @@ void TCompiler::setResourceString()
<< ":ARM_shader_framebuffer_fetch:" << compileResources.ARM_shader_framebuffer_fetch << ":ARM_shader_framebuffer_fetch:" << compileResources.ARM_shader_framebuffer_fetch
<< ":OVR_multiview:" << compileResources.OVR_multiview << ":OVR_multiview:" << compileResources.OVR_multiview
<< ":EXT_YUV_target:" << compileResources.EXT_YUV_target << ":EXT_YUV_target:" << compileResources.EXT_YUV_target
<< ":OES_geometry_shader:" << compileResources.OES_geometry_shader << ":EXT_geometry_shader:" << compileResources.EXT_geometry_shader
<< ":MaxVertexOutputVectors:" << compileResources.MaxVertexOutputVectors << ":MaxVertexOutputVectors:" << compileResources.MaxVertexOutputVectors
<< ":MaxFragmentInputVectors:" << compileResources.MaxFragmentInputVectors << ":MaxFragmentInputVectors:" << compileResources.MaxFragmentInputVectors
<< ":MinProgramTexelOffset:" << compileResources.MinProgramTexelOffset << ":MinProgramTexelOffset:" << compileResources.MinProgramTexelOffset
...@@ -1092,7 +1092,7 @@ void TCompiler::useAllMembersInUnusedStandardAndSharedBlocks(TIntermBlock *root) ...@@ -1092,7 +1092,7 @@ void TCompiler::useAllMembersInUnusedStandardAndSharedBlocks(TIntermBlock *root)
void TCompiler::initializeOutputVariables(TIntermBlock *root) void TCompiler::initializeOutputVariables(TIntermBlock *root)
{ {
InitVariableList list; InitVariableList list;
if (shaderType == GL_VERTEX_SHADER || shaderType == GL_GEOMETRY_SHADER_OES) if (shaderType == GL_VERTEX_SHADER || shaderType == GL_GEOMETRY_SHADER_EXT)
{ {
for (auto var : outputVaryings) for (auto var : outputVaryings)
{ {
......
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
OP(NV_shader_framebuffer_fetch) \ OP(NV_shader_framebuffer_fetch) \
OP(OES_EGL_image_external) \ OP(OES_EGL_image_external) \
OP(OES_EGL_image_external_essl3) \ OP(OES_EGL_image_external_essl3) \
OP(OES_geometry_shader) \
OP(OES_standard_derivatives) \ OP(OES_standard_derivatives) \
OP(OVR_multiview) OP(OVR_multiview)
......
...@@ -31,7 +31,6 @@ enum class TExtension ...@@ -31,7 +31,6 @@ enum class TExtension
NV_shader_framebuffer_fetch, NV_shader_framebuffer_fetch,
OES_EGL_image_external, OES_EGL_image_external,
OES_EGL_image_external_essl3, OES_EGL_image_external_essl3,
OES_geometry_shader,
OES_standard_derivatives, OES_standard_derivatives,
OVR_multiview OVR_multiview
}; };
......
...@@ -733,9 +733,9 @@ void InsertBuiltInFunctions(sh::GLenum type, ...@@ -733,9 +733,9 @@ void InsertBuiltInFunctions(sh::GLenum type,
voidType, "groupMemoryBarrier"); voidType, "groupMemoryBarrier");
} }
if (type == GL_GEOMETRY_SHADER_OES) if (type == GL_GEOMETRY_SHADER_EXT)
{ {
TExtension extension = TExtension::OES_geometry_shader; TExtension extension = TExtension::EXT_geometry_shader;
symbolTable.insertBuiltInFunctionNoParametersExt(ESSL3_1_BUILTINS, extension, EOpEmitVertex, symbolTable.insertBuiltInFunctionNoParametersExt(ESSL3_1_BUILTINS, extension, EOpEmitVertex,
voidType, "EmitVertex"); voidType, "EmitVertex");
symbolTable.insertBuiltInFunctionNoParametersExt(ESSL3_1_BUILTINS, extension, symbolTable.insertBuiltInFunctionNoParametersExt(ESSL3_1_BUILTINS, extension,
...@@ -844,9 +844,9 @@ void InsertBuiltInFunctions(sh::GLenum type, ...@@ -844,9 +844,9 @@ void InsertBuiltInFunctions(sh::GLenum type,
symbolTable.insertConstInt(ESSL3_1_BUILTINS, "gl_MaxAtomicCounterBufferSize", symbolTable.insertConstInt(ESSL3_1_BUILTINS, "gl_MaxAtomicCounterBufferSize",
resources.MaxAtomicCounterBufferSize, EbpMedium); resources.MaxAtomicCounterBufferSize, EbpMedium);
if (resources.OES_geometry_shader) if (resources.EXT_geometry_shader)
{ {
TExtension ext = TExtension::OES_geometry_shader; TExtension ext = TExtension::EXT_geometry_shader;
symbolTable.insertConstIntExt(ESSL3_1_BUILTINS, ext, "gl_MaxGeometryInputComponents", symbolTable.insertConstIntExt(ESSL3_1_BUILTINS, ext, "gl_MaxGeometryInputComponents",
resources.MaxGeometryInputComponents, EbpMedium); resources.MaxGeometryInputComponents, EbpMedium);
symbolTable.insertConstIntExt(ESSL3_1_BUILTINS, ext, "gl_MaxGeometryOutputComponents", symbolTable.insertConstIntExt(ESSL3_1_BUILTINS, ext, "gl_MaxGeometryOutputComponents",
...@@ -963,9 +963,9 @@ void IdentifyBuiltIns(sh::GLenum type, ...@@ -963,9 +963,9 @@ void IdentifyBuiltIns(sh::GLenum type,
TType(EbtFloat, EbpMedium, EvqLastFragColor, 4)); TType(EbtFloat, EbpMedium, EvqLastFragColor, 4));
} }
if (resources.OES_geometry_shader) if (resources.EXT_geometry_shader)
{ {
TExtension extension = TExtension::OES_geometry_shader; TExtension extension = TExtension::EXT_geometry_shader;
symbolTable.insertVariableExt(ESSL3_1_BUILTINS, extension, "gl_PrimitiveID", symbolTable.insertVariableExt(ESSL3_1_BUILTINS, extension, "gl_PrimitiveID",
TType(EbtInt, EbpHigh, EvqPrimitiveID, 1)); TType(EbtInt, EbpHigh, EvqPrimitiveID, 1));
symbolTable.insertVariableExt(ESSL3_1_BUILTINS, extension, "gl_Layer", symbolTable.insertVariableExt(ESSL3_1_BUILTINS, extension, "gl_Layer",
...@@ -1009,12 +1009,12 @@ void IdentifyBuiltIns(sh::GLenum type, ...@@ -1009,12 +1009,12 @@ void IdentifyBuiltIns(sh::GLenum type,
break; break;
} }
case GL_GEOMETRY_SHADER_OES: case GL_GEOMETRY_SHADER_EXT:
{ {
TExtension extension = TExtension::OES_geometry_shader; TExtension extension = TExtension::EXT_geometry_shader;
// Add built-in interface block gl_PerVertex and the built-in array gl_in. // 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. // TODO(jiawei.shao@intel.com): implement GL_EXT_geometry_point_size.
TFieldList *glPerVertexFieldList = new TFieldList(); TFieldList *glPerVertexFieldList = new TFieldList();
TSourceLoc zeroSourceLoc = {0, 0, 0, 0}; TSourceLoc zeroSourceLoc = {0, 0, 0, 0};
TField *glPositionField = new TField(new TType(EbtFloat, EbpHigh, EvqPosition, 4), TField *glPositionField = new TField(new TType(EbtFloat, EbpHigh, EvqPosition, 4),
...@@ -1117,9 +1117,8 @@ void InitExtensionBehavior(const ShBuiltInResources &resources, TExtensionBehavi ...@@ -1117,9 +1117,8 @@ void InitExtensionBehavior(const ShBuiltInResources &resources, TExtensionBehavi
{ {
extBehavior[TExtension::EXT_YUV_target] = EBhUndefined; extBehavior[TExtension::EXT_YUV_target] = EBhUndefined;
} }
if (resources.OES_geometry_shader) if (resources.EXT_geometry_shader)
{ {
extBehavior[TExtension::OES_geometry_shader] = EBhUndefined;
extBehavior[TExtension::EXT_geometry_shader] = EBhUndefined; extBehavior[TExtension::EXT_geometry_shader] = EBhUndefined;
} }
} }
......
...@@ -1263,14 +1263,6 @@ template bool TParseContext::checkCanUseOneOfExtensions( ...@@ -1263,14 +1263,6 @@ template bool TParseContext::checkCanUseOneOfExtensions(
bool TParseContext::checkCanUseExtension(const TSourceLoc &line, TExtension extension) bool TParseContext::checkCanUseExtension(const TSourceLoc &line, TExtension extension)
{ {
ASSERT(extension != TExtension::UNDEFINED); ASSERT(extension != TExtension::UNDEFINED);
ASSERT(extension != TExtension::EXT_geometry_shader);
if (extension == TExtension::OES_geometry_shader)
{
// OES_geometry_shader and EXT_geometry_shader are always interchangeable.
constexpr std::array<TExtension, 2u> extensions{
{TExtension::EXT_geometry_shader, TExtension::OES_geometry_shader}};
return checkCanUseOneOfExtensions(line, extensions);
}
return checkCanUseOneOfExtensions(line, std::array<TExtension, 1u>{{extension}}); return checkCanUseOneOfExtensions(line, std::array<TExtension, 1u>{{extension}});
} }
...@@ -3628,7 +3620,7 @@ TIntermTyped *TParseContext::addConstructor(TIntermSequence *arguments, ...@@ -3628,7 +3620,7 @@ TIntermTyped *TParseContext::addConstructor(TIntermSequence *arguments,
// //
// Interface/uniform blocks // Interface/uniform blocks
// TODO(jiawei.shao@intel.com): implement GL_OES_shader_io_blocks. // TODO(jiawei.shao@intel.com): implement GL_EXT_shader_io_blocks.
// //
TIntermDeclaration *TParseContext::addInterfaceBlock( TIntermDeclaration *TParseContext::addInterfaceBlock(
const TTypeQualifierBuilder &typeQualifierBuilder, const TTypeQualifierBuilder &typeQualifierBuilder,
...@@ -3955,7 +3947,7 @@ TIntermTyped *TParseContext::addIndexExpression(TIntermTyped *baseExpression, ...@@ -3955,7 +3947,7 @@ TIntermTyped *TParseContext::addIndexExpression(TIntermTyped *baseExpression,
if (baseExpression->getQualifier() == EvqPerVertexIn) if (baseExpression->getQualifier() == EvqPerVertexIn)
{ {
ASSERT(mShaderType == GL_GEOMETRY_SHADER_OES); ASSERT(mShaderType == GL_GEOMETRY_SHADER_EXT);
if (mGeometryShaderInputPrimitiveType == EptUndefined) if (mGeometryShaderInputPrimitiveType == EptUndefined)
{ {
error(location, "missing input primitive declaration before indexing gl_in.", "["); error(location, "missing input primitive declaration before indexing gl_in.", "[");
...@@ -3973,7 +3965,7 @@ TIntermTyped *TParseContext::addIndexExpression(TIntermTyped *baseExpression, ...@@ -3973,7 +3965,7 @@ TIntermTyped *TParseContext::addIndexExpression(TIntermTyped *baseExpression,
{ {
if (baseExpression->isInterfaceBlock()) if (baseExpression->isInterfaceBlock())
{ {
// TODO(jiawei.shao@intel.com): implement GL_OES_shader_io_blocks. // TODO(jiawei.shao@intel.com): implement GL_EXT_shader_io_blocks.
switch (baseExpression->getQualifier()) switch (baseExpression->getQualifier())
{ {
case EvqPerVertexIn: case EvqPerVertexIn:
...@@ -4345,44 +4337,44 @@ TLayoutQualifier TParseContext::parseLayoutQualifier(const TString &qualifierTyp ...@@ -4345,44 +4337,44 @@ TLayoutQualifier TParseContext::parseLayoutQualifier(const TString &qualifierTyp
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310); checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
qualifier.imageInternalFormat = EiifR32UI; qualifier.imageInternalFormat = EiifR32UI;
} }
else if (qualifierType == "points" && mShaderType == GL_GEOMETRY_SHADER_OES && else if (qualifierType == "points" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::OES_geometry_shader)) checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
{ {
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310); checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
qualifier.primitiveType = EptPoints; qualifier.primitiveType = EptPoints;
} }
else if (qualifierType == "lines" && mShaderType == GL_GEOMETRY_SHADER_OES && else if (qualifierType == "lines" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::OES_geometry_shader)) checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
{ {
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310); checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
qualifier.primitiveType = EptLines; qualifier.primitiveType = EptLines;
} }
else if (qualifierType == "lines_adjacency" && mShaderType == GL_GEOMETRY_SHADER_OES && else if (qualifierType == "lines_adjacency" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::OES_geometry_shader)) checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
{ {
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310); checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
qualifier.primitiveType = EptLinesAdjacency; qualifier.primitiveType = EptLinesAdjacency;
} }
else if (qualifierType == "triangles" && mShaderType == GL_GEOMETRY_SHADER_OES && else if (qualifierType == "triangles" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::OES_geometry_shader)) checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
{ {
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310); checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
qualifier.primitiveType = EptTriangles; qualifier.primitiveType = EptTriangles;
} }
else if (qualifierType == "triangles_adjacency" && mShaderType == GL_GEOMETRY_SHADER_OES && else if (qualifierType == "triangles_adjacency" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::OES_geometry_shader)) checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
{ {
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310); checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
qualifier.primitiveType = EptTrianglesAdjacency; qualifier.primitiveType = EptTrianglesAdjacency;
} }
else if (qualifierType == "line_strip" && mShaderType == GL_GEOMETRY_SHADER_OES && else if (qualifierType == "line_strip" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::OES_geometry_shader)) checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
{ {
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310); checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
qualifier.primitiveType = EptLineStrip; qualifier.primitiveType = EptLineStrip;
} }
else if (qualifierType == "triangle_strip" && mShaderType == GL_GEOMETRY_SHADER_OES && else if (qualifierType == "triangle_strip" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::OES_geometry_shader)) checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
{ {
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310); checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
qualifier.primitiveType = EptTriangleStrip; qualifier.primitiveType = EptTriangleStrip;
...@@ -4540,13 +4532,13 @@ TLayoutQualifier TParseContext::parseLayoutQualifier(const TString &qualifierTyp ...@@ -4540,13 +4532,13 @@ TLayoutQualifier TParseContext::parseLayoutQualifier(const TString &qualifierTyp
parseNumViews(intValue, intValueLine, intValueString, &qualifier.numViews); parseNumViews(intValue, intValueLine, intValueString, &qualifier.numViews);
} }
} }
else if (qualifierType == "invocations" && mShaderType == GL_GEOMETRY_SHADER_OES && else if (qualifierType == "invocations" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::OES_geometry_shader)) checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
{ {
parseInvocations(intValue, intValueLine, intValueString, &qualifier.invocations); parseInvocations(intValue, intValueLine, intValueString, &qualifier.invocations);
} }
else if (qualifierType == "max_vertices" && mShaderType == GL_GEOMETRY_SHADER_OES && else if (qualifierType == "max_vertices" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::OES_geometry_shader)) checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
{ {
parseMaxVertices(intValue, intValueLine, intValueString, &qualifier.maxVertices); parseMaxVertices(intValue, intValueLine, intValueString, &qualifier.maxVertices);
} }
...@@ -4611,7 +4603,7 @@ TStorageQualifierWrapper *TParseContext::parseInQualifier(const TSourceLoc &loc) ...@@ -4611,7 +4603,7 @@ TStorageQualifierWrapper *TParseContext::parseInQualifier(const TSourceLoc &loc)
{ {
return new TStorageQualifierWrapper(EvqComputeIn, loc); return new TStorageQualifierWrapper(EvqComputeIn, loc);
} }
case GL_GEOMETRY_SHADER_OES: case GL_GEOMETRY_SHADER_EXT:
{ {
return new TStorageQualifierWrapper(EvqGeometryIn, loc); return new TStorageQualifierWrapper(EvqGeometryIn, loc);
} }
...@@ -4652,7 +4644,7 @@ TStorageQualifierWrapper *TParseContext::parseOutQualifier(const TSourceLoc &loc ...@@ -4652,7 +4644,7 @@ TStorageQualifierWrapper *TParseContext::parseOutQualifier(const TSourceLoc &loc
error(loc, "storage qualifier isn't supported in compute shaders", "out"); error(loc, "storage qualifier isn't supported in compute shaders", "out");
return new TStorageQualifierWrapper(EvqLast, loc); return new TStorageQualifierWrapper(EvqLast, loc);
} }
case GL_GEOMETRY_SHADER_OES: case GL_GEOMETRY_SHADER_EXT:
{ {
return new TStorageQualifierWrapper(EvqGeometryOut, loc); return new TStorageQualifierWrapper(EvqGeometryOut, loc);
} }
...@@ -5816,7 +5808,7 @@ TIntermTyped *TParseContext::addMethod(TFunction *fnCall, ...@@ -5816,7 +5808,7 @@ TIntermTyped *TParseContext::addMethod(TFunction *fnCall,
else if (typedThis->getQualifier() == EvqPerVertexIn && else if (typedThis->getQualifier() == EvqPerVertexIn &&
mGeometryShaderInputPrimitiveType == EptUndefined) mGeometryShaderInputPrimitiveType == EptUndefined)
{ {
ASSERT(mShaderType == GL_GEOMETRY_SHADER_OES); ASSERT(mShaderType == GL_GEOMETRY_SHADER_EXT);
error(loc, "missing input primitive declaration before calling length on gl_in", "length"); error(loc, "missing input primitive declaration before calling length on gl_in", "length");
} }
else else
......
...@@ -203,7 +203,7 @@ void InitBuiltInResources(ShBuiltInResources *resources) ...@@ -203,7 +203,7 @@ void InitBuiltInResources(ShBuiltInResources *resources)
resources->ARM_shader_framebuffer_fetch = 0; resources->ARM_shader_framebuffer_fetch = 0;
resources->OVR_multiview = 0; resources->OVR_multiview = 0;
resources->EXT_YUV_target = 0; resources->EXT_YUV_target = 0;
resources->OES_geometry_shader = 0; resources->EXT_geometry_shader = 0;
resources->NV_draw_buffers = 0; resources->NV_draw_buffers = 0;
......
...@@ -92,7 +92,7 @@ void TranslatorESSL::translate(TIntermBlock *root, ...@@ -92,7 +92,7 @@ void TranslatorESSL::translate(TIntermBlock *root,
<< ", local_size_z=" << localSize[2] << ") in;\n"; << ", local_size_z=" << localSize[2] << ") in;\n";
} }
if (getShaderType() == GL_GEOMETRY_SHADER_OES) if (getShaderType() == GL_GEOMETRY_SHADER_EXT)
{ {
WriteGeometryShaderLayoutQualifiers( WriteGeometryShaderLayoutQualifiers(
sink, getGeometryShaderInputPrimitiveType(), getGeometryShaderInvocations(), sink, getGeometryShaderInputPrimitiveType(), getGeometryShaderInvocations(),
...@@ -148,13 +148,13 @@ void TranslatorESSL::writeExtensionBehavior(ShCompileOptions compileOptions) ...@@ -148,13 +148,13 @@ void TranslatorESSL::writeExtensionBehavior(ShCompileOptions compileOptions)
sink << "#extension GL_NV_viewport_array2 : require\n"; sink << "#extension GL_NV_viewport_array2 : require\n";
} }
} }
else if (iter->first == TExtension::OES_geometry_shader) else if (iter->first == TExtension::EXT_geometry_shader)
{ {
sink << "#ifdef GL_OES_geometry_shader\n" sink << "#ifdef GL_EXT_geometry_shader\n"
<< "#extension GL_OES_geometry_shader : " << GetBehaviorString(iter->second)
<< "\n"
<< "#elif defined GL_EXT_geometry_shader\n"
<< "#extension GL_EXT_geometry_shader : " << GetBehaviorString(iter->second) << "#extension GL_EXT_geometry_shader : " << GetBehaviorString(iter->second)
<< "\n"
<< "#elif defined GL_OES_geometry_shader\n"
<< "#extension GL_OES_geometry_shader : " << GetBehaviorString(iter->second)
<< "\n"; << "\n";
if (iter->second == EBhRequire) if (iter->second == EBhRequire)
{ {
......
...@@ -202,7 +202,7 @@ void TranslatorGLSL::translate(TIntermBlock *root, ...@@ -202,7 +202,7 @@ void TranslatorGLSL::translate(TIntermBlock *root,
<< ", local_size_z=" << localSize[2] << ") in;\n"; << ", local_size_z=" << localSize[2] << ") in;\n";
} }
if (getShaderType() == GL_GEOMETRY_SHADER_OES) if (getShaderType() == GL_GEOMETRY_SHADER_EXT)
{ {
WriteGeometryShaderLayoutQualifiers( WriteGeometryShaderLayoutQualifiers(
sink, getGeometryShaderInputPrimitiveType(), getGeometryShaderInvocations(), sink, getGeometryShaderInputPrimitiveType(), getGeometryShaderInvocations(),
...@@ -271,7 +271,7 @@ void TranslatorGLSL::writeExtensionBehavior(TIntermNode *root, ShCompileOptions ...@@ -271,7 +271,7 @@ void TranslatorGLSL::writeExtensionBehavior(TIntermNode *root, ShCompileOptions
<< "\n"; << "\n";
} }
if (iter.first == TExtension::OES_geometry_shader) if (iter.first == TExtension::EXT_geometry_shader)
{ {
sink << "#extension GL_ARB_geometry_shader4 : " << GetBehaviorString(iter.second) sink << "#extension GL_ARB_geometry_shader4 : " << GetBehaviorString(iter.second)
<< "\n"; << "\n";
......
...@@ -41,7 +41,7 @@ int GetLocationCount(const TIntermSymbol *varying, bool ignoreVaryingArraySize) ...@@ -41,7 +41,7 @@ int GetLocationCount(const TIntermSymbol *varying, bool ignoreVaryingArraySize)
} }
return totalLocation; return totalLocation;
} }
// [GL_OES_shader_io_blocks SPEC Chapter 4.4.1] // [GL_EXT_shader_io_blocks SPEC Chapter 4.4.1]
// Geometry shader inputs, tessellation control shader inputs and outputs, and tessellation // Geometry shader inputs, tessellation control shader inputs and outputs, and tessellation
// evaluation inputs all have an additional level of arrayness relative to other shader inputs // evaluation inputs all have an additional level of arrayness relative to other shader inputs
// and outputs. This outer array level is removed from the type before considering how many // and outputs. This outer array level is removed from the type before considering how many
...@@ -49,7 +49,7 @@ int GetLocationCount(const TIntermSymbol *varying, bool ignoreVaryingArraySize) ...@@ -49,7 +49,7 @@ int GetLocationCount(const TIntermSymbol *varying, bool ignoreVaryingArraySize)
else if (ignoreVaryingArraySize) else if (ignoreVaryingArraySize)
{ {
// Array-of-arrays cannot be inputs or outputs of a geometry shader. // Array-of-arrays cannot be inputs or outputs of a geometry shader.
// (GL_OES_geometry_shader SPEC issues(5)) // (GL_EXT_geometry_shader SPEC issues(5))
ASSERT(!varyingType.isArrayOfArrays()); ASSERT(!varyingType.isArrayOfArrays());
return varyingType.getSecondarySize(); return varyingType.getSecondarySize();
} }
...@@ -157,7 +157,7 @@ void ValidateVaryingLocationsTraverser::validate(TDiagnostics *diagnostics) ...@@ -157,7 +157,7 @@ void ValidateVaryingLocationsTraverser::validate(TDiagnostics *diagnostics)
ASSERT(diagnostics); ASSERT(diagnostics);
ValidateShaderInterface(diagnostics, mInputVaryingsWithLocation, ValidateShaderInterface(diagnostics, mInputVaryingsWithLocation,
mShaderType == GL_GEOMETRY_SHADER_OES); mShaderType == GL_GEOMETRY_SHADER_EXT);
ValidateShaderInterface(diagnostics, mOutputVaryingsWithLocation, false); ValidateShaderInterface(diagnostics, mOutputVaryingsWithLocation, false);
} }
......
...@@ -527,7 +527,7 @@ bool IsVarying(TQualifier qualifier) ...@@ -527,7 +527,7 @@ bool IsVarying(TQualifier qualifier)
bool IsGeometryShaderInput(GLenum shaderType, TQualifier qualifier) bool IsGeometryShaderInput(GLenum shaderType, TQualifier qualifier)
{ {
return (qualifier == EvqGeometryIn) || return (qualifier == EvqGeometryIn) ||
((shaderType == GL_GEOMETRY_SHADER_OES) && IsInterpolationIn(qualifier)); ((shaderType == GL_GEOMETRY_SHADER_EXT) && IsInterpolationIn(qualifier));
} }
InterpolationType GetInterpolationType(TQualifier qualifier) InterpolationType GetInterpolationType(TQualifier qualifier)
......
...@@ -132,8 +132,7 @@ Compiler::Compiler(rx::GLImplFactory *implFactory, const ContextState &state) ...@@ -132,8 +132,7 @@ Compiler::Compiler(rx::GLImplFactory *implFactory, const ContextState &state)
} }
// Geometry Shader constants // Geometry Shader constants
// TODO(jiawei.shao@intel.com): use EXT_geometry_shader everywhere in compiler. mResources.EXT_geometry_shader = extensions.geometryShader;
mResources.OES_geometry_shader = extensions.geometryShader;
mResources.MaxGeometryUniformComponents = caps.maxGeometryUniformComponents; mResources.MaxGeometryUniformComponents = caps.maxGeometryUniformComponents;
mResources.MaxGeometryUniformBlocks = caps.maxGeometryUniformBlocks; mResources.MaxGeometryUniformBlocks = caps.maxGeometryUniformBlocks;
mResources.MaxGeometryInputComponents = caps.maxGeometryInputComponents; mResources.MaxGeometryInputComponents = caps.maxGeometryInputComponents;
......
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