38 lines
686 B
C++
38 lines
686 B
C++
#pragma once
|
|
|
|
#include "Gpu.hpp"
|
|
|
|
#include <vector>
|
|
|
|
/**
|
|
* Writes data to a buffer by using a staging buffer
|
|
*/
|
|
class BufferBusWriter {
|
|
private:
|
|
const Gpu* m_gpu;
|
|
|
|
Buffer m_stagingBuffer;
|
|
size_t m_busSize;
|
|
VkCommandBuffer m_stagingCommandBuffer;
|
|
|
|
void *m_pData;
|
|
size_t m_unflushedSize;
|
|
|
|
uint32_t m_numWrites;
|
|
std::vector<std::pair<Buffer*, VkBufferCopy>> m_writes;
|
|
|
|
VkFence m_fence;
|
|
|
|
int create_staging_command_buffer();
|
|
int create_staging_buffer(size_t size);
|
|
|
|
public:
|
|
BufferBusWriter(const Gpu* gpu, size_t size);
|
|
~BufferBusWriter();
|
|
|
|
void write(Buffer* pTarget, void *pData, size_t offset, size_t size);
|
|
void flush();
|
|
|
|
void wait();
|
|
};
|