From 0a91fa419705bc5dc2fabc8bade7f42b945e709b Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Sun, 20 Sep 2026 12:55:41 -0400 Subject: [PATCH] [Magma] diagnose unavailable owned mip readback bytes --- .../DirectVulkan/Renderer/VkTextureManager.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/MobileGL/MG_Backend/DirectVulkan/Renderer/VkTextureManager.cpp b/MobileGL/MG_Backend/DirectVulkan/Renderer/VkTextureManager.cpp index ff057f63..7e5acc0f 100644 --- a/MobileGL/MG_Backend/DirectVulkan/Renderer/VkTextureManager.cpp +++ b/MobileGL/MG_Backend/DirectVulkan/Renderer/VkTextureManager.cpp @@ -2023,7 +2023,14 @@ namespace MobileGL::MG_Backend::DirectVulkan { return false; // a failed sync cannot substitute CPU bytes for this native image } if (!store.IsCovered(key, upload, level) || store.IsLevelGpuDirty(key, upload, level) || - store.LevelExtentOrUndefined(key, upload, level) != extent) return false; + store.LevelExtentOrUndefined(key, upload, level) != extent) { + const auto actual = store.LevelExtentOrUndefined(key, upload, level); + MGLOG_E("Magma unbacked read: {%u,%u} target=%u level=%u covered=%d gpuDirty=%d extent=%dx%dx%d requested=%dx%dx%d bytes=%zu", + handle.Slot, handle.Gen, upload, level, store.IsCovered(key, upload, level), + store.IsLevelGpuDirty(key, upload, level), actual.x(), actual.y(), actual.z(), + extent.x(), extent.y(), extent.z(), store.LevelByteSize(key, upload, level)); + return false; + } const auto logical = static_cast(record.Desc.InternalFormat); const auto formatInfo = ResolveTextureFormatInfo(logical); format = formatInfo.format;