- 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).
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
- 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).
- 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).
- 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).
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`.
- 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.
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*`
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`.
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`
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.
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.*`
- 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).
- 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.
- 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.