MoltenVK/Docs/Whats_New.md
Copyright (c) 2015-2024 The Brenwill Workshop Ltd.
Released 2024-07-15
MVKConfiguration::useMetalArgumentBuffers and env var
MVK_CONFIG_USE_METAL_ARGUMENT_BUFFERS to a boolean value, and enable it by default.OpArrayLength buffer-sizes buffer as an auxiliary buffer in each descriptor set
argument buffer, as this is how SPIRV-Cross expects it.VkPipelineShaderStageCreateInfo::pTessellationState is null.MVK_PRIVATE_API_VERSION to version 42.ConstOffsets on image gather.ConstOffsets supports multiple address spaces.rez_bind when padding.OpPtrAccessChain with ArrayStrideOpPtrAccessChain.spvBufferSizeConstants array indexes.Released 2024/05/07
VK_EXT_host_image_copyMoltenVK/dylib directory via symlink to MoltenVK/dynamic/dylib.MVKPerformanceStatistics. Add MVKPerformanceTracker::previous,
MVKQueuePerformance::waitSubmitCommandBuffers, and MVKQueuePerformance::waitPresentSwapchains.MVK_CONFIG_SHADER_DUMP_DIR configuration parameter to optionally dump shaders to files.pMessageIdName field of debug utils callback data.VK_EXT_metal_objects under ARC.vkQueueWaitIdle().MVK_PRIVATE_API_VERSION to 41.spvArrayCopy().spvDescriptorArray() to avoid potential Metal compiler bug.Released 2024/03/12
VK_KHR_shader_integer_dot_productdylib.
Package/Latest/MoltenVK/static/MoltenVK.xcframework.Package/Latest/MoltenVK/dynamic/MoltenVK.xcframework.Package/Latest/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib.MVK_USE_METAL_PRIVATE_API build setting to allow MoltenVK to be built with access to Metal private API calls.
VkPhysicalDeviceFeatures::wideLines enabled when MVK_USE_METAL_PRIVATE_API is enabled in a MoltenVK build.VkPhysicalDeviceFeatures::logicOp enabled when MVK_USE_METAL_PRIVATE_API is enabled in a MoltenVK build.VkPhysicalDeviceFeatures::depthBounds enabled on AMD GPUs when MVK_USE_METAL_PRIVATE_API is enabled in a MoltenVK build.VkPhysicalDevicePortabilitySubsetFeaturesKHR::samplerMipLodBias enabled when MVK_USE_METAL_PRIVATE_API is enabled in a MoltenVK build.MVK_USE_METAL_PRIVATE_API is enabled in a MoltenVK build.currentExtent of headless surface when swapchain attached.VK_SUBOPTIMAL_KHR for headless surfaces.runcts script also output a file containing a list of the failed CTS tests.MVK_PRIVATE_API_VERSION to 40.spvDescriptorArray path for SSBO/UBO.atomic_compare_exchange_weak() support CompilerMSL:msl_options.texture_1D_as_2D.Released 2024/01/08
VK_KHR_calibrated_timestampVK_KHR_format_feature_flags2VK_KHR_vertex_attribute_divisorVK_EXT_extended_dynamic_state3 (Metal does not support VK_POLYGON_MODE_POINT)VK_EXT_headless_surfaceVK_EXT_layer_settingsVK_FORMAT_B4G4R4A4_UNORM_PACK16.VK_FORMAT_B10G11R11_UFLOAT_PACK32 & VK_FORMAT_E5B9G9R9_UFLOAT_PACK32.VK_POLYGON_MODE_LINE.vkCmdClearAttachments().dlopen().VkPhysicalDeviceLimits::timestampPeriod on non-Apple Silicon GPUs.heapUsage query for non-unified memory devices.heapUsage[0] calculation is correct.1024.lineWidthGranularity is zero if the wideLines feature isn't supported.maxDrawIndexedIndexValue set to UINT32_MAX.VK_EXT_debug_utils device functions as device functions, not instance functions.primitiveRestartEnable disabled warning only for strip topology.VK_EXT_descriptor_indexing features, and don't advertise extension if they are not supported.fetchDependencies script by removing intermediate file caches.vkSetMoltenVKConfigurationMVK().mvk_config.h and move content to mvk_private_api.h and mvk_deprecated_api.h.MVK_CONFIGURATION_API_VERSION and MVK_PRIVATE_API_VERSION to 39.Op field to SPIRType and refactor.Released 2023/10/17
VK_KHR_synchronization2VK_EXT_extended_dynamic_state (requires Metal 3.1 for VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE)VK_EXT_extended_dynamic_state2MTLCommandBuffer during vkCmdBlitImage() & vkQueuePresentKHR().CAMetalDrawable with invalid pixel format causes onscreen flickering.MVKInstance destruction.vkCmdBlitImage() on depth-stencil formats.VkPhysicalDeviceLimits::timestampPeriod set to 1.0 on Apple GPUs, and calculated dynamically on non-Apple GPUs.MVKConfiguration::timestampPeriodLowPassAlpha and environment variable
MVK_CONFIG_TIMESTAMP_PERIOD_LOWPASS_ALPHA, to add a configurable lowpass filter
for varying VkPhysicalDeviceLimits::timestampPeriod on non-Apple GPUs.mvk_private_api.h API.MVK_DEBUG env var, and add MVK_CONFIG_DEBUG env var to replace it.MVK_CONFIGURATION_API_VERSION and MVK_PRIVATE_API_VERSION to 38.Released 2023/08/15
VK_KHR_deferred_host_operationsVK_KHR_incremental_presentVK_KHR_shader_non_semantic_infoVK_EXT_4444_formatsVK_EXT_calibrated_timestampsVK_EXT_pipeline_creation_feedbackVK_EXT_shader_demote_to_helper_invocationVK_EXT_shader_subgroup_ballotVK_EXT_shader_subgroup_voteVK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN.MVKConfiguration::shouldMaximizeConcurrentCompilationVK_PRESENT_MODE_IMMEDIATE_KHR if VkPresentTimeGOOGLE::desiredPresentTime is zero.VK_PRESENT_MODE_IMMEDIATE_KHR to macOS Cube demo.renderPass and VkPipelineRenderingCreateInfo to be missing.vkQueueSubmit() on non-Apple-Silicon devices.SPV_KHR_shader_ballot and SPV_KHR_subgroup_vote.Released 2023/05/23
VK_KHR_map_memory2VK_MVK_moltenvk extension.
mvk_config.h, mvk_private_api.h, and mvk_deprecated_api.h, and deprecate vk_mvk_moltenvk.h.VkPastPresentationTimingGOOGLE,
and ensure swapchain image presented time is always populated when requested.MTLCounterSampleBuffer, and fall back to emulation via CPU timestamps.PhysicalStorageBufferAddresses encode the use of the associated MTLBuffer.vkCmdBindDescriptorSets() / vkCmdPushDescriptorSets().deviceUUID from MTLDevice location and peer group info,
which should be unique, and constant across OS reboots.deviceLUID from MTLDevice.registryID.VK_KHR_depth_stencil_resolve extension on all devices.VkPhysicalDeviceLimits::lineWidthGranularity to 1.Released 2023/03/22
VK_EXT_external_memory_hostVK_EXT_pipeline_creation_cache_controlVK_EXT_shader_atomic_floatVK_EXT_surface_maintenance1VK_EXT_swapchain_maintenance1VkCommandBufferInheritanceInfo::renderPass is VK_NULL_HANDLE during dynamic rendering.vkCmdCopyQueryPoolResults(): Fix loss of queries when query count is not a multiple of GPU threadgroup execution width.VK_KHR_fragment_shader_barycentric was sometimes incorrectly disabled due to a Metal driver bug.MTLCommandBuffer finishes.MTLCommandBuffer in a queue submit.VkPipelineVertexInputDivisorStateCreateInfoEXT::vertexBindingDivisorCount
doesn't match VkPipelineVertexInputStateCreateInfo::vertexBindingDescriptionCount.x86_64 build that is running on Apple Silicon using Rosetta2.MVKConfiguration::shaderSourceCompressionAlgorithm and
env var MVK_CONFIG_SHADER_COMPRESSION_ALGORITHM to support
compressing MSL shader source code held in a pipeline cache.MVKShaderCompilationPerformance::mslCompress and mslDecompress
to allow performance of MSL compression to be tracked and queried.VkDevice, when it is destroyed.MVKConfiguration::logActivityPerformanceInline boolean to activityPerformanceLoggingStyle enumeration value.MVK_CONFIG_ACTIVITY_PERFORMANCE_LOGGING_STYLE environment variable and
build setting to set MVKConfiguration::activityPerformanceLoggingStyle value.MVK_CONFIG_TRACE_VULKAN_CALLS to log thread ID only if requested.VK_MVK_MOLTENVK_SPEC_VERSION to version 37.OpAtomicFAddEXT atomic add on float typeslevel() arguments.Released 2023/01/23
CAMetalDrawable released before
MTLCommandBuffer is finished using it.MVKFences and MVKSemaphores when
a swapchain image is acquired more than it is presented.vkGetInstanceProcAddr() with a
null instance, when vkGetInstanceProcAddr itself is the function name.VkPhysicalDeviceLimits members maxClipDistances and
maxCombinedClipAndCullDistances to more accurate values.VkPhysicalDeviceLimits::maxDrawIndexedIndexValue to
acknowledge automatic primitive restart.Released 2022/12/08
VK_KHR_copy_commands2VK_KHR_shader_float_controls.MTLCounterSet crash on additional Intel Iris Plus Graphics devices.MVKPipeline: Stop using vertex-style input for tessellation evaluation shaders.MVKPipeline: Force extra checks for stores after fragment discard.MVKImage: Always use a texel buffer for atomic storage images.MVKDevice: Fix backwards attribution of storage/uniform texel buffer alignments.CompositeInsert OpSpecConstantOp.BuiltInHelperInvocation when a fragment is discarded.Op?MulExtended.OpVariable pointers.Released 2022/10/17
VK_KHR_shader_float_controlsVK_KHR_spirv_1_4MTLFence with an option to limit to a single Vulkan queue and use Metal's implicit submisison order guarantees.MTLEvents for Vulkan semaphores on NVIDIA and Rosetta2.MVKConfiguration replace booleans semaphoreUseMTLEvent and semaphoreUseMTLFence with enumerated semaphoreSupportStyle.VK_EXT_descriptor_indexing
extension is enabled. MVKConfiguration::useMetalArgumentBuffers (MVK_CONFIG_USE_METAL_ARGUMENT_BUFFERS)
is now an enum field. The use of Metal argument buffers is still disabled by default (MVK_CONFIG_USE_METAL_ARGUMENT_BUFFERS_NEVER).MVKConfiguration replace boolean prefillMetalCommandBuffers with enumeration.MVKPipeline: Add builtins that are read but not written to tessellation pipelines.MVKSwapchain for future drawable presentations.vkCreateSwapchainKHR() on macOS 10.14 and earliervkGetBufferDeviceAddressEXT when building with MVK_HIDE_VULKAN_SYMBOLS=1.Makefile to forward any build setting declared on the command line to Xcode.MVK_USE_CEREAL build setting to avoid use of Cereal external library (for pipeline caching).MoltenVKShaderConverter tool automatically maps bindings when converting GLSL.VK_MVK_MOLTENVK_SPEC_VERSION to version 36.OpPtrEqual, OpPtrNotEqual, and OpPtrDiff.OpStore.gl_FragCoord if really necessary.gl_LastFragDepthARMReleased 2022/08/15
VK_EXT_metal_objectsVK_KHR_buffer_device_address and VK_EXT_buffer_device_address (available on GPUs with Tier 2 argument buffers support).vkResetDescriptorPool().MTLCounterSet crash on additional Intel Iris Plus Graphics drivers.MTLDevice to enable support for VK_KHR_fragment_shader_barycentric
and VK_NV_fragment_shader_barycentric extensions.vkUpdateDescriptorSetWithTemplate() for inline block descriptors.vkGetRefreshCycleDurationGOOGLE() across multiple display screens.MTLCaptureScope retention bug to macOS 12.4 and iOS 15.4 and later.VkDebugUtilsMessageTypeFlagsEXT for debug util messages generated within MoltenVK.VK_MVK_MOLTENVK_SPEC_VERSION to version 35.SPV_KHR_physical_storage_buffer extension.OpCompositeInsert for hoisted temporaries.Released 2022/06/06
VK_KHR_portability_enumeration support added to MoltenVK_icd.json, and documentation
updated to indicate the impact of the VK_KHR_portability_enumeration extension during
runtime loading on macOS via the Vulkan Loader.VK_KHR_dynamic_renderingVK_KHR_fragment_shader_barycentric and VK_NV_fragment_shader_barycentricVK_KHR_separate_depth_stencil_layoutsVK_EXT_separate_stencil_usagevkGetRefreshCycleDurationGOOGLE() for macOS.vkCmdTimestampQuery() after a renderpass was
writing timestamp before renderpass activity was complete.vkSetMoltenVKConfigurationMVK() function pointer typedef.OpCompositeInsert.Released 2022/04/11
VK_EXT_sample_locations (Custom locations settable via vkCmdBeginRenderPass() only,
since VkPhysicalDeviceSampleLocationsPropertiesEXT::variableSampleLocations is false).MTLFence while it is being used by MTLCommandBuffer.vkGetMTLCommandQueueMVK().CoreFoundation objects during calls to vkUseIOSurfaceMVK().VkPhysicalDeviceLimits::maxSamplerAllocationCount when not using Metal argument buffers.VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT when
MVK_CONFIG_PREFILL_METAL_COMMAND_BUFFERS is usedMoltenVKShaderConverter tool defaults to the highest MSL version supported on runtime OS.python3 in glslang scripts, to replace missing python on macOS 12.3.VK_MVK_MOLTENVK_SPEC_VERSION to version 34.Offset / ArrayStride in constants.gl_IsHelperInvocation can be Volatile.OpTerminateInvocation.Released 2022/02/22
VkApplicationInfo::apiVersion value.Released 2022/02/07
MVK_HIDE_VULKAN_SYMBOLS env var to support building MoltenVK with static Vulkan linkage symbols hidden.VkPhysicalDeviceLimits::timestampPeriod.MTLEvent for VkSemaphore under Rosetta2.VkPhysicalDeviceProperties::deviceID from GPU capabilities.MoltenVKShaderConverterTool.MTLTexture in render subpasses that use no attachments.mvk::getShaderOutputs() in SPRIVReflection.h support flattening nested structures.MVKConfigLogLevel.MoltenVKShaderConverter tool support loading tessellation shader files.MoltenVKShaderConverter tool update to MSL 2.4 by default.VK_MVK_MOLTENVK_SPEC_VERSION to version 33.OpSwitch.gl_TessCoord variable type.UniformConstant storage.atomic min/max.normalize on half3/half2.LocalSizeId.Released 2021/11/15
511.VkImage marked for rendering, when multilayered-rendering
is not supported on platform, but app doesn't actually attempt to render to multiple layers.vkCmdSetDepthBias() sometimes ignoring pipeline dynamic
state flags when called before vkCmdBindPipeline().MVKImageView
does not actually perform multilayer-rendering.MTLFence between Metal encoders and timestamp stage counter BLIT encoder
to ensure previous work is finished before being timestamped.BC1_RGB compressed format where incorrect alpha value returned.vkGetMTLCommandQueueMVK() function to expose underlying MTLCommandQueue object.vkSetWorkgroupSizeMVK() function.VkApplicationInfo::apiVersion warning.OpSpecConstantOp ops OpQuantizeToF16 and OpSRem.OpKill).clip/cullN) for clip/cull builtins in tess output struct.vecsize between shader stages.fast-math in MSL code to match Vulkan CTS results.DecorationNoContraction when compiling using fast-math.OpQuantizeToF16 when compiling using fast-math.INT_MIN/INT64_MIN literals.spvQuantizeToF16() functions into a single template function.vec<T, n> in template SpvHalfTypeSelector for function spvQuantizeToF16().threadgroup bool.Modf/Frexp pointer versions.INT_MIN/INT64_MIN literals.Released 2021/08/30
VkSemaphore is supported:
MTLEvent for VkSemaphore, except on NVIDIA, where emulation on CPU is preferred.MVK_ALLOW_METAL_FENCES environment variable to 0 (false),vkCmdBlitImage() from compressed textures.float4) variable in shaders.VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT for
VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 on macOS Apple Silicon.encodeBindings for bufferBindings.MTLCommandBuffer label.VK_MVK_MOLTENVK_SPEC_VERSION to 32.gl_SampleMaskIn for sample-shading and/or fixed sample mask.SampleMask.SPIRVCrossDecorationInterpolantComponentExpr decoration.gl_Position outputs when gl_Position defined but unused.spvSubgroupBallot().OpArrayLength result.Released 2021/06/28
VK_KHR_imageless_framebuffervkGetPastPresentationTimingGOOGLE() queuing behavior compliant with Vulkan spec.vkGetIOSurfaceMVK() and vkUseIOSurfaceMVK() without requiring Objective-C.C++17 and compiler optimization setting -O2.#include "SPIRVReflection.h" from SPIRVToMSLConverter.h header.[MTLDevice supportsBCTextureCompression] on Mac Catalyst.SPIRVToMSLConversionConfiguration structs to each other
to find a cached shader, by only considering resources from the current shader stage.kMVKShaderStageMax to kMVKShaderStageCount.MTLCommandBuffer logs in runtime debug mode on older OS versions.MTLArgumentEncoder for Metal Argument Buffers.MVKConfiguration::resumeLostDevice enabled, do not release
waits on VkDevice, and do not return VK_ERROR_DEVICE_LOST, unless VkPhysicalDevice is also lost.loadOp, when stencil is smaller than render area.MTLTexture when VkImage has no VkDeviceMemory bound.VkPhysicalDeviceLimits values for Vulkan and Metal compliance.SPIRV_CROSS_NAMESPACE_OVERRIDE to SPIRV_CROSS_NAMESPACE.MTLCommandBuffers, based on use type, for GPU Capture debugging.Scripts/runcts script as a convenience for running Vulkan CTS tests.user() attrib.Released 2021/04/27
MVK_CONFIG_USE_METAL_ARGUMENT_BUFFERS environment variable (disabled by default). This dramatically
expands the number of resources that can be submitted to a pipeline stage, per the Vulkan
VK_EXT_descriptor_indexing extension. Currently available on macOS 11.0 (Big Sur) or later,
and on earlier macOS versions on Intel GPU's.HDR10 colorspace via VK_COLOR_SPACE_HDR10_HLG_EXT and VK_COLOR_SPACE_HDR10_ST2084_EXT.CAMetalLayer colorspace property based on Vulkan parameters,
and don't rely on Metal default values.MVKConfiguration::resumeLostDevice and MVK_CONFIG_RESUME_LOST_DEVICE env var,
to allow VkDevice to resume after non-fatal VK_ERROR_DEVICE_LOST error.MVKDescriptorPool pools its descriptor sets.MVKConfiguration::preallocateDescriptors and MVK_CONFIG_PREALLOCATE_DESCRIPTORS
environment variable by default to preallocate descriptors when a VkDescriptorPool is created.MVKPhysicalDevice::getSurfaceFormats() returning VK_FORMAT_UNDEFINED.MVKShaderLibraryCache.SPIRV-Cross header files.MVKConfiguration::defaultGPUCaptureScopeQueueIndex
and defaultGPUCaptureScopeQueueFamilyIndex.MVKConfigLogLevelBits, MVKConfigAutoGPUCaptureScopeBits, and MVKConfigTraceVulkanCallsBits
enums to specify config API values in a Vulkan-friendly manner, while automatically documenting the same values for env vars.MVKConfiguration::apiVersionToAdvertise and MVK_CONFIG_API_VERSION_TO_ADVERTISE
env var to configure MoltenVK to advertise a particular Vulkan version.MVKConfiguration::advertiseExtensions and MVK_CONFIG_ADVERTISE_EXTENSIONS
env var to configure MoltenVK to force advertising support for no, or minimally few, Vulkan extensions.Hologram and API-Samples demo apps, and remove
LunarG/VulkanSamples as a dependency library.NDEBUG macro to all Release builds to remove assert() calls.VK_MVK_MOLTENVK_SPEC_VERSION to 31.ulong types in buffers in 2.3+.OpCopyMemory.Released 2021/02/22
shaderInt64 feature.MVKConfiguration::fastMathEnabled configuration
setting and MVK_CONFIG_FAST_MATH_ENABLED environment variable (enabled by default).vkGetMoltenVKConfigurationMVK() and vkSetMoltenVKConfigurationMVK() functions
can now be used with a VkInstance from another Vulkan layer, or with a VK_NULL_HANDLE VkInstance.MVKConfiguration extended to cover all MoltenVK environment variables.VkPhysicalDeviceLimits::maxBoundDescriptorSets.VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU.MTLFence over MTLEvent.immmutableSamplers with sampler arrays.MTLDevice on cross-thread syncing.MVKMTLBufferAllocation: Support device-local temp buffers for tessellation,
indirect multiview, or occlusion queries buffer usage.MVKPixelFormats: Enable RenderTarget usage for linear textures on Apple GPUs.MVKRenderPass: Use a non-trivial granularity for TBDR GPUs.MVKGraphicsPipeline: Fix color write mask with RGB9E5 RTs.MVKImagePlane: When sync'ing, create the texture if it doesn't exist.MVKRenderPass: Don't use Load/Store actions for memoryless.MVKRenderPass: Only use MTLStorageModeMemoryless where available.MVKDeviceMemory: Don't consider Memoryless host-accessible on macOS/tvOS.MVKCmdResolveImage fix incorrectly changing first resolve layer's src/dst base layer.MVKPhysicalDevice: Require Mac family 2 for render without attachments.MVKPhysicalDevice: Disable SIMD-group permutation for Mac family 1.MVKPhysicalDevice: Clamp maximum buffer range to 4 GiB - 1.MVKMTLBufferAllocation: Mark temp buffers as volatile.SPIRVReflection: Multiple entry point support for getShaderOutputs().MVKVector, which was long ago replaced with MVKSmallVector.ONLY_ACTIVE_ARCH from Debug builds. MoltenVK Debug builds now build for all platform architectures.MVKConfiguration::autoGPUCaptureScope
(or environment variable MVK_CONFIG_AUTO_GPU_CAPTURE_SCOPE) to 2.Makefile and fetchDependencies support xcpretty, if available.VK_MVK_MOLTENVK_SPEC_VERSION to 30.[[position]] when required.Released 2020/12/09
VK_KHR_sampler_mirror_clamp_to_edge (iOS)VK_KHR_timeline_semaphoreVK_EXT_descriptor_indexing (initial release limited to Metal Tier 1: 96/128 textures, 16 samplers)VK_EXT_post_depth_coverage (macOS)VK_EXT_private_dataVK_EXT_subgroup_size_controlVK_EXT_texture_compression_astc_hdrVK_AMD_shader_image_load_store (macOS)VK_IMG_format_pvrtc (macOS)x86_64 and arm64 architectures.MTLEvent-based semaphores and fix several MVKSync issues.VK_KHR_image_format_list to disable MTLTextureUsagePixelFormatView
if only swizzles or sRGB conversion will be used for image views, improving
performance on iOS by allowing Metal to use lossless texture compression.vkUpdateDescriptorSets() when copying inline block descriptors.vkUseIOSurfaceMVK() on chroma sampling and double releasing ofMTLTexture.vkUpdateDescriptorSets() when copying inline block descriptors.MTLCommandBuffer to MTLDrawable
to improve performance and reduce blocking.VkPhysicalDeviceLimits::maxPerStageDescriptorStorageImages as Metal limit of 8.96 for A11 SoC's and above.MTLStorageTypeMemoryless for Apple Silicon on Mac.vkCmdClearAttachments()MVKDevice increase minimum OS for shared-storage textures.MVKDevice set properties for Apple Silicon GPUs on macOS.MVKQueue only create one GPUCaptureScope per queue.MVKSamplerYcbcrConversion always make sure there is one plane.MVKPhysicalDevice correct fragment input component limit.MVKPhysicalDevice set max visibility buffer size to 256 kiB where supported.MVKPhysicalDevice expose support for interpolation functions.MVKPhysicalDevice enable 3D compressed textures on iOS/tvOS, and forbid ETC2 and EAC
3D textures on all platforms. Apple GPUs do not support 3D for those.MVKPhysicalDevice enable Apple family 7 features on iOS.MVKPhysicalDevice remove need to call initGPUInfoProperties() twice.MVKPhysicalDevice correct max descriptor set resources.MVKPhysicalDevice reduce maximum point size to 64.MVKPhysicalDevice enable strictLines for Intel and NVIDIA.MVKPhysicalDevice enable shaderResourceMinLod on iOS.MVKPhysicalDevice set correct subgroup properties.MVKPhysicalDevice enable texture swizzle on all Apple GPUs.MVKPipelineLayout only set configuration result if validating.MVKPipeline fix calculation of atomic image buffer addresses.MVKPipeline disable rasterization if culling both sides and don't try to add a fragment shader.MVKPipeline shorten vertex attribute format's length when stride < size.MVKGraphicsPipeline handle minSampleShading.MVKImage always use texel buffers for linear images in MTLHeaps.MVKImage make sure plane heap offsets are properly aligned.MVKImage always set the depth plane when rendering to a 3D image.MVKImage avoid swizzling storage and/or attachment image views.MVKImage avoid texel buffer for atomics if view format list
exists and does not include either R32_UINT or R32_SINT format.MVKImageView always ignore transfer usages.MVKBufferView avoid triggering bytesPerRow validation warning.MVKDescriptorSetLayout speed up lookup of descriptor index and streamline binding access.MVKCmdBlitImage use layered draws when possible.MVKCmdBlitImage add 0.5 to layer index before interpolating.MVKCmdBlitImage support depth/stencil blits with inversion and scaling.MVKSwapchain allow images whose size doesn't match the CAMetalLayer.MVKPixelFormats add 0.5 ULP to clear values for normalized formats.MVKCommandEncoder don't set renderTargetArrayLength for mixed 2D/3D renders.MVKExtensions add missing tvOS case for unsupported extensions.MVKDescriptorSetLayout sort and hold bindings by binding number.MVKDescriptor simplify subclass implementations.MVKComputePipeline override max threads per threadgroup.MVKGPUCapture make sure the MTLCaptureScope has only one reference.MoltenShaderConverter fix tvOS build to support tvOS 9.0.README.md document.VK_MVK_MOLTENVK_SPEC_VERSION to 29.SPV_EXT_demote_to_helper_invocation for MSL 2.3.GL_EXT_nonuniform_qualifier/SPV_EXT_descriptor_indexing).OpGroupNonUniformAllEqual.ushort.component::x gather for depth2d textures.FragCoord for sample-rate shading.min_lod_clamp(), simd_is_helper_thread(),
barycentric_coord, and primitive_id.[[thread_index_in_simdgroup]] in vertex shaders.fmin3 and fmax3 library functions to the illegal name list.level.OpTypePointer will always take a SPIRType.Released 2020/09/28
Note: This release contains changes to library paths and framework linking options.
vkEnumerateInstanceVersion() functionvkGetDeviceQueue2() functionVK_KHR_shader_draw_parametersVK_KHR_portability_subsetVK_KHR_create_renderpass2VK_KHR_depth_stencil_resolveVK_KHR_external_fence (non-functional groundwork for future extensions,
including support for GCD and Mach semaphores)VK_KHR_external_fence_capabilities (non-functional groundwork for future
extensions, including support for GCD and Mach semaphores)VK_KHR_external_semaphore (non-functional groundwork for future
MTLSharedEvent Vulkan extension)VK_KHR_external_semaphore_capabilities (non-functional groundwork for
future MTLSharedEvent Vulkan extension)VK_KHR_multiviewVK_KHR_shader_subgroup_extended_typesVK_EXTX_portability_subset extension.XCFrameworks.dylibs.MoltenVKSPIRVToMSLConverter and MoltenVKGLSLToSPIRVConverter frameworks
into a single MoltenVKShaderConverter framework.VK_IMAGE_CREATE_EXTENDED_USAGE_BIT.vkCmdBindDescriptorSets order pDynamicOffsets by descriptor binding number
within each descriptor set.vkCmdCopyImage on macOS flush non-coherent image memory before copy operation.MTLDrawable present time options.dynamicOffsets ordering based on binding index.variableMultisampleRate feature.MTLRenderPassDescriptor renderTargetWidth and renderTargetHeight on macOS 10.15 and newer.renderArea into account.renderTargetArrayLength on devices that don't support it.addressModeW on samplers with unnormalized coordinates.MTLTexture for swapchain image planes.VK_EXT_vertex_attribute_divisor fix issues with zero divisors.fetchDependencies builds serially by default for better build script integration.MoltenVKSPIRVToMSLConverter and MoltenVKGLSLToSPIRVConverter
frameworks into a single MoltenVKShaderConverter framework.setColorStoreAction for non-color attachments.MVKShaderLibraries.VK_WHOLE_SIZE is used.vkSetMTLTextureMVK() Fix crash if incoming MTLTexture does not have an associated IOSurface.distance(a,b) to abs(a-b).OpCompositeInsert and OpVectorInsertDynamic.flip_vert_y in all relevant stages.Released 2020/07/28
VK_KHR_driver_propertiesVK_KHR_sampler_ycbcr_conversionVK_EXT_image_robustnessVK_EXT_robustness2VK_FORMAT_D16_UNORM on iOS 13.0+ and tvOS 13.0+.Makefile supports building fat Platform+Simulator binaries, plus Debug builds.fetchDependencies script supports platform build selection, plus parallel builds.vkCmdBlitImage() returns error if scaling or inverting to linear image on macOS.VK_FORMAT_A2B10G10R10_UNORM_PACK32 as a surface format.VkPipelineMultisampleStateCreateInfo::pSampleMask.VkPhysicalDeviceSubgroupProperties.USCALED/SSCALED vertex formats.VkPhysicalDeviceProperties::pipelineCacheUUID.MVKPhysicalDeviceMetalFeatures::vertexStrideAlignment to track Metal vertex binding stride alignment.MVKPhysicalDeviceMetalFeatures::indirectTessellationDrawing to track if indirect tessellation drawing is supported.@available() directive as it was causing issues in some build environments.API-Samples generateSPIRVShaders no longer builds MoltenVKShaderController tool.VK_MVK_MOLTENVK_SPEC_VERSION to 27.OpStore source operands are marked for inclusion in function arguments.sampleMask in fragment shaders.MSLVertexAttr and MSLShaderInput members.Y'CbCr conversion.Released 2020/06/09
VkFormats.fetchDependencies script to use pre-built spirv-tools files by default.maxVertexInputBindingStride and maxVertexInputAttributeOffset
to minimum Vulkan values.VK_MVK_MOLTENVK_SPEC_VERSION to 26.Released 2020/06/01
VK_GOOGLE_display_timingVK_KHR_external_memory (non-functional groundwork for future
Metal-resource Vulkan extension).VK_KHR_external_memory_capabilities (non-functional groundwork
for future Metal-resource Vulkan extension).vkQueuePresentKHR() returns a VkResult for each swapchain.MVKPipeline disable fragment shader outputs for unused attachments.MVKBuffer support texel buffers in host-coherent memory on Mac.MVKDescriptor pass buffers to shaders that do atomic image accesses.vkGetPhysicalDeviceFormatProperties() incorrectly returned
properties for unsupported formats.VkDescriptorBufferInfo.range set to VK_WHOLE_SIZE.MVKSmallVector as a more memory efficient substitute of MVKVector.VulkanSamples API-Samples demo apps and add
input_attachment and push_descriptors demos.MVK_CONFIG_AUTO_GPU_CAPTURE_OUTPUT_FILE environment variable
to support capturing GPU traces to a file.vkGetSwapchainPerformanceMVK() from API.vkGetPerformanceStatisticsMVK().MVK_CONFIG_PERFORMANCE_LOGGING_INLINE env var to enable/disable
logging of performance of each activity when it happens.BuiltInFragCoord as implicitly used for subpass reads.OpCompositeExtract.subpassInput is passed to leaf functions.Released 2020/04/05
VkFormatProperties from MTLPixelFormat capabilities,
taking into consideration variations across MTLDevice Features Sets.vkCmdResolveImage().MTLRenderEncoder.VkPhysicalDeviceLimits::minStorageBufferOffsetAlignment
to 16 to avoid Metal validation assertions.MVK_CONFIG_USE_COMMAND_POOLING
environment variable.MTLCommandBuffers using MVK_CONFIG_PREFILL_METAL_COMMAND_BUFFERS.CAMetalDrawable and MTLTexture of peer swapchain images.make install build command to overwrite the existing framework in the system
framework library, and update README.md to clarify the instructions for using make install.README.md and MoltenVK_Runtime_UserGuide.md documents to clarify that
MoltenVK is not a fully-compliant implementation of Vulkan.API-Samples demos and document in Demos/README.md.Released 2020/01/22
MVK_CONFIG_PREALLOCATE_DESCRIPTORS environment variable to support preallocated
descriptor pooling within a VkDescriptorPool via the VkDescriptorPoolSize values.vkCmdPushDescriptorSet() for non-dedicated buffer memory.MTLBuffer when inline uniform block descriptor is written to instead of copying host-side bytes.EXT_inline_uniform_block when using push descriptor sets.CAMetalLayer nextDrawable call.MoltenVK_Runtime_UserGuide.md to better explain runtime environment variables.VK_MVK_MOLTENVK_SPEC_VERSION to 24.ClipDistance as an input stage variable.OrigID when emitting component packed vectors.Component decoration.Component decoration.min/max.OpCopyLogical.S/UToF.isalpha/isalnum.Released 2019/12/16
VK_EXT_inline_uniform_blockvkCmdBlitImage().fetchDependencies on build paths containing spaces.MTLHeap memory leak in MVKDeviceMemory.VK_MVK_MOLTENVK_SPEC_VERSION to 23.VK_EXT_metal_surface extension.tessellation_access_chain().allow_id_rewrite().spvUnsafeArray<T>.unpack_expression().kBufferSizeBufferBinding.Compiler::update_active_builtins() and has_active_builtin().builtin_translates_to_nonarray().OpFunctionCall results.spvc_type_get_base_type_id().Released 2019/10/30
VK_EXT_swapchain_colorspace (iOS, already supported on macOS).VK_EXT_hdr_metadata (macOS)MVK_ALLOW_METAL_FENCES environment variable to 1 (true),
to enable use of MTLFence for Vulkan semaphores, by default.MVK_CONFIG_TEXTURE_1D_AS_2D environment variable to
enable/disable these capabilities.MTLHeaps for VkDeviceMemory when possible.VkPhysicalDeviceFeatures::shaderResourceMinLod feature.MoltenVK_Runtime_UserGuide.md about embedding libMoltenVK.dylib in an application.README.md document.MVK_CONFIG_SYNCHRONOUS_QUEUE_SUBMITS build setting to be overridden.VkInstance and VkQueue creation.MTLPixelFormatDepth24Unorm_Stencil8 is not supported.MVKVectorInline uses and
replacing use of MVKVectorDefault with std::vector in descriptor set bindings.VkPhysicalDeviceLimits::maxTexelBufferElements to more realistic value.GLSLToSPRIVConverter.SPIRV-Cross/mvkSpirvCrossRevisionDerived.h to separate script.OpCompositeConstruct from std140 float[].OpVectorExtractDynamic with spec constant op index.Released 2019/09/10
VK_KHR_device_groupVK_EXT_fragment_shader_interlockVkEvent, using either native MTLEvent or emulation when MTLEvent not available.vkInvalidateMappedMemoryRanges() synchronizes managed device memory to CPU.VkDeviceCreateInfo specifies queue families out of numerical order.vkDestroyPipelineLayout().MTLEvent.vkCmdBlitImage(): Support format component swizzling.vkCmdClearImage(): Set error if attempt made to clear 1D image, and fix validation of depth attachment formats.vkCreateRenderPass(): Return VK_ERROR_FORMAT_NOT_SUPPORTED if format not supported.vkCmdFillBuffer(): Improve performance 150x by using parallelism more effectively.MTLFence for Vulkan semaphores via the MVK_ALLOW_METAL_FENCES environment variable.VK_TIMEOUT of VkSemaphore and VkFence.vkCreateMacOSSurfaceMVK() and vkCreateIOSSurfaceMVK() functions.MVKSemaphore.MVKLinkableMixin template base class.MVKVector whenever possible in MoltenVK, especially within render loop.compositeAlpha member of VkSwapchainCreateInfoKHR.VkPhysicalDevicePortabilitySubsetFeaturesEXTX::events set to true.MTLCommandBuffer.
MVKConfiguration::presentWithCommandBuffer is now obsolete.MTLCommandBuffer push/popDebugGroup if not available.MVKSwapchain::signalWhenAvailable() add autoreleasepool around MTLCommandBuffer use.VK_MVK_MOLTENVK_SPEC_VERSION to version 22.VK_INTEL_shader_integer_functions2 enums and structs in latest Vulkan headers.SPV_EXT_fragment_shader_interlock extension.Modf/Frexp where output is access chain to scalar.{Base,}{Vertex,Instance}{,Index} to bitcast_from_builtin_load.emit_uninitialized_temporary.get_*_address_space() methods.RelaxedPrecision.ParsedIR::mark_used_as_array_length(uint32_t id)ldexp taking uint input.ParsedIR::mark_used_as_array_length(uint32_t id).Released 2019/07/25
VK_KHR_device_group_creationVK_KHR_swapchain_mutable_formatVK_KHR_uniform_buffer_standard_layoutVK_EXT_metal_surfaceVK_EXT_post_depth_coverageVK_EXT_scalar_block_layoutVK_EXT_shader_stencil_exportVK_EXT_swapchain_colorspace (macOS)VK_EXT_texel_buffer_alignmentVK_AMD_shader_image_load_store_lodVK_AMD_shader_trinary_minmaxVK_INTEL_shader_integer_functions2VK_FORMAT_A2R10G10B10_UNORM_PACK32 as a surface format and view format.VkPipelineShaderStageCreateInfo::pName.constexpr samplers hardcoded in MSL.vkCmdCopyImage() support copying between compressed and uncompressed formats
and validate that formats are compatible for copying.vkCmdBufferImageCopy() fix crash when setting bytes per image in non-arrayed images.vkCmdBlitImage() supports blit between different texture formats, and multisampled images.vkCmdResolveImage() supports textures of different sizes.vkCmdClearImage() returns error if texture is not renderable.vkCmdBindPipeline() from vkCmdBindDescriptorSet().MVKDeviceMemory keep MTLResourceOptions aligned with MTLStorageMode & MTLCPUCacheMode.MTLCommandBuffer completion timing performance tracking option.MVK_CONFIG_TRACE_VULKAN_CALLS to optionally log Vulkan call timings.SPIRV-Tools build in Travis because Travis does not support the required Python 3.SPIRVToMSLConverterContext into input config and output results.MVKImage created as 1D attachment.vk_mvk_moltenvk.h cannot be used with objects
retrieved through the Vulkan SDK Loader and Layers framework.VK_MVK_MOLTENVK_SPEC_VERSION to 21.SPV_KHR_multiview extension.SPV_KHR_post_depth_coverage extension.SPV_AMD_shader_trinary_minmax extension.SPV_KHR_device_group extension.SPV_INTEL_shader_integer_functions2 extension.SubgroupSize / SubgroupInvocationID in fragment.OpImageQueryLod.MinLod operand.PrimitiveID in fragment and barycentrics.OpOuterProduct.SubgroupLocalInvocationId and SubgroupSize in all stages.select() function for OpSelect.coherent, volatile, and restrict.FP16 coordinates.int64_t/uint64_t buffer members as unsupported by Metal.OpPhi and case fallthrough.OpPhi helper copy.if or else block dominates a variable.OpTypeImage Sampled parameter.Released 2019/06/13
VK_EXT_debug_reportVK_EXT_debug_markerVK_EXT_debug_utilsVK_NV_glsl_shadersetVertexBytes() for passing tessellation vertex counts.[[attribute]] assignment for tessellation evaluation shaders.VkSemaphore optionally uses MTLEvent, if available and
MVK_ALLOW_METAL_EVENTS environment variable is enabled.vkSetWorkgroupSizeMVK() to set compute kernel workgroup size
when using MSL source code or MSL compiled code.vkGetPhysicalDeviceImageFormatProperties().[***MoltenVK ERROR***] to
[mvk-error], for consistency with other log level indications.mvkMTLRenderStagesFromVkPipelineStageFlags() to map to all Vulkan stages,
by indicating whether the pipeline barrier should come before or after the stages.VkPhysicalDeviceProperties::pipelineCacheUUID when SPIRV-Cross revision changes.vkCmdClearAttachments() returns encoder to previous pipeline, depth-stencil & resource state after execution.vkDestroySwapchainKHR().MoltenVKShaderConverter tool: Add MSL version and platform command-line options.VkShaderModule destroyed.MVKBuffer: Force managed storage for linear textures on shared buffers.texelBufferTextureWidth setting in MVKComputePipeline::getMTLFunction().Debug mode.glslang for MoltenVKGLSLToSPIRVConverter.MVK_EXCLUDE_SPIRV_TOOLS option.VK_MVK_MOLTENVK_SPEC_VERSION to 20.OpArrayLength.OpAtomic* temporaries are used in other blocks.Released 2019-04-12
VK_KHR_get_surface_capabilities2 extension.VK_KHR_swapchain extension functions.VK_EXT_host_query_reset extension.vkCreateDevice().VkVertexInputBindingDescription.MVKPhysicalDeviceMetalFeatures::depthSampleCompare.VK_INCOMPLETE.fetchDependencies: Stop on first error.MVKMTLBufferAllocation.vkCmdFillBuffer() on VK_WHOLE_SIZE.MVKPushConstantsCommandEncoderState when accessing absent
graphics pipeline during a compute stage.MTLRenderPassDescriptor renderTargetWidth & renderTargetHeight
set on older devices.renderArea includes offset, not just extent,
and are set only when layered rendering is supported on device.MTLTextureDescriptor.MTLSamplerDescriptor.compareFunction on devices that don't support it.shaderStorageImageArrayDynamicIndexing feature on iOS.dSYM file for each dylib file.BUILT_PRODUCTS_DIR to avoid conflict between
macOS and iOS build locations.Makefile supports install target to install MoltenVK.framework.
into /Library/Frameworks/.MVK_CONFIG_TRACE_VULKAN_CALLS env var and build setting to log Vulkan calls made by application.MVKConfiguration::performanceLoggingFrameCount non-zero.VK_MVK_MOLTENVK_SPEC_VERSION to 19.cs & csh for compute shader file extensions.VK_KHR_push_descriptor.depth2d 4-component fixup.gl_TessCoord to a float3.gl_WorkGroupSize constant with [[maybe_unused]].SPV_NV_ray_tracing.OpVectorShuffle.backend.int16_t_literal_suffix set to null.MVK_spirv_cross in MoltenVK.Released 2019/02/28
VK_EXT_memory_budget extension.VK_KHR_shader_float16_int8.shaderStorageImageMultisample feature.MTLDevice registryID property to locate the GPU in IOKit.MVK_CONFIG_LOG_LEVEL
runtime environment variable.MVK_CONFIG_FORCE_LOW_POWER_GPU
runtime environment variable.
Set MSL version for shader compiling from Metal feature set.fullImageViewSwizzle config setting is enabled.fetchDependencies: Fix issue loading from Vulkan-Portability_repo_revision.fetchDependencies: Clean MoltenVK build to ensure using latest dependency libs.VK_MVK_MOLTENVK_SPEC_VERSION to 18.VK_KHR_shader_float16_int8.Released 2019/01/28
VK_EXTX_portability_subset extension.vkGetPhysicalDeviceImageFormatProperties()
and vkGetPhysicalDeviceImageFormatProperties2KHR().VK_ERROR_FEATURE_NOT_PRESENT error if vkCreateImageView()
requires shader swizzling but it is not enabled.VK_ERROR_FEATURE_NOT_PRESENT error if array of textures or
array of samplers requested but not supported.vkSetMTLTextureMVK() function retains texture object.fetchDependencies: build spirv-tools when attached via symlink.MVKVector, and set appropriate inline sizing usages.VK_MVK_MOLTENVK_SPEC_VERSION to 17.Released 2019/01/17
VK_MVK_MOLTENVK_SPEC_VERSION to 16.VK_AMD_gpu_shader_half_float extension.VK_KHR_variable_pointers extension.Released 2018/12/31
Released 2018/12/15
memory_scope after MSL 2.0.Released 2018/12/06
Released 2018/11/15
Released 2018/11/06
Released 2018/10/31
Released 2018/10/16
Released 2018/09/28
Released 2018/09/25
Released 2018/09/08
Released 2018/09/01
Released 2018/08/23
Released 2018/08/15
Released 2018/07/31
Released 2018/07/24
Released 2018/07/12
Released 2018/07/04
Released 2018/06/28
Released 2018/06/22
Released 2018/06/12
Released 2018/06/05
Released 2018/05/23
Released 2018/05/18
Released 2018/05/14
Released 2018/05/04
Released 2018/04/22
Released 2018/04/18
Released 2018/04/02
Released 2018/03/19
Released 2018/02/26
Initial open-source release!