Commit aed1b56a by Jamie Madill Committed by Commit Bot

Prerequisite code for simpler GlslangWrapper.

This makes two changes for the linking step: * allows symbol names in TOutputGLSLBase::writeVariableType * stores a list of inactive varying names in VaryingPacking Bug: angleproject:2456 Change-Id: Id651721a008c049508303d18c45c6b96c76114d9 Reviewed-on: https://chromium-review.googlesource.com/1014707Reviewed-by: 's avatarLuc Ferron <lucferron@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 1d882aaa
...@@ -214,7 +214,7 @@ void TOutputGLSLBase::writeLayoutQualifier(TIntermTyped *variable) ...@@ -214,7 +214,7 @@ void TOutputGLSLBase::writeLayoutQualifier(TIntermTyped *variable)
out << ") "; out << ") ";
} }
const char *TOutputGLSLBase::mapQualifierToString(TQualifier qualifier) const char *TOutputGLSLBase::mapQualifierToString(TQualifier qualifier, const TSymbol *symbol)
{ {
if (sh::IsGLSL410OrOlder(mOutput) && mShaderVersion >= 300 && if (sh::IsGLSL410OrOlder(mOutput) && mShaderVersion >= 300 &&
(mCompileOptions & SH_REMOVE_INVARIANT_AND_CENTROID_FOR_ESSL3) != 0) (mCompileOptions & SH_REMOVE_INVARIANT_AND_CENTROID_FOR_ESSL3) != 0)
...@@ -250,7 +250,7 @@ const char *TOutputGLSLBase::mapQualifierToString(TQualifier qualifier) ...@@ -250,7 +250,7 @@ const char *TOutputGLSLBase::mapQualifierToString(TQualifier qualifier)
return sh::getQualifierString(qualifier); return sh::getQualifierString(qualifier);
} }
void TOutputGLSLBase::writeVariableType(const TType &type) void TOutputGLSLBase::writeVariableType(const TType &type, const TSymbol *symbol)
{ {
TQualifier qualifier = type.getQualifier(); TQualifier qualifier = type.getQualifier();
TInfoSinkBase &out = objSink(); TInfoSinkBase &out = objSink();
...@@ -265,7 +265,7 @@ void TOutputGLSLBase::writeVariableType(const TType &type) ...@@ -265,7 +265,7 @@ void TOutputGLSLBase::writeVariableType(const TType &type)
} }
if (qualifier != EvqTemporary && qualifier != EvqGlobal) if (qualifier != EvqTemporary && qualifier != EvqGlobal)
{ {
const char *qualifierString = mapQualifierToString(qualifier); const char *qualifierString = mapQualifierToString(qualifier, symbol);
if (qualifierString && qualifierString[0] != '\0') if (qualifierString && qualifierString[0] != '\0')
{ {
out << qualifierString << " "; out << qualifierString << " ";
...@@ -336,7 +336,7 @@ void TOutputGLSLBase::writeFunctionParameters(const TFunction *func) ...@@ -336,7 +336,7 @@ void TOutputGLSLBase::writeFunctionParameters(const TFunction *func)
{ {
const TVariable *param = func->getParam(i); const TVariable *param = func->getParam(i);
const TType &type = param->getType(); const TType &type = param->getType();
writeVariableType(type); writeVariableType(type, param);
if (param->symbolType() != SymbolType::Empty) if (param->symbolType() != SymbolType::Empty)
out << " " << hashName(param); out << " " << hashName(param);
...@@ -894,7 +894,7 @@ void TOutputGLSLBase::visitFunctionPrototype(TIntermFunctionPrototype *node) ...@@ -894,7 +894,7 @@ void TOutputGLSLBase::visitFunctionPrototype(TIntermFunctionPrototype *node)
TInfoSinkBase &out = objSink(); TInfoSinkBase &out = objSink();
const TType &type = node->getType(); const TType &type = node->getType();
writeVariableType(type); writeVariableType(type, node->getFunction());
if (type.isArray()) if (type.isArray())
out << ArrayString(type); out << ArrayString(type);
...@@ -995,7 +995,7 @@ bool TOutputGLSLBase::visitDeclaration(Visit visit, TIntermDeclaration *node) ...@@ -995,7 +995,7 @@ bool TOutputGLSLBase::visitDeclaration(Visit visit, TIntermDeclaration *node)
const TIntermSequence &sequence = *(node->getSequence()); const TIntermSequence &sequence = *(node->getSequence());
TIntermTyped *variable = sequence.front()->getAsTyped(); TIntermTyped *variable = sequence.front()->getAsTyped();
writeLayoutQualifier(variable); writeLayoutQualifier(variable);
writeVariableType(variable->getType()); writeVariableType(variable->getType(), &variable->getAsSymbolNode()->variable());
if (variable->getAsSymbolNode() == nullptr || if (variable->getAsSymbolNode() == nullptr ||
variable->getAsSymbolNode()->variable().symbolType() != SymbolType::Empty) variable->getAsSymbolNode()->variable().symbolType() != SymbolType::Empty)
{ {
......
...@@ -42,7 +42,7 @@ class TOutputGLSLBase : public TIntermTraverser ...@@ -42,7 +42,7 @@ class TOutputGLSLBase : public TIntermTraverser
void writeTriplet(Visit visit, const char *preStr, const char *inStr, const char *postStr); void writeTriplet(Visit visit, const char *preStr, const char *inStr, const char *postStr);
virtual void writeLayoutQualifier(TIntermTyped *variable); virtual void writeLayoutQualifier(TIntermTyped *variable);
void writeInvariantQualifier(const TType &type); void writeInvariantQualifier(const TType &type);
void writeVariableType(const TType &type); void writeVariableType(const TType &type, const TSymbol *symbol);
virtual bool writeVariablePrecision(TPrecision precision) = 0; virtual bool writeVariablePrecision(TPrecision precision) = 0;
void writeFunctionParameters(const TFunction *func); void writeFunctionParameters(const TFunction *func);
const TConstantUnion *writeConstantUnion(const TType &type, const TConstantUnion *pConstUnion); const TConstantUnion *writeConstantUnion(const TType &type, const TConstantUnion *pConstUnion);
...@@ -86,7 +86,7 @@ class TOutputGLSLBase : public TIntermTraverser ...@@ -86,7 +86,7 @@ class TOutputGLSLBase : public TIntermTraverser
void writeBuiltInFunctionTriplet(Visit visit, TOperator op, bool useEmulatedFunction); void writeBuiltInFunctionTriplet(Visit visit, TOperator op, bool useEmulatedFunction);
const char *mapQualifierToString(TQualifier qialifier); const char *mapQualifierToString(TQualifier qualifier, const TSymbol *symbol);
TInfoSinkBase &mObjSink; TInfoSinkBase &mObjSink;
bool mDeclaringVariable; bool mDeclaringVariable;
......
...@@ -332,12 +332,14 @@ bool VaryingPacking::collectAndPackUserVaryings(gl::InfoLog &infoLog, ...@@ -332,12 +332,14 @@ bool VaryingPacking::collectAndPackUserVaryings(gl::InfoLog &infoLog,
} }
} }
// Keep Transform FB varyings in the merged list always. // If the varying is not used in the VS, we know it is inactive.
if (!input) if (!input)
{ {
mInactiveVaryingNames.push_back(ref.first);
continue; continue;
} }
// Keep Transform FB varyings in the merged list always.
for (const std::string &tfVarying : tfVaryings) for (const std::string &tfVarying : tfVaryings)
{ {
std::vector<unsigned int> subscripts; std::vector<unsigned int> subscripts;
...@@ -384,6 +386,11 @@ bool VaryingPacking::collectAndPackUserVaryings(gl::InfoLog &infoLog, ...@@ -384,6 +386,11 @@ bool VaryingPacking::collectAndPackUserVaryings(gl::InfoLog &infoLog,
} }
} }
} }
if (uniqueFullNames.count(ref.first) == 0)
{
mInactiveVaryingNames.push_back(ref.first);
}
} }
std::sort(mPackedVaryings.begin(), mPackedVaryings.end(), ComparePackedVarying); std::sort(mPackedVaryings.begin(), mPackedVaryings.end(), ComparePackedVarying);
...@@ -429,4 +436,8 @@ bool VaryingPacking::packUserVaryings(gl::InfoLog &infoLog, ...@@ -429,4 +436,8 @@ bool VaryingPacking::packUserVaryings(gl::InfoLog &infoLog,
return true; return true;
} }
const std::vector<std::string> &VaryingPacking::getInactiveVaryingNames() const
{
return mInactiveVaryingNames;
}
} // namespace rx } // namespace rx
...@@ -179,6 +179,8 @@ class VaryingPacking final : angle::NonCopyable ...@@ -179,6 +179,8 @@ class VaryingPacking final : angle::NonCopyable
return static_cast<unsigned int>(mRegisterList.size()); return static_cast<unsigned int>(mRegisterList.size());
} }
const std::vector<std::string> &getInactiveVaryingNames() const;
private: private:
bool packVarying(const PackedVarying &packedVarying); bool packVarying(const PackedVarying &packedVarying);
bool isFree(unsigned int registerRow, bool isFree(unsigned int registerRow,
...@@ -192,6 +194,7 @@ class VaryingPacking final : angle::NonCopyable ...@@ -192,6 +194,7 @@ class VaryingPacking final : angle::NonCopyable
std::vector<Register> mRegisterMap; std::vector<Register> mRegisterMap;
std::vector<PackedVaryingRegister> mRegisterList; std::vector<PackedVaryingRegister> mRegisterList;
std::vector<PackedVarying> mPackedVaryings; std::vector<PackedVarying> mPackedVaryings;
std::vector<std::string> mInactiveVaryingNames;
PackMode mPackMode; PackMode mPackMode;
}; };
......
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