Implement MIP Level streaming helper functions
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user