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();
}
void KRDevice::graphicsUpload(KRDataBlock& data, VkBuffer destination)
void KRDevice::graphicsUpload(VkCommandBuffer& commandBuffer, KRDataBlock& data, VkBuffer destination)
{
data.lock();
graphicsUpload(data.getStart(), data.getSize(), destination);
graphicsUpload(commandBuffer, data.getStart(), data.getSize(), destination);
data.unlock();
}
@@ -746,7 +746,7 @@ void KRDevice::streamUpload(void* data, size_t size, VkBuffer destination)
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);
@@ -755,7 +755,7 @@ void KRDevice::graphicsUpload(void* data, size_t size, VkBuffer destination)
copyRegion.srcOffset = m_graphicsStagingBuffer.usage;
copyRegion.dstOffset = 0; // Optional
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?
m_graphicsStagingBuffer.usage += size;

View File

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

View File

@@ -330,7 +330,8 @@ void KRMeshManager::bindVBO(VkCommandBuffer& commandBuffer, KRDataBlock &data, K
, debug_label
#endif
);
vbo_data->load();
vbo_data->load(commandBuffer);
vbo_data->_swapHandles();
bindVBO(commandBuffer, vbo_data, lodCoverage);
}
@@ -529,6 +530,13 @@ KRMeshManager::KRVBOData::~KRVBOData()
}
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
if(isVBOLoaded()) {
@@ -578,7 +586,7 @@ void KRMeshManager::KRVBOData::load()
#endif // KRENGINE_DEBUG_GPU_LABELS
);
if (m_type == vbo_type::TEMPORARY) {
device.graphicsUpload(*m_data, allocation.vertex_buffer);
device.graphicsUpload(commandBuffer, *m_data, allocation.vertex_buffer);
} else {
device.streamUpload(*m_data, allocation.vertex_buffer);
}
@@ -599,7 +607,7 @@ void KRMeshManager::KRVBOData::load()
#endif
);
if (m_type == vbo_type::TEMPORARY) {
device.graphicsUpload(*m_index_data, allocation.index_buffer);
device.graphicsUpload(commandBuffer, *m_index_data, allocation.index_buffer);
} else {
device.streamUpload(*m_index_data, allocation.index_buffer);
}

View File

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