From ac3cd0b6886ee23207e812cd918aaa18679fa2f5 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Thu, 4 Apr 2019 02:51:16 +0200 Subject: [PATCH] [dxvk] Store compressed shader modules in DxvkShader Reduces the amount of memory used to store shaders to around ~45%-50% of the original size. --- src/dxvk/dxvk_shader.cpp | 8 ++++---- src/dxvk/dxvk_shader.h | 5 +++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/dxvk/dxvk_shader.cpp b/src/dxvk/dxvk_shader.cpp index a7f545c85..fab25c545 100644 --- a/src/dxvk/dxvk_shader.cpp +++ b/src/dxvk/dxvk_shader.cpp @@ -92,7 +92,7 @@ namespace dxvk { uint32_t slotCount, const DxvkResourceSlot* slotInfos, const DxvkInterfaceSlots& iface, - const SpirvCodeBuffer& code, + SpirvCodeBuffer code, const DxvkShaderOptions& options, DxvkShaderConstData&& constData) : m_stage(stage), m_code(code), m_interface(iface), @@ -105,7 +105,7 @@ namespace dxvk { // are stored so we can quickly remap them. uint32_t o1VarId = 0; - for (auto ins : m_code) { + for (auto ins : code) { if (ins.opCode() == spv::OpDecorate) { if (ins.arg(2) == spv::DecorationBinding || ins.arg(2) == spv::DecorationSpecId) @@ -151,7 +151,7 @@ namespace dxvk { const Rc& vkd, const DxvkDescriptorSlotMapping& mapping, const DxvkShaderModuleCreateInfo& info) { - SpirvCodeBuffer spirvCode = m_code; + SpirvCodeBuffer spirvCode = m_code.decompress(); uint32_t* code = spirvCode.data(); // Remap resource binding IDs @@ -170,7 +170,7 @@ namespace dxvk { void DxvkShader::dump(std::ostream& outputStream) const { - m_code.store(outputStream); + m_code.decompress().store(outputStream); } } \ No newline at end of file diff --git a/src/dxvk/dxvk_shader.h b/src/dxvk/dxvk_shader.h index 6e99b1d90..111822e50 100644 --- a/src/dxvk/dxvk_shader.h +++ b/src/dxvk/dxvk_shader.h @@ -8,6 +8,7 @@ #include "dxvk_shader_key.h" #include "../spirv/spirv_code_buffer.h" +#include "../spirv/spirv_compression.h" namespace dxvk { @@ -130,7 +131,7 @@ namespace dxvk { uint32_t slotCount, const DxvkResourceSlot* slotInfos, const DxvkInterfaceSlots& iface, - const SpirvCodeBuffer& code, + SpirvCodeBuffer code, const DxvkShaderOptions& options, DxvkShaderConstData&& constData); @@ -246,7 +247,7 @@ namespace dxvk { private: VkShaderStageFlagBits m_stage; - SpirvCodeBuffer m_code; + SpirvCompressedBuffer m_code; std::vector m_slots; std::vector m_idOffsets;