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;
|
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;
|
||||||
|
|||||||
@@ -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);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user