106 Commits

Author SHA1 Message Date
m154k1
69fd695660 CMake: Add MVK_USE_METAL_PRIVATE_API option 2025-10-19 16:27:57 +03:00
Bill Hollings
1ab13c0656 Merge pull request #2513 from zfergus/cmake-build
Download External Dependencies and Build using CMake
2025-10-18 11:35:03 -04:00
squidbus
354a880552 Update minimum CI to macOS 14 and minimum build to Xcode 15. 2025-10-16 17:54:18 -07:00
Zachary Ferguson
dbd78119c0 Merge branch 'main' into cmake-build 2025-10-14 21:47:51 -04:00
squidbus
987ac1775e Clean up platform preprocessor guards. 2025-10-13 18:01:38 -07:00
squidbus
04f76b38ee Lift minimum build Xcode to 14.3 and document minimum support policies. 2025-10-08 15:37:37 -07:00
squidbus
d8d67788e7 Unify tvOS and iOS feature sets and remove unnecessary selector checks. 2025-10-05 05:15:04 -07:00
squidbus
2c2fb021e5 Relax MVK_APPLE_SILICON checks. 2025-10-04 16:17:47 -07:00
Bill Hollings
c993c51707 Merge branch 'main' into visionos_demo 2025-10-04 10:55:40 -04:00
squidbus
b61c2bbd52 Raise minimum target to macOS 11.0 / iOS 14.0 / tvOS 14.0 2025-10-03 20:00:52 -07:00
Raphael Dobers
81e05dd2a8 Added working demo target for VisionOS in Cube Demo 2025-09-15 11:58:50 +02:00
squidbus
beb88c379d Support compiling using Xcode 26 2025-06-09 17:33:23 -07:00
zachferguson
51fa36ddd3 Add CMake option for MVK_CONFIG_LOG_LEVEL 2025-04-30 14:39:30 -04:00
zachferguson
50ac919021 Enhance warning flag filtering in CMake; support Objective-C++ compiler flags 2025-04-29 11:59:53 -04:00
zachferguson
ed5f6b8930 Fix warning flag filtering in CMake; use MOLTEN_VK_WARNING_FLAGS for compiler options 2025-04-29 11:51:25 -04:00
zachferguson
5486e02b8b Refactor warning handling in MoltenVK_Common; add MoltenVK_Filter_Flags function for compiler flag filtering 2025-04-29 11:47:07 -04:00
zachferguson
81939159a8 Move CMake library definitions into subdirectories; find sources using GLOB 2025-04-29 11:29:17 -04:00
Bill Hollings
7e08c0be95 Update copyright notices to year 2025. 2025-04-25 19:08:38 -04:00
Bill Hollings
23fe768798 Add support for Xcode 16, macOS 15 SDK, iOS 18 SDK, and MSL 3.2.
- Add MVK_XCODE_16 macro definition.
- Include tvOS version in MVK_XCODE_NN definitions, as Xcode 16
  seems not to define iOS version in tvOS SDK. Might be an early
  Xcode beta bug, but it doesn't hurt to include this test anyway.
- Support macOS 15 SDK, iOS 18 SDK, and MSL 3.2.
2024-07-09 15:44:10 -04:00
Dominik Pich
18ae905664 [ios18 support] add new case for Metal Version 3.2 2024-06-14 13:42:57 -07:00
Mike Krus
9082ca839f Fix visionOS build
This adds a few macros to test which platform is currently being built.
Addresses some compile warnings such as missing return values.
2024-03-01 18:28:16 +00:00
Chip Davis
8d1303a57a MVKPipeline: Support framebuffer logic operations.
This support was always there in Metal. It was just hidden from public
view--but not from prying eyes on the Objective-C metadata.

I had initially thought they were using OpenGL/Vulkan values for the
logic operation. When that didn't work, I then tried D3D11 values. I
guess D3D11 makes sense, because the Intel GPU drivers were the first to
support this in Metal.

Move the definition of `MVK_USE_METAL_PRIVATE_API` into
`"MVKCommonEnvironment.h"` so we can use it from non-C++ code.
2024-01-29 15:37:29 -07:00
Bill Hollings
8a675aa3a8 Revert to disabling MVK_HIDE_VULKAN_SYMBOLS by default.
- Statically expose vkGetInstanceProcAddr(), even
  when MVK_HIDE_VULKAN_SYMBOLS is enabled.
- To support Volk, link Cube demo dynamically to libMoltenVK.dylib
  instead of statically to MoltenVK.xcframework.
