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