From daa0392170b3a1b4718e4aa9986db4b2ebb2d2d7 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Wed, 11 Dec 2024 13:56:06 +0000 Subject: [PATCH] Extend D3D12 GetShaderBlob() to allow passing arbitrary compile options Pass via ShaderCompileFlag with name "@compile_option" and value is the compile option to add Added helper to return D3D12 Shader Cache m_CompileFlags --- renderdoc/driver/d3d12/d3d12_shader_cache.cpp | 5 +++++ renderdoc/driver/d3d12/d3d12_shader_cache.h | 2 ++ 2 files changed, 7 insertions(+) diff --git a/renderdoc/driver/d3d12/d3d12_shader_cache.cpp b/renderdoc/driver/d3d12/d3d12_shader_cache.cpp index 451fac839..da01a5c3e 100644 --- a/renderdoc/driver/d3d12/d3d12_shader_cache.cpp +++ b/renderdoc/driver/d3d12/d3d12_shader_cache.cpp @@ -495,6 +495,11 @@ rdcstr D3D12ShaderCache::GetShaderBlob(const char *source, const char *entry, uint32_t flags = DXBC::DecodeFlags(compileFlags) & ~D3DCOMPILE_NO_PRESHADER; rdcarray argsData; DXBC::EncodeDXCFlags(flags, argsData); + for(const ShaderCompileFlag &flag : compileFlags.flags) + { + if(flag.name == "@compile_option") + argsData.push_back(StringFormat::UTF82Wide(flag.value)); + } argsData.push_back(L"-select-validator internal"); rdcarray arguments; for(const rdcwstr &arg : argsData) diff --git a/renderdoc/driver/d3d12/d3d12_shader_cache.h b/renderdoc/driver/d3d12/d3d12_shader_cache.h index 0372f13bc..834b11c5c 100644 --- a/renderdoc/driver/d3d12/d3d12_shader_cache.h +++ b/renderdoc/driver/d3d12/d3d12_shader_cache.h @@ -57,6 +57,8 @@ public: void LoadDXC(); void SetCaching(bool enabled) { m_CacheShaders = enabled; } + uint32_t GetCompileFlags() const { return m_CompileFlags; } + private: static const uint32_t m_ShaderCacheMagic = 0xf000baba; static const uint32_t m_ShaderCacheVersion = 3;