summaryrefslogtreecommitdiffstats
path: root/source/slang/slang.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang.cpp')
-rw-r--r--source/slang/slang.cpp33
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);