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;
}
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);
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
VkPipelineStageFlags sourceStage;
VkPipelineStageFlags destinationStage;

View File

@@ -76,8 +76,9 @@ public:
void streamStart();
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, Vector2i dimensions, VkImage destination);
void streamUpload(void* data, size_t size, Vector3i dimensions, VkImage destination);
void streamEnd();
void graphicsUpload(VkCommandBuffer& commandBuffer, KRDataBlock& data, VkBuffer destination);
@@ -144,4 +145,5 @@ private:
#endif // KRENGINE_DEBUG_GPU_LABELS
);
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
}
Vector2i dimensions = { pHeader->width, pHeader->height };
Vector3i dimensions = { pHeader->width, pHeader->height, 1 };
switch (pHeader->imagetype) {
case 2: // rgb