diff options
| author | lucy96chen <47800040+lucy96chen@users.noreply.github.com> | 2022-10-12 09:55:09 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-12 09:55:09 -0700 |
| commit | f0cd62b37c5dfbbdb3fb205f1be2b8beba0dfed4 (patch) | |
| tree | 97d031e889046ac992b729d85e2db1cd3597e317 /tools/gfx/renderer-shared.h | |
| parent | 5128de89a9a8da09587f20e8fb5bc324ea14e0df (diff) | |
Shader caching (#2432)
* Changed all getEntryPointCode calls to use RendererBase::getEntryPointCodeFromShaderCache
* Hashing hooked up, tests pass but need to add more to fully test functionality
* checkpoint
* Checkpoint: File system creation seems functional, saving is broken
* checkpoint: Fixed filename generation from MD5 hash, shader blob might be going missing ahead of pipeline state creation
* Fixed a lot of bugs related to hash code generation, shader cache is likely working but needs further testing
* Added workaround for module loading by re-creating the test device, shader cache test functional
* Vulkan shader caching bug fixed, checkpoint commit before more refinement
* pre-ToT merge checkpoint
* checkpoint commit, improving cache keys
* Significantly expanded items included in the dependency hash for Module; Added dependency hash functions to SpecializedComponentType and RenamedEntryPointComponentType
* Temporarily disable shader cache test
* Mid cleanup changes, solution successfully builds
* Added several helper update functions to slang-md5 to help simplify usage; Added a function under ISession to compute a hash for all linkage-related items; Function renames and cleaned up some comments
* Ran premake.bat; Renamed getASTBasedHashCode to computeASTBasedHash
* Added slang unit tests for Checksum and MD5; Extended gfx shader cache test to test with multiple shader files and one shader file with multiple entry points
* Solution builds and shader cache tests pass, but at least a couple other tests now failing
* ran premake.bat
* More cleanup changes
* Added shaderCachePath field to IDevice desc in gfx.slang, gfx-smoke.slang should be functional
* ran premake
* cleanup changes; Adding test printf to getEntryPointCodeFromShaderCache to see if output can be seen in CI
* Removed debugging printfs; Added handling for getEntryPointCode() failing
* Cleanup changes; Jonathan's fixes to SerialWriter to zero initialize otherwise uninitialized memory; Change to SwizzleExpr creation to zero initialize elementCount
* Changed enable_if_t to enable_if
* Fixed enable_if
* Added test for import vs include and changes to included and imported files; Fixed build errors in CUDA; Renamed shader cache statistics fields
* cleanup changes
* Readd removed file
* Restructured computeDependencyBasedHash calls, added computeDependencyBasedHashImpl to all classes dervied from ComponentType
* Applied same restructuring to the AST hash functions
* Cleanup changes; Moved HashBuilder out to slang-digest.h and added some helper functions to streamline the process of adding items to a hash
* Cleanup; Fixed incorrect expected results for shader import and include test
Diffstat (limited to 'tools/gfx/renderer-shared.h')
| -rw-r--r-- | tools/gfx/renderer-shared.h | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/tools/gfx/renderer-shared.h b/tools/gfx/renderer-shared.h index d0e4b52fb..a753fe017 100644 --- a/tools/gfx/renderer-shared.h +++ b/tools/gfx/renderer-shared.h @@ -26,6 +26,7 @@ struct GfxGUID static const Slang::Guid IID_ITextureResource; static const Slang::Guid IID_IInputLayout; static const Slang::Guid IID_IDevice; + static const Slang::Guid IID_IShaderCacheStatistics; static const Slang::Guid IID_IShaderObjectLayout; static const Slang::Guid IID_IShaderObject; static const Slang::Guid IID_IRenderPassLayout; @@ -857,7 +858,7 @@ public: return false; } - Slang::Result compileShaders(); + Slang::Result compileShaders(RendererBase* device); virtual Slang::Result createShaderModule( slang::EntryPointReflection* entryPointInfo, Slang::ComPtr<ISlangBlob> kernelCode); @@ -1211,11 +1212,12 @@ public: // Renderer implementation shared by all platforms. // Responsible for shader compilation, specialization and caching. -class RendererBase : public IDevice, public Slang::ComObject +class RendererBase : public IDevice, public IShaderCacheStatistics, public Slang::ComObject { friend class ShaderObjectBase; public: - SLANG_COM_OBJECT_IUNKNOWN_ALL + SLANG_COM_OBJECT_IUNKNOWN_ADD_REF + SLANG_COM_OBJECT_IUNKNOWN_RELEASE virtual SLANG_NO_THROW Result SLANG_MCALL getNativeDeviceHandles(InteropHandles* outHandles) SLANG_OVERRIDE; virtual SLANG_NO_THROW Result SLANG_MCALL getFeatures( @@ -1224,6 +1226,8 @@ public: virtual SLANG_NO_THROW Result SLANG_MCALL getFormatSupportedResourceStates(Format format, ResourceStateSet* outStates) override; virtual SLANG_NO_THROW Result SLANG_MCALL getSlangSession(slang::ISession** outSlangSession) SLANG_OVERRIDE; + virtual SLANG_NO_THROW SlangResult SLANG_MCALL + queryInterface(SlangUUID const& uuid, void** outObject) SLANG_OVERRIDE; IDevice* getInterface(const Slang::Guid& guid); virtual SLANG_NO_THROW Result SLANG_MCALL createTextureFromNativeHandle( @@ -1309,6 +1313,13 @@ public: // Provides a default implementation that returns SLANG_E_NOT_AVAILABLE. virtual SLANG_NO_THROW Result SLANG_MCALL getTextureRowAlignment(size_t* outAlignment) override; + Result getEntryPointCodeFromShaderCache( + slang::IComponentType* program, + SlangInt entryPointIndex, + SlangInt targetIndex, + slang::IBlob** outCode, + slang::IBlob** outDiagnostics = nullptr); + Result getShaderObjectLayout( slang::TypeReflection* type, ShaderObjectContainerType container, @@ -1347,9 +1358,23 @@ protected: Slang::List<Slang::String> m_features; public: + virtual SLANG_NO_THROW GfxCount SLANG_MCALL getCacheMissCount() override; + virtual SLANG_NO_THROW GfxCount SLANG_MCALL getCacheHitCount() override; + virtual SLANG_NO_THROW GfxCount SLANG_MCALL getCacheEntryDirtyCount() override; + virtual SLANG_NO_THROW Result SLANG_MCALL resetCacheStatistics() override; + +protected: + GfxCount shaderCacheMissCount = 0; + GfxCount shaderCacheHitCount = 0; + GfxCount shaderCacheEntryDirtyCount = 0; + +public: SlangContext slangContext; ShaderCache shaderCache; + ISlangFileSystem* shaderCacheFileSystem = nullptr; + ComPtr<ISlangMutableFileSystem> mutableShaderCacheFileSystem = nullptr; + Slang::Dictionary<slang::TypeLayoutReflection*, Slang::RefPtr<ShaderObjectLayoutBase>> m_shaderObjectLayoutCache; Slang::ComPtr<IPipelineCreationAPIDispatcher> m_pipelineCreationAPIDispatcher; }; |
