Implement MIP Level streaming helper functions

This commit is contained in:
2022-10-03 23:05:05 -07:00
parent b3019e3527
commit ab195e1323
3 changed files with 18 additions and 3 deletions

View File

@@ -812,13 +812,26 @@ void KRDevice::graphicsUpload(VkCommandBuffer& commandBuffer, void* data, size_t
m_graphicsStagingBuffer.usage += size; m_graphicsStagingBuffer.usage += size;
} }
void KRDevice::streamUpload(void* data, size_t size, Vector2i dimensions, VkImage destination) void KRDevice::streamUpload(void* data, size_t size, Vector3i dimensions, VkImage destination)
{ {
checkFlushStreamBuffer(size); checkFlushStreamBuffer(size);
memcpy((uint8_t*)m_streamingStagingBuffer.data + m_streamingStagingBuffer.usage, data, size); memcpy((uint8_t*)m_streamingStagingBuffer.data + m_streamingStagingBuffer.usage, data, size);
streamUploadImpl(size, dimensions, destination, 0, 1);
}
void KRDevice::streamUpload(KRDataBlock& data, VkImage destination, size_t offset, size_t size, Vector3i dimensions, uint32_t baseMipLevel, uint32_t levelCount)
{
checkFlushStreamBuffer(size);
data.copy((uint8_t*)m_streamingStagingBuffer.data + m_streamingStagingBuffer.usage, offset, size);
streamUploadImpl(size, dimensions, destination, 0, 1);
}
void KRDevice::streamUploadImpl(size_t size, Vector3i dimensions, VkImage destination, uint32_t baseMipLevel, uint32_t levelCount)
{
// TODO - Refactor memory barriers into helper functions // TODO - Refactor memory barriers into helper functions
VkPipelineStageFlags sourceStage; VkPipelineStageFlags sourceStage;
VkPipelineStageFlags destinationStage; VkPipelineStageFlags destinationStage;

View File

@@ -76,8 +76,9 @@ public:
void streamStart(); void streamStart();
void streamUpload(KRDataBlock& data, VkBuffer destination); void streamUpload(KRDataBlock& data, VkBuffer destination);
void streamUpload(KRDataBlock& data, VkImage destination, size_t offset, size_t size, Vector3i dimensions, uint32_t baseMipLevel, uint32_t levelCount);
void streamUpload(void* data, size_t size, VkBuffer destination); void streamUpload(void* data, size_t size, VkBuffer destination);
void streamUpload(void* data, size_t size, Vector2i dimensions, VkImage destination); void streamUpload(void* data, size_t size, Vector3i dimensions, VkImage destination);
void streamEnd(); void streamEnd();
void graphicsUpload(VkCommandBuffer& commandBuffer, KRDataBlock& data, VkBuffer destination); void graphicsUpload(VkCommandBuffer& commandBuffer, KRDataBlock& data, VkBuffer destination);
@@ -144,4 +145,5 @@ private:
#endif // KRENGINE_DEBUG_GPU_LABELS #endif // KRENGINE_DEBUG_GPU_LABELS
); );
bool initDescriptorPool(); bool initDescriptorPool();
void streamUploadImpl(size_t size, Vector3i dimensions, VkImage destination, uint32_t baseMipLevel, uint32_t levelCount);
}; };

View File

@@ -129,7 +129,7 @@ bool KRTextureTGA::uploadTexture(KRDevice& device, VkImage& image, int lod_max_d
return false; // Mapped colors not supported return false; // Mapped colors not supported
} }
Vector2i dimensions = { pHeader->width, pHeader->height }; Vector3i dimensions = { pHeader->width, pHeader->height, 1 };
switch (pHeader->imagetype) { switch (pHeader->imagetype) {
case 2: // rgb case 2: // rgb