From 89ec199c34368f0ad06cff9131ef128ed281e725 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Sun, 10 Dec 2017 12:21:33 +0100 Subject: [PATCH] [d3d11] Re-implemented shader read --- src/d3d11/d3d11_shader.cpp | 16 ++++++++++++++++ src/dxvk/dxvk_shader.cpp | 5 +++++ src/dxvk/dxvk_shader.h | 8 ++++++++ 3 files changed, 29 insertions(+) diff --git a/src/d3d11/d3d11_shader.cpp b/src/d3d11/d3d11_shader.cpp index 3e172936..98b9693f 100644 --- a/src/d3d11/d3d11_shader.cpp +++ b/src/d3d11/d3d11_shader.cpp @@ -35,6 +35,22 @@ namespace dxvk { m_shader->dump(std::ofstream(str::format(baseName, ".spv"), std::ios_base::binary | std::ios_base::trunc)); } + + + // If requested by the user, replace + // the shader with another file. + const std::string readPath + = env::getEnvVar(L"DXVK_SHADER_READ_PATH"); + + if (readPath.size() != 0) { + const std::string baseName = str::format(readPath, "/", + ConstructFileName(ComputeShaderHash(pShaderBytecode, BytecodeLength), + module.version().type())); + + m_shader->read(std::ifstream( + str::format(baseName, ".spv"), + std::ios_base::binary)); + } } diff --git a/src/dxvk/dxvk_shader.cpp b/src/dxvk/dxvk_shader.cpp index 2f90dbda..74deb6ea 100644 --- a/src/dxvk/dxvk_shader.cpp +++ b/src/dxvk/dxvk_shader.cpp @@ -88,4 +88,9 @@ namespace dxvk { m_code.store(std::move(outputStream)); } + + void DxvkShader::read(std::istream&& inputStream) { + m_code = SpirvCodeBuffer(std::move(inputStream)); + } + } \ No newline at end of file diff --git a/src/dxvk/dxvk_shader.h b/src/dxvk/dxvk_shader.h index d97e9511..4f63e399 100644 --- a/src/dxvk/dxvk_shader.h +++ b/src/dxvk/dxvk_shader.h @@ -105,6 +105,14 @@ namespace dxvk { */ void dump(std::ostream&& outputStream) const; + /** + * \brief Reads SPIR-V shader + * + * Can be used to replace the compiled SPIR-V code. + * \param [in] inputStream Stream to read from + */ + void read(std::istream&& inputStream); + private: VkShaderStageFlagBits m_stage;