From 5b3e1561970d0b40962188e2938180a50c28a503 Mon Sep 17 00:00:00 2001 From: squidbus <175574877+squidbus@users.noreply.github.com> Date: Fri, 21 Feb 2025 02:41:36 -0800 Subject: [PATCH] externals: Update MoltenVK (#2492) --- externals/MoltenVK/MoltenVK | 2 +- externals/MoltenVK/SPIRV-Cross | 2 +- src/video_core/renderer_vulkan/vk_instance.cpp | 7 +++---- src/video_core/renderer_vulkan/vk_instance.h | 1 - src/video_core/renderer_vulkan/vk_platform.cpp | 12 +++++++++++- 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/externals/MoltenVK/MoltenVK b/externals/MoltenVK/MoltenVK index 0c090001c..2048427e5 160000 --- a/externals/MoltenVK/MoltenVK +++ b/externals/MoltenVK/MoltenVK @@ -1 +1 @@ -Subproject commit 0c090001cb42997031cfe43914340e2639944972 +Subproject commit 2048427e50f9eb20f2b8f98d316ecaee398c9b91 diff --git a/externals/MoltenVK/SPIRV-Cross b/externals/MoltenVK/SPIRV-Cross index 1a7b7ef6d..2c32b6bf8 160000 --- a/externals/MoltenVK/SPIRV-Cross +++ b/externals/MoltenVK/SPIRV-Cross @@ -1 +1 @@ -Subproject commit 1a7b7ef6de02cf6767e42b10ddad217c45e90d47 +Subproject commit 2c32b6bf86f3c4a5539aa1f0bacbd59fe61759cf diff --git a/src/video_core/renderer_vulkan/vk_instance.cpp b/src/video_core/renderer_vulkan/vk_instance.cpp index f01401569..ab8f074cd 100644 --- a/src/video_core/renderer_vulkan/vk_instance.cpp +++ b/src/video_core/renderer_vulkan/vk_instance.cpp @@ -247,9 +247,7 @@ bool Instance::CreateDevice() { add_extension(VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME); add_extension(VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME); add_extension(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME); - // Currently causes issues with Reshade on AMD proprietary, disable until figured out. - tooling_info = GetDriverID() != vk::DriverId::eAmdProprietary && - add_extension(VK_EXT_TOOLING_INFO_EXTENSION_NAME); + add_extension(VK_EXT_TOOLING_INFO_EXTENSION_NAME); const bool maintenance4 = add_extension(VK_KHR_MAINTENANCE_4_EXTENSION_NAME); add_extension(VK_KHR_SWAPCHAIN_EXTENSION_NAME); @@ -539,7 +537,8 @@ void Instance::CollectDeviceParameters() { } void Instance::CollectToolingInfo() { - if (!tooling_info) { + if (GetDriverID() == vk::DriverId::eAmdProprietary) { + // Currently causes issues with Reshade on AMD proprietary, disabled until fix released. return; } const auto [tools_result, tools] = physical_device.getToolPropertiesEXT(); diff --git a/src/video_core/renderer_vulkan/vk_instance.h b/src/video_core/renderer_vulkan/vk_instance.h index bdd92cba9..3ccf89276 100644 --- a/src/video_core/renderer_vulkan/vk_instance.h +++ b/src/video_core/renderer_vulkan/vk_instance.h @@ -333,7 +333,6 @@ private: bool shader_stencil_export{}; bool image_load_store_lod{}; bool amd_gcn_shader{}; - bool tooling_info{}; bool portability_subset{}; }; diff --git a/src/video_core/renderer_vulkan/vk_platform.cpp b/src/video_core/renderer_vulkan/vk_platform.cpp index cb67232d5..716473377 100644 --- a/src/video_core/renderer_vulkan/vk_platform.cpp +++ b/src/video_core/renderer_vulkan/vk_platform.cpp @@ -278,6 +278,7 @@ vk::UniqueInstance CreateInstance(Frontend::WindowSystemType window_type, bool e vk::Bool32 enable_force_barriers = vk::True; #ifdef __APPLE__ const vk::Bool32 mvk_debug_mode = enable_crash_diagnostic ? vk::True : vk::False; + constexpr vk::Bool32 mvk_use_mtlheap = vk::True; #endif const std::array layer_setings = { @@ -353,7 +354,16 @@ vk::UniqueInstance CreateInstance(Frontend::WindowSystemType window_type, bool e .type = vk::LayerSettingTypeEXT::eBool32, .valueCount = 1, .pValues = &mvk_debug_mode, - } + }, + // Use MTLHeap to back device memory, which among other things allows us to + // use VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT via memory aliasing. + vk::LayerSettingEXT{ + .pLayerName = "MoltenVK", + .pSettingName = "MVK_CONFIG_USE_MTLHEAP", + .type = vk::LayerSettingTypeEXT::eBool32, + .valueCount = 1, + .pValues = &mvk_use_mtlheap, + }, #endif };