diff options
| author | skallweitNV <64953474+skallweitNV@users.noreply.github.com> | 2022-12-02 16:34:53 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-02 16:34:53 +0100 |
| commit | e9b7c66a541636e72659fbfcc9a3f20a85f2bee8 (patch) | |
| tree | b65942799ff6267ebe29c8b64056819461621be7 /tools/gfx | |
| parent | 92ae4949fe1af28ef31331fd4116c8111c057420 (diff) | |
Cleanup crypto utilities (#2549)
* Consolidate crypto functions into single module
* Migrate rest of code to new crypto module
* Fix name conflict
Diffstat (limited to 'tools/gfx')
| -rw-r--r-- | tools/gfx/persistent-shader-cache.cpp | 31 | ||||
| -rw-r--r-- | tools/gfx/persistent-shader-cache.h | 15 | ||||
| -rw-r--r-- | tools/gfx/renderer-shared.cpp | 11 |
3 files changed, 30 insertions, 27 deletions
diff --git a/tools/gfx/persistent-shader-cache.cpp b/tools/gfx/persistent-shader-cache.cpp index 54c46f9dc..7dc64632b 100644 --- a/tools/gfx/persistent-shader-cache.cpp +++ b/tools/gfx/persistent-shader-cache.cpp @@ -1,7 +1,6 @@ // slang-shader-cache-index.cpp #include "persistent-shader-cache.h" -#include "../../source/core/slang-digest-util.h" #include "../../source/core/slang-io.h" #include "../../source/core/slang-string-util.h" #include "../../source/core/slang-file-system.h" @@ -128,7 +127,7 @@ void PersistentShaderCache::loadCacheFromFile() } } -ShaderCacheEntry* PersistentShaderCache::findEntry(const slang::Digest& key, ISlangBlob** outCompiledCode) +ShaderCacheEntry* PersistentShaderCache::findEntry(const DigestType& key, ISlangBlob** outCompiledCode) { LinkedNode<Index>* entryIndexNode; if (!keyToEntry.TryGetValue(key, entryIndexNode)) @@ -140,7 +139,7 @@ ShaderCacheEntry* PersistentShaderCache::findEntry(const slang::Digest& key, ISl // If the key is found, load the stored contents from disk. We then move the corresponding // entry to the front of the linked list and update the cache file on disk - desc.shaderCacheFileSystem->loadFile(DigestUtil::toString(key).getBuffer(), outCompiledCode); + desc.shaderCacheFileSystem->loadFile(key.toString().getBuffer(), outCompiledCode); auto index = entryIndexNode->Value; entries[index].lastAccessedTime = (double)high_resolution_clock::now().time_since_epoch().count(); if (orderedEntries.FirstNode() != entryIndexNode) @@ -150,7 +149,7 @@ ShaderCacheEntry* PersistentShaderCache::findEntry(const slang::Digest& key, ISl if (mutableShaderCacheFileSystem && !isMemoryFileSystem) { auto offset = index * sizeof(ShaderCacheEntry); - indexStream.seek(SeekOrigin::Start, offset + 2 * sizeof(slang::Digest)); + indexStream.seek(SeekOrigin::Start, offset + 2 * sizeof(DigestType)); indexStream.write(&entries[index].lastAccessedTime, sizeof(double)); indexStream.flush(); } @@ -158,7 +157,7 @@ ShaderCacheEntry* PersistentShaderCache::findEntry(const slang::Digest& key, ISl return &entries[index]; } -void PersistentShaderCache::addEntry(const slang::Digest& dependencyDigest, const slang::Digest& contentsDigest, ISlangBlob* compiledCode) +void PersistentShaderCache::addEntry(const DigestType& dependencyDigest, const DigestType& contentsDigest, ISlangBlob* compiledCode) { if (!mutableShaderCacheFileSystem) { @@ -197,7 +196,7 @@ void PersistentShaderCache::addEntry(const slang::Digest& dependencyDigest, cons } keyToEntry.Add(dependencyDigest, entryNode); - mutableShaderCacheFileSystem->saveFileBlob(DigestUtil::toString(dependencyDigest).getBuffer(), compiledCode); + mutableShaderCacheFileSystem->saveFileBlob(dependencyDigest.toString().getBuffer(), compiledCode); if (!isMemoryFileSystem) { @@ -208,8 +207,8 @@ void PersistentShaderCache::addEntry(const slang::Digest& dependencyDigest, cons } void PersistentShaderCache::updateEntry( - const slang::Digest& dependencyDigest, - const slang::Digest& contentsDigest, + const DigestType& dependencyDigest, + const DigestType& contentsDigest, ISlangBlob* updatedCode) { if (!mutableShaderCacheFileSystem) @@ -224,13 +223,13 @@ void PersistentShaderCache::updateEntry( auto entryIndexNode = *keyToEntry.TryGetValue(dependencyDigest); auto index = entryIndexNode->Value; entries[index].contentsBasedDigest = contentsDigest; - mutableShaderCacheFileSystem->saveFileBlob(DigestUtil::toString(dependencyDigest).getBuffer(), updatedCode); + mutableShaderCacheFileSystem->saveFileBlob(dependencyDigest.toString().getBuffer(), updatedCode); if (!isMemoryFileSystem) { auto offset = index * sizeof(ShaderCacheEntry); - indexStream.seek(SeekOrigin::Start, offset + sizeof(slang::Digest)); - indexStream.write(&contentsDigest, sizeof(slang::Digest)); + indexStream.seek(SeekOrigin::Start, offset + sizeof(DigestType)); + indexStream.write(&contentsDigest, sizeof(DigestType)); indexStream.flush(); } } @@ -250,7 +249,7 @@ Index PersistentShaderCache::deleteLRUEntry() auto shaderKey = entries[index].dependencyBasedDigest; keyToEntry.Remove(shaderKey); - mutableShaderCacheFileSystem->remove(DigestUtil::toString(shaderKey).getBuffer()); + mutableShaderCacheFileSystem->remove(shaderKey.toString().getBuffer()); orderedEntries.Delete(lruEntry); return index; @@ -286,8 +285,8 @@ void PersistentShaderCache::loadCacheFromMemory() continue; ShaderCacheEntry entry; - entry.dependencyBasedDigest = DigestUtil::fromString(entryFields[0]); - entry.contentsBasedDigest = DigestUtil::fromString(entryFields[1]); + entry.dependencyBasedDigest = DigestType(entryFields[0]); + entry.contentsBasedDigest = DigestType(entryFields[1]); entry.lastAccessedTime = 0; auto entryNode = orderedEntries.AddLast(entries.getCount()); @@ -305,9 +304,9 @@ void PersistentShaderCache::saveCacheToMemory() for (auto& entryIndex : orderedEntries) { auto entry = entries[entryIndex]; - indexSb << entry.dependencyBasedDigest; + indexSb << entry.dependencyBasedDigest.toString(); indexSb << " "; - indexSb << entry.contentsBasedDigest; + indexSb << entry.contentsBasedDigest.toString(); indexSb << "\n"; } diff --git a/tools/gfx/persistent-shader-cache.h b/tools/gfx/persistent-shader-cache.h index 8e05eddf6..530d50a58 100644 --- a/tools/gfx/persistent-shader-cache.h +++ b/tools/gfx/persistent-shader-cache.h @@ -8,16 +8,19 @@ #include "../../source/core/slang-dictionary.h" #include "../../source/core/slang-linked-list.h" #include "../../source/core/slang-stream.h" +#include "../../source/core/slang-crypto.h" namespace gfx { using namespace Slang; +using DigestType = MD5::Digest; + struct ShaderCacheEntry { - slang::Digest dependencyBasedDigest; - slang::Digest contentsBasedDigest; + DigestType dependencyBasedDigest; + DigestType contentsBasedDigest; double lastAccessedTime; bool operator==(const ShaderCacheEntry& rhs) @@ -42,16 +45,16 @@ public: // Fetch the cache entry corresponding to the provided key. If found, move the entry to // the front of entries and return the entry and the corresponding compiled code in // outCompiledCode. Else, return nullptr. - ShaderCacheEntry* findEntry(const slang::Digest& key, ISlangBlob** outCompiledCode); + ShaderCacheEntry* findEntry(const DigestType& key, ISlangBlob** outCompiledCode); // Add an entry to the cache with the provided key and contents hashes. If // adding an entry causes the cache to exceed size limitations, this will also // delete the least recently used entry. - void addEntry(const slang::Digest& dependencyDigest, const slang::Digest& contentsDigest, ISlangBlob* compiledCode); + void addEntry(const DigestType& dependencyDigest, const DigestType& contentsDigest, ISlangBlob* compiledCode); // Update the contents hash for the specified entry in the cache and update the // corresponding file on disk. - void updateEntry(const slang::Digest& dependencyDigest, const slang::Digest& contentsDigest, ISlangBlob* updatedCode); + void updateEntry(const DigestType& dependencyDigest, const DigestType& contentsDigest, ISlangBlob* updatedCode); private: // Load a previous cache index saved to disk. If not found, create a new cache index @@ -82,7 +85,7 @@ private: // Dictionary mapping each shader's key to its corresponding node (entry) in the // linked list 'orderedEntries'. - Dictionary<slang::Digest, LinkedNode<Index>*> keyToEntry; + Dictionary<DigestType, LinkedNode<Index>*> keyToEntry; // Linked list containing the corresponding indices in 'entries' for entries in the // shader cache ordered from most to least recently used. diff --git a/tools/gfx/renderer-shared.cpp b/tools/gfx/renderer-shared.cpp index 3dcdb324c..3397b325e 100644 --- a/tools/gfx/renderer-shared.cpp +++ b/tools/gfx/renderer-shared.cpp @@ -6,7 +6,6 @@ #include "../../source/core/slang-file-system.h" #include "../../slang.h" -#include "../../source/core/slang-digest-util.h" using namespace Slang; @@ -349,13 +348,15 @@ Result RendererBase::getEntryPointCodeFromShaderCache( ComPtr<slang::ISession> session; getSlangSession(session.writeRef()); - slang::Digest shaderKey; - program->computeDependencyBasedHash(entryPointIndex, targetIndex, &shaderKey); + ComPtr<ISlangBlob> shaderKeyBlob; + program->computeDependencyBasedHash(entryPointIndex, targetIndex, shaderKeyBlob.writeRef()); + DigestType shaderKey(shaderKeyBlob); // Produce a hash using the AST for this program - This is needed to check whether a cache entry is effectively dirty, // or to save along with the compiled code into an entry so the entry can be checked if fetched later on. - slang::Digest contentsHash; - program->computeContentsBasedHash(&contentsHash); + ComPtr<ISlangBlob> contentsHashBlob; + program->computeContentsBasedHash(contentsHashBlob.writeRef()); + DigestType contentsHash(contentsHashBlob); ComPtr<ISlangBlob> codeBlob; |
