diff --git a/Docs/Whats_New.md b/Docs/Whats_New.md index 201d483c3..2308d5d67 100644 --- a/Docs/Whats_New.md +++ b/Docs/Whats_New.md @@ -16,24 +16,33 @@ Copyright (c) 2015-2023 [The Brenwill Workshop Ltd.](http://www.brenwill.com) MoltenVK 1.2.6 -------------- -Released TBD +Released 2023/10/17 - Add support for extensions: - `VK_KHR_synchronization2` - `VK_EXT_extended_dynamic_state` *(requires Metal 3.1 for `VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE`)* - `VK_EXT_extended_dynamic_state2` -- Fix rare case where vertex attribute buffers are not bound to Metal - when no other bindings change between pipelines. +- Fix rare case where vertex attribute buffers are not bound to Metal when no other bindings change between pipelines. - Ensure objects retained for life of `MTLCommandBuffer` during `vkCmdBlitImage()` & `vkQueuePresentKHR()`. - Fix case where a `CAMetalDrawable` with invalid pixel format causes onscreen flickering. -- Fix MSL code used in `vkCmdBlitImage()` on depth-stencil formats. +- Fix deadlock when reporting debug message on `MVKInstance` destruction. +- Fix MSL code used in `vkCmdBlitImage()` on depth-stencil formats. - Improve behavior of swapchain image presentation stalls caused by Metal regression. -- Add several additional performance trackers, available via logging, or the `mvk_private_api.h` API. +- `VkPhysicalDeviceLimits::timestampPeriod` set to 1.0 on Apple GPUs, and calculated dynamically on non-Apple GPUs. - Add `MVKConfiguration::timestampPeriodLowPassAlpha` and environment variable `MVK_CONFIG_TIMESTAMP_PERIOD_LOWPASS_ALPHA`, to add a configurable lowpass filter for varying `VkPhysicalDeviceLimits::timestampPeriod` on non-Apple GPUs. +- Add several additional performance trackers, available via logging, or the `mvk_private_api.h` API. - Deprecate `MVK_DEBUG` env var, and add `MVK_CONFIG_DEBUG` env var to replace it. - Update `MVK_CONFIGURATION_API_VERSION` and `MVK_PRIVATE_API_VERSION` to `38`. +- Update dependency libraries to match _Vulkan SDK 1.3.268_. +- Update to latest SPIRV-Cross: + - MSL: Workaround Metal 3.1 regression bug on recursive input structs. + - MSL: fix extraction of global variables, in case of atomics. + - MSL: Workaround bizarre crash on macOS. + - MSL: runtime array over argument buffers. + - MSL: Make rw texture fences optional. + - MSL: Prevent RAW hazards on read_write textures. diff --git a/ExternalRevisions/SPIRV-Cross_repo_revision b/ExternalRevisions/SPIRV-Cross_repo_revision index 590969e2f..fa4ca5201 100644 --- a/ExternalRevisions/SPIRV-Cross_repo_revision +++ b/ExternalRevisions/SPIRV-Cross_repo_revision @@ -1 +1 @@ -bccaa94db814af33d8ef05c153e7c34d8bd4d685 +2de1265fca722929785d9acdec4ab728c47a0254 diff --git a/ExternalRevisions/Vulkan-Headers_repo_revision b/ExternalRevisions/Vulkan-Headers_repo_revision index a8ebecec5..e37595bdd 100644 --- a/ExternalRevisions/Vulkan-Headers_repo_revision +++ b/ExternalRevisions/Vulkan-Headers_repo_revision @@ -1 +1 @@ -85c2334e92e215cce34e8e0ed8b2dce4700f4a50 +7b3466a1f47a9251ac1113efbe022ff016e2f95b diff --git a/ExternalRevisions/Vulkan-Tools_repo_revision b/ExternalRevisions/Vulkan-Tools_repo_revision index bf77fda05..6ecf5015e 100644 --- a/ExternalRevisions/Vulkan-Tools_repo_revision +++ b/ExternalRevisions/Vulkan-Tools_repo_revision @@ -1 +1 @@ -300d9bf6b3cf7b237ee5e2c1d0ae10b9236f82d3 +1532001f7edae559af1988293eec90bc5e2607d5 diff --git a/ExternalRevisions/glslang_repo_revision b/ExternalRevisions/glslang_repo_revision index aba7fbb10..cd54f4f32 100644 --- a/ExternalRevisions/glslang_repo_revision +++ b/ExternalRevisions/glslang_repo_revision @@ -1 +1 @@ -76b52ebf77833908dc4c0dd6c70a9c357ac720bd +be564292f00c5bf0d7251c11f1c9618eb1117762 diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm index 2f8a299ed..49399b063 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm @@ -1734,6 +1734,7 @@ static MTLVertexFormat mvkAdjustFormatVectorToSize(MTLVertexFormat format, uint3 shaderConfig.options.mslOptions.multiview = mvkIsMultiview(pRendInfo->viewMask); shaderConfig.options.mslOptions.multiview_layered_rendering = getPhysicalDevice()->canUseInstancingForMultiview(); shaderConfig.options.mslOptions.view_index_from_device_index = mvkAreAllFlagsEnabled(pCreateInfo->flags, VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT); + shaderConfig.options.mslOptions.replace_recursive_inputs = mvkOSVersionIsAtLeast(14.0, 17.0, 1.0); #if MVK_MACOS shaderConfig.options.mslOptions.emulate_subgroups = !_device->_pMetalFeatures->simdPermute; #endif @@ -2139,6 +2140,7 @@ static MTLVertexFormat mvkAdjustFormatVectorToSize(MTLVertexFormat format, uint3 shaderConfig.options.mslOptions.buffer_size_buffer_index = _bufferSizeBufferIndex.stages[kMVKShaderStageCompute]; shaderConfig.options.mslOptions.dynamic_offsets_buffer_index = _dynamicOffsetBufferIndex.stages[kMVKShaderStageCompute]; shaderConfig.options.mslOptions.indirect_params_buffer_index = _indirectParamsIndex.stages[kMVKShaderStageCompute]; + shaderConfig.options.mslOptions.replace_recursive_inputs = mvkOSVersionIsAtLeast(14.0, 17.0, 1.0); MVKMTLFunction func = ((MVKShaderModule*)pSS->module)->getMTLFunction(&shaderConfig, pSS->pSpecializationInfo, this, pStageFB); if ( !func.getMTLFunction() ) { diff --git a/MoltenVKShaderConverter/MoltenVKShaderConverterTool/MoltenVKShaderConverterTool.cpp b/MoltenVKShaderConverter/MoltenVKShaderConverterTool/MoltenVKShaderConverterTool.cpp index 9a911e3de..2eb1c48c8 100644 --- a/MoltenVKShaderConverter/MoltenVKShaderConverterTool/MoltenVKShaderConverterTool.cpp +++ b/MoltenVKShaderConverter/MoltenVKShaderConverterTool/MoltenVKShaderConverterTool.cpp @@ -221,6 +221,7 @@ bool MoltenVKShaderConverterTool::convertSPIRV(const vector& spv, mslContext.options.mslOptions.argument_buffers = _useMetalArgumentBuffers; mslContext.options.mslOptions.force_active_argument_buffer_resources = _useMetalArgumentBuffers; mslContext.options.mslOptions.pad_argument_buffer_resources = _useMetalArgumentBuffers; + mslContext.options.mslOptions.replace_recursive_inputs = mvkOSVersionIsAtLeast(14.0, 17.0, 1.0); SPIRVToMSLConverter spvConverter; spvConverter.setSPIRV(spv); diff --git a/Templates/spirv-tools/build.zip b/Templates/spirv-tools/build.zip index 3879c9b83..d087d8e2b 100644 Binary files a/Templates/spirv-tools/build.zip and b/Templates/spirv-tools/build.zip differ