diff --git a/kraken/KRDevice.cpp b/kraken/KRDevice.cpp index ef3db37..8546c02 100644 --- a/kraken/KRDevice.cpp +++ b/kraken/KRDevice.cpp @@ -711,6 +711,13 @@ void KRDevice::streamUpload(KRDataBlock& data, VkBuffer destination) data.unlock(); } +void KRDevice::graphicsUpload(KRDataBlock& data, VkBuffer destination) +{ + data.lock(); + graphicsUpload(data.getStart(), data.getSize(), destination); + data.unlock(); +} + void KRDevice::checkFlushStreamBuffer(size_t size) { // Flush the buffers if we would run out of space diff --git a/kraken/KRDevice.h b/kraken/KRDevice.h index 944fefc..eedc09b 100644 --- a/kraken/KRDevice.h +++ b/kraken/KRDevice.h @@ -80,6 +80,7 @@ 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); VkPhysicalDevice m_device; diff --git a/kraken/KRMeshManager.cpp b/kraken/KRMeshManager.cpp index f8b4283..c9680c6 100755 --- a/kraken/KRMeshManager.cpp +++ b/kraken/KRMeshManager.cpp @@ -577,7 +577,12 @@ void KRMeshManager::KRVBOData::load() , debug_label #endif // KRENGINE_DEBUG_GPU_LABELS ); - device.streamUpload(*m_data, allocation.vertex_buffer); + if (m_type == vbo_type::TEMPORARY) { + device.graphicsUpload(*m_data, allocation.vertex_buffer); + } else { + device.streamUpload(*m_data, allocation.vertex_buffer); + } + if (m_index_data->getSize() > 0) { #if KRENGINE_DEBUG_GPU_LABELS @@ -593,7 +598,11 @@ void KRMeshManager::KRVBOData::load() , debug_label #endif ); - device.streamUpload(*m_index_data, allocation.index_buffer); + if (m_type == vbo_type::TEMPORARY) { + device.graphicsUpload(*m_index_data, allocation.index_buffer); + } else { + device.streamUpload(*m_index_data, allocation.index_buffer); + } } }