1788 Commits

Author SHA1 Message Date
Antarctic Coder
e5bfc2d66e C-Style Arrays instead of MVKSmallVector
This commit changes the MVKSmallVector to a C-Style array because the parameters array will not have to resize, and it seems that a C-Style array is just as capable of doing the job.
2023-06-21 11:00:15 -04:00
Antarctic Coder
fa19fcc962 Push to Compile MVKSmallVector with void*
Pushing to Github to compile with Github Actions to see if MVKVectors with void* can work
2023-06-20 13:11:54 -04:00
Antarctic Coder
c0705c8f7d Made some fixes for Deferred Operations
The changes are as follows:

* Moved the code around to fit with the ordering system
* Added a function to get available cpu cores
* Renamed variables with _ in front of them
* Added mutexes and lock guards for the getters and setters of the max concurrency and result variables
* Made max concurrency dynamic by returning 0 when the operation is finished
2023-06-20 10:19:29 -04:00
Antarctic Coder
ab7087165a
Fixed comments for deferred operations
Co-authored-by: Chip Davis <cdavis5x@gmail.com>
2023-06-20 08:28:59 -04:00
Antarctic Coder
33cd6f24c4 Implemented Deferred Host Operations
Implemented deferred host operations in this commit. It was pretty simple with nothing Metal specific. I am a bit concerned on the return types of MVKDeferredOperation::join and about how to store the operation to be executed for later.
2023-06-19 15:18:15 -04:00
Bill Hollings
9356c89bd5
Merge pull request #1949 from billhollings/swap-system-GPU-fix
Don't call MTLCreateSystemDefaultDevice() on every swapchain creation.
2023-06-16 09:00:02 -04:00
Bill Hollings
e69c249348 Log more info about SPIR-V to MSL conversion errors.
Remove unhelpful "Shader module does not contain
an entry point named 'main0'" error message.
2023-06-15 19:56:36 -04:00
Bill Hollings
425505da47 Don't call MTLCreateSystemDefaultDevice() on every swapchain creation.
- When forcing the window system to use the same high-power GPU as the app,
  move the call to MTLCreateSystemDefaultDevice() to MVKDevice constructor,
  instead of MVKDevice::createSwapchain(), and test whether the
  VK_KHR_swapchain extension is enabled to determine the need to swap GPUs.

- After calling MTLCreateSystemDefaultDevice() the GPU will already be
  the same high-power GPU, so remove attempting to replace the MTLDevice.

- Remove MVKPhysicalDevice::replaceMTLDevice() as no longer used.

- Remove many unnecessary inline declarations in MVKDevice.h (unrelated).
2023-06-15 17:24:50 -04:00
Bill Hollings
4a9bf78e03
Merge pull request #1946 from billhollings/no-rendpass-no-dyn-rend-info
Allow both renderPass and VkPipelineRenderingCreateInfo to be missing.
2023-06-15 10:34:57 -04:00
Bill Hollings
b94553dbb3 Allow both renderPass and VkPipelineRenderingCreateInfo to be missing.
This avoids crashes in CTS when creating a graphics pipeline.
2023-06-14 18:49:40 -04:00
Raafat Akkad
e7243572d7 Allows maximizing the concurrent executing compilation tasks.
https://developer.apple.com/videos/play/wwdc2023/10127/?time=540
On an M1 Pro Macbook Pro 16" maximumConcurrentCompilationTaskCount goes from 2 to 8
2023-06-14 20:17:53 +01:00
Bill Hollings
4949c34b4d
Merge pull request #1936 from billhollings/present-imm-mode-unless-present-time
Support VK_PRESENT_MODE_IMMEDIATE_KHR if VkPresentTimeGOOGLE::desiredPresentTime is zero.
2023-06-07 18:41:57 -04:00
Chip Davis
750adcaae2 Advertise the VK_EXT_shader_demote_to_helper_invocation extension.
As of macOS Big Sur and iOS/tvOS 14, the `discard_fragment()` function
in MSL is defined to have demote semantics; that is, fragment shader
output is discarded, but the fragment shader thread continues to run as
a helper invocation. This is very useful for Direct3D emulation, since
this is the semantic that HLSL `discard` has.

Signed-off-by: Chip Davis <chip@holochip.com>
2023-06-07 12:48:02 -07:00
Bill Hollings
6fb53471b1 Support VK_PRESENT_MODE_IMMEDIATE_KHR if VkPresentTimeGOOGLE::desiredPresentTime is zero.
- [MTLDrawable presentAtTime:] syncs to display vsync. To support
  VK_PRESENT_MODE_IMMEDIATE_KHR while using VkPresentTimeGOOGLE::presentID,
  only call presentAtTime: if VkPresentTimeGOOGLE::desiredPresentTime has
  been explicitly set to a non-zero value.
