2983 Commits

Author SHA1 Message Date
sean
e49a69e617 Add: KHR_format_feature_flags2 2024-01-03 08:03:27 +01:00
Bill Hollings
22427b8424
Merge pull request #1940 from spnda/metal31_formats
Add support for RG11B10 and RGB9E5 vertex formats
2023-12-27 20:31:27 -05:00
sean
86c080d9c8 Add: Support for RG11B10 and RGB9E5 vertex formats 2023-12-28 01:48:37 +01: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
6daa6c0f96
Update MoltenVK/MoltenVK/Utility/MVKEnvironment.cpp
Co-authored-by: Chip Davis <cdavis5x@gmail.com>
2023-12-19 17:20:17 -05:00
Bill Hollings
1ce40f63a4 Fixes from dev review feedback for adding VK_EXT_layer_settings extension.
- Document the name of the MoltenVK driver layer.
- Support future multiple string members in MVKConfiguration.
- Add static assert on number of string members in MVKConfigruation.
- Rename global mvkConfig() to getGlobalMVKConfig().
- Rename global mvkSetConfig() to mvkSetGlobalConfig().
- Remove unused mvkPrintSizeOf() macro. (unrelated).
- Trim trailing spaces from Markdown documents because
  it causes double-spaces in some Markdown readers (unrelated).
2023-12-19 11:17:39 -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
Bill Hollings
971096d70d
Merge pull request #2100 from billhollings/fix-dyn-point-topology
Fix regression error and properties in point-topology/polygon-mode behavior.
2023-12-19 09:56:00 -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
Bill Hollings
c4b7232f36 Fix regression error and properties in point-topology/polygon-mode behavior.
- MVKGraphicsPipeline::isRenderingPoints() fix regression error
  to support dynamically setting point topology.
- Move emulation of VK_POLYGON_MODE_POINT in Metal, if the polygon model is static,
  to MVKRenderingCommandEncoderState, to handle dynamic setting of topology.
- MVKDevice populate VkPhysicalDeviceExtendedDynamicState3PropertiesEXT.
- Move error reporting in mvkMTLTriangleFillModeFromVkPolygonModeInObj() to encoding.
- MVKRenderingCommandEncoderState::setCullMode() use getContent()
  for readability and consistency (unrelated).
- Pass pipeline object to datatype functions for reporting accuracy (unrelated).
2023-12-18 13:42:02 -05:00
Chip Davis
793c7cf34d
Merge pull request #2098 from SRSaunders/heapquery-fix
Fix heapUsage query for non-unified memory devices
2023-12-16 14:19:19 -08:00
Chip Davis
99123bf1dc
Use auto instead of an explicit type. 2023-12-16 14:55:04 -07: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
ef0ac40cff Add a defensive guard to ensure heapUsage[0] calculation is always sane 2023-12-15 21:04:12 -05:00
Stephen Saunders
ea3cbbc596 Fix VkPhysicalDeviceMemoryBudgetPropertiesEXT heapUsage query for non-unified memory devices 2023-12-15 18:09:39 -05:00
Bill Hollings
0fc9657bbd Update documentation for the VK_EXT_layer_settings extension.
- Add MoltenVK_Configuration_Parameters.md to
  document the MoltenVK configuration parameters.
