From 55ba58d79a4297a2ffb5ee5af69acec76f4e480d Mon Sep 17 00:00:00 2001 From: squidbus <175574877+squidbus@users.noreply.github.com> Date: Wed, 22 Oct 2025 21:16:01 -0700 Subject: [PATCH] Add support for VK_KHR_maintenance9. --- Docs/MoltenVK_Runtime_UserGuide.md | 1 + Docs/Whats_New.md | 1 + MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm | 11 +++++++++++ .../MoltenVK/GPUObjects/MVKDeviceFeatureStructs.def | 1 + MoltenVK/MoltenVK/GPUObjects/MVKImage.mm | 7 +++---- MoltenVK/MoltenVK/Layers/MVKExtensions.def | 1 + 6 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Docs/MoltenVK_Runtime_UserGuide.md b/Docs/MoltenVK_Runtime_UserGuide.md index 49e9867f..f6774e3c 100644 --- a/Docs/MoltenVK_Runtime_UserGuide.md +++ b/Docs/MoltenVK_Runtime_UserGuide.md @@ -277,6 +277,7 @@ In addition to core *Vulkan* functionality, **MoltenVK** also supports the foll - `VK_KHR_maintenance6` - `VK_KHR_maintenance7` - `VK_KHR_maintenance8` +- `VK_KHR_maintenance9` - `VK_KHR_map_memory2` - `VK_KHR_multiview` - `VK_KHR_portability_subset` diff --git a/Docs/Whats_New.md b/Docs/Whats_New.md index 84d13ed4..09f6a737 100644 --- a/Docs/Whats_New.md +++ b/Docs/Whats_New.md @@ -32,6 +32,7 @@ Released TBD - Raise minimum target to _macOS 11.0 / iOS 14.0 / tvOS 14.0_ - Add support for `VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT`. - Add support for the following extensions: + - `VK_KHR_maintenance9` - `VK_KHR_shader_fma` - Add support for new features and extensions when using `MVK_USE_METAL_PRIVATE_API`: - Disabling primitive restart diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm index 7f691325..712d3ec3 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm @@ -580,6 +580,11 @@ void MVKPhysicalDevice::getFeatures(VkPhysicalDeviceFeatures2* features) { maintenance8Features->maintenance8 = true; break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR: { + auto* maintenance9Features = (VkPhysicalDeviceMaintenance9FeaturesKHR*)next; + maintenance9Features->maintenance9 = true; + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR: { auto* portabilityFeatures = (VkPhysicalDevicePortabilitySubsetFeaturesKHR*)next; portabilityFeatures->constantAlphaColorBlendFactors = true; @@ -1206,6 +1211,12 @@ void MVKPhysicalDevice::getProperties(VkPhysicalDeviceProperties2* properties) { maintenance7Properties->maxDescriptorSetUpdateAfterBindTotalBuffersDynamic = supportedProps12.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic + supportedProps12.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic; break; + } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_PROPERTIES_KHR: { + auto* maintenance9Properties = (VkPhysicalDeviceMaintenance9PropertiesKHR*)next; + maintenance9Properties->image2DViewOf3DSparse = false; + maintenance9Properties->defaultVertexAttributeValue = VK_DEFAULT_VERTEX_ATTRIBUTE_VALUE_ZERO_ZERO_ZERO_ZERO_KHR; + break; } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES: { auto* shaderIntDotProperties = (VkPhysicalDeviceShaderIntegerDotProductProperties*)next; diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKDeviceFeatureStructs.def b/MoltenVK/MoltenVK/GPUObjects/MVKDeviceFeatureStructs.def index 9cbb264a..dd64f1c9 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKDeviceFeatureStructs.def +++ b/MoltenVK/MoltenVK/GPUObjects/MVKDeviceFeatureStructs.def @@ -83,6 +83,7 @@ MVK_DEVICE_FEATURE(ZeroInitializeWorkgroupMemory, ZERO_INITIALIZE_WORKGR MVK_DEVICE_FEATURE_EXTN(FragmentShaderBarycentric, FRAGMENT_SHADER_BARYCENTRIC, KHR, 1) MVK_DEVICE_FEATURE_EXTN(Maintenance7, MAINTENANCE_7, KHR, 1) MVK_DEVICE_FEATURE_EXTN(Maintenance8, MAINTENANCE_8, KHR, 1) +MVK_DEVICE_FEATURE_EXTN(Maintenance9, MAINTENANCE_9, KHR, 1) MVK_DEVICE_FEATURE_EXTN(PortabilitySubset, PORTABILITY_SUBSET, KHR, 15) MVK_DEVICE_FEATURE_EXTN(PresentId, PRESENT_ID, KHR, 1) MVK_DEVICE_FEATURE_EXTN(PresentId2, PRESENT_ID_2, KHR, 1) diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm index 02549652..5463d5a8 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm @@ -1959,13 +1959,12 @@ MVKImageViewPlane::MVKImageViewPlane(MVKImageView* imageView, // and set the _useMTLTextureView variable appropriately. if ( _imageView->_image ) { _useMTLTextureView = true; - bool is3D = _imageView->_image->_mtlTextureType == MTLTextureType3D; // If the view is identical to underlying image, don't bother using a Metal view if (_mtlPixFmt == _imageView->_image->getMTLPixelFormat(planeIndex) && - (_imageView->_mtlTextureType == _imageView->_image->_mtlTextureType || - ((_imageView->_mtlTextureType == MTLTextureType2D || _imageView->_mtlTextureType == MTLTextureType2DArray) && is3D)) && + _imageView->_mtlTextureType == _imageView->_image->_mtlTextureType && _imageView->_subresourceRange.levelCount == _imageView->_image->_mipLevels && - (is3D || _imageView->_subresourceRange.layerCount == _imageView->_image->_arrayLayers) && + (_imageView->_mtlTextureType == MTLTextureType3D || + _imageView->_subresourceRange.layerCount == _imageView->_image->_arrayLayers) && !_useSwizzle) { _useMTLTextureView = false; } diff --git a/MoltenVK/MoltenVK/Layers/MVKExtensions.def b/MoltenVK/MoltenVK/Layers/MVKExtensions.def index 30832731..5043fda0 100644 --- a/MoltenVK/MoltenVK/Layers/MVKExtensions.def +++ b/MoltenVK/MoltenVK/Layers/MVKExtensions.def @@ -84,6 +84,7 @@ MVK_EXTENSION(KHR_maintenance5, KHR_MAINTENANCE_5, MVK_EXTENSION(KHR_maintenance6, KHR_MAINTENANCE_6, DEVICE, 10.11, 8.0, 1.0) MVK_EXTENSION(KHR_maintenance7, KHR_MAINTENANCE_7, DEVICE, 10.11, 8.0, 1.0) MVK_EXTENSION(KHR_maintenance8, KHR_MAINTENANCE_8, DEVICE, 10.11, 8.0, 1.0) +MVK_EXTENSION(KHR_maintenance9, KHR_MAINTENANCE_9, DEVICE, 10.11, 8.0, 1.0) MVK_EXTENSION(KHR_map_memory2, KHR_MAP_MEMORY_2, DEVICE, 10.11, 8.0, 1.0) MVK_EXTENSION(KHR_multiview, KHR_MULTIVIEW, DEVICE, 10.11, 8.0, 1.0) MVK_EXTENSION(KHR_portability_subset, KHR_PORTABILITY_SUBSET, DEVICE, 10.11, 8.0, 1.0)