- Clarify initially clearing MVKImagePresentInfo to all zeros.
2023-06-05 19:17:10 -04:00
Bill Hollings
107be116b7 Add support for VK_PRESENT_MODE_IMMEDIATE_KHR to macOS Cube demo.
- Only log performance stats on FPS logging if logging style is explicitly
  set to MVK_CONFIG_ACTIVITY_PERFORMANCE_LOGGING_STYLE_FRAME_COUNT (unrelated).
2023-05-30 21:11:02 -04:00
Bill Hollings
83a1811230 Ensure compute encoding state is marked dirty for non-dispatch commands.
The same compute encoder is used across dispatches and other commands,
which may override compute state, and end up breaking subsequent dispatches.

- Mark compute encoding state dirty when following commands,
  which use Metal compute encoders, are issued:
  - vkCmdCopyBuffer()
  - vkCmdClearColorImage()
  - vkCmdClearDepthStencilImage()
  - vkCmdFillBuffer()
  - vkCmdCopyQueryPoolResults()

- MVKCommandEncoder move marking compute state dirty from
  endCurrentMetalEncoding() to getMTLComputeEncoder().
- For efficiency, don't prematurely force end of query copy compute encoder
  used on renderpass end, in case compute dispatches follow.

- Update MoltenVK to 1.2.5 (unrelated).
2023-05-26 00:06:40 -04:00
Bill Hollings
b26ce32a60 Advertise VK_KHR_depth_stencil_resolve extension on all devices.
Advertise VK_KHR_depth_stencil_resolve extension on early iOS devices,
since VK_RESOLVE_MODE_SAMPLE_ZERO_BIT is supported on all devices,
even if other resolve modes are not, and makes it consistent with
Vulkan 1.2 mandatory support for VK_RESOLVE_MODE_SAMPLE_ZERO_BIT.
2023-05-23 19:01:31 -04:00
Bill Hollings
b863ecef4d Accumulate render stages when a resource is used by multiple descriptor bindings. 2023-05-23 13:13:19 -04:00
Italo Mandara
0125e5b739 Revert "Allow to disable Explicit LOD Workaround"
This reverts commit 6f3a2b709fbfcfdf7dc077b80b12f02463cc07b1.
2023-05-21 00:27:16 +01:00
Evan Tang
75b4d26fbc Check if shader compiled before adding it to a pipeline
Prevents Metal from aborting when you try to set a null function on the descriptor
2023-05-17 15:47:47 -05:00
Bill Hollings
ae0ee6a012
Merge pull request #1908 from billhollings/fix-deviceUUID
Populate deviceUUID from MTLDevice location and peer group info.
2023-05-17 15:09:46 -04:00
Bill Hollings
665ef6df13 Improve support for deviceUUID and deviceLUID.
- MTLDevice registryID is not constant across OS reboots,
  which is not conformant with deviceUUID requirements.
- Replace with combination of MTLDevice location, locationNumber,
  peerGroupID, and peerIndex, which should define uniqueness,
  and should be constant across OS reboots.
- Populate deviceLUID from MTLDevice registryID.
2023-05-17 14:50:48 -04:00
Bill Hollings
d29092ab78 Do not fail on request for timestamp query pool that is too large.
- Report error, but do not fail on request for timestamp query pool
  that is too large for MTLCounterSampleBuffer.
- Change reported error to VK_ERROR_OUT_OF_DEVICE_MEMORY and clarify
  text of error reported when timestamp query pool is too large.
- Clarify error reported for occlusion query pool errors (unrelated).
2023-05-16 17:26:26 -04:00
Bill Hollings
65ce195a6f Ensure swapchain image presented time is always populated when requested.
If Metal reports zero presentedTime, and desired presentation
time has not been set by app, use the current time.
2023-05-15 18:47:22 -04:00
Bill Hollings
4893f78b29 Identify each unsupported device feature flag that the app attempts to be enable.
- Make MVKDevice::enableFeatures() functions into templates to pass struct type.
- Add mvkGetAddressOfFirstMember() to retrieve the address of the first member of
  a struct, taking into consideration whether the struct has a Vulkan pNext member.
