diff options
| author | Yong He <yonghe@outlook.com> | 2024-03-18 15:16:15 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-18 15:16:15 -0700 |
| commit | 7f6e95917bb1929115b4cffa2ed9035aa8710ee4 (patch) | |
| tree | 8a84264fe3d7e0c103c5a69446d3b3059f1d52da /source/slang/slang.cpp | |
| parent | 2d41012ed2649093a58433eae60419d24073da90 (diff) | |
Fix name mangling and source file finding logic for precompiled module validation. (#3784)
* Fix name mangling.
* Fix source validation.
* Caching and search path fixes.
Diffstat (limited to 'source/slang/slang.cpp')
| -rw-r--r-- | source/slang/slang.cpp | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/source/slang/slang.cpp b/source/slang/slang.cpp index 978dff7c4..241ec7f43 100644 --- a/source/slang/slang.cpp +++ b/source/slang/slang.cpp @@ -486,6 +486,7 @@ SlangResult Session::_readBuiltinModule(ISlangFileSystem* fileSystem, Scope* sco { RefPtr<Module> module(new Module(linkage, srcModule.astBuilder)); module->setName(moduleName); + module->setDigest(srcModule.digest); ModuleDecl* moduleDecl = as<ModuleDecl>(srcModule.astRootNode); // Set the module back reference on the decl @@ -3699,7 +3700,7 @@ bool Linkage::isBinaryModuleUpToDate(String fromPath, RiffContainer* container) // If we cannot find the source file from `fromPath`, // try again from the module's source file path. if (moduleHeader.dependentFiles.getCount() != 0) - sourceFile = loadSourceFile(moduleHeader.dependentFiles.getFirst(), file); + sourceFile = loadSourceFile(Path::getParentDirectory(moduleHeader.dependentFiles.getFirst()), file); } if (!sourceFile) return false; @@ -3922,7 +3923,27 @@ ISlangUnknown* Module::getInterface(const Guid& guid) void Module::buildHash(DigestBuilder<SHA1>& builder) { - SLANG_UNUSED(builder); + builder.append(computeDigest()); +} + +SHA1::Digest Module::computeDigest() +{ + if (m_digest == SHA1::Digest()) + { + DigestBuilder<SHA1> digestBuilder; + auto version = String(getBuildTagString()); + digestBuilder.append(version); + getOptionSet().buildHash(digestBuilder); + + auto fileDependencies = getFileDependencies(); + + for (auto file : fileDependencies) + { + digestBuilder.append(file->getDigest()); + } + m_digest = digestBuilder.finalize(); + } + return m_digest; } void Module::addModuleDependency(Module* module) @@ -4245,12 +4266,6 @@ SLANG_NO_THROW void SLANG_MCALL ComponentType::getEntryPointHash( // will already be reflected in the resulting hash. getLinkage()->buildHash(builder, targetIndex); - // Enumerate all file dependencies and add them to the hash. - for (SourceFile* sourceFile : getFileDependencies()) - { - builder.append(sourceFile->getDigest()); - } - buildHash(builder); // Add the name and name override for the specified entry point to the hash. @@ -5239,7 +5254,7 @@ void Linkage::prepareDeserializedModule(SerialContainerData::Module& moduleEntry } } module->setPathInfo(filePathInfo); - + module->setDigest(moduleEntry.digest); module->_collectShaderParams(); module->_discoverEntryPoints(sink); |
