From 47d38df7643eb5b43d84980768966b31df2b5205 Mon Sep 17 00:00:00 2001 From: Bill Hollings Date: Thu, 17 Oct 2019 16:59:52 -0400 Subject: [PATCH] Log format substitution error when MTLPixelFormatDepth24Unorm_Stencil8 is not supported. --- Docs/Whats_New.md | 1 + MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm | 4 +--- MoltenVK/MoltenVK/Vulkan/mvk_datatypes.hpp | 4 +++- MoltenVK/MoltenVK/Vulkan/mvk_datatypes.mm | 6 ++++-- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Docs/Whats_New.md b/Docs/Whats_New.md index e30ba458..db86868f 100644 --- a/Docs/Whats_New.md +++ b/Docs/Whats_New.md @@ -37,6 +37,7 @@ Released 2019/10/28 - Allow `MVK_CONFIG_SYNCHRONOUS_QUEUE_SUBMITS` build setting to be overridden. - Fix memory leaks of system classes during `VkInstance` and `VkQueue` creation. - Fix memory leaks when compiling shaders and pipelines without default OS autorelease pool. +- Log format substitution error when `MTLPixelFormatDepth24Unorm_Stencil8` is not supported. - Reduce memory usage by adjusting default memory allocs for many `MVKVectorInline` uses and replacing use of `MVKVectorDefault` with `std::vector` in descriptor set bindings. diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm index 8c71c0ec..b116ae65 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm @@ -211,8 +211,6 @@ bool MVKPhysicalDevice::getFormatIsSupported(VkFormat format) { switch (mvkMTLPixelFormatFromVkFormat(format)) { case MTLPixelFormatDepth24Unorm_Stencil8: return getMTLDevice().isDepth24Stencil8PixelFormatSupported; - break; - default: break; } @@ -2512,7 +2510,7 @@ MTLPixelFormat MVKDevice::getMTLPixelFormatFromVkFormat(VkFormat vkFormat, MVKBa #if MVK_MACOS if (mtlPixFmt == MTLPixelFormatDepth24Unorm_Stencil8 && !getMTLDevice().isDepth24Stencil8PixelFormatSupported) { - return MTLPixelFormatDepth32Float_Stencil8; + return mvkMTLPixelFormatFromVkFormatInObj(vkFormat, mvkObj, MTLPixelFormatDepth24Unorm_Stencil8); } #endif return mtlPixFmt; diff --git a/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.hpp b/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.hpp index 62eeae74..617db53f 100644 --- a/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.hpp +++ b/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.hpp @@ -47,7 +47,9 @@ class MVKBaseObject; * of an MVKBaseObject subclass, which is true for all but static calling functions. */ -MTLPixelFormat mvkMTLPixelFormatFromVkFormatInObj(VkFormat vkFormat, MVKBaseObject* mvkObj); +MTLPixelFormat mvkMTLPixelFormatFromVkFormatInObj(VkFormat vkFormat, + MVKBaseObject* mvkObj, + MTLPixelFormat mtlPixelFormatKnownUnsupported = MTLPixelFormatInvalid); #define mvkMTLPixelFormatFromVkFormat(vkFormat) mvkMTLPixelFormatFromVkFormatInObj(vkFormat, this) MTLVertexFormat mvkMTLVertexFormatFromVkFormatInObj(VkFormat vkFormat, MVKBaseObject* mvkObj); diff --git a/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.mm b/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.mm index 950ffb50..a24700fb 100644 --- a/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.mm +++ b/MoltenVK/MoltenVK/Vulkan/mvk_datatypes.mm @@ -569,11 +569,13 @@ MVK_PUBLIC_SYMBOL MTLPixelFormat mvkMTLPixelFormatFromVkFormat(VkFormat vkFormat return mvkMTLPixelFormatFromVkFormatInObj(vkFormat, nullptr); } -MTLPixelFormat mvkMTLPixelFormatFromVkFormatInObj(VkFormat vkFormat, MVKBaseObject* mvkObj) { +MTLPixelFormat mvkMTLPixelFormatFromVkFormatInObj(VkFormat vkFormat, + MVKBaseObject* mvkObj, + MTLPixelFormat mtlPixelFormatKnownUnsupported) { MTLPixelFormat mtlPixFmt = MTLPixelFormatInvalid; const MVKFormatDesc& fmtDesc = formatDescForVkFormat(vkFormat); - if (fmtDesc.isSupported()) { + if (fmtDesc.isSupported() && (fmtDesc.mtl != mtlPixelFormatKnownUnsupported)) { mtlPixFmt = fmtDesc.mtl; } else if (vkFormat != VK_FORMAT_UNDEFINED) { // If the MTLPixelFormat is not supported but VkFormat is valid, attempt to substitute a different format.