@@ -100,24 +100,38 @@ extern "C"
100100}
101101#endif
102102
103+ #if defined(UNLEASHED_RECOMP_IOS) && defined(__APPLE__) && !defined(SDL_VULKAN_ENABLED)
104+ #define UNLEASHED_RECOMP_USE_METAL 1
105+ #endif
106+
103107namespace plume
104108{
105109#ifdef UNLEASHED_RECOMP_D3D12
106110 extern std::unique_ptr<RenderInterface> CreateD3D12Interface ();
107111#endif
112+ #ifdef UNLEASHED_RECOMP_USE_METAL
113+ extern std::unique_ptr<RenderInterface> CreateMetalInterface ();
114+ #else
108115#ifdef SDL_VULKAN_ENABLED
109116 extern std::unique_ptr<RenderInterface> CreateVulkanInterface (RenderWindow sdlWindow);
110117#else
111118 extern std::unique_ptr<RenderInterface> CreateVulkanInterface ();
112119#endif
120+ #endif
113121
122+ #ifdef UNLEASHED_RECOMP_USE_METAL
123+ static std::unique_ptr<RenderInterface> CreateMetalInterfaceWrapper () {
124+ return CreateMetalInterface ();
125+ }
126+ #else
114127 static std::unique_ptr<RenderInterface> CreateVulkanInterfaceWrapper () {
115128#ifdef SDL_VULKAN_ENABLED
116129 return CreateVulkanInterface (GameWindow::s_renderWindow);
117130#else
118131 return CreateVulkanInterface ();
119132#endif
120133 }
134+ #endif
121135}
122136
123137#pragma pack(push, 1)
@@ -291,6 +305,15 @@ static bool g_vulkan = false;
291305static constexpr bool g_vulkan = true ;
292306#endif
293307
308+ static const char * GetGraphicsApiName ()
309+ {
310+ #ifdef UNLEASHED_RECOMP_USE_METAL
311+ return " Metal" ;
312+ #else
313+ return g_vulkan ? " Vulkan" : " D3D12" ;
314+ #endif
315+ }
316+
294317static bool g_triangleStripWorkaround = false ;
295318
296319static bool g_hardwareResolve = true ;
@@ -1755,6 +1778,8 @@ bool Video::CreateHostDevice(const char *sdlVideoDriver, bool graphicsApiRetry)
17551778
17561779 interfaceFunctions.push_back (g_vulkan ? CreateVulkanInterfaceWrapper : CreateD3D12Interface);
17571780 interfaceFunctions.push_back (g_vulkan ? CreateD3D12Interface : CreateVulkanInterfaceWrapper);
1781+ #elif defined(UNLEASHED_RECOMP_USE_METAL)
1782+ interfaceFunctions.push_back (CreateMetalInterfaceWrapper);
17581783#else
17591784 interfaceFunctions.push_back (CreateVulkanInterfaceWrapper);
17601785#endif
@@ -2529,7 +2554,7 @@ static void DrawProfiler()
25292554 ImGui::Text (" Hardware Depth Resolve: %s" , g_hardwareDepthResolve ? " Enabled" : " Disabled" );
25302555 ImGui::NewLine ();
25312556
2532- ImGui::Text (" API: %s" , g_vulkan ? " Vulkan " : " D3D12 " );
2557+ ImGui::Text (" API: %s" , GetGraphicsApiName () );
25332558 ImGui::Text (" Device: %s" , g_device->getDescription ().name .c_str ());
25342559 ImGui::Text (" Device Type: %s" , DeviceTypeName (g_device->getDescription ().type ));
25352560 ImGui::Text (" VRAM: %.2f MiB" , (double )(g_device->getDescription ().dedicatedVideoMemory ) / (1024.0 * 1024.0 ));
0 commit comments