2024-01-10 17:16:33 -05:00
Bill Hollings
cb460524d7 Update dependency libraries to match Vulkan SDK 1.3.275.
- Hide static Vulkan API symbols by default
  (build setting MVK_HIDE_VULKAN_SYMBOLS=1 by default).
- Update documentation.
2024-01-09 08:17:16 -05:00
Bill Hollings
d9f75ed812 Update copyright notices to year 2024. 2024-01-04 14:51:53 -05:00
Bill Hollings
76233bc654 Merge pull request #2095 from billhollings/VK_EXT_layer_settings
Add support for VK_EXT_layer_settings extension
2023-12-19 18:22:02 -05:00
Bill Hollings
9fbf8a1fca Merge pull request #2099 from karelrooted/fix-tvos-memory-size
Fix system memory size of tvOS
2023-12-19 09:59:25 -05:00
karelrooted
d483d620b6 Fix system memory size of tvOS
use sysctlbyname("hw.memsize") to get sytem memory size instead of host_info,
host_info is not available on tvOS, so we change to sysctlbyname which support all apple platforms

apple document didn't stat this API is available on tvOS though,
https://developer.apple.com/documentation/kernel/1387446-sysctlbyname
2023-12-19 14:00:45 +08:00
Stephen Saunders
28be920b2f Check for Rev3 task info / ledger_tag_graphics_footprint availability at runtime 2023-12-15 22:15:53 -05:00
Stephen Saunders
ea3cbbc596 Fix VkPhysicalDeviceMemoryBudgetPropertiesEXT heapUsage query for non-unified memory devices 2023-12-15 18:09:39 -05:00
Bill Hollings
ac46188bba Merge main branch into VK_EXT_layer_settings branch. 2023-12-09 13:31:53 -05:00
Bill Hollings
90eb1af19f Add support for extension VK_EXT_headless_surface.
- Consolidate info about CAMetalLayer and headless in MVKSurface.
- MVKSwapchainImage remove getCAMetalDrawable()
  and focus on abstracting getMTLTexture().
- MVKPresentableSwapchainImage::getCAMetalDrawable() return nil if headless.
- Add MVKPresentableSwapchainImage::_mtlTextureHeadless to support
  a fixed MTLTexture that is not retrieved from a CAMetalDrawable.
- MVKPresentableSwapchainImage refactor signalling semaphores and fences.
- MVKPresentableSwapchainImage don't lock when signalling semaphores and fences.
- If no present occurs, actualPresentTime will be zero. Set it to current
  time, instead of to desiredPresentTime, since it's more accurate.
- Rework timestamps:
  - Remove _mvkTimestampBase so mvkGetTimestamp() is equal to
    mach_absolute_time(), which is used in presentation timing.
  - Add mvkGetRuntimeNanoseconds().
  - Rename mvkGetAbsoluteTime() to mvkGetContinuousNanoseconds().
  - Remove mvkGetTimestampPeriod() as unused.
- MVKSemaphoreMTLEvent::encodeDeferredSignal remove redundant nil test (unrelated).
- Fix swapchain and surface bugs when windowing system
  is accessed from off the main thread (unrelated).
- Log warning when deprecated functions vkCreateMacOSSurfaceMVK()
  or vkCreateIOSSurfaceMVK() are used (unrelated).
- Remove documentation for visionos, as support is not ready (unrelated).
2023-12-04 11:56:22 -05:00
Bill Hollings
62e0368e21 Add configurable lowpass filter for VkPhysicalDeviceLimits::timestampPeriod.
- Add MVKConfiguration::timestampPeriodLowPassAlpha, along with matching
  MVK_CONFIG_TIMESTAMP_PERIOD_LOWPASS_ALPHA env var.
- Add MVKConfigMembers.def file to describe MVKConfiguration members,
  to support consistent batch handling of members.
- Add env var & build settings MVK_CONFIG_DEBUG, plus legacy
  MVK_CONFIG_ALLOW_METAL_EVENTS & MVK_CONFIG_ALLOW_METAL_FENCES.
- Simplify environment variable retrieval functions and macros.
- Rename MVKDevice::updateTimestampsAndPeriod() to updateTimestampPeriod().
2023-09-12 11:41:43 -04:00
Bill Hollings
6c6139ca92 Update Common/MVKOSExtensions.h
Co-authored-by: Chip Davis <cdavis5x@gmail.com>
2023-09-07 09:33:40 -04:00
Bill Hollings
7fe4963985 Guard against CAMetalDrawable with invalid pixel format.
- Calling nextDrawable may result in a nil drawable, or a drawable with no
  pixel format. Attempt several times to retrieve a drawable with a valid
  pixel format, and if unsuccessful, return an error from vkQueuePresentKHR()
  and vkAcquireNextImageKHR(), to force swapchain to be re-created.
