Releases: KhronosGroup/MoltenVK
Releases · KhronosGroup/MoltenVK
Release for Vulkan SDK 1.3.236
- Add support for extensions:
VK_KHR_copy_commands2
- Fix crash on descriptor update with out-of-bounds descriptor count data.
- Fix Metal buffer index binding overrides for push constants and attachment clearing.
- Fix crash when buffer binding updates only offset while it is overridden.
- Fix app performance regression triggered by the previous introduction of
VK_KHR_shader_float_controls
. - Work around
MTLCounterSet
crash on additional Intel Iris Plus Graphics devices. - Fix mistaken YCBCR format support indication.
- Fix invalid blit offsets.
- Wait on emulated semaphores only once to prevent freezing when using prefilled command buffers.
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.- Document new linkage model used by Xcode 14 and later, and how to link MoltenVK
to an app or game using Xcode 13 or earlier. - Support Xcode 14.1 build settings.
- Upgrade GitHub CI to use Xcode 14.1 on macOS 12.
- Update dependency libraries to match Vulkan SDK 1.3.236.
- Update to latest SPIRV-Cross:
- MSL: Implement
CompositeInsert
OpSpecConstantOp
. - MSL: Support "raw" buffer input in tessellation evaluation shaders.
- MSL: Don't flatten arrayed per-patch output blocks in tessellation shaders.
- MSL: Account for composite types when assigning locations.
- MSL: Handle partial access chains with array-of-UBO/SSBO.
- MSL: Fix restrict vs __restrict incompatibility.
- MSL: Handle implicit integer promotion rules.
- MSL: Manually update
BuiltInHelperInvocation
when a fragment is discarded. - MSL: Add missing casts to
Op?MulExtended
. - MSL: Prevent stores to storage resources in discarded fragments.
- MSL: Don't dereference forwarded copies of
OpVariable
pointers. - MSL: Refactor member reference in terms of one boolean.
- Fix MSL Access Chain.
- MSL: Implement
Release for Vulkan SDK 1.3.231
- Add support for Vulkan 1.2.
- Add support for extensions:
VK_KHR_shader_float_controls
VK_KHR_spirv_1_4
- Vulkan semaphore functional improvements:
- Replace use of
MTLFence
with an option to limit to a single Vulkan queue and use Metal's implicit submisison order guarantees. - Support option to force use of
MTLEvents
for Vulkan semaphores on NVIDIA and Rosetta2. MVKConfiguration
replace booleanssemaphoreUseMTLEvent
andsemaphoreUseMTLFence
with enumeratedsemaphoreSupportStyle
.
- Replace use of
- Support config option to automatically use Metal argument buffers when
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
). - Fix memory leaks when configured for prefilling Metal command buffers.
MVKConfiguration
replace booleanprefillMetalCommandBuffers
with enumeration.MVKPipeline
: Add builtins that are read but not written to tessellation pipelines.- Fix occassional crash from retention of
MVKSwapchain
for future drawable presentations. - Fix crash in
vkCreateSwapchainKHR()
on macOS 10.14 and earlier - Fix undefined reference to
vkGetBufferDeviceAddressEXT
when building withMVK_HIDE_VULKAN_SYMBOLS=1
. - Update
Makefile
to forward any build setting declared on the command line to Xcode. - Add non-functional Vulkan 1.3 core function stubs, to avoid link errors with some external
libraries that assume Vulkan 1.3 linkages from the standard Vulkan header files included with MoltenVK. - Add
MVK_USE_CEREAL
build setting to avoid use of Cereal external library (for pipeline caching). MoltenVKShaderConverter
tool automatically maps bindings when converting GLSL.- Update
VK_MVK_MOLTENVK_SPEC_VERSION
to version36
. - Update to latest SPIRV-Cross:
- MSL: Support
OpPtrEqual
,OpPtrNotEqual
, andOpPtrDiff
. - MSL: Emit correct address space when casting during
OpStore
. - MSL: Add a mechanism to fix up shader outputs.
- MSL: Handle descriptor aliasing of raw buffer descriptors.
- MSL: Do not attempt to alias push constants.
- MSL: only fix up
gl_FragCoord
if really necessary. - MSL: Expose way to query if a buffer needs array length.
- MSL: Report unsupported 64-bit atomics.
- Don't rename remapped variables like
gl_LastFragDepthARM
- MSL: Support
Release for Vulkan SDK 1.3.224
- Add support for extensions:
VK_EXT_metal_objects
VK_KHR_buffer_device_address
andVK_EXT_buffer_device_address
(available on GPUs with Tier 2 argument buffers support).
- Reducing redundant state changes to improve command encoding performance.
- Improve performance of
vkResetDescriptorPool()
. - Update minimum Xcode deployment targets to macOS 10.13, iOS 11, and tvOS 11,
to avoid Xcode build warnings in Xcode 14. - Work around
MTLCounterSet
crash on additional Intel Iris Plus Graphics drivers. - Check
MTLDevice
to enable support forVK_KHR_fragment_shader_barycentric
andVK_NV_fragment_shader_barycentric
extensions. - Ignore sampler update in descriptor set bindings that use immutable samplers.
- Fix query pool wait block when query is not encoded to be written to.
- Fix
vkUpdateDescriptorSetWithTemplate()
for inline block descriptors. - Fix retrieval of accurate
vkGetRefreshCycleDurationGOOGLE()
across multiple display screens. - Fix occasional missing Metal buffer binding when only offset changes.
- Fix crash creating compute pipelines on macOS versions < 10.14.
- Apply Apple fix to
MTLCaptureScope
retention bug to macOS 12.4 and iOS 15.4 and later. - Report appropriate values of
VkDebugUtilsMessageTypeFlagsEXT
for debug util messages generated within MoltenVK. - Update macOS Cube demo to demonstrate optimizing the swapchain across multiple display screens.
- Support building in Xcode 14.
- Allow building on removable volumes with a space in their name.
- Update
VK_MVK_MOLTENVK_SPEC_VERSION
to version35
. - Update to latest SPIRV-Cross:
- MSL: Add support for
SPV_KHR_physical_storage_buffer
extension. - MSL: Use a wrapper type for matrices in workgroup storage.
- MSL: Fix various bugs with Ptr/U bitcasts.
- Fix control flow bug with missed continue statement.
- Handle PHI in collapsed switch constructs.
- Handle collapsed loops similar to collapsed selections.
- Handle multiple breaks out of switches.
- Do not optimize
OpCompositeInsert
for hoisted temporaries.
- MSL: Add support for
Release for Vulkan SDK 1.3.216
- Add support for extensions:
VK_KHR_portability_enumeration
support added toMoltenVK_icd.json
, and documentation
updated to indicate the impact of theVK_KHR_portability_enumeration
extension during
runtime loading on macOS via the Vulkan Loader.VK_KHR_dynamic_rendering
VK_KHR_fragment_shader_barycentric
VK_KHR_separate_depth_stencil_layouts
VK_EXT_separate_stencil_usage
- Implement
vkGetRefreshCycleDurationGOOGLE()
for macOS. - Support attachment clearing when some clearing formats are not specified.
- Fix regression error where previously bound push constants can override a descriptor buffer
binding used by a subsequent pipeline that does not use push constants. - Fix error on some Apple GPU's where a
vkCmdTimestampQuery()
after a renderpass was
writing timestamp before renderpass activity was complete. - Fix regression error in vertex buffer binding counts when establishing implicit buffers binding indexes.
- Fix
vkSetMoltenVKConfigurationMVK()
function pointer typedef. - Work around zombie memory bug in Intel Iris Plus Graphics driver when repeatedly retrieving GPU counter sets.
- Fix reorder-ctor warnings and add Xcode clang -Wreorder warning to catch future misalignments.
- Update build settings to support Xcode 13.4.
- Update to latest SPIRV-Cross:
- MSL: Emit interface block members of array length 1 as arrays instead of scalars.
- MSL: Potentially cast loaded Input variables.
- Emit KHR barycentrics if source enables the KHR extension.
- Handle early reads from loop variables with initializers.
- Attempt more optimal codegen for
OpCompositeInsert
.
Release for Vulkan SDK 1.3.211
- Add support for extensions:
VK_EXT_sample_locations
(Custom locations settable viavkCmdBeginRenderPass()
only,
sinceVkPhysicalDeviceSampleLocationsPropertiesEXT::variableSampleLocations
isfalse
).
- Fixes to pipeline layout compatibility between sequentially bound pipelines.
- Reinstate memory barriers on non-Apple GPUs, which were inadvertently disabled in an earlier update.
- Support base vertex instance support in shader conversion.
- Fix alignment between outputs and inputs between shader stages when using nested structures.
- Fix issue where the depth component of a stencil-only renderpass attachment was incorrectly attempting to be stored.
- Fix deletion of GPU counter
MTLFence
while it is being used byMTLCommandBuffer
. - Fix crash in
vkGetMTLCommandQueueMVK()
. - Fix leak of
CoreFoundation
objects during calls tovkUseIOSurfaceMVK()
. - Remove limit on
VkPhysicalDeviceLimits::maxSamplerAllocationCount
when not using Metal argument buffers. - Avoid adjusting SRGB clear color values by half-ULP on GPUs that round float clear colors down.
- Fixes to optimize resource objects retained by descriptors beyond their lifetimes.
- Optimize behavior for
VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT
when
MVK_CONFIG_PREFILL_METAL_COMMAND_BUFFERS
is used MoltenVKShaderConverter
tool defaults to the highest MSL version supported on runtime OS.- Update glslang version, to use
python3
in glslang scripts, to replace missingpython
on macOS 12.3. - Update
VK_MVK_MOLTENVK_SPEC_VERSION
to version34
. - Update to latest SPIRV-Cross:
- MSL: Support input/output blocks containing nested struct arrays.
- MSL: Use var name instead of var-type name for flattened interface members.
- MSL: Handle aliased variable names for resources placed in IB struct.
- MSL: Handle awkward mix and match of
Offset
/ArrayStride
in constants. - MSL: Append entry point args to local variable names to avoid conflicts.
- MSL: Consider that
gl_IsHelperInvocation
can beVolatile
. - MSL: Refactor and fix use of quadgroup vs simdgroup.
- Handle
OpTerminateInvocation
. - Fixup names of anonymous inner structs.
- Fix regression from adding 64-bit switch support.
Release for Vulkan SDK 1.3.204.1
- Remove logged warning if MoltenVK does not support
VkApplicationInfo::apiVersion
value.
Release for Vulkan SDK 1.3.204
- Add
MVK_HIDE_VULKAN_SYMBOLS
env var to support building MoltenVK with static Vulkan linkage symbols hidden. - Improve accuracy of
VkPhysicalDeviceLimits::timestampPeriod
. - Do not use
MTLEvent
forVkSemaphore
under Rosetta2. - On Apple Silicon (iOS, tvOS & macOS), set
VkPhysicalDeviceProperties::deviceID
from GPU capabilities. - Support compiling MSL 2.4 in runtime pipelines and
MoltenVKShaderConverterTool
. - Fix issue where MSL 2.3 only available on Apple Silicon, even on macOS.
- Fix memory leak of dummy
MTLTexture
in render subpasses that use no attachments. - Fix Metal object retain-release errors in assignment operators.
- Fix use of GPU counter sets on older versions of iOS running on the simulator.
mvk::getShaderOutputs()
inSPRIVReflection.h
support flattening nested structures.- Replaced ASL logging levels with
MVKConfigLogLevel
. MoltenVKShaderConverter
tool support loading tessellation shader files.MoltenVKShaderConverter
tool update to MSL 2.4 by default.- Upgrade to Vulkan 1.3 headers.
- Update
VK_MVK_MOLTENVK_SPEC_VERSION
to version33
. - Update copyright notices to year 2022.
- Update to latest SPIRV-Cross:
- MSL: Add 64 bit support for
OpSwitch
. - MSL: Don't output depth and stencil values with explicit early fragment tests.
- MSL: Fix incorrect MSL
gl_TessCoord
variable type. - MSL: Allow copy array from
UniformConstant
storage. - MSL: Handle signed
atomic min/max
. - Fix
normalize
onhalf3/half2
. - MSL: Handle constant construct of block-like array types.
- MSL: Rethink how opaque descriptors are passed to leaf functions.
- Rework how loop iteration counts are validated.
- Clamp vector element access to vector size.
- Handle aliased names in spec constants.
- Add support for
LocalSizeId
.
- MSL: Add 64 bit support for
Release for Vulkan SDK 1.2.198
- Set maximum point primitive size based on GPU vendor ID, which can now be as large as
511
. - Improved checks for timestamp GPU counter support on older devices.
- Fix incorrect validation error on multilayer
VkImage
marked for rendering, when multilayered-rendering
is not supported on platform, but app doesn't actually attempt to render to multiple layers. - Fix dynamic pipeline state such as
vkCmdSetDepthBias()
sometimes ignoring pipeline dynamic
state flags when called beforevkCmdBindPipeline()
. - Fix incorrect validation of multilayer-rendering validation when
MVKImageView
does not actually perform multilayer-rendering. - Fix issue where dynamic pipeline flags were sometimes read from previously bound pipeline.
- Fix issue where correct base layer and mipmap for attachment was sometimes not being used.
- Add
MTLFence
between Metal encoders and timestamp stage counter BLIT encoder
to ensure previous work is finished before being timestamped. - Fix issue with
BC1_RGB
compressed format where incorrect alpha value returned. - Add
vkGetMTLCommandQueueMVK()
function to expose underlyingMTLCommandQueue
object. - Add
vkSetWorkgroupSizeMVK()
function. - Add unsupported
VkApplicationInfo::apiVersion
warning. - Update to latest SPIRV-Cross version:
- MSL: Add support for
OpSpecConstantOp
opsOpQuantizeToF16
andOpSRem
. - MSL: Return fragment function value even when last SPIR-V Op is discard (
OpKill
). - MSL: Fix location and component variable matching between shader stages.
- MSL: Fix type redirection when struct members are reordered to align with offsets.
- MSL: Remove over-zealous check for struct packing compatibility.
- MSL: Correctly emit user(
clip/cullN
) for clip/cull builtins in tess output struct. - MSL: Don't output depth and stencil values with explicit early fragment tests.
- MSL: Track location component to match
vecsize
between shader stages. - MSL: Selectively enable
fast-math
in MSL code to match Vulkan CTS results. - MSL: Honor
DecorationNoContraction
when compiling usingfast-math
. - MSL: Honor infinities in
OpQuantizeToF16
when compiling usingfast-math
. - MSL: Support synthetic functions in function constants.
- MSL: Improve handling of
INT_MIN/INT64_MIN
literals. - MSL: Consolidate
spvQuantizeToF16()
functions into a single template function. - MSL: Use
vec<T, n>
in templateSpvHalfTypeSelector
for functionspvQuantizeToF16()
. - MSL: Support more usecases for unpacked vectors.
- MSL: Workaround compiler crashes when using
threadgroup bool
. - MSL: Handle non-thread storage class in
Modf/Frexp
pointer versions. - Improve handling of
INT_MIN/INT64_MIN
literals. - Per spec, support undefined behavior for out-of-bounds swizzles.
- Correctly reflect declared buffer size for out of order members.
- Separate (partially) the tracking of depth images from depth compare ops.
- MSL: Add support for
Release for Vulkan SDK 1.2.189
- Changes to how
VkSemaphore
is supported:- Revert to prefer
MTLEvent
forVkSemaphore
, except on NVIDIA, where emulation on CPU is preferred. - Set default value of the
MVK_ALLOW_METAL_FENCES
environment variable to0 (false)
,
- Revert to prefer
- Vulkan timestamp query pools use Metal GPU counters when available.
- Support resolving attachments with formats that Metal does not natively resolve.
- Support stencil-only partial attachment clearing.
- Support alpha-to-coverage without a color attachment.
- Fix issue where swapchain images were acquired out of order under heavy load.
- Fix issue with
vkCmdBlitImage()
from compressed textures. - Fix incorrect translation of clear color values on Apple Silicon.
- Fix swizzle of depth and stencil values into RGBA (
float4
) variable in shaders. - Fix occasional crash when swizzling used but shader swizzling not enabled.
- Fix pipeline barriers not working inside self-dependent subpasses on Apple GPUs.
- Fix GPU race condition when clearing a renderpass input attachment on Apple GPUs.
- Disable
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
for
VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
on macOS Apple Silicon. - Fix execution order of
encodeBindings
forbufferBindings
. - Properly ignore non-null pipeline creation pointers that should be ignored.
- Add queue and queue family indices to
MTLCommandBuffer
label. - Update
VK_MVK_MOLTENVK_SPEC_VERSION
to32
. - Update to latest SPIRV-Cross version:
- MSL: Adjust
gl_SampleMaskIn
for sample-shading and/or fixed sample mask. - MSL: Remove redundant path for
SampleMask
. - MSL: Fix setting
SPIRVCrossDecorationInterpolantComponentExpr
decoration. - MSL: Support row-major transpose when storing matrix from constant RHS matrix.
- MSL: Fix casting in constant expressions with different sizes.
- MSL: Fix duplicate
gl_Position
outputs whengl_Position
defined but unused. - MSL: Simplify
spvSubgroupBallot()
. - MSL: Consider that function/private variables can be block-like.
- Track temporary access for
OpArrayLength
result.
- MSL: Adjust
Release for Vulkan SDK 1.2.182
- Add support for extensions:
VK_KHR_imageless_framebuffer
- Advertise Vulkan extension functions only from enabled extensions.
- Make
vkGetPastPresentationTimingGOOGLE()
queuing behavior compliant with Vulkan spec. - Expose
vkGetIOSurfaceMVK()
andvkUseIOSurfaceMVK()
without requiring Objective-C. - Default MoltenVK build using
C++17
and compiler optimization setting-O2
. - API fix to remove
#include "SPIRVReflection.h"
fromSPIRVToMSLConverter.h
header. - Support Xcode 12.5 build settings, build warnings, and SDK change to availability of
[MTLDevice supportsBCTextureCompression]
on Mac Catalyst. - Add support for new AMD devices supporting 32 lanes.
- Improve handling of sampler border color and mirror edge clamp.
- Improve cache hits when matching
SPIRVToMSLConversionConfiguration
structs to each other
to find a cached shader, by only considering resources from the current shader stage. - Rename
kMVKShaderStageMax
tokMVKShaderStageCount
. - Fix crash when requesting
MTLCommandBuffer
logs in runtime debug mode on older OS versions. - Fix synchronization issue with locking
MTLArgumentEncoder
for Metal Argument Buffers. - Fix race condition on submission fence during device loss.
- Fix crash due to incorrect number of attachments when clearing.
- Fix crash using memoryless storage for input attachments on Apple Silicon.
- Fix issue where M1 GPU does not support reusing Metal visibility buffer offsets
across separate render encoders within a single Metal command buffer (Vulkan submit). - On command buffer submission failure, if
MVKConfiguration::resumeLostDevice
enabled, do not release
waits onVkDevice
, and do not returnVK_ERROR_DEVICE_LOST
, unlessVkPhysicalDevice
is also lost. - Fix inconsistent handling of linear attachment decisions on Apple Silicon.
- Fix small memory leak during swapchain creation.
- Fix stencil clear incorrectly using using the depth
loadOp
, when stencil is smaller than render area. - Reorganize coherent texture flushing on memory map and unmap`.
- Fix issues where data in temporary internal buffers are discarded while in use.
- Protect against crash when retrieving
MTLTexture
whenVkImage
has noVkDeviceMemory
bound. - Adjust some
VkPhysicalDeviceLimits
values for Vulkan and Metal compliance. - Fix internal reference from
SPIRV_CROSS_NAMESPACE_OVERRIDE
toSPIRV_CROSS_NAMESPACE
. - Add label strings to
MTLCommandBuffers
, based on use type, for GPU Capture debugging. - Add
Scripts/runcts
script as a convenience for running Vulkan CTS tests. - Support Xcode 13 SDK APIs and build settings.
- Update dependency libraries to match Vulkan SDK 1.2.182.
- Update to latest SPIRV-Cross version:
- MSL: Handle array of IO variable with Component decoration.
- MSL: Handle array with component when we cannot rely on
user()
attrib. - MSL: Improve handling of split tessellation access chains.
- MSL: Always enable support for base vertex/index on iOS.