From 70a95d9085ccc81277ab04e63a7cf53482d3bca4 Mon Sep 17 00:00:00 2001 From: Philip Rebohle <philip.rebohle@tu-dortmund.de> Date: Fri, 3 Jun 2022 17:43:54 +0200 Subject: [PATCH] [dxvk] Add DxvkBindingLayout to DxvkShader class Supposed to replace the old descriptor model eventually. --- src/dxvk/dxvk_shader.cpp | 16 ++++++++++++++++ src/dxvk/dxvk_shader.h | 12 ++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/dxvk/dxvk_shader.cpp b/src/dxvk/dxvk_shader.cpp index 2d9793f45..b543d201b 100644 --- a/src/dxvk/dxvk_shader.cpp +++ b/src/dxvk/dxvk_shader.cpp @@ -66,6 +66,7 @@ namespace dxvk { : m_info(info), m_code(spirv) { m_info.resourceSlots = nullptr; m_info.uniformData = nullptr; + m_info.bindings = nullptr; // Copy resource binding slot infos if (info.resourceSlotCount) { @@ -75,6 +76,21 @@ namespace dxvk { m_info.resourceSlots = m_slots.data(); } + for (uint32_t i = 0; i < info.bindingCount; i++) { + DxvkBindingInfo binding = info.bindings[i]; + binding.stages = info.stage; + m_bindings.addBinding(binding); + } + + if (info.pushConstSize) { + VkPushConstantRange pushConst; + pushConst.stageFlags = info.stage; + pushConst.offset = info.pushConstOffset; + pushConst.size = info.pushConstSize; + + m_bindings.addPushConstantRange(pushConst); + } + // Copy uniform buffer data if (info.uniformSize) { m_uniformData.resize(info.uniformSize); diff --git a/src/dxvk/dxvk_shader.h b/src/dxvk/dxvk_shader.h index 0be8b496b..9f9c7d3e0 100644 --- a/src/dxvk/dxvk_shader.h +++ b/src/dxvk/dxvk_shader.h @@ -58,6 +58,8 @@ namespace dxvk { /// Descriptor info uint32_t resourceSlotCount = 0; const DxvkResourceSlot* resourceSlots = nullptr; + uint32_t bindingCount = 0; + const DxvkBindingInfo* bindings = nullptr; /// Input and output register mask uint32_t inputMask = 0; uint32_t outputMask = 0; @@ -116,6 +118,14 @@ namespace dxvk { DxvkShaderFlags flags() const { return m_flags; } + + /** + * \brief Retrieves binding layout + * \returns Binding layout + */ + const DxvkBindingLayout& getBindings() const { + return m_bindings; + } /** * \brief Adds resource slots definitions to a mapping @@ -214,6 +224,8 @@ namespace dxvk { std::vector<char> m_uniformData; std::vector<size_t> m_idOffsets; + DxvkBindingLayout m_bindings; + static void eliminateInput(SpirvCodeBuffer& code, uint32_t location); };