From b2b90e54e2bbbbf1a4c0a6bb7a3ad8c11b9df034 Mon Sep 17 00:00:00 2001 From: Patrick Wuttke Date: Wed, 22 Feb 2023 20:37:22 +0100 Subject: [PATCH] Added function to merge source files when linking shaders. --- glslang/MachineIndependent/linkValidate.cpp | 33 +++++++++++++++++++ .../MachineIndependent/localintermediate.h | 1 + 2 files changed, 34 insertions(+) diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index d69300b8..62a1166c 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -88,6 +88,7 @@ void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit) mergeCallGraphs(infoSink, unit); mergeModes(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()); } +// 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) { TShaderInterface si = symbol->getType().getShaderInterface(); diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 2f0e65ce..88ff43b7 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -1098,6 +1098,7 @@ protected: void mergeCallGraphs(TInfoSink&, TIntermediate&); void mergeModes(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 remapIds(const TIdMaps& idMaps, long long idShift, TIntermediate&); void mergeBodies(TInfoSink&, TIntermSequence& globals, const TIntermSequence& unitGlobals);