diff --git a/src/Cafe/HW/Latte/Core/LatteTextureReadback.cpp b/src/Cafe/HW/Latte/Core/LatteTextureReadback.cpp index a6690a3f..003360b6 100644 --- a/src/Cafe/HW/Latte/Core/LatteTextureReadback.cpp +++ b/src/Cafe/HW/Latte/Core/LatteTextureReadback.cpp @@ -21,6 +21,8 @@ void LatteTextureReadback_StartTransfer(LatteTextureView* textureView) HRTick currentTick = HighResolutionTimer().now().getTick(); // create info entry and store in ordered linked list LatteTextureReadbackInfo* readbackInfo = g_renderer->texture_createReadback(textureView); + if (!readbackInfo) + return; sTextureActiveReadbackQueue.push(readbackInfo); readbackInfo->StartTransfer(); readbackInfo->transferStartTime = currentTick; diff --git a/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRenderer.cpp b/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRenderer.cpp index 796b7bda..b4d99e35 100644 --- a/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRenderer.cpp +++ b/src/Cafe/HW/Latte/Renderer/Vulkan/VulkanRenderer.cpp @@ -3670,14 +3670,14 @@ void VulkanRenderer::texture_copyImageSubData(LatteTexture* src, sint32 srcMip, LatteTextureReadbackInfo* VulkanRenderer::texture_createReadback(LatteTextureView* textureView) { auto* result = new LatteTextureReadbackInfoVk(m_logicalDevice, textureView); - - LatteTextureVk* vkTex = (LatteTextureVk*)textureView->baseTexture; - - VkMemoryRequirements memRequirements; - vkGetImageMemoryRequirements(m_logicalDevice, vkTex->GetImageObj()->m_image, &memRequirements); - const uint32 linearImageSize = result->GetImageSize(); - const uint32 uploadSize = (linearImageSize == 0) ? memRequirements.size : linearImageSize; + if (linearImageSize == 0) + { + delete result; + return nullptr; + } + + const uint32 uploadSize = linearImageSize; const uint32 uploadAlignment = 256; // todo - use Vk optimalBufferCopyOffsetAlignment m_textureReadbackBufferWriteIndex = (m_textureReadbackBufferWriteIndex + uploadAlignment - 1) & ~(uploadAlignment - 1);