- Reorganize MVKQueuePresentSurfaceSubmission::execute() to detect drawable
  with invalid format, attach MTLCommandBuffer completion handler just before
  commit, and delay enqueuing MTLCommandBuffer until commit.
- Refactor mvkOSVersionIsAtLeast() for clarity (unrelated).
2023-09-06 16:16:11 -04:00
Bill Hollings
10625a8638 Add support for VK_EXT_layer_settings extension. 2023-09-04 21:45:42 -04:00
Bill Hollings
6374d9d29b Fix visionOS build errors and warnings where possible.
- Remove visionOS from multi-platform builds because it
  requires Xcode 15+ and will abort a multi-platform build.
- Define TARGET_OS_XR for older SDK's.
- A number of SDK deprecation warnings remain when building for visionOS.
  These cannot be removed without significant refactoring.
- Build visionOS dependencies for Release build by default.
- Fix local variable initialization warning (unrelated).
2023-07-11 15:43:41 -04:00
Bill Hollings
855c7a6c36 Merge branch 'visionOS' of https://github.com/nginetechnologies/MoltenVK into nginetechnologies-visionOS 2023-07-11 10:58:46 -04:00
Chip Davis
561e14ba62 Support the VK_EXT_pipeline_creation_feedback extension.
This provides feedback that indicates:
* how long it took to compile each shader stage and the pipeline as a
  whole;
* whether or not the pipeline or any shader stage were found in any
  supplied pipeline cache; and
* whether or not any supplied base pipeline were used to accelerate
  pipeline creation.

This is similar to the performance statistics that MoltenVK already
collects.

Since we don't use any supplied base pipeline at all, this
implementation never sets
`VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT`. However,
I've identified several places where we could probably use the base
pipeline to accelerate pipeline creation. One day, I should probably
implement that.

Likewise, because we don't yet support using `MTLBinaryArchive`s,
`VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT` is
never set on the whole pipeline, though it *is* set for individual
stages, on the assumption that any shader found in a cache is likely to
be found in Metal's own implicit cache.

In this implementation, shader stage compilation time includes any time
needed to build the `MTLComputePipelineState`s needed for vertex and
tessellation control shaders in tessellated pipelines.

This patch also changes compilation of the vertex stage
`MTLComputePipelineState`s in tessellated pipelines to be eager instead
of lazy. We really ought to have been doing this anyway, in order to
report pipeline failures at creation time instead of draw time. I'm not
happy, though, that we now pay the cost of all three pipeline states all
the time, instead of just the ones that are used.

This also gets rid of some fields of `MVKGraphicsPipeline` that were
only used during pipeline construction, which should save some memory,
particularly for apps that create lots of pipelines.
2023-07-10 18:25:03 -07:00
Antarctic Coder
6bca44c612 Added MSL Version 3.1 for switch case
In this commit, I've added support for Xcode 15, and added a case for MSL version 3.1. I added this because I noticed xcode was throwing some warnings about an unhandled switch case.
2023-07-05 09:47:38 -04:00
Chip Davis
4e3ac69305 Support the VK_EXT_calibrated_timestamps extension.
This extension has a direct Metal equivalent in the
`-[MTLDevice sampleTimestamps:gpuTimestamp:]` method. However, that
method returns CPU timestamps in the Mach absolute time domain, which is
*not* that of `CLOCK_MONOTONIC_RAW` but of `CLOCK_UPTIME_RAW`. The
function that corresponds to `CLOCK_MONOTONIC_RAW` is
`mach_continuous_time()`. Therefore, this implementation uses the
`mach_continuous_time()` function for the CPU timestamp. Perhaps we
should lobby the WG for `VK_TIME_DOMAIN_CLOCK_UPTIME_RAW_EXT`.
2023-06-23 12:08:56 -07:00
Filip Lundgren
4540175a7d Fix mvkOSVersionIsAtLeast on Vision 2023-06-23 15:08:00 -04:00
Filip Lundgren
a756b8cd6e Fix MVK_MACOS_OR_IOS_OR_VISIONOS check 2023-06-23 10:31:22 -04:00
Filip Lundgren
d8b5a7df55 Merge branch 'main' of https://github.com/KhronosGroup/MoltenVK into visionOS 2023-06-23 10:29:57 -04:00
Filip Lundgren
16990efeb1 Support building for visionOS
Note: Internal naming is xrOS, but publicly it should be referred to as visionOS
2023-06-23 10:25:05 -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
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
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
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
Bill Hollings
12592abbc9 Update copyright notices to year 2023. 2023-01-13 12:19:37 -05:00