mirror of
https://github.com/doitsujin/dxvk.git
synced 2024-12-05 01:24:14 +01:00
[dxvk] Remove DxvkStagingDataAlloc
Unused and overly clunky.
This commit is contained in:
parent
8518572d13
commit
d262bebd90
@ -3,71 +3,6 @@
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
DxvkStagingDataAlloc::DxvkStagingDataAlloc(const Rc<DxvkDevice>& device)
|
||||
: m_device(device) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
DxvkStagingDataAlloc::~DxvkStagingDataAlloc() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
DxvkBufferSlice DxvkStagingDataAlloc::alloc(VkDeviceSize align, VkDeviceSize size) {
|
||||
if (size > MaxBufferSize)
|
||||
return DxvkBufferSlice(createBuffer(size));
|
||||
|
||||
if (m_buffer == nullptr)
|
||||
m_buffer = createBuffer(MaxBufferSize);
|
||||
|
||||
if (!m_buffer->isInUse())
|
||||
m_offset = 0;
|
||||
|
||||
m_offset = dxvk::align(m_offset, align);
|
||||
|
||||
if (m_offset + size > MaxBufferSize) {
|
||||
m_offset = 0;
|
||||
|
||||
if (m_buffers.size() < MaxBufferCount)
|
||||
m_buffers.push(std::move(m_buffer));
|
||||
|
||||
if (!m_buffers.front()->isInUse()) {
|
||||
m_buffer = std::move(m_buffers.front());
|
||||
m_buffers.pop();
|
||||
} else {
|
||||
m_buffer = createBuffer(MaxBufferSize);
|
||||
}
|
||||
}
|
||||
|
||||
DxvkBufferSlice slice(m_buffer, m_offset, size);
|
||||
m_offset = dxvk::align(m_offset + size, align);
|
||||
return slice;
|
||||
}
|
||||
|
||||
|
||||
void DxvkStagingDataAlloc::trim() {
|
||||
m_buffer = nullptr;
|
||||
m_offset = 0;
|
||||
|
||||
while (!m_buffers.empty())
|
||||
m_buffers.pop();
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkBuffer> DxvkStagingDataAlloc::createBuffer(VkDeviceSize size) {
|
||||
DxvkBufferCreateInfo info;
|
||||
info.size = size;
|
||||
info.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
|
||||
info.stages = VK_PIPELINE_STAGE_TRANSFER_BIT;
|
||||
info.access = VK_ACCESS_TRANSFER_READ_BIT;
|
||||
|
||||
return m_device->createBuffer(info,
|
||||
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
|
||||
VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
|
||||
}
|
||||
|
||||
|
||||
DxvkStagingBuffer::DxvkStagingBuffer(
|
||||
const Rc<DxvkDevice>& device,
|
||||
VkDeviceSize size)
|
||||
|
@ -8,51 +8,6 @@ namespace dxvk {
|
||||
|
||||
class DxvkDevice;
|
||||
|
||||
/**
|
||||
* \brief Staging data allocator
|
||||
*
|
||||
* Allocates buffer slices for resource uploads,
|
||||
* while trying to keep the number of allocations
|
||||
* but also the amount of allocated memory low.
|
||||
*/
|
||||
class DxvkStagingDataAlloc {
|
||||
constexpr static VkDeviceSize MaxBufferSize = 1 << 25; // 32 MiB
|
||||
constexpr static uint32_t MaxBufferCount = 2;
|
||||
public:
|
||||
|
||||
DxvkStagingDataAlloc(const Rc<DxvkDevice>& device);
|
||||
|
||||
~DxvkStagingDataAlloc();
|
||||
|
||||
/**
|
||||
* \brief Alloctaes a staging buffer slice
|
||||
*
|
||||
* \param [in] align Alignment of the allocation
|
||||
* \param [in] size Size of the allocation
|
||||
* \returns Staging buffer slice
|
||||
*/
|
||||
DxvkBufferSlice alloc(VkDeviceSize align, VkDeviceSize size);
|
||||
|
||||
/**
|
||||
* \brief Deletes all staging buffers
|
||||
*
|
||||
* Destroys allocated buffers and
|
||||
* releases all buffer memory.
|
||||
*/
|
||||
void trim();
|
||||
|
||||
private:
|
||||
|
||||
Rc<DxvkDevice> m_device;
|
||||
Rc<DxvkBuffer> m_buffer;
|
||||
VkDeviceSize m_offset = 0;
|
||||
|
||||
std::queue<Rc<DxvkBuffer>> m_buffers;
|
||||
|
||||
Rc<DxvkBuffer> createBuffer(VkDeviceSize size);
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* \brief Staging buffer
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user