- Deprecate vkSetMoltenVKConfigurationMVK().
- Deprecate mvk_config.h and move content to mvk_private_api.h and mvk_deprecated_api.h.
- Streamline lock on retrieval of MVKLayerManager singleton (unrelated).
2023-12-14 16:44:40 -05:00
Bill Hollings
2cccfd516e
Merge pull request #2088 from etang-cw/PixelFormatView
Don't enable PixelFormatView just in case we need it to copy
2023-12-12 12:55:38 -05:00
Evan Tang
d0e00ad3be Don't enable PixelFormatView just in case we need it to copy
Not worth the performance hit to everything else
2023-12-11 22:05:38 -06:00
Bill Hollings
ac46188bba Merge main branch into VK_EXT_layer_settings branch. 2023-12-09 13:31:53 -05:00
Bill Hollings
e6a3886313
Merge pull request #2086 from billhollings/VK_EXT_headless_surface
Add support for extension VK_EXT_headless_surface.
2023-12-05 09:11:50 -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
8820c53666
Merge pull request #2081 from cdavis5e/agx-cube-grad-fixup
MVKPipeline: Enable the cube texture gradient workaround for Apple Silicon
2023-11-29 09:59:06 -05:00
Chip Davis
d0dba760e7 MVKPipeline: Enable the cube texture gradient workaround for Apple Silicon.
Update SPIRV-Cross to pull in the code for the workaround.

Fixes 8 tests under `dEQP-VK.glsl.texture_functions.texturegrad.*`.
2023-11-28 14:08:49 -08:00
Bill Hollings
5bd65fc8e8
Merge pull request #2074 from cdavis5e/b4g4r4a4-unorm
MVKPixelFormats: Handle the `B4G4R4A4` format.
2023-11-23 09:45:49 -05:00
Bill Hollings
645aaa4ecb
Merge pull request #2073 from cdavis5e/min-max-descriptor-count
MVKDevice: Clamp max per-set descriptor limit to minimum 1024.
2023-11-23 09:21:37 -05:00
Bill Hollings
88c9176a5e
Merge pull request #2076 from cdavis5e/required-limits
MVKDevice: Correct some required limits.
2023-11-23 09:11:02 -05:00
Bill Hollings
596686160f
Merge pull request #2077 from billhollings/fix-initial-timestampPeriod
Fix initial value of VkPhysicalDeviceLimits::timestampPeriod on non-Apple Silicon GPUs.
2023-11-23 08:49:38 -05:00
Chip Davis
44b361390a MVKDevice: Clamp max per-set descriptor limit to minimum 1024.
As required by the Vulkan spec.

Fixes the CTS tests
`dEQP-VK.api.info.vulkan1p2_limits_validation.khr_maintenance_3` and
`dEQP-VK.api.maintenance3_check.maintenance3_properties`.
2023-11-22 19:05:50 -08:00
Bill Hollings
a7372edafe Fix initial value of VkPhysicalDeviceLimits::timestampPeriod on non-Apple Silicon GPUs.
- Don't update value of timestampPeriod on first measurement.
- Force that first measurement upon creation of MVKPhysicalDevice, so an
  accurate value for timestampPeriod will be calculated when next queried.
2023-11-22 17:24:09 -05:00
Bill Hollings
e12d776aa8
Merge pull request #2075 from cdavis5e/empty-external-types
MVKBuffer, MVKImage: Also ignore no external handle types specified.
2023-11-22 09:43:23 -05:00
Bill Hollings
77d5091940
Merge pull request #2072 from cdavis5e/mandatory-descriptor-indexing
Enable some mandatory `VK_EXT_descriptor_indexing` features.
2023-11-22 08:46:05 -05:00
Bill Hollings
7e2b45fcf2
Merge pull request #2071 from cdavis5e/debug-utils-device
MVKDevice: Expose `VK_EXT_debug_utils` device functions as device functions.
2023-11-22 08:43:48 -05:00
Chip Davis
552e5c03ba MVKPixelFormats: Handle the B4G4R4A4 format.
Handle it similarly to the `A4R4B4G4` and `A4B4G4R4` formats, with a
swizzle. Vulkan requires support for this format.

Fixes the following tests:
* `dEQP-VK.api.info.format_properties.b4g4r4a4_unorm_pack16`.
* `dEQP-VK.texture.explicit_lod.2d.formats.b4g4r4a4*`
2023-11-22 02:37:16 -08:00
Chip Davis
ff21180909 Enable some mandatory VK_EXT_descriptor_indexing features.
These features must be supported if the extension or `descriptorIndexing`
features is.

