2637 Commits

Author SHA1 Message Date
Bill Hollings
b2409824dc
Merge pull request #1719 from billhollings/fix-hidden-symbol-leak
Fix undefined reference to vkGetBufferDeviceAddressEXT when building with MVK_HIDE_VULKAN_SYMBOLS=1.
2022-09-19 16:41:40 -04:00
Bill Hollings
63be111958 Fix undefined reference to vkGetBufferDeviceAddressEXT
when building with MVK_HIDE_VULKAN_SYMBOLS=1.

Alias vkGetBufferDeviceAddressEXT to core function,
and add it as promoted extension function in MVKInstance.
2022-09-19 15:29:40 -04:00
Bill Hollings
250e1f988a
Merge pull request #1715 from cdavis5e/tess-unwritten-builtin-read
MVKPipeline: Add builtins that are read but not written to tessellation pipelines.
2022-09-14 10:25:05 -04:00
Chip Davis
fafcc4b844 MVKPipeline: Add builtins that are read but not written to tessellation pipelines.
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.)
2022-09-13 13:18:41 -07:00
Bill Hollings
5bae97a4ae
Merge pull request #1709 from KhronosGroup/SingleQueueSemaphore
Merge SingleQueueSemaphore branch into master
2022-09-02 11:51:53 -04:00
Bill Hollings
d7b5a36ddc
Merge pull request #1707 from billhollings/SingleQueueSemaphore
Vulkan semaphore functional improvements.
2022-09-01 17:03:05 -04:00
Bill Hollings
14de07b6f4 Vulkan semaphore functional improvements.
- 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.
2022-09-01 12:10:23 -04:00
Bill Hollings
c652ebc745
Merge pull request #1693 from tellowkrinkle/SingleQueueSemaphore
Replace MTLFence semaphores with forcing a single queue
2022-08-30 15:04:58 -04:00
Bill Hollings
37f1988e34
Merge branch 'master' into SingleQueueSemaphore 2022-08-30 14:10:56 -04:00
Bill Hollings
8692a9df52
Merge pull request #1704 from billhollings/desc-idx-auto-mtl-arg-buffs
Support automatically enable Metal argument buffers when VK_EXT_descriptor_indexing extension is enabled.
2022-08-30 13:50:25 -04:00
Bill Hollings
14f99101d7 Set MVKPhysicalDeviceVulkan12FeaturesNoExt parameters based on support.
- shaderOutputViewportIndex requires multi-viewport
- shaderOutputLayer requires layered rendering
- subgroupBroadcastDynamicId requires SIMD support
2022-08-29 14:54:14 -04:00
Bill Hollings
4effb9a5fd Support automatically enable Metal argument buffers when
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.
2022-08-26 14:48:13 -04:00
Bill Hollings
013a192466
Merge pull request #1697 from billhollings/optional-vk12-extn-hooks
Add hooks for optional but currently unsupported Vulkan 1.2 extensions.
2022-08-23 16:24:21 -04:00
Bill Hollings
67cfe53d93 Add hooks for optional but currently unsupported Vulkan 1.2 extensions.
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.
2022-08-23 14:21:40 -04:00
TellowKrinkle
a233e0b5ac Add single-queue handling of VkSemaphore 2022-08-21 23:45:59 -05:00
TellowKrinkle
21a4947e98 Remove MTLFence semaphores
They did nothing.  Might as well call them YOLO semaphores.
2022-08-20 20:41:40 -05:00
Bill Hollings
ea5a53d13c
Merge pull request #1691 from billhollings/VK_KHR_shader_float_controls
Add support for the VK_KHR_shader_float_controls.
2022-08-18 18:55:29 -04:00
Bill Hollings
11679be153
Merge pull request #1690 from bangnoise/pr/localizedName-crash-macOS_10_14
Fix crash in vkCreateSwapchainKHR() on macOS 10.14 and earlier
2022-08-18 17:54:36 -04:00
Tom Butterworth
47d2c74bd1
Style fix
Co-authored-by: Bill Hollings <bill.hollings@brenwill.com>
2022-08-18 21:55:17 +01:00
Bill Hollings
e0a50c8f2d Add support for the VK_KHR_shader_float_controls extension.
- Enable shaderSignedZeroInfNanPreserveFloat16 and
  shaderSignedZeroInfNanPreserveFloat32.
  Other float control properties are not settable in Metal.