- Add mvk::getTypeName() and mvk::getOrdinalSuffix() string functions.
2023-05-15 15:14:30 -04:00
Bill Hollings
7d4f5745f7
Merge pull request #1903 from ChibiDenDen/simulator_feature_discovery_fix
Fix simulator feature discovery
2023-05-13 12:28:07 -04:00
ChibiDenDen
0139b95849 Fix simulator feature discovery
Fix depth clamp and texture swizzle feature discovery on simulator builds

Both of these features are not supported by the iphone simulator
and leads to crashes when used
2023-05-12 23:41:46 +03:00
Evan Tang
47ce47ad4c Fix reorder-ctor warning 2023-05-12 14:10:14 -05:00
Evan Tang
1b6750bef8 Respect the bind point supplied to vkCmdBindDescriptorSets 2023-05-12 13:00:06 -05:00
Bill Hollings
9e466699e5 Fix race condition when updating values in VkPastPresentationTimingGOOGLE.
- MVKPresentableSwapchainImage::presentCAMetalDrawable() and
  addPresentedHandler() pass MVKImagePresentInfo by value instead
  of reference, to avoid callbacks colliding with tracked
  MVKImagePresentInfos being cleared when
  MVKQueuePresentSurfaceSubmission is destroyed after it is run.
2023-05-05 14:45:43 -04:00
Bill Hollings
cde220a277 Remove vkGetMoltenVKConfiguration2MVK() and vkSetMoltenVKConfiguration2MVK().
Also undeprecate the original vkGet/SetMoltenVKConfigurationMVK().

In expectation of the upcoming VK_EXT_layer_settings extension, it is felt that
adding these additional functions at this time would be confusing to app devs.
2023-05-05 11:41:06 -04:00
Bill Hollings
3db62a1d7b Reinstate VK_MVK_moltenvk extension and add simplified config functions.
- Reinstate VK_MVK_moltenvk extension, but log warning message when it is enabled.
- Add vkGetMoltenVKConfiguration2MVK() and vkSetMoltenVKConfiguration2MVK()
  to set config without passing a dummy VkInstance, and deprecate
  vkGetMoltenVKConfigurationMVK() and vkSetMoltenVKConfigurationMVK().
2023-05-04 11:08:16 -04:00
Bill Hollings
789d432156 Avoid Metal validation warning when depth component swizzled away.
- Set Metal depth store action to MTLStoreActionDontCare when
  depth attachment exists, but depth component has been swizzled away.
2023-05-03 22:39:35 -04:00
Bill Hollings
f33e718da4 Expose pointers to functions from removed VK_MVK_moltenvk extension.
- MVKInstance reorganize list of entry points for visual clarity (unrelated).
- Fixes to deprecation documentation (unrelated).
- mvkStringsAreEqual() add small performance optimization (unrelated).
2023-05-03 10:15:53 -04:00
Bill Hollings
937b0bf943 Deprecate the obsolete and non-standard VK_MVK_moltenvk extension.
The VK_MVK_moltenvk extension has never been brought inside Vulkan, and
the functions have never been supported by the Vulkan Loader and Layers.
Most of the functionality has long been replaced by the official
VK_metal_objects extension.

- Remove VK_MVK_moltenvk as an advertised extension.
- Refactor vk_mvk_moltenvk.h header file into separate headers files:
    - mvk_config.h - Valid public config functions
    - mvk_private_api.h - Valid development debugging functions used with care
    - mvk_deprecated_api.h - Formally deprecated functions.
- Retain skeleton vk_mvk_moltenvk.h header file for legacy compatibility only.
- Update documentation and header comments to explain changes.
2023-05-01 17:30:21 -04:00
Bill Hollings
e50cb32127
Merge pull request #1878 from billhollings/dyn-rend-separate-depth-stencil
Support separate depth and stencil attachments during dynamic rendering
2023-04-28 12:38:29 -04:00
Bill Hollings
fd6b97317d Clear attachments support separate depth and stencil attachments.
- Also rename kMVKCachedColorAttachmentCount to kMVKMaxColorAttachmentCount and
  kMVKCachedViewportScissorCount to kMVKMaxViewportScissorCount and (unrelated)
2023-04-27 13:10:30 -04:00
Bill Hollings
abb12a5288 Fix Metal validation errors with dynamic rendering.
- MVKPipeline validate depth & stencil formats before setting frag shader depth
  and stencil builtins, and before setting formats in MTLRenderPipelineDescriptor.
- MVKCmdClearAttachments always set depth/stencil format if subpass includes
  a depth or stencil attachment, even if they are not being cleared.
- MVKRenderingAttachmentIterator add synthetic attachment if depth or stencil
  attachment is not provided, but image format supports both depth and stencil.
