diff --git a/cmake/BuildParameters.cmake b/cmake/BuildParameters.cmake index 4987fca42bb49..89ab1db70e9ab 100644 --- a/cmake/BuildParameters.cmake +++ b/cmake/BuildParameters.cmake @@ -39,6 +39,11 @@ option(USE_VTUNE "Plug VTUNE to profile GS JIT.") #------------------------------------------------------------------------------- option(BUILD_REPLAY_LOADERS "Build GS replayer to ease testing (developer option)") option(USE_VULKAN "Enable Vulkan GS renderer" ON) +if (APPLE) + option(USE_METAL "Enable Metal GS renderer" ON) +else() + option(USE_METAL "Enable Metal GS renderer" OFF) +endif() #------------------------------------------------------------------------------- # Path and lib option @@ -242,6 +247,10 @@ if(USE_VULKAN) list(APPEND PCSX2_DEFS ENABLE_VULKAN) endif() +if (USE_METAL) + list(APPEND PCSX2_DEFS ENABLE_METAL) +endif() + if(X11_API) list(APPEND PCSX2_DEFS X11_API) endif() diff --git a/pcsx2/CMakeLists.txt b/pcsx2/CMakeLists.txt index 564547c7af082..df701a915de44 100644 --- a/pcsx2/CMakeLists.txt +++ b/pcsx2/CMakeLists.txt @@ -982,7 +982,7 @@ if(WIN32) list(APPEND pcsx2FrontendHeaders Frontend/D3D11HostDisplay.h ) -elseif(APPLE) +elseif(USE_METAL) list(APPEND pcsx2GSSources GS/Renderers/Metal/GSDeviceMTL.mm GS/Renderers/Metal/GSMTLDeviceInfo.mm @@ -1708,6 +1708,7 @@ if(GETTEXT_FOUND AND NOT NO_TRANSLATION AND NOT PCSX2_CORE) endif() if (APPLE) + if(USE_METAL) find_library(METAL_LIBRARY Metal) target_link_libraries(PCSX2 PRIVATE ${METAL_LIBRARY}) @@ -1750,6 +1751,7 @@ if (APPLE) generateMetallib(macos-metal2.2 air64-apple-macos10.15 Metal22) generateMetallib(macos-metal2.3 air64-apple-macos11.0 Metal23) endif() + endif(USE_METAL) # MacOS defaults to having a maximum protection of the __DATA segment of rw (non-executable) # We have a bunch of page-sized arrays in bss that we use for jit diff --git a/pcsx2/GS/GS.cpp b/pcsx2/GS/GS.cpp index 1c2d9042dd3dc..7130c7dc3870a 100644 --- a/pcsx2/GS/GS.cpp +++ b/pcsx2/GS/GS.cpp @@ -164,7 +164,7 @@ static HostDisplay::RenderAPI GetAPIForRenderer(GSRendererType renderer) case GSRendererType::VK: return HostDisplay::RenderAPI::Vulkan; -#ifdef __APPLE__ +#ifdef ENABLE_METAL case GSRendererType::Metal: return HostDisplay::RenderAPI::Metal; #endif @@ -191,7 +191,7 @@ static bool DoGSOpen(GSRendererType renderer, u8* basemem) g_gs_device = std::make_unique(); break; #endif -#ifdef __APPLE__ +#ifdef ENABLE_METAL case HostDisplay::RenderAPI::Metal: g_gs_device = std::unique_ptr(MakeGSDeviceMTL()); break; @@ -1199,7 +1199,7 @@ void GSApp::Init() #ifdef _WIN32 m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::DX11), "Direct3D 11", "")); #endif -#ifdef __APPLE__ +#ifdef ENABLE_METAL m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::Metal), "Metal", "")); #endif m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::OGL), "OpenGL", "")); diff --git a/pcsx2/GS/Renderers/Metal/GSMetalCPPAccessible.h b/pcsx2/GS/Renderers/Metal/GSMetalCPPAccessible.h index cd4fae81200e3..231da76901734 100644 --- a/pcsx2/GS/Renderers/Metal/GSMetalCPPAccessible.h +++ b/pcsx2/GS/Renderers/Metal/GSMetalCPPAccessible.h @@ -16,7 +16,7 @@ #pragma once // Header with all metal stuff available for use with C++ (rather than Objective-C++) -#ifdef __APPLE__ +#ifdef ENABLE_METAL #include "HostDisplay.h" diff --git a/pcsx2/GS/Window/GSwxDialog.cpp b/pcsx2/GS/Window/GSwxDialog.cpp index 7c080e0b6e311..cd4bfa337543d 100644 --- a/pcsx2/GS/Window/GSwxDialog.cpp +++ b/pcsx2/GS/Window/GSwxDialog.cpp @@ -94,7 +94,7 @@ namespace , inner(new wxBoxSizer(orientation)) { wxSizerFlags flags = wxSizerFlags().Expand(); -#ifdef __APPLE__ +#ifdef ENABLE_METAL if (!std::is_same::value) // wxMac already adds padding to static box sizers #endif flags.Border(); @@ -700,7 +700,7 @@ void Dialog::RendererChange() list = VulkanHostDisplay::StaticGetAdapterAndModeList(nullptr); break; #endif -#ifdef __APPLE__ +#ifdef ENABLE_METAL case GSRendererType::Metal: list = GetMetalAdapterAndModeList(); break; diff --git a/pcsx2/HostDisplay.cpp b/pcsx2/HostDisplay.cpp index 576c1ea0bfe08..e083acfebf74a 100644 --- a/pcsx2/HostDisplay.cpp +++ b/pcsx2/HostDisplay.cpp @@ -134,7 +134,7 @@ std::unique_ptr HostDisplay::CreateDisplayForAPI(RenderAPI api) case RenderAPI::D3D11: return std::make_unique(); #endif -#ifdef __APPLE__ +#ifdef ENABLE_METAL case HostDisplay::RenderAPI::Metal: return std::unique_ptr(MakeMetalHostDisplay()); #endif