mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-12 06:08:30 +09:00
[Fix] (MG_Util, DirectVulkan): tolerate storage-less attachments in component-size queries
GetComponentSizesForInternalFormat asserted on TextureInternalFormat::Unknown, which framebuffer-parameter queries legitimately reach for attachments that have no storage yet (KHR-GL33.packed_depth_stencil.validate_errors.initial_state aborted there). Answer with all-zero sizes and keep a warning for genuinely unhandled formats. Also include the image dimensions in the texture vmaCreateImage failure report.
This commit is contained in:
@@ -1694,7 +1694,10 @@ namespace MobileGL::MG_Backend::DirectVulkan {
|
|||||||
allocationInfo.usage = VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE;
|
allocationInfo.usage = VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE;
|
||||||
allocationInfo.requiredFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
|
allocationInfo.requiredFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
|
||||||
VK_VERIFY(vmaCreateImage(m_allocator, &imageInfo, &allocationInfo, &resource.image, &resource.allocation, nullptr),
|
VK_VERIFY(vmaCreateImage(m_allocator, &imageInfo, &allocationInfo, &resource.image, &resource.allocation, nullptr),
|
||||||
"vmaCreateImage(texture)");
|
"vmaCreateImage(texture) textureId=%d extent=%ux%u depth=%u layers=%u mips=%u samples=%d format=%d",
|
||||||
|
texture.GetExternalIndex(), imageInfo.extent.width, imageInfo.extent.height,
|
||||||
|
imageInfo.extent.depth, imageInfo.arrayLayers, imageInfo.mipLevels,
|
||||||
|
static_cast<Int>(imageInfo.samples), static_cast<Int>(imageInfo.format));
|
||||||
++m_textureImageEpoch; // a new attachment image invalidates cached render passes
|
++m_textureImageEpoch; // a new attachment image invalidates cached render passes
|
||||||
|
|
||||||
resource.layout = VK_IMAGE_LAYOUT_UNDEFINED;
|
resource.layout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||||
|
|||||||
@@ -503,9 +503,13 @@ namespace MobileGL {
|
|||||||
s.Depth = 32;
|
s.Depth = 32;
|
||||||
s.Stencil = 8;
|
s.Stencil = 8;
|
||||||
break;
|
break;
|
||||||
|
case TextureInternalFormat::Unknown:
|
||||||
|
// Queried for attachments that have no storage yet (e.g. framebuffer
|
||||||
|
// parameter queries on the initial state); every size stays 0.
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
MOBILEGL_ASSERT(false, "Unimplemented internal format in GetComponentSizesForInternalFormat: %d",
|
MGLOG_W("Unimplemented internal format in GetComponentSizesForInternalFormat: %d",
|
||||||
static_cast<Int>(internal));
|
static_cast<Int>(internal));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user