From a90c2843a756b05043682d69de0aa8d8d5afd5a5 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Sun, 13 May 2018 21:34:38 +0200 Subject: [PATCH] [dxvk] Remove std::vector from DxvkDataBuffer Vectors are zero-initialized upon resize, which is unnecessary in this case and potentially impacts performance. --- src/dxvk/dxvk_data.cpp | 10 ++++++---- src/dxvk/dxvk_data.h | 7 ++++--- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/dxvk/dxvk_data.cpp b/src/dxvk/dxvk_data.cpp index ebcc06b1..bece0efd 100644 --- a/src/dxvk/dxvk_data.cpp +++ b/src/dxvk/dxvk_data.cpp @@ -5,17 +5,19 @@ namespace dxvk { DxvkDataBuffer:: DxvkDataBuffer() { } - DxvkDataBuffer::~DxvkDataBuffer() { } + DxvkDataBuffer::DxvkDataBuffer(size_t size) + : m_data(new char[size]), m_size(size) { } - DxvkDataBuffer::DxvkDataBuffer(size_t size) { - m_data.resize(size); + + DxvkDataBuffer::~DxvkDataBuffer() { + delete[] m_data; } DxvkDataSlice DxvkDataBuffer::alloc(size_t n) { const size_t offset = m_offset; - if (offset + n <= m_data.size()) { + if (offset + n <= m_size) { m_offset += align(n, CACHE_LINE_SIZE); return DxvkDataSlice(this, offset, n); } return DxvkDataSlice(); diff --git a/src/dxvk/dxvk_data.h b/src/dxvk/dxvk_data.h index 097f10ad..2a5ee924 100644 --- a/src/dxvk/dxvk_data.h +++ b/src/dxvk/dxvk_data.h @@ -35,8 +35,9 @@ namespace dxvk { private: - std::vector m_data; - size_t m_offset = 0; + char* m_data = nullptr; + size_t m_size = 0; + size_t m_offset = 0; }; @@ -62,7 +63,7 @@ namespace dxvk { void* ptr() const { return m_buffer != nullptr - ? m_buffer->m_data.data() + m_offset + ? m_buffer->m_data + m_offset : nullptr; }