Conversely, disable the extension and the feature if we cannot support
the features.

Fixes `dEQP-VK.info.device_mandatory_features`.
2023-11-22 01:08:37 -08:00
Chip Davis
e09ca0186f MVKDevice: Expose VK_EXT_debug_utils device functions as device functions.
Despite being an instance extension, `VK_EXT_debug_utils` provides some
functions that belong to the device, not the instance. Therefore, when
checking device functions, we must also check if an enabled *instance*
extension provides the function.

Also, only enable two-extension functions if *both* extensions or the
requisite core version are enabled. In all cases, these functions require
both extensions or the first extension plus some core version.

Fixes two CTS tests:
`dEQP-VK.info.instance_extension_device_functions`
`dEQP-VK.api.version_check.entry_points`
2023-11-22 01:07:03 -08:00
Chip Davis
3836b00309 MVKDevice: Change maxDrawIndexedIndexValue back to UINT32_MAX.
If the `fullDrawIndexUint32` feature is supported, then
`maxDrawIndexedIndexValue` must be `UINT32_MAX`. I had originally done
this when I turned the feature on, but for a while now, we've been
setting it to one less, because primitive restart can't be disabled and
the value is defined to exclude primitive restart.

The wording in the spec is ambiguous. The description of
`maxDrawIndexedIndexValue` says:

> * `maxDrawIndexedIndexValue` is the maximum index value that **can**
>   be used for indexed draw calls when using 32-bit indices. *This
>   excludes the primitive restart index value of 0xFFFFFFFF.* [emphasis
>   added]

But the description of `fullDrawIndexUint32` says:

> * `fullDrawIndexUint32` specifies the full 32-bit range of indices is
>   supported for indexed draw calls when using a VkIndexType of
>   `VK_INDEX_TYPE_UINT32`. `maxDrawIndexedIndexValue` is the maximum
>   index value that **may** [sic] be used *(aside from the primitive
>   restart index, which is always 2<sup>32</sup>-1 when the VkIndexType
>   is `VK_INDEX_TYPE_UINT32`)*. If this feature is supported,
>   `maxDrawIndexedIndexValue` **must** be 2<sup>32</sup>-1; otherwise
>   it **must** be no smaller than 2<sup>24</sup>-1. [emphasis added]

It's unclear whether it means that the primitive restart index is to be
ignored, or the maximum draw index must account for it.

The alternative is to disable `fullDrawIndexUint32` because we cannot
set `maxDrawIndexedIndexValue` to `UINT32_MAX`; but that might mislead
programs into thinking that we only support 24-bit vertex indices.

Fixes the rest of the `dEQP-VK.info.device_properties` test.
2023-11-21 12:34:40 -08:00
Chip Davis
52ce6a2c6c MVKDevice: Correct lineWidthGranularity.
If the `wideLines` feature isn't supported, then `lineWidthGranularity`
must be zero.

Fixes one part of the `dEQP-VK.info.device_properties` CTS test.
2023-11-21 12:34:40 -08:00
Chip Davis
6b9371ff05 MVKBuffer, MVKImage: Also ignore no external handle types specified.
Previously, we were erroneously failing create calls that specified zero
external handle types (as opposed to omitting external memory info
entirely).

Fixes 6 tests under
`dEQP-VK.api.buffer_memory_requirements.create_no_flags.ext_mem_flags_included.*`
2023-11-21 12:32:39 -08:00
Bill Hollings
a7dc8daf62
Merge pull request #2066 from billhollings/EXT_extended_dynamic_state3
Add support for VK_EXT_extended_dynamic_state3 extension.
2023-11-17 10:11:43 -05:00
Bill Hollings
9f73e7752b
Merge pull request #2067 from billhollings/fix-rare-dlopen-deadlock
Fix rare deadlock during launch via dlopen().
2023-11-16 22:18:21 -05:00
Bill Hollings
13998affe8 Add support for VK_EXT_extended_dynamic_state3 extension.
- Move patch point tracking from pipeline state to render state, and
  remove MVKPipelineCommandEncoderState subclasses no longer needed.
