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 @@
// Version number for shader translation API.
// It is incremented every time the API changes.
#define ANGLE_SH_VERSION 192
#define ANGLE_SH_VERSION 193
enum ShShaderSpec
{
......@@ -300,7 +300,7 @@ struct ShBuiltInResources
int ARM_shader_framebuffer_fetch;
int OVR_multiview;
int EXT_YUV_target;
int OES_geometry_shader;
int EXT_geometry_shader;
// 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
......@@ -426,7 +426,7 @@ struct ShBuiltInResources
// maximum point size (higher limit from ALIASED_POINT_SIZE_RANGE)
float MaxPointSize;
// OES_geometry_shader constants
// EXT_geometry_shader constants
int MaxGeometryUniformComponents;
int MaxGeometryUniformBlocks;
int MaxGeometryInputComponents;
......
......@@ -63,7 +63,7 @@ void GenerateResources(ShBuiltInResources *resources)
resources->OES_standard_derivatives = 0;
resources->OES_EGL_image_external = 0;
resources->OES_geometry_shader = 1;
resources->EXT_geometry_shader = 1;
}
int main(int argc, char *argv[])
......@@ -270,11 +270,11 @@ int main(int argc, char *argv[])
}
compiler = computeCompiler;
break;
case GL_GEOMETRY_SHADER_OES:
case GL_GEOMETRY_SHADER_EXT:
if (geometryCompiler == 0)
{
geometryCompiler =
sh::ConstructCompiler(GL_GEOMETRY_SHADER_OES, spec, output, &resources);
sh::ConstructCompiler(GL_GEOMETRY_SHADER_EXT, spec, output, &resources);
}
compiler = geometryCompiler;
break;
......@@ -402,7 +402,7 @@ sh::GLenum FindShaderType(const char *fileName)
if (strncmp(ext, ".comp", 5) == 0)
return GL_COMPUTE_SHADER;
if (strncmp(ext, ".geom", 5) == 0)
return GL_GEOMETRY_SHADER_OES;
return GL_GEOMETRY_SHADER_EXT;
}
return GL_FRAGMENT_SHADER;
......
......@@ -710,7 +710,7 @@ enum TQualifier
EvqRestrict,
EvqVolatile,
// GLSL ES 3.1 extension OES_geometry_shader qualifiers
// GLSL ES 3.1 extension EXT_geometry_shader qualifiers
EvqGeometryIn,
EvqGeometryOut,
EvqPerVertexIn, // gl_in
......@@ -814,7 +814,7 @@ struct TLayoutQualifier
1;
}
bool isLocalSizeEqual(const sh::WorkGroupSize &localSizeIn) const
bool isLocalSizeEqual(const WorkGroupSize &localSizeIn) const
{
return localSize.isWorkGroupSizeMatching(localSizeIn);
}
......@@ -825,7 +825,7 @@ struct TLayoutQualifier
TLayoutBlockStorage blockStorage;
// Compute shader layout qualifiers.
sh::WorkGroupSize localSize;
WorkGroupSize localSize;
int binding;
int offset;
......
......@@ -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)
{
switch (qualifier)
......@@ -517,7 +517,7 @@ void CollectVariablesTraverser::visitSymbol(TIntermSymbol *symbol)
recordBuiltInVaryingUsed("gl_PrimitiveIDIn", &mPrimitiveIDInAdded, mInputVaryings);
break;
case EvqPrimitiveID:
if (mShaderType == GL_GEOMETRY_SHADER_OES)
if (mShaderType == GL_GEOMETRY_SHADER_EXT)
{
recordBuiltInVaryingUsed("gl_PrimitiveID", &mPrimitiveIDAdded, mOutputVaryings);
}
......@@ -528,7 +528,7 @@ void CollectVariablesTraverser::visitSymbol(TIntermSymbol *symbol)
}
break;
case EvqLayer:
if (mShaderType == GL_GEOMETRY_SHADER_OES)
if (mShaderType == GL_GEOMETRY_SHADER_EXT)
{
recordBuiltInVaryingUsed("gl_Layer", &mLayerAdded, mOutputVaryings);
}
......@@ -646,7 +646,7 @@ Varying CollectVariablesTraverser::recordVarying(const TIntermSymbol &variable)
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,
const TType &interfaceBlockType,
InterfaceBlock *interfaceBlock) const
......@@ -726,7 +726,7 @@ bool CollectVariablesTraverser::visitDeclaration(Visit, TIntermDeclaration *node
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)
{
InterfaceBlock interfaceBlock;
......@@ -779,7 +779,7 @@ bool CollectVariablesTraverser::visitDeclaration(Visit, TIntermDeclaration *node
}
// 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 *namedBlock = FindVariable(blockName, mUniformBlocks);
......
......@@ -157,7 +157,7 @@ int GetMaxUniformVectorsForShaderType(GLenum shaderType, const ShBuiltInResource
// TODO (jiawei.shao@intel.com): check if we need finer-grained component counting
case GL_COMPUTE_SHADER:
return resources.MaxComputeUniformComponents / 4;
case GL_GEOMETRY_SHADER_OES:
case GL_GEOMETRY_SHADER_EXT:
return resources.MaxGeometryUniformComponents / 4;
default:
UNREACHABLE();
......@@ -380,7 +380,7 @@ void TCompiler::setASTMetadata(const TParseContext &parseContext)
// Highp might have been auto-enabled based on shader version
fragmentPrecisionHigh = parseContext.getFragmentPrecisionHigh();
if (shaderType == GL_GEOMETRY_SHADER_OES)
if (shaderType == GL_GEOMETRY_SHADER_EXT)
{
mGeometryShaderInputPrimitiveType = parseContext.getGeometryShaderInputPrimitiveType();
mGeometryShaderOutputPrimitiveType = parseContext.getGeometryShaderOutputPrimitiveType();
......@@ -711,7 +711,7 @@ bool TCompiler::InitBuiltInSymbolTable(const ShBuiltInResources &resources)
break;
case GL_VERTEX_SHADER:
case GL_COMPUTE_SHADER:
case GL_GEOMETRY_SHADER_OES:
case GL_GEOMETRY_SHADER_EXT:
symbolTable.setDefaultPrecision(EbtInt, EbpHigh);
symbolTable.setDefaultPrecision(EbtFloat, EbpHigh);
break;
......@@ -778,7 +778,7 @@ void TCompiler::setResourceString()
<< ":ARM_shader_framebuffer_fetch:" << compileResources.ARM_shader_framebuffer_fetch
<< ":OVR_multiview:" << compileResources.OVR_multiview
<< ":EXT_YUV_target:" << compileResources.EXT_YUV_target
<< ":OES_geometry_shader:" << compileResources.OES_geometry_shader
<< ":EXT_geometry_shader:" << compileResources.EXT_geometry_shader
<< ":MaxVertexOutputVectors:" << compileResources.MaxVertexOutputVectors
<< ":MaxFragmentInputVectors:" << compileResources.MaxFragmentInputVectors
<< ":MinProgramTexelOffset:" << compileResources.MinProgramTexelOffset
......@@ -1092,7 +1092,7 @@ void TCompiler::useAllMembersInUnusedStandardAndSharedBlocks(TIntermBlock *root)
void TCompiler::initializeOutputVariables(TIntermBlock *root)
{
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)
{
......
......@@ -26,7 +26,6 @@
OP(NV_shader_framebuffer_fetch) \
OP(OES_EGL_image_external) \
OP(OES_EGL_image_external_essl3) \
OP(OES_geometry_shader) \
OP(OES_standard_derivatives) \
OP(OVR_multiview)
......
......@@ -31,7 +31,6 @@ enum class TExtension
NV_shader_framebuffer_fetch,
OES_EGL_image_external,
OES_EGL_image_external_essl3,
OES_geometry_shader,
OES_standard_derivatives,
OVR_multiview
};
......
......@@ -733,9 +733,9 @@ void InsertBuiltInFunctions(sh::GLenum type,
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,
voidType, "EmitVertex");
symbolTable.insertBuiltInFunctionNoParametersExt(ESSL3_1_BUILTINS, extension,
......@@ -844,9 +844,9 @@ void InsertBuiltInFunctions(sh::GLenum type,
symbolTable.insertConstInt(ESSL3_1_BUILTINS, "gl_MaxAtomicCounterBufferSize",
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",
resources.MaxGeometryInputComponents, EbpMedium);
symbolTable.insertConstIntExt(ESSL3_1_BUILTINS, ext, "gl_MaxGeometryOutputComponents",
......@@ -963,9 +963,9 @@ void IdentifyBuiltIns(sh::GLenum type,
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",
TType(EbtInt, EbpHigh, EvqPrimitiveID, 1));
symbolTable.insertVariableExt(ESSL3_1_BUILTINS, extension, "gl_Layer",
......@@ -1009,12 +1009,12 @@ void IdentifyBuiltIns(sh::GLenum type,
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.
// 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();
TSourceLoc zeroSourceLoc = {0, 0, 0, 0};
TField *glPositionField = new TField(new TType(EbtFloat, EbpHigh, EvqPosition, 4),
......@@ -1117,9 +1117,8 @@ void InitExtensionBehavior(const ShBuiltInResources &resources, TExtensionBehavi
{
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;
}
}
......
......@@ -1263,14 +1263,6 @@ template bool TParseContext::checkCanUseOneOfExtensions(
bool TParseContext::checkCanUseExtension(const TSourceLoc &line, TExtension extension)
{
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}});
}
......@@ -3628,7 +3620,7 @@ TIntermTyped *TParseContext::addConstructor(TIntermSequence *arguments,
//
// 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(
const TTypeQualifierBuilder &typeQualifierBuilder,
......@@ -3955,7 +3947,7 @@ TIntermTyped *TParseContext::addIndexExpression(TIntermTyped *baseExpression,
if (baseExpression->getQualifier() == EvqPerVertexIn)
{
ASSERT(mShaderType == GL_GEOMETRY_SHADER_OES);
ASSERT(mShaderType == GL_GEOMETRY_SHADER_EXT);
if (mGeometryShaderInputPrimitiveType == EptUndefined)
{
error(location, "missing input primitive declaration before indexing gl_in.", "[");
......@@ -3973,7 +3965,7 @@ TIntermTyped *TParseContext::addIndexExpression(TIntermTyped *baseExpression,
{
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())
{
case EvqPerVertexIn:
......@@ -4345,44 +4337,44 @@ TLayoutQualifier TParseContext::parseLayoutQualifier(const TString &qualifierTyp
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
qualifier.imageInternalFormat = EiifR32UI;
}
else if (qualifierType == "points" && mShaderType == GL_GEOMETRY_SHADER_OES &&
checkCanUseExtension(qualifierTypeLine, TExtension::OES_geometry_shader))
else if (qualifierType == "points" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
{
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
qualifier.primitiveType = EptPoints;
}
else if (qualifierType == "lines" && mShaderType == GL_GEOMETRY_SHADER_OES &&
checkCanUseExtension(qualifierTypeLine, TExtension::OES_geometry_shader))
else if (qualifierType == "lines" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
{
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
qualifier.primitiveType = EptLines;
}
else if (qualifierType == "lines_adjacency" && mShaderType == GL_GEOMETRY_SHADER_OES &&
checkCanUseExtension(qualifierTypeLine, TExtension::OES_geometry_shader))
else if (qualifierType == "lines_adjacency" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
{
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
qualifier.primitiveType = EptLinesAdjacency;
}
else if (qualifierType == "triangles" && mShaderType == GL_GEOMETRY_SHADER_OES &&
checkCanUseExtension(qualifierTypeLine, TExtension::OES_geometry_shader))
else if (qualifierType == "triangles" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
{
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
qualifier.primitiveType = EptTriangles;
}
else if (qualifierType == "triangles_adjacency" && mShaderType == GL_GEOMETRY_SHADER_OES &&
checkCanUseExtension(qualifierTypeLine, TExtension::OES_geometry_shader))
else if (qualifierType == "triangles_adjacency" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
{
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
qualifier.primitiveType = EptTrianglesAdjacency;
}
else if (qualifierType == "line_strip" && mShaderType == GL_GEOMETRY_SHADER_OES &&
checkCanUseExtension(qualifierTypeLine, TExtension::OES_geometry_shader))
else if (qualifierType == "line_strip" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
{
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
qualifier.primitiveType = EptLineStrip;
}
else if (qualifierType == "triangle_strip" && mShaderType == GL_GEOMETRY_SHADER_OES &&
checkCanUseExtension(qualifierTypeLine, TExtension::OES_geometry_shader))
else if (qualifierType == "triangle_strip" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
{
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
qualifier.primitiveType = EptTriangleStrip;
......@@ -4540,13 +4532,13 @@ TLayoutQualifier TParseContext::parseLayoutQualifier(const TString &qualifierTyp
parseNumViews(intValue, intValueLine, intValueString, &qualifier.numViews);
}
}
else if (qualifierType == "invocations" && mShaderType == GL_GEOMETRY_SHADER_OES &&
checkCanUseExtension(qualifierTypeLine, TExtension::OES_geometry_shader))
else if (qualifierType == "invocations" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
{
parseInvocations(intValue, intValueLine, intValueString, &qualifier.invocations);
}
else if (qualifierType == "max_vertices" && mShaderType == GL_GEOMETRY_SHADER_OES &&
checkCanUseExtension(qualifierTypeLine, TExtension::OES_geometry_shader))
else if (qualifierType == "max_vertices" && mShaderType == GL_GEOMETRY_SHADER_EXT &&
checkCanUseExtension(qualifierTypeLine, TExtension::EXT_geometry_shader))
{
parseMaxVertices(intValue, intValueLine, intValueString, &qualifier.maxVertices);
}
......@@ -4611,7 +4603,7 @@ TStorageQualifierWrapper *TParseContext::parseInQualifier(const TSourceLoc &loc)
{
return new TStorageQualifierWrapper(EvqComputeIn, loc);
}
case GL_GEOMETRY_SHADER_OES:
case GL_GEOMETRY_SHADER_EXT:
{
return new TStorageQualifierWrapper(EvqGeometryIn, loc);
}
......@@ -4652,7 +4644,7 @@ TStorageQualifierWrapper *TParseContext::parseOutQualifier(const TSourceLoc &loc
error(loc, "storage qualifier isn't supported in compute shaders", "out");
return new TStorageQualifierWrapper(EvqLast, loc);
}
case GL_GEOMETRY_SHADER_OES:
case GL_GEOMETRY_SHADER_EXT:
{
return new TStorageQualifierWrapper(EvqGeometryOut, loc);
}
......@@ -5816,7 +5808,7 @@ TIntermTyped *TParseContext::addMethod(TFunction *fnCall,
else if (typedThis->getQualifier() == EvqPerVertexIn &&
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");
}
else
......
......@@ -203,7 +203,7 @@ void InitBuiltInResources(ShBuiltInResources *resources)
resources->ARM_shader_framebuffer_fetch = 0;
resources->OVR_multiview = 0;
resources->EXT_YUV_target = 0;
resources->OES_geometry_shader = 0;
resources->EXT_geometry_shader = 0;
resources->NV_draw_buffers = 0;
......
......@@ -92,7 +92,7 @@ void TranslatorESSL::translate(TIntermBlock *root,
<< ", local_size_z=" << localSize[2] << ") in;\n";
}
if (getShaderType() == GL_GEOMETRY_SHADER_OES)
if (getShaderType() == GL_GEOMETRY_SHADER_EXT)
{
WriteGeometryShaderLayoutQualifiers(
sink, getGeometryShaderInputPrimitiveType(), getGeometryShaderInvocations(),
......@@ -148,13 +148,13 @@ void TranslatorESSL::writeExtensionBehavior(ShCompileOptions compileOptions)
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"
<< "#extension GL_OES_geometry_shader : " << GetBehaviorString(iter->second)
<< "\n"
<< "#elif defined GL_EXT_geometry_shader\n"
sink << "#ifdef GL_EXT_geometry_shader\n"
<< "#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";
if (iter->second == EBhRequire)
{
......
......@@ -202,7 +202,7 @@ void TranslatorGLSL::translate(TIntermBlock *root,
<< ", local_size_z=" << localSize[2] << ") in;\n";
}
if (getShaderType() == GL_GEOMETRY_SHADER_OES)
if (getShaderType() == GL_GEOMETRY_SHADER_EXT)
{
WriteGeometryShaderLayoutQualifiers(
sink, getGeometryShaderInputPrimitiveType(), getGeometryShaderInvocations(),
......@@ -271,7 +271,7 @@ void TranslatorGLSL::writeExtensionBehavior(TIntermNode *root, ShCompileOptions
<< "\n";
}
if (iter.first == TExtension::OES_geometry_shader)
if (iter.first == TExtension::EXT_geometry_shader)
{
sink << "#extension GL_ARB_geometry_shader4 : " << GetBehaviorString(iter.second)
<< "\n";
......
......@@ -41,7 +41,7 @@ int GetLocationCount(const TIntermSymbol *varying, bool ignoreVaryingArraySize)
}
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
// 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
......@@ -49,7 +49,7 @@ int GetLocationCount(const TIntermSymbol *varying, bool ignoreVaryingArraySize)
else if (ignoreVaryingArraySize)
{
// 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());
return varyingType.getSecondarySize();
}
......@@ -157,7 +157,7 @@ void ValidateVaryingLocationsTraverser::validate(TDiagnostics *diagnostics)
ASSERT(diagnostics);
ValidateShaderInterface(diagnostics, mInputVaryingsWithLocation,
mShaderType == GL_GEOMETRY_SHADER_OES);
mShaderType == GL_GEOMETRY_SHADER_EXT);
ValidateShaderInterface(diagnostics, mOutputVaryingsWithLocation, false);
}
......
......@@ -527,7 +527,7 @@ bool IsVarying(TQualifier qualifier)
bool IsGeometryShaderInput(GLenum shaderType, TQualifier qualifier)
{
return (qualifier == EvqGeometryIn) ||
((shaderType == GL_GEOMETRY_SHADER_OES) && IsInterpolationIn(qualifier));
((shaderType == GL_GEOMETRY_SHADER_EXT) && IsInterpolationIn(qualifier));
}
InterpolationType GetInterpolationType(TQualifier qualifier)
......
......@@ -132,8 +132,7 @@ Compiler::Compiler(rx::GLImplFactory *implFactory, const ContextState &state)
}
// Geometry Shader constants
// TODO(jiawei.shao@intel.com): use EXT_geometry_shader everywhere in compiler.
mResources.OES_geometry_shader = extensions.geometryShader;
mResources.EXT_geometry_shader = extensions.geometryShader;
mResources.MaxGeometryUniformComponents = caps.maxGeometryUniformComponents;
mResources.MaxGeometryUniformBlocks = caps.maxGeometryUniformBlocks;
mResources.MaxGeometryInputComponents = caps.maxGeometryInputComponents;
......
......@@ -155,10 +155,10 @@ class CollectVariablesTestES31 : public CollectVariablesTest
}
};
class CollectVariablesOESGeometryShaderTest : public CollectVariablesTestES31
class CollectVariablesEXTGeometryShaderTest : public CollectVariablesTestES31
{
public:
CollectVariablesOESGeometryShaderTest(sh::GLenum shaderType)
CollectVariablesEXTGeometryShaderTest(sh::GLenum shaderType)
: CollectVariablesTestES31(shaderType)
{
}
......@@ -168,16 +168,16 @@ class CollectVariablesOESGeometryShaderTest : public CollectVariablesTestES31
{
ShBuiltInResources resources;
InitBuiltInResources(&resources);
resources.OES_geometry_shader = 1;
resources.EXT_geometry_shader = 1;
initTranslator(resources);
}
};
class CollectGeometryVariablesTest : public CollectVariablesOESGeometryShaderTest
class CollectGeometryVariablesTest : public CollectVariablesEXTGeometryShaderTest
{
public:
CollectGeometryVariablesTest() : CollectVariablesOESGeometryShaderTest(GL_GEOMETRY_SHADER_OES)
CollectGeometryVariablesTest() : CollectVariablesEXTGeometryShaderTest(GL_GEOMETRY_SHADER_EXT)
{
}
......@@ -188,7 +188,7 @@ class CollectGeometryVariablesTest : public CollectVariablesOESGeometryShaderTes
{
std::ostringstream sstream;
sstream << "#version 310 es\n"
<< "#extension GL_OES_geometry_shader : require\n"
<< "#extension GL_EXT_geometry_shader : require\n"
<< "layout (" << inputPrimitive << ") in;\n"
<< "layout (points, max_vertices = 2) out;\n"
<< inputVarying << functionBody;
......@@ -197,11 +197,11 @@ class CollectGeometryVariablesTest : public CollectVariablesOESGeometryShaderTes
}
};
class CollectFragmentVariablesOESGeometryShaderTest : public CollectVariablesOESGeometryShaderTest
class CollectFragmentVariablesEXTGeometryShaderTest : public CollectVariablesEXTGeometryShaderTest
{
public:
CollectFragmentVariablesOESGeometryShaderTest()
: CollectVariablesOESGeometryShaderTest(GL_FRAGMENT_SHADER)
CollectFragmentVariablesEXTGeometryShaderTest()
: CollectVariablesEXTGeometryShaderTest(GL_FRAGMENT_SHADER)
{
}
......@@ -938,7 +938,7 @@ TEST_F(CollectGeometryVariablesTest, CollectGLInFields)
{
const std::string &shaderString =
R"(#version 310 es
#extension GL_OES_geometry_shader : require
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 2) out;
......@@ -1009,7 +1009,7 @@ TEST_F(CollectGeometryVariablesTest, CollectPrimitiveIDIn)
{
const std::string &shaderString =
R"(#version 310 es
#extension GL_OES_geometry_shader : require
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 2) out;
void main()
......@@ -1041,7 +1041,7 @@ TEST_F(CollectGeometryVariablesTest, CollectInvocationID)
{
const std::string &shaderString =
R"(#version 310 es
#extension GL_OES_geometry_shader : require
#extension GL_EXT_geometry_shader : require
layout (points, invocations = 2) in;
layout (points, max_vertices = 2) out;
void main()
......@@ -1073,7 +1073,7 @@ TEST_F(CollectGeometryVariablesTest, CollectGLInIndexedByExpression)
{
const std::string &shaderString =
R"(#version 310 es
#extension GL_OES_geometry_shader : require
#extension GL_EXT_geometry_shader : require
layout (triangles, invocations = 2) in;
layout (points, max_vertices = 2) out;
void main()
......@@ -1102,14 +1102,14 @@ TEST_F(CollectGeometryVariablesTest, CollectGLInIndexedByExpression)
TEST_F(CollectGeometryVariablesTest, CollectPosition)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
" gl_Position = vec4(0.1, 0.2, 0.3, 1);\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 2) out;
void main()
{
gl_Position = vec4(0.1, 0.2, 0.3, 1);
})";
compile(shaderString);
......@@ -1133,14 +1133,14 @@ TEST_F(CollectGeometryVariablesTest, CollectPosition)
TEST_F(CollectGeometryVariablesTest, CollectPrimitiveID)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
" gl_PrimitiveID = 100;\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 2) out;
void main()
{
gl_PrimitiveID = 100;
})";
compile(shaderString);
......@@ -1164,14 +1164,14 @@ TEST_F(CollectGeometryVariablesTest, CollectPrimitiveID)
TEST_F(CollectGeometryVariablesTest, CollectLayer)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
" gl_Layer = 2;\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 2) out;
void main()
{
gl_Layer = 2;
})";
compile(shaderString);
......@@ -1192,11 +1192,11 @@ TEST_F(CollectGeometryVariablesTest, CollectLayer)
}
// Test collecting gl_PrimitiveID in a fragment shader.
TEST_F(CollectFragmentVariablesOESGeometryShaderTest, CollectPrimitiveID)
TEST_F(CollectFragmentVariablesEXTGeometryShaderTest, CollectPrimitiveID)
{
const std::string &shaderString =
R"(#version 310 es
#extension GL_OES_geometry_shader : require
#extension GL_EXT_geometry_shader : require
out int my_out;
......@@ -1223,11 +1223,11 @@ TEST_F(CollectFragmentVariablesOESGeometryShaderTest, CollectPrimitiveID)
}
// Test collecting gl_Layer in a fragment shader.
TEST_F(CollectFragmentVariablesOESGeometryShaderTest, CollectLayer)
TEST_F(CollectFragmentVariablesEXTGeometryShaderTest, CollectLayer)
{
const std::string &shaderString =
R"(#version 310 es
#extension GL_OES_geometry_shader : require
#extension GL_EXT_geometry_shader : require
out int my_out;
......@@ -1257,12 +1257,12 @@ TEST_F(CollectFragmentVariablesOESGeometryShaderTest, CollectLayer)
TEST_F(CollectVertexVariablesES31Test, CollectOutputWithLocation)
{
const std::string &shaderString =
"#version 310 es\n"
"out vec4 v_output1;\n"
"layout (location = 1) out vec4 v_output2;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
out vec4 v_output1;
layout (location = 1) out vec4 v_output2;
void main()
{
})";
compile(shaderString);
......@@ -1282,15 +1282,15 @@ TEST_F(CollectVertexVariablesES31Test, CollectOutputWithLocation)
TEST_F(CollectFragmentVariablesES31Test, CollectInputWithLocation)
{
const std::string &shaderString =
"#version 310 es\n"
"precision mediump float;\n"
"in vec4 f_input1;\n"
"layout (location = 1) in vec4 f_input2;\n"
"layout (location = 0) out vec4 o_color;\n"
"void main()\n"
"{\n"
" o_color = f_input2;\n"
"}\n";
R"(#version 310 es
precision mediump float;
in vec4 f_input1;
layout (location = 1) in vec4 f_input2;
layout (location = 0) out vec4 o_color;
void main()
{
o_color = f_input2;
})";
compile(shaderString);
......@@ -1311,7 +1311,7 @@ TEST_F(CollectGeometryVariablesTest, CollectInputs)
{
const std::string &shaderString =
R"(#version 310 es
#extension GL_OES_geometry_shader : require
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 2) out;
in vec4 texcoord1[];
......@@ -1384,7 +1384,7 @@ TEST_F(CollectGeometryVariablesTest, CollectInputsWithInterpolationQualifiers)
{
const std::string &kHeader =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n";
"#extension GL_EXT_geometry_shader : require\n";
const std::string &kLayout =
"layout (points) in;\n"
"layout (points, max_vertices = 2) out;\n";
......@@ -1422,7 +1422,7 @@ TEST_F(CollectGeometryVariablesTest, CollectOutputsWithInterpolationQualifiers)
{
const std::string &kHeader =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"#extension GL_EXT_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = 2) out;\n";
......@@ -1459,15 +1459,15 @@ TEST_F(CollectGeometryVariablesTest, CollectOutputsWithInterpolationQualifiers)
TEST_F(CollectGeometryVariablesTest, CollectOutputsWithInvariant)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = 2) out;\n"
"invariant out vec4 texcoord;\n"
"void main()\n"
"{\n"
" texcoord = vec4(1.0, 0.0, 0.0, 1.0);\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 2) out;
invariant out vec4 texcoord;
void main()
{
texcoord = vec4(1.0, 0.0, 0.0, 1.0);
})";
compile(shaderString);
......
......@@ -25,10 +25,10 @@ class GeometryShaderTest : public ShaderCompileTreeTest
protected:
void initResources(ShBuiltInResources *resources) override
{
resources->OES_geometry_shader = 1;
resources->EXT_geometry_shader = 1;
}
::GLenum getShaderType() const override { return GL_GEOMETRY_SHADER_OES; }
::GLenum getShaderType() const override { return GL_GEOMETRY_SHADER_EXT; }
ShShaderSpec getShaderSpec() const override { return SH_GLES3_1_SPEC; }
......@@ -91,12 +91,10 @@ class GeometryShaderTest : public ShaderCompileTreeTest
return sstream.str();
}
const std::string kVersion = "#version 310 es\n";
const std::array<std::string, 2> kExtensionStrings = {
{"#extension GL_OES_geometry_shader", "#extension GL_EXT_geometry_shader"}};
const std::string kVersion = "#version 310 es\n";
const std::string kHeader =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n";
"#extension GL_EXT_geometry_shader : require\n";
const std::string kInputLayout = "layout (points) in;\n";
const std::string kOutputLayout = "layout (points, max_vertices = 1) out;\n";
......@@ -112,32 +110,15 @@ class GeometryShaderTest : public ShaderCompileTreeTest
"void main()\n"
"{\n"
"}\n";
const std::string kShaderBody =
R"(layout(triangles, invocations = 2) in;
layout(triangle_strip, max_vertices = 3) out;
in vec4 i_color[];
out vec4 o_color;
void main()
{
for (int i = 0; i < i_color.length(); i++)
{
gl_Position = gl_in[i].gl_Position;
o_color = i_color[i];
gl_PrimitiveID = gl_PrimitiveIDIn;
gl_Layer = gl_InvocationID;
EmitVertex();
}
EndPrimitive();
})";
};
class GeometryShaderOutputCodeTest : public MatchOutputCodeTest
{
public:
GeometryShaderOutputCodeTest()
: MatchOutputCodeTest(GL_GEOMETRY_SHADER_OES, SH_OBJECT_CODE, SH_ESSL_OUTPUT)
: MatchOutputCodeTest(GL_GEOMETRY_SHADER_EXT, SH_OBJECT_CODE, SH_ESSL_OUTPUT)
{
getResources()->OES_geometry_shader = 1;
getResources()->EXT_geometry_shader = 1;
}
};
......@@ -145,12 +126,12 @@ class GeometryShaderOutputCodeTest : public MatchOutputCodeTest
TEST_F(GeometryShaderTest, Version300)
{
const std::string &shaderString =
"#version 300 es\n"
"layout(points) in;\n"
"layout(points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 300 es
layout(points) in;
layout(points, max_vertices = 1) out;
void main()
{
})";
if (compile(shaderString))
{
......@@ -159,16 +140,16 @@ TEST_F(GeometryShaderTest, Version300)
}
// Geometry Shaders are not supported in GLSL ES shaders version 310 without extension
// OES_geometry_shader enabled.
// EXT_geometry_shader enabled.
TEST_F(GeometryShaderTest, Version310WithoutExtension)
{
const std::string &shaderString =
"#version 310 es\n"
"layout(points) in;\n"
"layout(points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
layout(points) in;
layout(points, max_vertices = 1) out;
void main()
{
})";
if (compile(shaderString))
{
......@@ -176,17 +157,17 @@ TEST_F(GeometryShaderTest, Version310WithoutExtension)
}
}
// Geometry Shaders are supported in GLSL ES shaders version 310 with OES_geometry_shader enabled.
// Geometry Shaders are supported in GLSL ES shaders version 310 with EXT_geometry_shader enabled.
TEST_F(GeometryShaderTest, Version310WithOESExtension)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout(points) in;\n"
"layout(points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout(points) in;
layout(points, max_vertices = 1) out;
void main()
{
})";
if (!compile(shaderString))
{
......@@ -199,12 +180,12 @@ TEST_F(GeometryShaderTest, Version310WithOESExtension)
TEST_F(GeometryShaderTest, NoInputPrimitives)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout(points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout(points, max_vertices = 1) out;
void main()
{
})";
if (!compile(shaderString))
{
......@@ -266,13 +247,13 @@ TEST_F(GeometryShaderTest, RedeclareInputPrimitives)
TEST_F(GeometryShaderTest, DeclareDifferentInputPrimitivesInOneLayout)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, triangles) in;\n"
"layout (points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, triangles) in;
layout (points, max_vertices = 1) out;
void main()
{
})";
if (compile(shaderString))
{
......@@ -284,13 +265,13 @@ TEST_F(GeometryShaderTest, DeclareDifferentInputPrimitivesInOneLayout)
TEST_F(GeometryShaderTest, InvocationsLessThanOne)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, invocations = 0) in;\n"
"layout (points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, invocations = 0) in;
layout (points, max_vertices = 1) out;
void main()
{
})";
if (compile(shaderString))
{
......@@ -303,13 +284,13 @@ TEST_F(GeometryShaderTest, InvocationsLessThanOne)
TEST_F(GeometryShaderTest, InvocationsEqualsOne)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, invocations = 1) in;\n"
"layout (points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, invocations = 1) in;
layout (points, max_vertices = 1) out;
void main()
{
})";
if (!compile(shaderString))
{
......@@ -321,14 +302,14 @@ TEST_F(GeometryShaderTest, InvocationsEqualsOne)
TEST_F(GeometryShaderTest, InvocationsEqualsOneInSeparatedLayout)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (invocations = 1) in;\n"
"layout (points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (invocations = 1) in;
layout (points, max_vertices = 1) out;
void main()
{
})";
if (!compile(shaderString))
{
......@@ -341,13 +322,13 @@ TEST_F(GeometryShaderTest, InvocationsEqualsOneInSeparatedLayout)
TEST_F(GeometryShaderTest, TooLargeInvocations)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, invocations = 9989899) in;\n"
"layout (points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, invocations = 9989899) in;
layout (points, max_vertices = 1) out;
void main()
{
})";
if (compile(shaderString))
{
......@@ -359,13 +340,13 @@ TEST_F(GeometryShaderTest, TooLargeInvocations)
TEST_F(GeometryShaderTest, InvocationsDeclaredWithInputPrimitives)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, invocations = 3) in;\n"
"layout (points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, invocations = 3) in;
layout (points, max_vertices = 1) out;
void main()
{
})";
if (!compile(shaderString))
{
......@@ -377,13 +358,13 @@ TEST_F(GeometryShaderTest, InvocationsDeclaredWithInputPrimitives)
TEST_F(GeometryShaderTest, InvocationsBeforeInputPrimitives)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (invocations = 3, points) in;\n"
"layout (points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (invocations = 3, points) in;
layout (points, max_vertices = 1) out;
void main()
{
})";
if (!compile(shaderString))
{
......@@ -395,14 +376,14 @@ TEST_F(GeometryShaderTest, InvocationsBeforeInputPrimitives)
TEST_F(GeometryShaderTest, InvocationsInIndividualLayout)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (invocations = 3) in;\n"
"layout (points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (invocations = 3) in;
layout (points, max_vertices = 1) out;
void main()
{
})";
if (!compile(shaderString))
{
......@@ -414,14 +395,14 @@ TEST_F(GeometryShaderTest, InvocationsInIndividualLayout)
TEST_F(GeometryShaderTest, DuplicatedInvocations)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, invocations = 3) in;\n"
"layout (invocations = 3) in;\n"
"layout (points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, invocations = 3) in;
layout (invocations = 3) in;
layout (points, max_vertices = 1) out;
void main()
{
})";
if (!compile(shaderString))
{
......@@ -434,14 +415,14 @@ TEST_F(GeometryShaderTest, DuplicatedInvocations)
TEST_F(GeometryShaderTest, RedeclareDifferentInvocations)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, invocations = 3) in;\n"
"layout (invocations = 5) in;\n"
"layout (points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, invocations = 3) in;
layout (invocations = 5) in;
layout (points, max_vertices = 1) out;
void main()
{
})";
if (compile(shaderString))
{
......@@ -454,14 +435,14 @@ TEST_F(GeometryShaderTest, RedeclareDifferentInvocations)
TEST_F(GeometryShaderTest, RedeclareDifferentInvocationsAfterInvocationEqualsOne)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, invocations = 1) in;\n"
"layout (invocations = 5) in;\n"
"layout (points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, invocations = 1) in;
layout (invocations = 5) in;
layout (points, max_vertices = 1) out;
void main()
{
})";
if (compile(shaderString))
{
......@@ -473,13 +454,13 @@ TEST_F(GeometryShaderTest, RedeclareDifferentInvocationsAfterInvocationEqualsOne
TEST_F(GeometryShaderTest, RedeclareDifferentInvocationsInOneLayout)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, invocations = 3, invocations = 5) in;\n"
"layout (points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, invocations = 3, invocations = 5) in;
layout (points, max_vertices = 1) out;
void main()
{
})";
if (compile(shaderString))
{
......@@ -491,13 +472,13 @@ TEST_F(GeometryShaderTest, RedeclareDifferentInvocationsInOneLayout)
TEST_F(GeometryShaderTest, DeclareInvocationsInOutLayout)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, invocations = 3, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, invocations = 3, max_vertices = 1) out;
void main()
{
})";
if (compile(shaderString))
{
......@@ -509,14 +490,14 @@ TEST_F(GeometryShaderTest, DeclareInvocationsInOutLayout)
TEST_F(GeometryShaderTest, DeclareInvocationsInLayoutNoQualifier)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (invocations = 3);\n"
"layout (points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (invocations = 3);
layout (points, max_vertices = 1) out;
void main()
{
})";
if (compile(shaderString))
{
......@@ -528,13 +509,13 @@ TEST_F(GeometryShaderTest, DeclareInvocationsInLayoutNoQualifier)
TEST_F(GeometryShaderTest, DeclareOutputPrimitiveBeforeInputPrimitiveDeclare)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, max_vertices = 1) out;\n"
"layout (points) in;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, max_vertices = 1) out;
layout (points) in;
void main()
{
})";
if (!compile(shaderString))
{
......@@ -546,13 +527,13 @@ TEST_F(GeometryShaderTest, DeclareOutputPrimitiveBeforeInputPrimitiveDeclare)
TEST_F(GeometryShaderTest, DeclareMaxVerticesBeforeOutputPrimitive)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (max_vertices = 1, points) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (max_vertices = 1, points) out;
void main()
{
})";
if (!compile(shaderString))
{
......@@ -565,13 +546,13 @@ TEST_F(GeometryShaderTest, DeclareMaxVerticesBeforeOutputPrimitive)
TEST_F(GeometryShaderTest, NoOutputPrimitives)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (max_vertices = 1) out;
void main()
{
})";
if (!compile(shaderString))
{
......@@ -634,13 +615,13 @@ TEST_F(GeometryShaderTest, RedeclareOutputPrimitives)
TEST_F(GeometryShaderTest, RedeclareDifferentOutputPrimitivesInOneLayout)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = 3, line_strip) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 3, line_strip) out;
void main()
{
})";
if (compile(shaderString))
{
......@@ -653,12 +634,12 @@ TEST_F(GeometryShaderTest, RedeclareDifferentOutputPrimitivesInOneLayout)
TEST_F(GeometryShaderTest, NoOutLayouts)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
void main()
{
})";
if (!compile(shaderString))
{
......@@ -671,13 +652,13 @@ TEST_F(GeometryShaderTest, NoOutLayouts)
TEST_F(GeometryShaderTest, NoMaxVertices)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points) out;
void main()
{
})";
if (!compile(shaderString))
{
......@@ -689,13 +670,13 @@ TEST_F(GeometryShaderTest, NoMaxVertices)
TEST_F(GeometryShaderTest, NegativeMaxVertices)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = -1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = -1) out;
void main()
{
})";
if (compile(shaderString))
{
......@@ -707,13 +688,13 @@ TEST_F(GeometryShaderTest, NegativeMaxVertices)
TEST_F(GeometryShaderTest, ZeroMaxVertices)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = 0) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 0) out;
void main()
{
})";
if (!compile(shaderString))
{
......@@ -726,13 +707,13 @@ TEST_F(GeometryShaderTest, ZeroMaxVertices)
TEST_F(GeometryShaderTest, TooLargeMaxVertices)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = 257) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 257) out;
void main()
{
})";
if (compile(shaderString))
{
......@@ -744,14 +725,14 @@ TEST_F(GeometryShaderTest, TooLargeMaxVertices)
TEST_F(GeometryShaderTest, MaxVerticesInIndividualLayout)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points) out;\n"
"layout (max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points) out;
layout (max_vertices = 1) out;
void main()
{
})";
if (!compile(shaderString))
{
......@@ -763,14 +744,14 @@ TEST_F(GeometryShaderTest, MaxVerticesInIndividualLayout)
TEST_F(GeometryShaderTest, DuplicatedMaxVertices)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = 1) out;\n"
"layout (max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 1) out;
layout (max_vertices = 1) out;
void main()
{
})";
if (!compile(shaderString))
{
......@@ -782,14 +763,14 @@ TEST_F(GeometryShaderTest, DuplicatedMaxVertices)
TEST_F(GeometryShaderTest, RedeclareDifferentMaxVertices)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = 1) out;\n"
"layout (max_vertices = 2) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 1) out;
layout (max_vertices = 2) out;
void main()
{
})";
if (compile(shaderString))
{
......@@ -801,13 +782,13 @@ TEST_F(GeometryShaderTest, RedeclareDifferentMaxVertices)
TEST_F(GeometryShaderTest, RedeclareDifferentMaxVerticesInOneLayout)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = 2, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 2, max_vertices = 1) out;
void main()
{
})";
if (compile(shaderString))
{
......@@ -819,42 +800,42 @@ TEST_F(GeometryShaderTest, RedeclareDifferentMaxVerticesInOneLayout)
TEST_F(GeometryShaderTest, InvalidLocation)
{
const std::string &shaderString1 =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, location = 1) in;\n"
"layout (points, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, location = 1) in;
layout (points, max_vertices = 2) out;
void main()
{
})";
const std::string &shaderString2 =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (invocations = 2, location = 1) in;\n"
"layout (points, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (invocations = 2, location = 1) in;
layout (points, max_vertices = 2) out;
void main()
{
})";
const std::string &shaderString3 =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, location = 3, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, location = 3, max_vertices = 2) out;
void main()
{
})";
const std::string &shaderString4 =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points) out;\n"
"layout (max_vertices = 2, location = 3) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points) out;
layout (max_vertices = 2, location = 3) out;
void main()
{
})";
if (compile(shaderString1) || compile(shaderString2) || compile(shaderString3) ||
compile(shaderString4))
......@@ -867,41 +848,41 @@ TEST_F(GeometryShaderTest, InvalidLocation)
TEST_F(GeometryShaderTest, InvalidLayoutQualifiers)
{
const std::string &shaderString1 =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, abc) in;\n"
"layout (points, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, abc) in;
layout (points, max_vertices = 2) out;
void main()
{
})";
const std::string &shaderString2 =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, abc, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, abc, max_vertices = 2) out;
void main()
{
})";
const std::string &shaderString3 =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, xyz = 2) in;\n"
"layout (points, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, xyz = 2) in;
layout (points, max_vertices = 2) out;
void main()
{
})";
const std::string &shaderString4 =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points) out;\n"
"layout (max_vertices = 2, xyz = 3) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points) out;
layout (max_vertices = 2, xyz = 3) out;
void main()
{
})";
if (compile(shaderString1) || compile(shaderString2) || compile(shaderString3) ||
compile(shaderString4))
......@@ -914,15 +895,15 @@ TEST_F(GeometryShaderTest, InvalidLayoutQualifiers)
TEST_F(GeometryShaderTest, IndexGLInByConstantInteger)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
" vec4 position;\n"
" position = gl_in[0].gl_Position;\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 2) out;
void main()
{
vec4 position;
position = gl_in[0].gl_Position;
})";
if (!compile(shaderString))
{
......@@ -934,18 +915,18 @@ TEST_F(GeometryShaderTest, IndexGLInByConstantInteger)
TEST_F(GeometryShaderTest, IndexGLInByVariable)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (lines) in;\n"
"layout (points, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
" vec4 position;\n"
" for (int i = 0; i < 2; i++)\n"
" {\n"
" position = gl_in[i].gl_Position;\n"
" }\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (lines) in;
layout (points, max_vertices = 2) out;
void main()
{
vec4 position;
for (int i = 0; i < 2; i++)
{
position = gl_in[i].gl_Position;
}
})";
if (!compile(shaderString))
{
......@@ -958,13 +939,13 @@ TEST_F(GeometryShaderTest, IndexGLInByVariable)
TEST_F(GeometryShaderTest, IndexGLInWithoutInputPrimitive)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
" vec4 position = gl_in[0].gl_Position;\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, max_vertices = 2) out;
void main()
{
vec4 position = gl_in[0].gl_Position;
})";
if (compile(shaderString))
{
......@@ -976,13 +957,13 @@ TEST_F(GeometryShaderTest, IndexGLInWithoutInputPrimitive)
TEST_F(GeometryShaderTest, UseGLInLengthWithoutInputPrimitive)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
" int length = gl_in.length();\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, max_vertices = 2) out;
void main()
{
int length = gl_in.length();
})";
if (compile(shaderString))
{
......@@ -995,7 +976,7 @@ TEST_F(GeometryShaderTest, UseGLInLengthWithInputPrimitive)
{
const std::string &shaderString =
R"(#version 310 es
#extension GL_OES_geometry_shader : require
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 2) out;
void main()
......@@ -1014,14 +995,14 @@ TEST_F(GeometryShaderTest, UseGLInLengthWithInputPrimitive)
TEST_F(GeometryShaderTest, AssignValueToGLIn)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
" gl_in[0].gl_Position = vec4(0, 0, 0, 1);\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 2) out;
void main()
{
gl_in[0].gl_Position = vec4(0, 0, 0, 1);
})";
if (compile(shaderString))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
......@@ -1032,18 +1013,18 @@ TEST_F(GeometryShaderTest, AssignValueToGLIn)
TEST_F(GeometryShaderTest, BuiltInVariables)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, invocations = 2) in;\n"
"layout (points, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
" gl_Position = gl_in[gl_InvocationID].gl_Position;\n"
" int invocation = gl_InvocationID;\n"
" gl_Layer = invocation;\n"
" int primitiveIn = gl_PrimitiveIDIn;\n"
" gl_PrimitiveID = primitiveIn;\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, invocations = 2) in;
layout (points, max_vertices = 2) out;
void main()
{
gl_Position = gl_in[gl_InvocationID].gl_Position;
int invocation = gl_InvocationID;
gl_Layer = invocation;
int primitiveIn = gl_PrimitiveIDIn;
gl_PrimitiveID = primitiveIn;
})";
if (!compile(shaderString))
{
FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
......@@ -1054,14 +1035,14 @@ TEST_F(GeometryShaderTest, BuiltInVariables)
TEST_F(GeometryShaderTest, AssignValueToGLPrimitiveIn)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, invocations = 2) in;\n"
"layout (points, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
" gl_PrimitiveIDIn = 1;\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, invocations = 2) in;
layout (points, max_vertices = 2) out;
void main()
{
gl_PrimitiveIDIn = 1;
})";
if (compile(shaderString))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
......@@ -1072,14 +1053,14 @@ TEST_F(GeometryShaderTest, AssignValueToGLPrimitiveIn)
TEST_F(GeometryShaderTest, AssignValueToGLInvocations)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, invocations = 2) in;\n"
"layout (points, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
" gl_InvocationID = 1;\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, invocations = 2) in;
layout (points, max_vertices = 2) out;
void main()
{
gl_InvocationID = 1;
})";
if (compile(shaderString))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
......@@ -1090,16 +1071,16 @@ TEST_F(GeometryShaderTest, AssignValueToGLInvocations)
TEST_F(GeometryShaderTest, GeometryShaderBuiltInFunctions)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
" gl_Position = gl_in[0].gl_Position;\n"
" EmitVertex();\n"
" EndPrimitive();\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 2) out;
void main()
{
gl_Position = gl_in[0].gl_Position;
EmitVertex();
EndPrimitive();
})";
if (!compile(shaderString))
{
......@@ -1107,23 +1088,23 @@ TEST_F(GeometryShaderTest, GeometryShaderBuiltInFunctions)
}
}
// Verify that using EmitVertex() or EndPrimitive() without GL_OES_geometry_shader declared causes a
// Verify that using EmitVertex() or EndPrimitive() without GL_EXT_geometry_shader declared causes a
// compile error.
TEST_F(GeometryShaderTest, GeometryShaderBuiltInFunctionsWithoutExtension)
{
const std::string &shaderString1 =
"#version 310 es\n"
"void main()\n"
"{\n"
" EmitVertex();\n"
"}\n";
R"(#version 310 es
void main()
{
EmitVertex();
})";
const std::string &shaderString2 =
"#version 310 es\n"
"void main()\n"
"{\n"
" EndPrimitive();\n"
"}\n";
R"(#version 310 es
void main()
{
EndPrimitive();
})";
if (compile(shaderString1) || compile(shaderString2))
{
......@@ -1136,7 +1117,7 @@ TEST_F(GeometryShaderTest, GeometryShaderBuiltInConstants)
{
const std::string &kShaderHeader =
R"(#version 310 es
#extension GL_OES_geometry_shader : require
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 2) out;
void main()
......@@ -1167,7 +1148,7 @@ TEST_F(GeometryShaderTest, GeometryShaderBuiltInConstants)
}
}
// Verify that using any Geometry Shader built-in constant values without GL_OES_geometry_shader
// Verify that using any Geometry Shader built-in constant values without GL_EXT_geometry_shader
// declared causes a compile error.
TEST_F(GeometryShaderTest, GeometryShaderBuiltInConstantsWithoutExtension)
{
......@@ -1204,14 +1185,14 @@ TEST_F(GeometryShaderTest, GeometryShaderBuiltInConstantsWithoutExtension)
TEST_F(GeometryShaderTest, NonArrayInput)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = 1) out;\n"
"in vec4 texcoord;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 1) out;
in vec4 texcoord;
void main()
{
})";
if (compile(shaderString))
{
......@@ -1224,29 +1205,29 @@ TEST_F(GeometryShaderTest, NonArrayInput)
TEST_F(GeometryShaderTest, DeclareUnsizedInputBeforeInputPrimitive)
{
const std::string &shaderString1 =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"in vec4 texcoord[];\n"
"layout (points) in;\n"
"layout (points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
" vec4 coord = texcoord[0];\n"
" int length = texcoord.length();\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
in vec4 texcoord[];
layout (points) in;
layout (points, max_vertices = 1) out;
void main()
{
vec4 coord = texcoord[0];
int length = texcoord.length();
})";
const std::string &shaderString2 =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"in vec4 texcoord1[1];\n"
"in vec4 texcoord2[];\n"
"layout (points) in;\n"
"layout (points, max_vertices = 1) out;\n"
"void main()\n"
"{\n"
" vec4 coord = texcoord2[0];\n"
" int length = texcoord2.length();\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
in vec4 texcoord1[1];
in vec4 texcoord2[];
layout (points) in;
layout (points, max_vertices = 1) out;
void main()
{
vec4 coord = texcoord2[0];
int length = texcoord2.length();
})";
if (compile(shaderString1) || compile(shaderString2))
{
......@@ -1259,23 +1240,23 @@ TEST_F(GeometryShaderTest, DeclareUnsizedInputBeforeInputPrimitive)
TEST_F(GeometryShaderTest, DeclareUnsizedInputWithoutInputPrimitive)
{
const std::string &shaderString1 =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, max_vertices = 1) out;\n"
"in vec4 texcoord[];\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, max_vertices = 1) out;
in vec4 texcoord[];
void main()
{
})";
const std::string &shaderString2 =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, max_vertices = 1) out;\n"
"in vec4 texcoord1[1];\n"
"in vec4 texcoord2[];\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, max_vertices = 1) out;
in vec4 texcoord1[1];
in vec4 texcoord2[];
void main()
{
})";
if (compile(shaderString1) || compile(shaderString2))
{
......@@ -1289,7 +1270,7 @@ TEST_F(GeometryShaderTest, IndexingUnsizedInputDeclaredAfterInputPrimitive)
{
const std::string &shaderString =
R"(#version 310 es
#extension GL_OES_geometry_shader : require
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 1) out;
in vec4 texcoord[], texcoord2[];
......@@ -1312,7 +1293,7 @@ TEST_F(GeometryShaderTest, CallingLengthOnUnsizedInputDeclaredAfterInputPrimitiv
{
const std::string &shaderString =
R"(#version 310 es
#extension GL_OES_geometry_shader : require
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 1) out;
in vec4 texcoord[];
......@@ -1332,15 +1313,15 @@ TEST_F(GeometryShaderTest, CallingLengthOnUnsizedInputDeclaredAfterInputPrimitiv
TEST_F(GeometryShaderTest, AssignValueToInput)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = 1) out;\n"
"in vec4 texcoord[];\n"
"void main()\n"
"{\n"
" texcoord[0] = vec4(1.0, 0.0, 0.0, 1.0);\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 1) out;
in vec4 texcoord[];
void main()
{
texcoord[0] = vec4(1.0, 0.0, 0.0, 1.0);
})";
if (compile(shaderString))
{
......@@ -1353,7 +1334,7 @@ TEST_F(GeometryShaderTest, InputWithLocations)
{
const std::string &shaderString =
R"(#version 310 es
#extension GL_OES_geometry_shader : require
#extension GL_EXT_geometry_shader : require
layout (triangles) in;
layout (points, max_vertices = 1) out;
layout (location = 0) in vec4 texcoord1[];
......@@ -1427,14 +1408,14 @@ TEST_F(GeometryShaderTest, InputWithSizeAfterInputPrimitive)
TEST_F(GeometryShaderTest, NonArrayOutputs)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = 1) out;\n"
"out vec4 color;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 1) out;
out vec4 color;
void main()
{
})";
if (!compile(shaderString))
{
......@@ -1446,17 +1427,17 @@ TEST_F(GeometryShaderTest, NonArrayOutputs)
TEST_F(GeometryShaderTest, OutputsWithLocation)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (triangles) in;\n"
"layout (points, max_vertices = 1) out;\n"
"layout (location = 0) out vec4 color1;\n"
"layout (location = 1) out vec4 color2;\n"
"void main()\n"
"{\n"
" color1 = vec4(0.0, 1.0, 0.0, 1.0);\n"
" color2 = vec4(1.0, 0.0, 0.0, 1.0);\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (triangles) in;
layout (points, max_vertices = 1) out;
layout (location = 0) out vec4 color1;
layout (location = 1) out vec4 color2;
void main()
{
color1 = vec4(0.0, 1.0, 0.0, 1.0);
color2 = vec4(1.0, 0.0, 0.0, 1.0);
})";
if (!compile(shaderString))
{
......@@ -1468,16 +1449,16 @@ TEST_F(GeometryShaderTest, OutputsWithLocation)
TEST_F(GeometryShaderTest, SizedArrayOutputs)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (triangles) in;\n"
"layout (points, max_vertices = 1) out;\n"
"out vec4 color[2];\n"
"void main()\n"
"{\n"
" color[0] = vec4(0.0, 1.0, 0.0, 1.0);\n"
" color[1] = vec4(1.0, 0.0, 0.0, 1.0);\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (triangles) in;
layout (points, max_vertices = 1) out;
out vec4 color[2];
void main()
{
color[0] = vec4(0.0, 1.0, 0.0, 1.0);
color[1] = vec4(1.0, 0.0, 0.0, 1.0);
})";
if (!compile(shaderString))
{
......@@ -1489,14 +1470,14 @@ TEST_F(GeometryShaderTest, SizedArrayOutputs)
TEST_F(GeometryShaderTest, UnsizedArrayOutputs)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (triangles) in;\n"
"layout (points, max_vertices = 1) out;\n"
"out vec4 color[];\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (triangles) in;
layout (points, max_vertices = 1) out;
out vec4 color[];
void main()
{
})";
if (compile(shaderString))
{
......@@ -1540,15 +1521,15 @@ TEST_F(GeometryShaderTest, OutputWithInterpolationQualifiers)
TEST_F(GeometryShaderTest, InvariantOutput)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, max_vertices = 2) out;\n"
"invariant out vec4 gs_output;\n"
"void main()\n"
"{\n"
" gl_Position = gl_in[0].gl_Position;\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 2) out;
invariant out vec4 gs_output;
void main()
{
gl_Position = gl_in[0].gl_Position;
})";
if (!compile(shaderString))
{
......@@ -1561,7 +1542,7 @@ TEST_F(GeometryShaderOutputCodeTest, ValidateGLInMembersInOutputShaderString)
{
const std::string &shaderString1 =
R"(#version 310 es
#extension GL_OES_geometry_shader : require
#extension GL_EXT_geometry_shader : require
layout (lines) in;
layout (points, max_vertices = 2) out;
void main()
......@@ -1578,7 +1559,7 @@ TEST_F(GeometryShaderOutputCodeTest, ValidateGLInMembersInOutputShaderString)
const std::string &shaderString2 =
R"(#version 310 es
#extension GL_OES_geometry_shader : require
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, max_vertices = 2) out;
void main()
......@@ -1590,57 +1571,3 @@ TEST_F(GeometryShaderOutputCodeTest, ValidateGLInMembersInOutputShaderString)
compile(shaderString2);
EXPECT_TRUE(foundInESSLCode("].gl_Position"));
}
// Verify that Geometry Shaders are supported in GLSL ES version 310 with EXT_geometry_shader
// enabled.
TEST_F(GeometryShaderTest, Version310WithEXTExtension)
{
std::ostringstream stream;
const std::string &kEXTExtensionString = kExtensionStrings[1];
ASSERT_TRUE(kEXTExtensionString == "#extension GL_EXT_geometry_shader");
stream << kVersion << kEXTExtensionString << " : require\n" << kShaderBody;
if (!compile(stream.str()))
{
FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
}
}
// Verify that Geometry Shaders are supported in GLSL ES version 310 with mixed using
// "EXT_geometry_shader" and "OES_geometry_shader" extension strings.
TEST_F(GeometryShaderTest, MixedUseOESAndEXTExtension)
{
const std::array<std::string, 3> kExtensionBehaviors = {{"require", "disable", "warn"}};
ASSERT_TRUE(kExtensionStrings.size() == 2u);
for (const std::string &extensionBehavior1 : kExtensionBehaviors)
{
for (const std::string &extensionBehavior2 : kExtensionBehaviors)
{
for (size_t i = 0; i < 2u; ++i)
{
std::ostringstream stream;
stream << kVersion << kExtensionStrings[i] << " : " << extensionBehavior1 << "\n"
<< kExtensionStrings[1 - i] << " : " << extensionBehavior2 << "\n"
<< kShaderBody;
bool shouldCompile =
extensionBehavior1 != "disable" || extensionBehavior2 != "disable";
if (shouldCompile != compile(stream.str()))
{
if (shouldCompile)
{
FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
}
else
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
}
}
}
}
\ No newline at end of file
......@@ -101,21 +101,21 @@ class GeometryShaderValidationTest : public ShaderCompileTreeTest
protected:
void initResources(ShBuiltInResources *resources) override
{
resources->OES_geometry_shader = 1;
resources->EXT_geometry_shader = 1;
}
::GLenum getShaderType() const override { return GL_GEOMETRY_SHADER_OES; }
::GLenum getShaderType() const override { return GL_GEOMETRY_SHADER_EXT; }
ShShaderSpec getShaderSpec() const override { return SH_GLES3_1_SPEC; }
};
class FragmentShaderOESGeometryShaderValidationTest : public FragmentShaderValidationTest
class FragmentShaderEXTGeometryShaderValidationTest : public FragmentShaderValidationTest
{
public:
FragmentShaderOESGeometryShaderValidationTest() {}
FragmentShaderEXTGeometryShaderValidationTest() {}
protected:
void initResources(ShBuiltInResources *resources) override
{
resources->OES_geometry_shader = 1;
resources->EXT_geometry_shader = 1;
}
};
......@@ -2274,42 +2274,42 @@ TEST_F(FragmentShaderValidationTest, InvalidUseOfLocalSizeX)
TEST_F(GeometryShaderValidationTest, InvalidUseOfLocalSizeX)
{
const std::string &shaderString1 =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points, local_size_x = 15) in;\n"
"layout (points, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points, local_size_x = 15) in;
layout (points, max_vertices = 2) out;
void main()
{
})";
const std::string &shaderString2 =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (invocations = 2, local_size_x = 15) in;\n"
"layout (points, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (invocations = 2, local_size_x = 15) in;
layout (points, max_vertices = 2) out;
void main()
{
})";
const std::string &shaderString3 =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points, local_size_x = 15, max_vertices = 2) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points, local_size_x = 15, max_vertices = 2) out;
void main()
{
})";
const std::string &shaderString4 =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"layout (points) in;\n"
"layout (points) out;\n"
"layout (max_vertices = 2, local_size_x = 15) out;\n"
"void main()\n"
"{\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
layout (points) in;
layout (points) out;
layout (max_vertices = 2, local_size_x = 15) out;
void main()
{
})";
if (compile(shaderString1) || compile(shaderString2) || compile(shaderString3) ||
compile(shaderString4))
{
......@@ -4438,20 +4438,20 @@ TEST_F(VertexShaderValidationTest, ViewportIndexInESSL310)
}
}
// Test that gl_PrimitiveID is valid in fragment shader with 'GL_OES_geometry_shader' declared.
TEST_F(FragmentShaderOESGeometryShaderValidationTest, PrimitiveIDWithExtension)
// Test that gl_PrimitiveID is valid in fragment shader with 'GL_EXT_geometry_shader' declared.
TEST_F(FragmentShaderEXTGeometryShaderValidationTest, PrimitiveIDWithExtension)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"precision mediump float;\n"
"layout(location = 0) out mediump vec4 fragColor;\n"
"void main(void)\n"
"{\n"
" vec4 data = vec4(0.1, 0.2, 0.3, 0.4);\n"
" float value = data[gl_PrimitiveID % 4];\n"
" fragColor = vec4(value, 0, 0, 1);\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
precision mediump float;
layout(location = 0) out mediump vec4 fragColor;
void main(void)
{
vec4 data = vec4(0.1, 0.2, 0.3, 0.4);
float value = data[gl_PrimitiveID % 4];
fragColor = vec4(value, 0, 0, 1);
})";
if (!compile(shaderString))
{
......@@ -4459,19 +4459,19 @@ TEST_F(FragmentShaderOESGeometryShaderValidationTest, PrimitiveIDWithExtension)
}
}
// Test that gl_PrimitiveID is invalid in fragment shader without 'GL_OES_geometry_shader' declared.
TEST_F(FragmentShaderOESGeometryShaderValidationTest, PrimitiveIDWithoutExtension)
// Test that gl_PrimitiveID is invalid in fragment shader without 'GL_EXT_geometry_shader' declared.
TEST_F(FragmentShaderEXTGeometryShaderValidationTest, PrimitiveIDWithoutExtension)
{
const std::string &shaderString =
"#version 310 es\n"
"precision mediump float;\n"
"layout(location = 0) out mediump vec4 fragColor;\n"
"void main(void)\n"
"{\n"
" vec4 data = vec4(0.1, 0.2, 0.3, 0.4);\n"
" float value = data[gl_PrimitiveID % 4];\n"
" fragColor = vec4(value, 0, 0, 1);\n"
"}\n";
R"(#version 310 es
precision mediump float;
layout(location = 0) out mediump vec4 fragColor;
void main(void)
{
vec4 data = vec4(0.1, 0.2, 0.3, 0.4);
float value = data[gl_PrimitiveID % 4];
fragColor = vec4(value, 0, 0, 1);
})";
if (compile(shaderString))
{
......@@ -4480,18 +4480,18 @@ TEST_F(FragmentShaderOESGeometryShaderValidationTest, PrimitiveIDWithoutExtensio
}
// Test that gl_PrimitiveID cannot be l-value in fragment shader.
TEST_F(FragmentShaderOESGeometryShaderValidationTest, AssignValueToPrimitiveID)
TEST_F(FragmentShaderEXTGeometryShaderValidationTest, AssignValueToPrimitiveID)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"precision mediump float;\n"
"layout(location = 0) out mediump vec4 fragColor;\n"
"void main(void)\n"
"{\n"
" gl_PrimitiveID = 1;\n"
" fragColor = vec4(1.0, 0.0, 0.0, 1.0);\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
precision mediump float;
layout(location = 0) out mediump vec4 fragColor;
void main(void)
{
gl_PrimitiveID = 1;
fragColor = vec4(1.0, 0.0, 0.0, 1.0);
})";
if (compile(shaderString))
{
......@@ -4499,20 +4499,20 @@ TEST_F(FragmentShaderOESGeometryShaderValidationTest, AssignValueToPrimitiveID)
}
}
// Test that gl_Layer is valid in fragment shader with 'GL_OES_geometry_shader' declared.
TEST_F(FragmentShaderOESGeometryShaderValidationTest, LayerWithExtension)
// Test that gl_Layer is valid in fragment shader with 'GL_EXT_geometry_shader' declared.
TEST_F(FragmentShaderEXTGeometryShaderValidationTest, LayerWithExtension)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"precision mediump float;\n"
"layout(location = 0) out mediump vec4 fragColor;\n"
"void main(void)\n"
"{\n"
" vec4 data = vec4(0.1, 0.2, 0.3, 0.4);\n"
" float value = data[gl_Layer % 4];\n"
" fragColor = vec4(value, 0, 0, 1);\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
precision mediump float;
layout(location = 0) out mediump vec4 fragColor;
void main(void)
{
vec4 data = vec4(0.1, 0.2, 0.3, 0.4);
float value = data[gl_Layer % 4];
fragColor = vec4(value, 0, 0, 1);
})";
if (!compile(shaderString))
{
......@@ -4520,19 +4520,19 @@ TEST_F(FragmentShaderOESGeometryShaderValidationTest, LayerWithExtension)
}
}
// Test that gl_Layer is invalid in fragment shader without 'GL_OES_geometry_shader' declared.
TEST_F(FragmentShaderOESGeometryShaderValidationTest, LayerWithoutExtension)
// Test that gl_Layer is invalid in fragment shader without 'GL_EXT_geometry_shader' declared.
TEST_F(FragmentShaderEXTGeometryShaderValidationTest, LayerWithoutExtension)
{
const std::string &shaderString =
"#version 310 es\n"
"precision mediump float;\n"
"layout(location = 0) out mediump vec4 fragColor;\n"
"void main(void)\n"
"{\n"
" vec4 data = vec4(0.1, 0.2, 0.3, 0.4);\n"
" float value = data[gl_Layer % 4];\n"
" fragColor = vec4(value, 0, 0, 1);\n"
"}\n";
R"(#version 310 es
precision mediump float;
layout(location = 0) out mediump vec4 fragColor;
void main(void)
{
vec4 data = vec4(0.1, 0.2, 0.3, 0.4);
float value = data[gl_Layer % 4];
fragColor = vec4(value, 0, 0, 1);
})";
if (compile(shaderString))
{
......@@ -4541,18 +4541,18 @@ TEST_F(FragmentShaderOESGeometryShaderValidationTest, LayerWithoutExtension)
}
// Test that gl_Layer cannot be l-value in fragment shader.
TEST_F(FragmentShaderOESGeometryShaderValidationTest, AssignValueToLayer)
TEST_F(FragmentShaderEXTGeometryShaderValidationTest, AssignValueToLayer)
{
const std::string &shaderString =
"#version 310 es\n"
"#extension GL_OES_geometry_shader : require\n"
"precision mediump float;\n"
"layout(location = 0) out mediump vec4 fragColor;\n"
"void main(void)\n"
"{\n"
" gl_Layer = 1;\n"
" fragColor = vec4(1.0, 0.0, 0.0, 1.0);\n"
"}\n";
R"(#version 310 es
#extension GL_EXT_geometry_shader : require
precision mediump float;
layout(location = 0) out mediump vec4 fragColor;
void main(void)
{
gl_Layer = 1;
fragColor = vec4(1.0, 0.0, 0.0, 1.0);
})";
if (compile(shaderString))
{
......@@ -4560,13 +4560,13 @@ TEST_F(FragmentShaderOESGeometryShaderValidationTest, AssignValueToLayer)
}
}
// Test that all built-in constants defined in GL_OES_geometry_shader can be used in fragment shader
// with 'GL_OES_geometry_shader' declared.
TEST_F(FragmentShaderOESGeometryShaderValidationTest, GeometryShaderBuiltInConstants)
// Test that all built-in constants defined in GL_EXT_geometry_shader can be used in fragment shader
// with 'GL_EXT_geometry_shader' declared.
TEST_F(FragmentShaderEXTGeometryShaderValidationTest, GeometryShaderBuiltInConstants)
{
const std::string &kShaderHeader =
R"(#version 310 es
#extension GL_OES_geometry_shader : require
#extension GL_EXT_geometry_shader : require
precision mediump float;
layout(location = 0) out mediump vec4 fragColor;
void main(void)
......@@ -4597,9 +4597,9 @@ TEST_F(FragmentShaderOESGeometryShaderValidationTest, GeometryShaderBuiltInConst
}
}
// Test that any built-in constants defined in GL_OES_geometry_shader cannot be used in fragment
// shader without 'GL_OES_geometry_shader' declared.
TEST_F(FragmentShaderOESGeometryShaderValidationTest,
// Test that any built-in constants defined in GL_EXT_geometry_shader cannot be used in fragment
// shader without 'GL_EXT_geometry_shader' declared.
TEST_F(FragmentShaderEXTGeometryShaderValidationTest,
GeometryShaderBuiltInConstantsWithoutExtension)
{
const std::string &kShaderHeader =
......@@ -4655,20 +4655,20 @@ TEST_F(VertexShaderValidationTest, InterfaceBlockUsingConstQualifier)
}
}
// Test that using shader io blocks without declaration of GL_OES_shader_io_block is not allowed.
// Test that using shader io blocks without declaration of GL_EXT_shader_io_block is not allowed.
TEST_F(VertexShaderValidationTest, IOBlockWithoutExtension)
{
const std::string &shaderString =
"#version 310 es\n"
"out block\n"
"{\n"
" vec2 value;\n"
"} VSOutput[2];\n"
"void main()\n"
"{\n"
" int i = 0;\n"
" vec2 value1 = VSOutput[i].value;\n"
"}\n";
R"(#version 310 es
out block
{
vec2 value;
} VSOutput[2];
void main()
{
int i = 0;
vec2 value1 = VSOutput[i].value;
})";
if (compile(shaderString))
{
......@@ -4676,22 +4676,22 @@ TEST_F(VertexShaderValidationTest, IOBlockWithoutExtension)
}
}
// Test that using shader io blocks without declaration of GL_OES_shader_io_block is not allowed.
// Test that using shader io blocks without declaration of GL_EXT_shader_io_block is not allowed.
TEST_F(FragmentShaderValidationTest, IOBlockWithoutExtension)
{
const std::string &shaderString =
"#version 310 es\n"
"precision mediump float;\n"
"in block\n"
"{\n"
" vec4 i_color;\n"
"} FSInput[2];\n"
"out vec4 o_color;\n"
"void main()\n"
"{\n"
" int i = 0;\n"
" o_color = FSInput[i].i_color;"
"}\n";
R"(#version 310 es
precision mediump float;
in block
{
vec4 i_color;
} FSInput[2];
out vec4 o_color;
void main()
{
int i = 0;
o_color = FSInput[i].i_color;
})";
if (compile(shaderString))
{
......
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