Always explicitly set CAMetalLayer colorspace and wantsExtendedDynamicRangeContent.
Don't assume the incoming CAMetalLayer has default (no-op) values for colorspace and wantsExtendedDynamicRangeContent properties, since they could have been set externally. Ensure the Vulkan app has control over both of these properties. vkCreateSwapchainKHR() returns VK_ERROR_FORMAT_NOT_SUPPORTED for unsupported colorspaces.
This commit is contained in:
parent
cd8a0e149e
commit
4d452fdca6
@ -19,6 +19,7 @@ MoltenVK 1.1.3
|
||||
Released TBD
|
||||
|
||||
- Add support for `HDR10` colorspace via `VK_COLOR_SPACE_HDR10_HLG_EXT` and `VK_COLOR_SPACE_HDR10_ST2084_EXT`.
|
||||
- Always explicitly set `CAMetalLayer` colorspace property based on _Vulkan_ parameters, and don't rely on _Metal_ default values.
|
||||
- Remove project qualifiers from references to `SPIRV-Cross` header files.
|
||||
- Add `MVKConfiguration::apiVersionToAdvertise` and `MVK_CONFIG_API_VERSION_TO_ADVERTISE`
|
||||
env var to configure **MoltenVK** to advertise a particular _Vulkan_ version.
|
||||
|
@ -283,6 +283,7 @@ void MVKSwapchain::initCAMetalLayer(const VkSwapchainCreateInfoKHR* pCreateInfo,
|
||||
switch (pCreateInfo->imageColorSpace) {
|
||||
case VK_COLOR_SPACE_SRGB_NONLINEAR_KHR:
|
||||
_mtlLayer.colorspaceNameMVK = kCGColorSpaceSRGB;
|
||||
_mtlLayer.wantsExtendedDynamicRangeContentMVK = NO;
|
||||
break;
|
||||
case VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT:
|
||||
_mtlLayer.colorspaceNameMVK = kCGColorSpaceDisplayP3;
|
||||
@ -306,6 +307,7 @@ void MVKSwapchain::initCAMetalLayer(const VkSwapchainCreateInfoKHR* pCreateInfo,
|
||||
break;
|
||||
case VK_COLOR_SPACE_BT709_NONLINEAR_EXT:
|
||||
_mtlLayer.colorspaceNameMVK = kCGColorSpaceITUR_709;
|
||||
_mtlLayer.wantsExtendedDynamicRangeContentMVK = NO;
|
||||
break;
|
||||
case VK_COLOR_SPACE_BT2020_LINEAR_EXT:
|
||||
_mtlLayer.colorspaceNameMVK = kCGColorSpaceExtendedLinearITUR_2020;
|
||||
@ -323,10 +325,14 @@ void MVKSwapchain::initCAMetalLayer(const VkSwapchainCreateInfoKHR* pCreateInfo,
|
||||
#endif
|
||||
case VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT:
|
||||
_mtlLayer.colorspaceNameMVK = kCGColorSpaceAdobeRGB1998;
|
||||
_mtlLayer.wantsExtendedDynamicRangeContentMVK = NO;
|
||||
break;
|
||||
case VK_COLOR_SPACE_PASS_THROUGH_EXT:
|
||||
_mtlLayer.colorspace = nil;
|
||||
_mtlLayer.wantsExtendedDynamicRangeContentMVK = NO;
|
||||
break;
|
||||
default:
|
||||
// Nothing - the default is not to do color matching.
|
||||
setConfigurationResult(reportError(VK_ERROR_FORMAT_NOT_SUPPORTED, "vkCreateSwapchainKHR(): Metal does not support VkColorSpaceKHR value %d.", pCreateInfo->imageColorSpace));
|
||||
break;
|
||||
}
|
||||
_mtlLayer.drawableSize = mvkCGSizeFromVkExtent2D(pCreateInfo->imageExtent);
|
||||
|
Loading…
x
Reference in New Issue
Block a user