- Move sample location tracking from renderpass input to pipeline
  static or dynamic state tracking.
- Restart Metal render pass when sample locations change, and enable
  VkPhysicalDeviceSampleLocationsPropertiesEXT::variableSampleLocations.
- Fix regression that broke VK_POLYGON_MODE_LINE (unrelated).
- Fix regression in marking MVKRenderingCommandEncoderState
  dirty after vkCmdClearAttachments() (unrelated).
2023-11-16 22:04:37 -05:00
Bill Hollings
037ac4b76c Fix rare deadlock during launch via dlopen().
- Don't create global MVKPixelFormats instance during launch,
  as this triggers a call to MTLCopyAllDevices(), which can
  deadlock if app is also launching other services that use Metal.
2023-11-16 19:55:08 -05:00
Bill Hollings
abeed4e720
Merge pull request #2065 from js6i/bit-array-fix
Fix MVKBitArray::getIndexOfFirstSetBit() skipping over entries.
2023-11-15 13:29:41 -05:00
Jan Sikorski
36e57f4348 Fix MVKBitArray::getIndexOfFirstSetBit() skipping over entries.
Reset startIndex so that we only skip over bits in the section that contains it.
2023-11-14 16:09:13 +01:00
Bill Hollings
ab84de541d
Merge pull request #2060 from billhollings/fix-runtime-array-regression
Fix regression error in argument buffer runtime arrays.
2023-11-07 17:53:57 -05:00
Bill Hollings
40baeaa965 Fix regression error in argument buffer runtime arrays.
- Update to latest SPIRV-Cross contining the fix.
- Modify CTS options in runcts script to avoid outputting full CTS log,
  and use less file caching, all to reduce memory and filespace consumption,
  and possibly improve performance (unrelated).
- Update MoltenVKShaderConverter tool to include Metal 3.1 support
  and improved argument buffer settings (unrelated).
- Force Github CI to use Python 3.11, to avoid crash in
  glslang::update_glslang_sources.py due to use of distutils,
  removed in Python 3.12 (unrelated).
- Small unrelated non-functional edits.
2023-11-07 14:43:07 -05:00
Bill Hollings
bb914faa53
Merge pull request #2047 from billhollings/reduce-deps-disk-space
Reduce disk space consumed after running fetchDependencies.
2023-10-25 10:51:08 -04:00
Bill Hollings
e693a0a2be Reduce disk space consumed after running fetchDependencies.
- Add --keep-cache option to control whether or not to retain the
  External/build/Intermediates directory (default not retained).
- Export KEEP_CACHE & SKIP_PACKAGING to be available within scripts
  used by ExternalDependencies Xcode builds.
- Move BLD_SPECIFIED to build() instead of build_impl() to avoid
  updating it from background thread (which will fail).
- Update MoltenVK version to 1.2.7 (unrelated).
- Add CompilerMSL::Options::replace_recursive_inputs to pipeline cache (unrelated).
- Update GitHub CI to Xcode 15.0.
- Update Whats_new.md document.
2023-10-24 16:28:20 -04:00
Bill Hollings
9e4ee9e679
Merge pull request #2046 from billhollings/fix-prim-rsrt-warn
Emit primitiveRestartEnable disabled warning only for strip topology.
2023-10-18 13:45:32 -04:00
Bill Hollings
37e4fefe5f Emit primitiveRestartEnable disabled warning only for strip topology.
- Move check and warning to MVKRenderingCommandEncoderState.
- Pass primitiveRestartEnable to MVKRenderingCommandEncoderState.
- Warn only if primitiveRestartEnable disabled and strip topology is used.
2023-10-18 09:58:11 -04:00