Added commandBuffer argument to KRDevice::graphicsUpload.

This commit is contained in:
2022-07-27 23:22:51 -07:00
parent d19f340d32
commit 33f5292c5e
4 changed files with 18 additions and 9 deletions

View File

@@ -711,10 +711,10 @@ void KRDevice::streamUpload(KRDataBlock& data, VkBuffer destination)
data.unlock(); data.unlock();
} }
void KRDevice::graphicsUpload(KRDataBlock& data, VkBuffer destination) void KRDevice::graphicsUpload(VkCommandBuffer& commandBuffer, KRDataBlock& data, VkBuffer destination)
{ {
data.lock(); data.lock();
graphicsUpload(data.getStart(), data.getSize(), destination); graphicsUpload(commandBuffer, data.getStart(), data.getSize(), destination);
data.unlock(); data.unlock();
} }
@@ -746,7 +746,7 @@ void KRDevice::streamUpload(void* data, size_t size, VkBuffer destination)
m_streamingStagingBuffer.usage += size; m_streamingStagingBuffer.usage += size;
} }
void KRDevice::graphicsUpload(void* data, size_t size, VkBuffer destination) void KRDevice::graphicsUpload(VkCommandBuffer& commandBuffer, void* data, size_t size, VkBuffer destination)
{ {
memcpy((uint8_t*)m_graphicsStagingBuffer.data + m_graphicsStagingBuffer.usage, data, size); memcpy((uint8_t*)m_graphicsStagingBuffer.data + m_graphicsStagingBuffer.usage, data, size);
@@ -755,7 +755,7 @@ void KRDevice::graphicsUpload(void* data, size_t size, VkBuffer destination)
copyRegion.srcOffset = m_graphicsStagingBuffer.usage; copyRegion.srcOffset = m_graphicsStagingBuffer.usage;
copyRegion.dstOffset = 0; // Optional copyRegion.dstOffset = 0; // Optional
copyRegion.size = size; copyRegion.size = size;
vkCmdCopyBuffer(m_graphicsCommandBuffers[0], m_graphicsStagingBuffer.buffer, destination, 1, &copyRegion); vkCmdCopyBuffer(commandBuffer, m_graphicsStagingBuffer.buffer, destination, 1, &copyRegion);
// TODO - Assert on any needed alignment? // TODO - Assert on any needed alignment?
m_graphicsStagingBuffer.usage += size; m_graphicsStagingBuffer.usage += size;

View File

@@ -80,8 +80,8 @@ public:
void streamUpload(void* data, size_t size, Vector2i dimensions, VkImage destination); void streamUpload(void* data, size_t size, Vector2i dimensions, VkImage destination);
void streamEnd(); void streamEnd();
void graphicsUpload(KRDataBlock& data, VkBuffer destination); void graphicsUpload(VkCommandBuffer& commandBuffer, KRDataBlock& data, VkBuffer destination);
void graphicsUpload(void* data, size_t size, VkBuffer destination); void graphicsUpload(VkCommandBuffer& commandBuffer, void* data, size_t size, VkBuffer destination);
VkPhysicalDevice m_device; VkPhysicalDevice m_device;
VkDevice m_logicalDevice; VkDevice m_logicalDevice;

View File

@@ -330,7 +330,8 @@ void KRMeshManager::bindVBO(VkCommandBuffer& commandBuffer, KRDataBlock &data, K
, debug_label , debug_label
#endif #endif
); );
vbo_data->load(); vbo_data->load(commandBuffer);
vbo_data->_swapHandles();
bindVBO(commandBuffer, vbo_data, lodCoverage); bindVBO(commandBuffer, vbo_data, lodCoverage);
} }
@@ -529,6 +530,13 @@ KRMeshManager::KRVBOData::~KRVBOData()
} }
void KRMeshManager::KRVBOData::load() void KRMeshManager::KRVBOData::load()
{
// TODO - This is a bit messy. Clean up after Vulkan refactor.
VkCommandBuffer noCommandBuffer = VK_NULL_HANDLE;
load(noCommandBuffer);
}
void KRMeshManager::KRVBOData::load(VkCommandBuffer& commandBuffer)
{ {
// TODO - We should load on each GPU only if there is a surface using the mesh // TODO - We should load on each GPU only if there is a surface using the mesh
if(isVBOLoaded()) { if(isVBOLoaded()) {
@@ -578,7 +586,7 @@ void KRMeshManager::KRVBOData::load()
#endif // KRENGINE_DEBUG_GPU_LABELS #endif // KRENGINE_DEBUG_GPU_LABELS
); );
if (m_type == vbo_type::TEMPORARY) { if (m_type == vbo_type::TEMPORARY) {
device.graphicsUpload(*m_data, allocation.vertex_buffer); device.graphicsUpload(commandBuffer, *m_data, allocation.vertex_buffer);
} else { } else {
device.streamUpload(*m_data, allocation.vertex_buffer); device.streamUpload(*m_data, allocation.vertex_buffer);
} }
@@ -599,7 +607,7 @@ void KRMeshManager::KRVBOData::load()
#endif #endif
); );
if (m_type == vbo_type::TEMPORARY) { if (m_type == vbo_type::TEMPORARY) {
device.graphicsUpload(*m_index_data, allocation.index_buffer); device.graphicsUpload(commandBuffer, *m_index_data, allocation.index_buffer);
} else { } else {
device.streamUpload(*m_index_data, allocation.index_buffer); device.streamUpload(*m_index_data, allocation.index_buffer);
} }

View File

@@ -94,6 +94,7 @@ public:
bool isVBOLoaded() { return m_is_vbo_loaded; } bool isVBOLoaded() { return m_is_vbo_loaded; }
bool isVBOReady() { return m_is_vbo_ready; } bool isVBOReady() { return m_is_vbo_ready; }
void load(); void load();
void load(VkCommandBuffer& commandBuffer);
void unload(); void unload();
void bind(VkCommandBuffer& commandBuffer); void bind(VkCommandBuffer& commandBuffer);