From 10e69e7eec9680176556282f5b1401f32d28553c Mon Sep 17 00:00:00 2001 From: TellowKrinkle Date: Mon, 7 Feb 2022 00:34:09 -0600 Subject: [PATCH] GS:MTL: Add option to disable Metal renderer --- cmake/BuildParameters.cmake | 9 +++++++++ pcsx2/CMakeLists.txt | 4 +++- pcsx2/GS/GS.cpp | 6 +++--- pcsx2/GS/Renderers/Metal/GSMetalCPPAccessible.h | 2 +- pcsx2/GS/Window/GSwxDialog.cpp | 4 ++-- pcsx2/HostDisplay.cpp | 2 +- 6 files changed, 19 insertions(+), 8 deletions(-) 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 6defa9946ffb2..0edff444402d3 100644 --- a/pcsx2/CMakeLists.txt +++ b/pcsx2/CMakeLists.txt @@ -985,7 +985,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 @@ -1706,6 +1706,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}) @@ -1748,6 +1749,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 1b8649ffc3e2f..be08f921dafe7 100644 --- a/pcsx2/GS/GS.cpp +++ b/pcsx2/GS/GS.cpp @@ -163,7 +163,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 @@ -190,7 +190,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; @@ -1171,7 +1171,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 0f909f90d252a..9f6bf9bb0d4e3 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(); @@ -687,7 +687,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