2023-04-26 06:29:07 -04:00
Bill Hollings
4aa2b6dd9f Support separate depth and stencil attachments during dynamic rendering.
- MVKRenderSubpass add separate getDepthFormat() & getStencilFormat(),
  and isDepthAttachmentUsed() & isStencilAttachmentUsed() and use
  instead of testing pixel format for depth and stencil components.
- Add MVKRenderingAttachmentIterator class to consistently iterate,
  and take actions, on the attachments in VkRenderingInfo to create
  synthetic MVKRenderPass and extract image views and clear colors.
- Remove mvkCreateRenderPass() and mvkCreateFramebuffer() in favor
  of additional constructors, and remove mvkGetDepthStencilFormat() in
  favor of retrieving formats for separate depth and stencil attachments.
- MVKRenderpass constructors reorganize order of adding attachments and
  subpasses, and connecting the two.
- Renmame MVKRenderPassAttachment to MVKAttachmentDescription.
- MVKPipeline reorganize member variables to minimize gaps in content
  and remove unnecessary _isRasterizingDepthStencil member var (unrelated).
2023-04-24 15:23:46 -04:00
Bill Hollings
fc8e8182ee Disable pipeline cache compression prior to macOS 10.15 and iOS/tvOS 13.0. 2023-04-24 15:01:41 -04:00
Bill Hollings
13e8103651 Ensure shaders using PhysicalStorageBufferAddresses encode the associated MTLBuffer.
- MVKDevice track VkBuffers marked with VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT.
- Add SPIRVToMSLConversionResultInfo::usesPhysicalStorageBufferAddressesCapability
  to detect and track shaders that use PhysicalStorageBufferAddresses capability,
  and track such shader stages within pipeline.
- MVKResourcesCommandEncoderState encode usage of VkBuffers marked with
  VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT when pipeline uses
  PhysicalStorageBufferAddresses capability.
- Rename MVKResourcesCommandEncoderState::encodeArgumentBufferResourceUsage()
  to encodeResourceUsage().
- MVKDevice move some functions to public scope and remove friend classes.
- MVKDeviceMemory ensure _vkMemAllocFlags is always initialized (unrelated).
- Rename MVKFoundation template method contains() to mvkContains() (unrelated).
2023-04-14 17:30:32 -04:00
Bill Hollings
b0e6df6776 Replace references to macOS 10.16 with 11.0, and standardize use
of whitespace in MVKPixelFormats::modifyMTLFormatCapabilities().
2023-04-12 12:05:38 -04:00
Bill Hollings
5092330273 Support BC compression on iOS/tvOS, where available.
- Add MVK_XCODE_14_3 macro to compile for iOS/tvOS 16.4 and above.
- Add support for BC compression on iOS/tvOS 16.4 and above where supported.
- Consolidate MVKPixelFormats::modifyMTLFormatCapabilities(mtlDev)
  and centralize querying MTLDevice format methods for all platforms.
2023-04-12 11:50:09 -04:00
Bill Hollings
518385696b Several simple maintenance fixes.
- Fix memory leak when waiting on timeline semaphores.
- For correctness, set VkPhysicalDeviceLimits::lineWidthGranularity to 1.
- Update MoltenVK to version 1.2.4.
- Update Whats_New.md document with recent changes.
2023-04-11 20:41:59 -04:00
Italo Mandara
6f3a2b709f Allow to disable Explicit LOD Workaround 2023-04-04 10:28:41 +01:00
sean
aa03097b4d
Fix order 2023-03-24 15:08:06 +01:00
sean
20e255b4e6
Add: VK_KHR_map_memory2 2023-03-23 22:05:58 +01:00
Bill Hollings
dd5ff2a9b0
Merge pull request #1854 from billhollings/ext-external_memory_host
Add support for VK_EXT_external_memory_host extension.
2023-03-20 21:51:04 -04:00
Bill Hollings
cc83a49b99 Add support for host mapped external memory from another GPU.
- Allow MTLBuffer.contents from another GPU as support for the
  VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT handle type.
2023-03-20 11:16:40 -04:00
Bill Hollings
cd8d0c30bb Add support for VK_EXT_external_memory_host extension.
- To expose host memory page size, add mvkGetHostMemoryPageSize() and
  MVKPhysicalDeviceMetalFeatures::hostMemoryPageSize.
- MVKPhysicalDevice::getProperties() sort EXT property structs alphabetically (unrelated).
- MVKExtensions.def fix alignment in OS versions (unrelated).
2023-03-19 22:53:36 -04:00