- MVKShaderModule log whether compiling with fast math enabled.
- Update MoltenVK_Runtime_UserGuide.md and Whats_New.md documents.
- runcts script enable MVK_CONFIG_FAST_MATH_ENABLED by default.
2022-08-18 13:35:35 -04:00
Tom Butterworth
07ac3c8603 Fix crash in vkCreateSwapchainKHR() on macOS 10.14 and earlier 2022-08-18 16:54:20 +01:00
Bill Hollings
d447ea7940
Merge pull request #1686 from billhollings/fix-1.2-promotion-typo
Remove KHR suffix typo from vkGetDeviceMemoryOpaqueCaptureAddress promotion to Vulkan 1.2.
2022-08-17 13:01:30 -04:00
Bill Hollings
3ceb786440 Remove KHR suffix typo from vkGetDeviceMemoryOpaqueCaptureAddress promotion to Vulkan 1.2. 2022-08-17 12:42:20 -04:00
Bill Hollings
93a171a6e1
Merge pull request #1683 from billhollings/fix-swapchain-retention
Fix retention of MVKSwapchain for future drawable presentations.
2022-08-16 16:53:49 -04:00
Bill Hollings
666d7ed951
Merge pull request #1682 from spnda/vulkan_1_2_commands
Add Vulkan 1.2 core commands
2022-08-16 16:52:19 -04:00
sean
89b3b5f922
Add aliases for draw_indirect_count 2022-08-16 22:06:19 +02:00
Bill Hollings
33ca59ef13 Fix retention of MVKSwapchain for future drawable presentations.
When presenting drawables in the future, the MVKPresentableSwapchainImage
and MVKSwapchain were both being retained by the drawable-presented callback,
so that the presentation timing info can be recorded on the swapchain.
Unfortunately, in the case where the presentation timing is set far enough
into the future (I'm looking at you CTS), the swapchain, and even the
CAMetalLayer's view may be destroyed, causing occasional bad access crashes.

- MVKSwapchainImage don't retain() the swapchain, and move clearing the
  swapchain from the destructor to destroy(), so the MVKSwapchain is not
  necessarily retained by the MVKSwapchainImage, for a drawable being
  presented in the future.
- MVKSwapchainImage add a lock around clearing swapchain and accessing
  it from callbacks.
- Add lockable releaseLayer() function in both MVKSwapchain and MVKSurface,
  which is called from both layer observer and destructor, to handle race
  conditions better.
- MVKSwapchain::initCAMetalLayer() call MVKSurface::getCAMetalLayer() only once.
- Update MoltenVK version to 1.1.12.
- Update What's New document.
2022-08-16 15:27:20 -04:00
sean
546b98e62e
Add Vulkan 1.2 core commands 2022-08-16 21:08:46 +02:00
Bill Hollings
ebcefa2d33
Merge pull request #1681 from scandit-opm/feature/make-cereal-optional
Add MVK_USE_CEREAL build option to avoid use of Cereal library.
2022-08-16 12:13:29 -04:00
Marcel Opprecht
694f2e5e88 Implement review comments 2022-08-16 10:24:56 +02:00
Marcel Opprecht
20b0cf8498 Add MVK_EXCLUDE_CEREAL build option to avoid use of Cereal library. 2022-08-15 08:24:03 +02:00
Bill Hollings
b051111953
Merge pull request #1680 from billhollings/sdk-1.3.224
Update dependency libraries to match Vulkan SDK 1.3.224.
2022-08-12 17:54:32 -04:00
Bill Hollings
f487a14975 Update dependency libraries to match Vulkan SDK 1.3.224.
Update What's New document.
2022-08-12 16:54:24 -04:00
Bill Hollings
a87e223543
Merge pull request #1677 from billhollings/fix-missing-metal-buffer-binding
Fix occasional missing Metal buffer binding when only offset changes.
2022-08-12 13:09:06 -04:00
Bill Hollings
70c6b09ca2 Defer marking overridden descriptor buffer bindings to encoding time.
- MVKPushConstantsCommandEncoderState move marking descriptor buffer
  binding override from markDirty() to encodeImpl().
- MVKCommandEncoder::setXXXBytes() calls optionally mark overridden descriptor
  buffer bindings as dirty, allowing this functionality to be generalized.
- MVKMTLBufferBinding::update() inline buffers never update just offset
  because inline contents may have changed.
- MVKCmdClearAttachments mark specific overridden buffer bindings dirty
  instead of marking entire MVKGraphicsResourcesCommandEncoderState dirty.
- MVKResourcesCommandEncoderState::bind() don't mark entire
  MVKResourcesCommandEncoderState dirty unless the binding
  itself was marked dirty (unrelated optimization).
- Rename markPushConstantBinding() to markBufferIndexDirty().
2022-08-12 10:29:56 -04:00
Bill Hollings
5e324d620c Fix occasional missing Metal buffer binding when only offset changes.
This fixes an earlier regression, where when only the offset changes in
a buffer descriptor, the binding is not marked dirty if the same Metal
binding index is used by a push constant in between descriptor bindings.

- MVKPushConstantsCommandEncoderState::markDirty() call resource encoder
  state markPushConstantBinding() to find and mark dirty descriptor that
  uses same Metal index as a push constant binding.
- Add MVKResourcesCommandEncoderState::markMetalBufferIndexDirty() to
  find and mark dirty a descriptor buffer binding that uses
- MVKResourcesCommandEncoderState::bind() use range-based-for-loop
  for consistency (unrelated).
2022-08-10 20:21:25 -04:00
Bill Hollings
f3ad8e2e5a
Merge pull request #1676 from billhollings/reset-desc-pool-perf
Improve performance of vkResetDescriptorPool().
2022-08-09 17:18:41 -04:00
Bill Hollings
b16fef0ca2 Improve performance of vkResetDescriptorPool().
- MVKDescriptorPool::reset() don't waste time freeing
  descriptor sets that were never allocated.
- If descriptor set could not be allocated, set availability bit (unrelated).
- MVKBitArray add _lowestNeverClearedBitIndex to track the lowest bit index
  that has not been cleared since last reset.
- MVKBitArray rename _minUnclearedSectionIndex to _clearedSectionCount for clarity.
- MVKBitArray use _clearedSectionCount and _lowestNeverClearedBitIndex to optimize
  operation of setting or clearing all bits.
- MVKBitArray::setBit() ensure we don't try to change a bit that is out of range.
- MVKBitArray::resize() no-op if size doesn't actually change.
- MVKQueue don't include object pointer in error log, so CTS log results
  are consistent across multiple CTS runs (unrelated).
2022-08-09 16:28:22 -04:00
Bill Hollings
af88bb952b
Merge pull request #1675 from billhollings/support-vk12-device-feat-prop-structs
Support Vulkan 1.2 device feature and property structs.
2022-08-06 11:11:43 -04:00
Bill Hollings
c747d469ca Support Vulkan 1.2 device feature and property structs.
In preparation for Vulkan 1.2, support the following device feature
and property structures, and use them to populate the corresponding
device feature and property values originally supplied by Vulkan
extensions, to ensure a single source of truth for these values:

- VkPhysicalDeviceVulkan11Features
- VkPhysicalDeviceVulkan11Properties
- VkPhysicalDeviceVulkan12Features
- VkPhysicalDeviceVulkan12Properties

Disable VkPhysicalDeviceVulkan12Features::drawIndirectCount and
VkPhysicalDeviceVulkan12Features::samplerFilterMinmax, to indicate that
Vulkan 1.2 support will not include extensions VK_KHR_draw_indirect_count
and VK_EXT_sampler_filter_minmax, respectively.

Support enabling device features during VkDevice creation using
VkPhysicalDeviceVulkan11Features and VkPhysicalDeviceVulkan12Features.
2022-08-05 19:56:44 -04:00
Bill Hollings
d1490e8fb0
Merge pull request #1674 from billhollings/device-feature-tracking-enhancements
MVKDevice consolidate enabling device feature tracking.
2022-08-05 16:11:37 -04:00
Bill Hollings
88f1466d8b MVKDevice consolidate enabling device feature tracking.
- Add MVKDeviceFeatureStructs.def file to describe each device feature
  struct, and define, populate, and manage MVKDevice device feature
  tracking iVars using the list in this file.
- Reorder switch cases in MVKPhysicalDevice::getFeatures() to match the
  list in MVKDeviceFeatureStructs.def.
- Where possible, remove extension suffixes from device feature structs
  and associated VkStructureType values.
- Remove const qualifier from device feature enabling structs.
2022-08-05 15:21:23 -04:00
Bill Hollings
11120056ff
Merge pull request #1671 from billhollings/fix-debug-utils-message-types
Report appropriate values of VkDebugUtilsMessageTypeFlagsEXT
2022-07-30 18:14:35 -04:00
Bill Hollings
cfe259fce2 Report appropriate values of VkDebugUtilsMessageTypeFlagsEXT
for debug util messages generated within MoltenVK.
2022-07-30 17:38:20 -04:00
Bill Hollings
b4ae2bc1d8
Merge pull request #1669 from billhollings/fix-retrieve-screen-refresh-duration
Fix retrieval of accurate refresh duration across multiple display screens.
2022-07-30 15:39:52 -04:00
Bill Hollings
152c605c20 Fix retrieval of accurate refresh duration across multiple display screens.
- Add [CAMetalLayer screenMVK] extension method to retrieve screen.
- If the layer has a delegate view, use it to locate the screen, otherwise
  revert to iterating across windows, looking for the CAMetalLayer, to identify
  the window the layer is in, from which to retrieve the screen.
- Fix the iteration of the layer hierarchy, to accommodate that Apple may
  add superlayers to the CAMetalLayer under the covers.
- Update MoltenVK_Runtime_UserGuide.md to encourage the app to ensure the view
  is the delegate of the CAMetalLayer, to more efficiently access the screen.
2022-07-29 18:15:46 -04:00
Bill Hollings
c341f168e4
Merge pull request #1667 from MennoVink/patch-2
Update MVKGPUCapture.mm
2022-07-29 11:51:59 -04:00
Bill Hollings
50cd39bf74
Merge pull request #1666 from MennoVink/patch-1
Update copy_lib_to_staging.sh
2022-07-29 11:47:42 -04:00
Bill Hollings
f11347cea0
Merge pull request #1668 from billhollings/demo-screen-resolution-optimzing
Update macOS Cube demo to demonstrate optimizing swapchain across multiple screens.
2022-07-28 18:03:34 -04:00
Bill Hollings
991e1a9876 Update macOS Cube demo to demonstrate optimizing swapchain across multiple screens.
- DemoView implements NSViewLayerContentScaleDelegate protocol to update
  [CAMetalLayer contentsScale] property when moved between screens.
- Log contentsScale value during swapchain creation.
- Remove a few unnecessary inline declarations.
2022-07-28 16:33:10 -04:00