.changelog/3486.md
GET_PREFERRED_HW_RENDER now returns RETRO_HW_CONTEXT_VULKAN when the Metal video driver is active, and dynamic_verify_hw_context accepts the Metal driver for both Vulkan and GLES contexts. Beetle PSX HW and other hardware-accelerated cores can now negotiate hardware context correctly.dynamic_verify_hw_context recognises "metal" as a valid video driver for Vulkan and GLES hardware contexts when driver switching is disabled.loadMoltenVKLibrary now checks RTLD_DEFAULT first (handles MoltenVK linked into the app bundle), then tries bundle-relative absolute paths (PrivateFrameworks/ and Frameworks/) before falling back to rpath-relative names. Fixes "failed to load MoltenVK" on devices where the framework is embedded in the app bundle.RTLD_DEFAULT and bundle-relative path fixes applied to the GLES core bridge's loadMoltenVKLibrary.GET_PREFERRED_HW_RENDER now returns RETRO_HW_CONTEXT_VULKAN on iOS/tvOS when HAVE_VULKAN is compiled in, steering multi-context cores (e.g., Beetle PSX HW) to the optimal hardware path.libretroMain no longer calls makeGLContextCurrent or setupEmuThreadFBO when the active context type is Vulkan, avoiding spurious [EAGLContext setCurrentContext:nil] calls on the emulation thread.MoltenVK-1.2.8 xcframework as an explicit SPM dependency so MoltenVK is bundled with the app and available to libretro cores that use Vulkan hardware rendering.