diff --git a/kraken/KRDevice.cpp b/kraken/KRDevice.cpp index dbce40c..ef3db37 100644 --- a/kraken/KRDevice.cpp +++ b/kraken/KRDevice.cpp @@ -739,6 +739,21 @@ void KRDevice::streamUpload(void* data, size_t size, VkBuffer destination) m_streamingStagingBuffer.usage += size; } +void KRDevice::graphicsUpload(void* data, size_t size, VkBuffer destination) +{ + memcpy((uint8_t*)m_graphicsStagingBuffer.data + m_graphicsStagingBuffer.usage, data, size); + + // TODO - Beneficial to batch many regions in a single call? + VkBufferCopy copyRegion{}; + copyRegion.srcOffset = m_graphicsStagingBuffer.usage; + copyRegion.dstOffset = 0; // Optional + copyRegion.size = size; + vkCmdCopyBuffer(m_graphicsCommandBuffers[0], m_graphicsStagingBuffer.buffer, destination, 1, ©Region); + + // TODO - Assert on any needed alignment? + m_graphicsStagingBuffer.usage += size; +} + void KRDevice::streamUpload(void* data, size_t size, Vector2i dimensions, VkImage destination) { checkFlushStreamBuffer(size); diff --git a/kraken/KRDevice.h b/kraken/KRDevice.h index 19cf9a5..944fefc 100644 --- a/kraken/KRDevice.h +++ b/kraken/KRDevice.h @@ -80,6 +80,8 @@ public: void streamUpload(void* data, size_t size, Vector2i dimensions, VkImage destination); void streamEnd(); + void graphicsUpload(void* data, size_t size, VkBuffer destination); + VkPhysicalDevice m_device; VkDevice m_logicalDevice; VkPhysicalDeviceProperties m_deviceProperties;