Added commandBuffer argument to KRDevice::graphicsUpload.
This commit is contained in:
@@ -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, ©Region);
|
||||
vkCmdCopyBuffer(commandBuffer, m_graphicsStagingBuffer.buffer, destination, 1, ©Region);
|
||||
|
||||
// TODO - Assert on any needed alignment?
|
||||
m_graphicsStagingBuffer.usage += size;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user