aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/vulkan_common/vulkan_device.cpp
diff options
context:
space:
mode:
authorinnix <dev@innix.space>2025-09-01 09:23:03 +0200
committercrueter <crueter@eden-emu.dev>2025-09-01 09:23:03 +0200
commit6fcfe7f4f38f7f411ce8aa0a7752e272c65dc1f3 (patch)
treedb02a0682e235d3146932918e0000106c4da8b79 /src/video_core/vulkan_common/vulkan_device.cpp
parente60fd4b68bc8d43d141bfba73086518861044678 (diff)
[macOS, compat] Allow games to boot in MacOS (#372)
This fixes the crashes on game launch caused by MacOS not being present in host_manager.cpp and enables primitiveRestart for MoltenVK to suppress a bunch of errors given in the log about MoltenVK requiring primitiveRestart. Fixes an crash when switching kingdoms in Mario Odyssey as well EDS is forced to 0, otherwise games do not show graphics Note: For now only dynarmicc is working, performance will be slow Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/372 Reviewed-by: Lizzie <lizzie@eden-emu.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Reviewed-by: MaranBr <maranbr@outlook.com> Co-authored-by: innix <dev@innix.space> Co-committed-by: innix <dev@innix.space>
Diffstat (limited to 'src/video_core/vulkan_common/vulkan_device.cpp')
-rw-r--r--src/video_core/vulkan_common/vulkan_device.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp
index 4d74bf00a5..6fdf1e7874 100644
--- a/src/video_core/vulkan_common/vulkan_device.cpp
+++ b/src/video_core/vulkan_common/vulkan_device.cpp
@@ -725,6 +725,11 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
dynamic_state3_enables = true;
}
+ if (is_mvk && Settings::values.dyna_state.GetValue() != 0) {
+ LOG_WARNING(Render_Vulkan, "MoltenVK detected: Forcing dynamic state to 0 to prevent black screen issues");
+ Settings::values.dyna_state.SetValue(0);
+ }
+
if (Settings::values.dyna_state.GetValue() == 0) {
must_emulate_scaled_formats = true;
LOG_INFO(Render_Vulkan, "Dynamic state is disabled (dyna_state = 0), forcing scaled format emulation ON");
@@ -1096,8 +1101,15 @@ bool Device::GetSuitability(bool requires_swapchain) {
// Some features are mandatory. Check those.
#define CHECK_FEATURE(feature, name) \
if (!features.feature.name) { \
- LOG_ERROR(Render_Vulkan, "Missing required feature {}", #name); \
- suitable = false; \
+ if (IsMoltenVK() && (strcmp(#name, "geometryShader") == 0 || \
+ strcmp(#name, "logicOp") == 0 || \
+ strcmp(#name, "shaderCullDistance") == 0 || \
+ strcmp(#name, "wideLines") == 0)) { \
+ LOG_INFO(Render_Vulkan, "MoltenVK missing feature {} - using fallback", #name); \
+ } else { \
+ LOG_ERROR(Render_Vulkan, "Missing required feature {}", #name); \
+ suitable = false; \
+ } \
}
#define LOG_FEATURE(feature, name) \