diff --git a/src/dxvk/dxvk_buffer.h b/src/dxvk/dxvk_buffer.h index 4492cc61..fc2265d1 100644 --- a/src/dxvk/dxvk_buffer.h +++ b/src/dxvk/dxvk_buffer.h @@ -79,6 +79,16 @@ namespace dxvk { DxvkDescriptorInfo getDescriptor(VkDeviceSize offset, VkDeviceSize length, bool keepOffset) const { return m_physSlice.getDescriptor(offset, length, keepOffset); } + + /** + * \brief Retrieves dynamic offset + * + * \param [in] offset Offset into the buffer + * \returns Physical buffer slice offset + */ + VkDeviceSize getDynamicOffset(VkDeviceSize offset) const { + return m_physSlice.getDynamicOffset(offset); + } /** * \brief Underlying buffer resource @@ -269,6 +279,16 @@ namespace dxvk { DxvkDescriptorInfo getDescriptor(bool keepOffset) const { return m_buffer->getDescriptor(m_offset, m_length, keepOffset); } + + /** + * \brief Retrieves dynamic offset + * + * Used for descriptor set binding. + * \returns Buffer slice offset + */ + VkDeviceSize getDynamicOffset() const { + return m_buffer->getDynamicOffset(m_offset); + } /** * \brief Pointer to mapped memory region diff --git a/src/dxvk/dxvk_buffer_res.h b/src/dxvk/dxvk_buffer_res.h index 992cfb73..f2e423a3 100644 --- a/src/dxvk/dxvk_buffer_res.h +++ b/src/dxvk/dxvk_buffer_res.h @@ -196,6 +196,16 @@ namespace dxvk { offset = keepOffset ? m_offset + offset : 0; return m_buffer->getDescriptor(offset, length); } + + /** + * \brief Retrieves dynamic offset + * + * \param [in] offset Offset into the slice + * \returns Physical buffer slice offset + */ + VkDeviceSize getDynamicOffset(VkDeviceSize offset) const { + return m_offset + offset; + } /** * \brief Map pointer diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 2656bf01..7b43d37a 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -2305,7 +2305,7 @@ namespace dxvk { const auto& res = m_rc[binding.slot]; m_descOffsets[i] = res.bufferSlice.defined() - ? res.bufferSlice.physicalSlice().offset() + ? res.bufferSlice.getDynamicOffset() : 0; }