summaryrefslogtreecommitdiff
path: root/source/slang
diff options
context:
space:
mode:
authorlucy96chen <47800040+lucy96chen@users.noreply.github.com>2022-10-13 16:00:05 -0700
committerGitHub <noreply@github.com>2022-10-13 16:00:05 -0700
commite03026a07c4aa32c1a2de5ce199d910d74511c27 (patch)
treeddf2282242353a3daabe01a6836365e8dc02a5fc /source/slang
parent09054f7ae00aad0458de465a7f0b780a91c694dd (diff)
Add getVersionString() to IDownstreamCompiler (#2446)
* checkpoint * Added shaderCachePath field to IDevice desc in gfx.slang, gfx-smoke.slang should be functional * ran premake * Added getVersionString() to IDownstreamCompiler and implemented it in DownstreamCompilerBase, GlslangDownstreamCompiler, and DXCDownstreamCompiler * Added hashInto to Val and implemented for all subtypes which contain _getHashCodeOverride implementations; nothing hooked up to caching yet * Revert erroneous commits from rebasing * Re-ran premake.bat; changed hashInto implementations to _hashIntoOverride * downstream compiler getVersionString hooked up into shader cache * Rebuild CI, Win32 Release builds successfully locally * Rebuild CI, Win32 and x64 Release build successfully locally * Reverted Val::hashInto changes, deferred for later; modified init() for downstream compilers to fetch, hash, and save the hashes of their corresponding dlls (currently implemented for glslang and dxc), changed getVersionString() to directly return the saved hash for key computation * call site changes post-merge; fixing CI build failures * Removed remaining hashInto; Updated hashToString to produce string one byte at a time * Fixed expected output to match new hashToString output order * Missed string edit in hashing related unit tests * Updated dxcapi.h; Replaced getVersionString implementation in glslang with the shared library timestamp, dxc implementation queries for IDxcVersionInfo and IDxcVersionInfo2 then fetches and returns the relevant values * Fixing CI build failures * Changed RawBlob to StringBlob for strings * Modified getVersionString for dxc to always return either the version plus commit hash or shared library timestamp
Diffstat (limited to 'source/slang')
-rw-r--r--source/slang/slang-ast-base.h2
-rw-r--r--source/slang/slang-ast-type.cpp1
-rw-r--r--source/slang/slang-ast-type.h3
-rw-r--r--source/slang/slang-ast-val.h2
-rw-r--r--source/slang/slang-hash-utils.h9
-rw-r--r--source/slang/slang.cpp12
6 files changed, 21 insertions, 8 deletions
diff --git a/source/slang/slang-ast-base.h b/source/slang/slang-ast-base.h
index dea02afbb..04788340a 100644
--- a/source/slang/slang-ast-base.h
+++ b/source/slang/slang-ast-base.h
@@ -9,6 +9,8 @@
#include "slang-serialize-reflection.h"
+#include "../core/slang-digest.h"
+
// This file defines the primary base classes for the hierarchy of
// AST nodes and related objects. For example, this is where the
// basic `Decl`, `Stmt`, `Expr`, `type`, etc. definitions come from.
diff --git a/source/slang/slang-ast-type.cpp b/source/slang/slang-ast-type.cpp
index 39b7a8e04..480589af4 100644
--- a/source/slang/slang-ast-type.cpp
+++ b/source/slang/slang-ast-type.cpp
@@ -1089,7 +1089,6 @@ Val* AndType::_substituteImplOverride(ASTBuilder* astBuilder, SubstitutionSet su
// ModifiedType
-
void ModifiedType::_toTextOverride(StringBuilder& out)
{
for( auto modifier : modifiers )
diff --git a/source/slang/slang-ast-type.h b/source/slang/slang-ast-type.h
index 5bb91e5da..895b64f35 100644
--- a/source/slang/slang-ast-type.h
+++ b/source/slang/slang-ast-type.h
@@ -26,7 +26,6 @@ class InitializerListType : public Type
{
SLANG_AST_CLASS(InitializerListType)
-
// Overrides should be public so base classes can access
void _toTextOverride(StringBuilder& out);
Type* _createCanonicalTypeOverride();
@@ -694,7 +693,7 @@ class NamespaceType : public Type
void _toTextOverride(StringBuilder& out);
bool _equalsImplOverride(Type* type);
HashCode _getHashCodeOverride();
- Type* _createCanonicalTypeOverride();
+ Type* _createCanonicalTypeOverride();
};
// The concrete type for a value wrapped in an existential, accessible
diff --git a/source/slang/slang-ast-val.h b/source/slang/slang-ast-val.h
index a67d62e3b..49189f65c 100644
--- a/source/slang/slang-ast-val.h
+++ b/source/slang/slang-ast-val.h
@@ -3,6 +3,7 @@
#pragma once
#include "slang-ast-base.h"
+#include "../core/slang-digest.h"
namespace Slang {
@@ -379,7 +380,6 @@ class TaggedUnionSubtypeWitness : public SubtypeWitness
//
List<Val*> caseWitnesses;
-
// Overrides should be public so base classes can access
bool _equalsValOverride(Val* val);
void _toTextOverride(StringBuilder& out);
diff --git a/source/slang/slang-hash-utils.h b/source/slang/slang-hash-utils.h
index 62232dd21..c354e43f0 100644
--- a/source/slang/slang-hash-utils.h
+++ b/source/slang/slang-hash-utils.h
@@ -29,12 +29,13 @@ namespace Slang
{
StringBuilder filename;
- for (Index i = 0; i < 4; ++i)
+ uint8_t* uint8Hash = (uint8_t*)hash.values;
+
+ for (Index i = 0; i < 16; ++i)
{
- auto hashSegmentString = String(hash.values[i], 16);
+ auto hashSegmentString = String(uint8Hash[i], 16);
- auto leadingZeroCount = 8 - hashSegmentString.getLength();
- for (Index j = 0; j < leadingZeroCount; ++j)
+ if (hashSegmentString.getLength() == 1)
{
filename.append("0");
}
diff --git a/source/slang/slang.cpp b/source/slang/slang.cpp
index 20cad2465..3fb89c549 100644
--- a/source/slang/slang.cpp
+++ b/source/slang/slang.cpp
@@ -1367,6 +1367,18 @@ void Linkage::updateDependencyBasedHash(
{
builder.addToDigest(capability);
}
+
+ // Add the downstream compiler version (if it exists) to the hash
+ auto passThroughMode = getDownstreamCompilerRequiredForTarget(targetReq->getTarget());
+ auto downstreamCompiler = getSessionImpl()->getOrLoadDownstreamCompiler(passThroughMode, nullptr);
+ if (downstreamCompiler)
+ {
+ ComPtr<ISlangBlob> versionString;
+ if (SLANG_SUCCEEDED(downstreamCompiler->getVersionString(versionString.writeRef())))
+ {
+ builder.addToDigest(versionString);
+ }
+ }
}
SlangResult Linkage::addSearchPath(