Added function to merge source files when linking shaders.

This commit is contained in:
Patrick 2023-02-22 20:37:22 +01:00
parent ec5a3c423e
commit b2b90e54e2
2 changed files with 34 additions and 0 deletions

View File

@ -88,6 +88,7 @@ void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit)
mergeCallGraphs(infoSink, unit); mergeCallGraphs(infoSink, unit);
mergeModes(infoSink, unit); mergeModes(infoSink, unit);
mergeTrees(infoSink, unit); mergeTrees(infoSink, unit);
mergeSources(infoSink, unit); // @MEWIN 2023-02-22 - Added function to merge source files when linking shaders.
} }
// //
@ -373,6 +374,38 @@ void TIntermediate::mergeTrees(TInfoSink& infoSink, TIntermediate& unit)
ioAccessed.insert(unit.ioAccessed.begin(), unit.ioAccessed.end()); ioAccessed.insert(unit.ioAccessed.begin(), unit.ioAccessed.end());
} }
// BEGIN @MEWIN - 2023-02-22 - Added function to merge source files when linking shaders.
void TIntermediate::mergeSources(TInfoSink& infoSink, TIntermediate& unit)
{
auto addSource = [&](const char* name, const char* text, size_t len)
{
if (sourceFile == name) {
return;
}
auto it = includeText.find(name);
if (it != includeText.end()) {
return;
}
if (sourceText.empty())
{
setSourceFile(name);
addSourceText(text, len);
}
else {
addIncludeText(name, text, len);
}
};
if (!unit.getSourceFile().empty()) {
addSource(unit.getSourceFile().c_str(), unit.getSourceText().c_str(), unit.getSourceText().length());
}
for (const auto& [name, text] : unit.includeText) {
addSource(name.c_str(), text.c_str(), text.length());
}
}
// END @MEWIN
static const TString& getNameForIdMap(TIntermSymbol* symbol) static const TString& getNameForIdMap(TIntermSymbol* symbol)
{ {
TShaderInterface si = symbol->getType().getShaderInterface(); TShaderInterface si = symbol->getType().getShaderInterface();

View File

@ -1098,6 +1098,7 @@ protected:
void mergeCallGraphs(TInfoSink&, TIntermediate&); void mergeCallGraphs(TInfoSink&, TIntermediate&);
void mergeModes(TInfoSink&, TIntermediate&); void mergeModes(TInfoSink&, TIntermediate&);
void mergeTrees(TInfoSink&, TIntermediate&); void mergeTrees(TInfoSink&, TIntermediate&);
void mergeSources(TInfoSink&, TIntermediate&); // @MEWIN 2023-02-22 - Added function to merge source files when linking shaders.
void seedIdMap(TIdMaps& idMaps, long long& IdShift); void seedIdMap(TIdMaps& idMaps, long long& IdShift);
void remapIds(const TIdMaps& idMaps, long long idShift, TIntermediate&); void remapIds(const TIdMaps& idMaps, long long idShift, TIntermediate&);
void mergeBodies(TInfoSink&, TIntermSequence& globals, const TIntermSequence& unitGlobals); void mergeBodies(TInfoSink&, TIntermSequence& globals, const TIntermSequence& unitGlobals);