- Update maxClipDistances and maxCombinedClipAndCullDistances to more accurate values.
- Update maxDrawIndexedIndexValue to acknowledge primitive restart.
- Ensure Vulkan public symbols are not stripped from the library when
statically linked to an app that calls all Vulkan functions dynamically.
- Per Vulkan 1.2 spec, support calling vkGetInstanceProcAddr() with a
null instance, when vkGetInstanceProcAddr itself is the function name.
- Replace uses of strcmp() with mvkStringsAreEqual() to protect against
null pointers, and provide a direct bool output (unrelated cleanup).
- Fix Metal validation error caused by CAMetalDrawable released before
MTLCommandBuffer is finished using it.
- When presenting, MVKPresentableSwapchainImage retains in-flight
CAMetalDrawable until MTLCommandBuffer completion.
- Fix memory leak of MVKFences and MVKSemaphores when a
swapchain image is acquired more than it is presented.
- Force MVKPresentableSwapchainImage to untrack any tracked fences or
semaphores when it is destroyed.
- Update MoltenVK version to 1.2.2.
Metal uses MTLRenderPassDescriptor properties renderTargetWidth,
renderTargetHeight, and renderTargetArrayLength to preallocate tile memory
storage on machines using tiled rendering. This memory preallocation is not
necessary if we are not rendering to attachments, and some apps actively
define extremely oversized framebuffers when they know they are not rendering
to actual attachments, making this internal tile memory allocation even more
wasteful, occasionally to the point of triggering OOM crashes.
Update MoltenVK version to 1.2.2.
of VK_KHR_shader_float_controls.
The introduction of shaderSignedZeroInfNanPreserveFloat32 was causing Metal
fast math to be aggressively disabled by the use of SignedZeroInfNanPreserve
in shaders in some apps, causing a regression in shader performance in those apps.
- Change MVKConfiguration::fastMathEnabled from bool to enumeration to distinguish
between always using fast math or allowing shaders to selectively disable it.
- Default value to fast math always.
Push constants and attachment clearing can temporarily override Metal buffer
bindings for descriptor sets and vertex attributes. Mark the overridden buffer
bindings and ensure they are reinstated when the pipeline is updated.
- Add MVKMTLBufferBinding::isOverridden to track if buffer binding is
temporarily overridden.
- Rename MVKResourcesCommandEncoderState::markIndexDirty()
to markBufferIndexOverridden() to mark buffer bindings as overridden.
- Rename MVKGraphicsResourcesCommandEncoderState::markBufferIndexDirty()
to markBufferIndexOverridden().
- Rename MVKComputeResourcesCommandEncoderState::markBufferIndexDirty()
to markBufferIndexOverridden().
- Add MVKResourcesCommandEncoderState::markOverriddenBufferIndexesDirty()
to mark overridden buffer bindings as dirty.
- Add MVKGraphicsResourcesCommandEncoderState::markOverriddenBufferIndexesDirty()
and call when render pipeline change is encoded
- Add MVKComputeResourcesCommandEncoderState::markOverriddenBufferIndexesDirty()
and call when compute pipeline change is encoded.
Do this even if `OPTIMAL` tiling were requested. Vulkan mandates support
for image atomics on `OPTIMAL`-tiled `R32_UINT` and `R32_SINT` images.
In a way, this is "optimal"; image atomics won't work without this.
Advertise support for atomics on `OPTIMAL` tiled images now.
Fixes at least two CTS tests under
`dEQP-VK.compute.basic.image_atomic_op_*`.
This has caused us nothing but trouble. The code to build up the vertex
descriptor is fragile; we can rip that out now.
Also, make sure to positively identify per-patch blocks as per-patch.
For those, the individual members have the `Patch` decoration.
Update SPIRV-Cross to pull in the changes needed for this.
Fixes 66 tests in the CTS.
- Redefine enumeration values of MVKPrefillMetalCommandBuffersStyle.
- Add option to defer encoding prefilled MTLCommandBuffer to queue submission.
- Remove option to create an autorelease pool in the MVKCommandEncoder
to span immediate command encodings, because it causes crashes when
multiple command buffers were overlapping prefilling on the same thread.
- Replace MTLCommandEncoder retain/release macros with template member functions.
- Rename MVKCommandPool::newMTLCommandBuffer() to getMTLCommandBuffer()
and do not retain the returned MTLCommandBuffer (unrelated).
- Revert MoltenVK logging to use stderr instead of stdout (unrelated).
- Merge branch from master.
- Add MVKPrefillMetalCommandBuffersStyle enumeration to enable prefilling,
and configure memory recovery options.
- Redefine MVKConfiguration::prefillMetalCommandBuffers as a value from
MVKPrefillMetalCommandBuffersStyle instead of a simple boolean. Set the
values of MVKPrefillMetalCommandBuffersStyle and the default value of
MVKConfiguration::prefillMetalCommandBuffers to be compatible with
legacy use of this setting as a simple enable/disable boolean value.
- MVKCommandEncoder track prefill style, and support option to maintain
a Metal autorelease pool that is created on vkBeginCommandBuffer()
and drained on vkEndCommandBuffer(), when prefiling a command buffer
from a single thread, and an option to wrap each command addition in
a separate @autoreleasepool{} scope to create and drain an autorelease
pool at every command addition to the Vulkan command buffer, when
prefilling a single command buffer from multiple threads.
- MVKCommandEncoder retain Metal encoders when prefilling, because
prefilling may span multiple autorelease pools.
- MVKCommandEncoder clean up memory leak of MTLBlitPassDescriptor
during prefilling.
- MVKCommandEncoder rearrange declarations of MVKCommandUse member
variables to tighten up class memory use (unrelated).
- MVKCommandBuffer remove unnecessary inline declarations (unrelated).
- Change MoltenVK logging to use stdout instead of stderr (unrelated).
- If MTLEvents are unusable, fallback to single queue.
- Adjust values of MVKVkSemaphoreSupportStyle enumeration.
- For legacy compatibility, if legacy semaphoreUseMTLEvent and
semaphoreUseMTLFence are both disabled, use CPU callback emulation.
- Update and expand related documentation in vk_mvk_moltenvk.h.
- Remove separate extension entry points for 1.3 promoted
vkCmdBeginRenderingKHR() and vkCmdEndRenderingKHR() functions,
which caused build breaks when MVK_HIDE_VULKAN_SYMBOLS=1.
- For consistency, hide vkGetMoltenVKConfigurationMVK(),
vkSetMoltenVKConfigurationMVK(), and vkGetVersionStringsMVK()
when MVK_HIDE_VULKAN_SYMBOLS=1, which was an oversight in original
implementation of hiding Vulkan functions.
- Update build `README.md` for generic command line build settings
and MVK_HIDE_VULKAN_SYMBOLS in particular.
- Set MVK_VULKAN_API_VERSION from VK_API_VERSION_1_2.
- Update MoltenVK version to 1.2.0.
- Remove several previously overlooked extension suffixes
in use of promoted Vulkan struct and enum values.
- Update documentation.
when building with MVK_HIDE_VULKAN_SYMBOLS=1.
Alias vkGetBufferDeviceAddressEXT to core function,
and add it as promoted extension function in MVKInstance.
It is always legal in Vulkan to read a builtin, particularly
`BuiltInPosition`, even if it weren't written by the previous stage. The
CTS tests that this scenario works in the driver.
Update SPIRV-Cross to pull in a change required for this.
Fixes 8 CTS tests under `dEQP-VK.pipeline.*.no_position`. (Eight other
tests worked solely by accident without this change.)
- Support option to use MTLEvents for Vulkan semaphores on NVIDIA and Rosetta2.
- Add public MVKVkSemaphoreSupportStyle enumeration.
- MVKConfiguration replace deprecated legacy booleans semaphoreUseMTLEvent,
and semaphoreUseMTLFence with enumerated semaphoreSupportStyle.
- Alias legacy semaphoreUseMTLEvent to semaphoreSupportStyle and support legacy
use of semaphoreUseMTLFence and semaphoreUseMTLEvent for backwards compatibility.
- MVKConfiguration rename recently renamed semaphoreUseSingleQueue back to
semaphoreUseMTLFence for backwards compatibility.
VK_EXT_descriptor_indexing extension is enabled.
- Change MVKConfiguration::useMetalArgumentBuffers to enum instead of boolean
and default to enabling Metal argument buffers for VK_EXT_descriptor_indexing.
- Leave Metal argument buffers disabled by default until they are improved.
- Enable VkPhysicalDeviceVulkan12Features::descriptorIndexing.
- Add MVKPhysicalDeviceVulkan12FeaturesNoExt to track and enable Vulkan 1.2
features not part of any prior extensions absorbed by Vulkan 1.2.
- Update VK_MVK_MOLTENVK_SPEC_VERSION to version `36`.
- MVKDeviceTrackingMixin remove unnecessary inline declarations.
- MoltenShaderConveter tool support Metal Argument Buffers and MSL 3.0.
Vulkan 1.2 includes several optional extensions that are not currently
supported by Metal. These include:
- VK_KHR_draw_indirect_count (and VK_AMD_draw_indirect_count)
- VK_KHR_shader_atomic_int64
- VK_KHR_vulkan_memory_model
- VK_EXT_sampler_filter_minmax
Capability flags for these extensions are included in
VkPhysicalDeviceVulkan12Features and VkPhysicalDeviceVulkan12Properties,
and in parallell extension-specific structures.
This addition provides no new user functionality. For consistency with
VkPhysicalDeviceVulkan12Features and VkPhysicalDeviceVulkan12Properties,
the changes here flush out the extension/Vulkan 1.2 parallel functionality,
with a view to prepare to include the functionality consistently in both
an extension and Vulkan 1.2, should the functionality become available
in a future version of Metal.
This change also explicitly includes the optional extensions in
MVKExtensions.def, but disables them from user visibility.