diff --git a/src/dxvk/dxvk_buffer.h b/src/dxvk/dxvk_buffer.h index 785a84cb..0284775a 100644 --- a/src/dxvk/dxvk_buffer.h +++ b/src/dxvk/dxvk_buffer.h @@ -333,6 +333,23 @@ namespace dxvk { explicit DxvkBufferSlice(const Rc& buffer) : DxvkBufferSlice(buffer, 0, buffer->info().size) { } + DxvkBufferSlice(const DxvkBufferSlice& ) = default; + DxvkBufferSlice( DxvkBufferSlice&&) = default; + + DxvkBufferSlice& operator = (const DxvkBufferSlice& other) { + if (m_buffer != other.m_buffer) + m_buffer = other.m_buffer; + m_offset = other.m_offset; + m_length = other.m_length; + return *this; + } + + DxvkBufferSlice& operator = (DxvkBufferSlice&&) = default; + + /** + * \brief Buffer slice offset and length + * \returns Buffer slice offset and length + */ size_t offset() const { return m_offset; } size_t length() const { return m_length; } @@ -474,19 +491,6 @@ namespace dxvk { return this->m_offset == other.m_offset && this->m_length == other.m_length; } - - /** - * \brief Changes offset and size, but not the buffer - * - * Slightly faster alternative to overriding the full - * buffer slice object in case only the range changes. - * \param [in] offset New slice offset - * \param [in] length New slice length - */ - void updateRange(VkDeviceSize offset, VkDeviceSize length) { - m_offset = offset; - m_length = length; - } private: diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index f96ef293..76ccb9db 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -165,9 +165,7 @@ namespace dxvk { DxvkContextFlag::CpDirtyResources, DxvkContextFlag::GpDirtyResources); } else if (!m_rc[slot].bufferSlice.matchesRange(buffer)) { - m_rc[slot].bufferSlice.updateRange( - buffer.offset(), - buffer.length()); + m_rc[slot].bufferSlice = buffer; m_flags.set( DxvkContextFlag::CpDirtyDescriptorOffsets,