mirror of https://github.com/PCSX2/pcsx2.git
GS: Add Metal renderer to settings
This commit is contained in:
parent
5ecaa9459d
commit
c0628a64a6
|
@ -121,6 +121,7 @@ enum class GSRendererType : s8
|
||||||
OGL = 12,
|
OGL = 12,
|
||||||
SW = 13,
|
SW = 13,
|
||||||
VK = 14,
|
VK = 14,
|
||||||
|
Metal = 17,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class GSInterlaceMode : u8
|
enum class GSInterlaceMode : u8
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include "Renderers/Null/GSRendererNull.h"
|
#include "Renderers/Null/GSRendererNull.h"
|
||||||
#include "Renderers/Null/GSDeviceNull.h"
|
#include "Renderers/Null/GSDeviceNull.h"
|
||||||
#include "Renderers/OpenGL/GSDeviceOGL.h"
|
#include "Renderers/OpenGL/GSDeviceOGL.h"
|
||||||
|
#include "Renderers/Metal/GSMetalCPPAccessible.h"
|
||||||
#include "Renderers/HW/GSRendererNew.h"
|
#include "Renderers/HW/GSRendererNew.h"
|
||||||
#include "Renderers/HW/GSTextureReplacements.h"
|
#include "Renderers/HW/GSTextureReplacements.h"
|
||||||
#include "GSLzma.h"
|
#include "GSLzma.h"
|
||||||
|
@ -166,6 +167,10 @@ static HostDisplay::RenderAPI GetAPIForRenderer(GSRendererType renderer)
|
||||||
case GSRendererType::VK:
|
case GSRendererType::VK:
|
||||||
return HostDisplay::RenderAPI::Vulkan;
|
return HostDisplay::RenderAPI::Vulkan;
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
case GSRendererType::Metal:
|
||||||
|
return HostDisplay::RenderAPI::Metal;
|
||||||
|
#endif
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
case GSRendererType::DX11:
|
case GSRendererType::DX11:
|
||||||
case GSRendererType::SW:
|
case GSRendererType::SW:
|
||||||
|
@ -189,7 +194,11 @@ static bool DoGSOpen(GSRendererType renderer, u8* basemem)
|
||||||
g_gs_device = std::make_unique<GSDevice11>();
|
g_gs_device = std::make_unique<GSDevice11>();
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __APPLE__
|
||||||
|
case HostDisplay::RenderAPI::Metal:
|
||||||
|
g_gs_device = std::unique_ptr<GSDevice>(MakeGSDeviceMTL());
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
case HostDisplay::RenderAPI::OpenGL:
|
case HostDisplay::RenderAPI::OpenGL:
|
||||||
case HostDisplay::RenderAPI::OpenGLES:
|
case HostDisplay::RenderAPI::OpenGLES:
|
||||||
g_gs_device = std::make_unique<GSDeviceOGL>();
|
g_gs_device = std::make_unique<GSDeviceOGL>();
|
||||||
|
@ -1180,6 +1189,9 @@ void GSApp::Init()
|
||||||
m_gs_renderers.push_back(GSSetting(static_cast<u32>(GSRendererType::Auto), "Automatic", ""));
|
m_gs_renderers.push_back(GSSetting(static_cast<u32>(GSRendererType::Auto), "Automatic", ""));
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
m_gs_renderers.push_back(GSSetting(static_cast<u32>(GSRendererType::DX11), "Direct3D 11", ""));
|
m_gs_renderers.push_back(GSSetting(static_cast<u32>(GSRendererType::DX11), "Direct3D 11", ""));
|
||||||
|
#endif
|
||||||
|
#ifdef __APPLE__
|
||||||
|
m_gs_renderers.push_back(GSSetting(static_cast<u32>(GSRendererType::Metal), "Metal", ""));
|
||||||
#endif
|
#endif
|
||||||
m_gs_renderers.push_back(GSSetting(static_cast<u32>(GSRendererType::OGL), "OpenGL", ""));
|
m_gs_renderers.push_back(GSSetting(static_cast<u32>(GSRendererType::OGL), "OpenGL", ""));
|
||||||
#ifdef ENABLE_VULKAN
|
#ifdef ENABLE_VULKAN
|
||||||
|
|
|
@ -190,6 +190,9 @@ CRCHackLevel GSUtil::GetRecommendedCRCHackLevel(GSRendererType type)
|
||||||
|
|
||||||
GSRendererType GSUtil::GetPreferredRenderer()
|
GSRendererType GSUtil::GetPreferredRenderer()
|
||||||
{
|
{
|
||||||
|
#ifdef __APPLE__
|
||||||
|
return GSRendererType::Metal;
|
||||||
|
#endif
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if (D3D::ShouldPreferD3D())
|
if (D3D::ShouldPreferD3D())
|
||||||
return GSRendererType::DX11;
|
return GSRendererType::DX11;
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include "Frontend/D3D11HostDisplay.h"
|
#include "Frontend/D3D11HostDisplay.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "GS/Renderers/Metal/GSMetalCPPAccessible.h"
|
||||||
|
|
||||||
#ifdef ENABLE_VULKAN
|
#ifdef ENABLE_VULKAN
|
||||||
#include "Frontend/VulkanHostDisplay.h"
|
#include "Frontend/VulkanHostDisplay.h"
|
||||||
|
@ -694,6 +695,11 @@ void Dialog::RendererChange()
|
||||||
case GSRendererType::VK:
|
case GSRendererType::VK:
|
||||||
list = VulkanHostDisplay::StaticGetAdapterAndModeList(nullptr);
|
list = VulkanHostDisplay::StaticGetAdapterAndModeList(nullptr);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef __APPLE__
|
||||||
|
case GSRendererType::Metal:
|
||||||
|
list = GetMetalAdapterAndModeList();
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -774,7 +780,7 @@ void Dialog::Update()
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// cross-tab dependencies yay
|
// cross-tab dependencies yay
|
||||||
const bool is_hw = renderer == GSRendererType::OGL || renderer == GSRendererType::DX11 || renderer == GSRendererType::VK;
|
const bool is_hw = renderer == GSRendererType::OGL || renderer == GSRendererType::DX11 || renderer == GSRendererType::VK || renderer == GSRendererType::Metal;
|
||||||
const bool is_upscale = m_renderer_panel->m_internal_resolution->GetSelection() != 0;
|
const bool is_upscale = m_renderer_panel->m_internal_resolution->GetSelection() != 0;
|
||||||
m_hacks_panel->m_is_native_res = !is_hw || !is_upscale;
|
m_hacks_panel->m_is_native_res = !is_hw || !is_upscale;
|
||||||
m_hacks_panel->m_is_hardware = is_hw;
|
m_hacks_panel->m_is_hardware = is_hw;
|
||||||
|
|
|
@ -143,6 +143,10 @@ std::unique_ptr<HostDisplay> HostDisplay::CreateDisplayForAPI(RenderAPI api)
|
||||||
case RenderAPI::D3D11:
|
case RenderAPI::D3D11:
|
||||||
return std::make_unique<D3D11HostDisplay>();
|
return std::make_unique<D3D11HostDisplay>();
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __APPLE__
|
||||||
|
case HostDisplay::RenderAPI::Metal:
|
||||||
|
return std::unique_ptr<HostDisplay>(MakeMetalHostDisplay());
|
||||||
|
#endif
|
||||||
|
|
||||||
case RenderAPI::OpenGL:
|
case RenderAPI::OpenGL:
|
||||||
case RenderAPI::OpenGLES:
|
case RenderAPI::OpenGLES:
|
||||||
|
|
|
@ -271,6 +271,7 @@ const char* Pcsx2Config::GSOptions::GetRendererName(GSRendererType type)
|
||||||
{
|
{
|
||||||
case GSRendererType::Auto: return "Auto";
|
case GSRendererType::Auto: return "Auto";
|
||||||
case GSRendererType::DX11: return "Direct3D 11";
|
case GSRendererType::DX11: return "Direct3D 11";
|
||||||
|
case GSRendererType::Metal: return "Metal";
|
||||||
case GSRendererType::OGL: return "OpenGL";
|
case GSRendererType::OGL: return "OpenGL";
|
||||||
case GSRendererType::VK: return "Vulkan";
|
case GSRendererType::VK: return "Vulkan";
|
||||||
case GSRendererType::SW: return "Software";
|
case GSRendererType::SW: return "Software";
|
||||||
|
@ -637,7 +638,7 @@ void Pcsx2Config::GSOptions::MaskUpscalingHacks()
|
||||||
|
|
||||||
bool Pcsx2Config::GSOptions::UseHardwareRenderer() const
|
bool Pcsx2Config::GSOptions::UseHardwareRenderer() const
|
||||||
{
|
{
|
||||||
return (Renderer == GSRendererType::DX11 || Renderer == GSRendererType::OGL || Renderer == GSRendererType::VK);
|
return (Renderer == GSRendererType::DX11 || Renderer == GSRendererType::OGL || Renderer == GSRendererType::VK || Renderer == GSRendererType::Metal);
|
||||||
}
|
}
|
||||||
|
|
||||||
VsyncMode Pcsx2Config::GetEffectiveVsyncMode() const
|
VsyncMode Pcsx2Config::GetEffectiveVsyncMode() const
|
||||||
|
|
|
@ -129,6 +129,8 @@ Dialogs::GSDumpDialog::GSDumpDialog(wxWindow* parent)
|
||||||
#endif
|
#endif
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
rdoverrides.Add(Pcsx2Config::GSOptions::GetRendererName(GSRendererType::DX11));
|
rdoverrides.Add(Pcsx2Config::GSOptions::GetRendererName(GSRendererType::DX11));
|
||||||
|
#elif defined(__APPLE__)
|
||||||
|
rdoverrides.Add(Pcsx2Config::GSOptions::GetRendererName(GSRendererType::Metal));
|
||||||
#endif
|
#endif
|
||||||
m_renderer_overrides->Create(this, wxID_ANY, "Renderer overrides", wxDefaultPosition, wxDefaultSize, rdoverrides, 1);
|
m_renderer_overrides->Create(this, wxID_ANY, "Renderer overrides", wxDefaultPosition, wxDefaultSize, rdoverrides, 1);
|
||||||
|
|
||||||
|
@ -829,18 +831,21 @@ void Dialogs::GSDumpDialog::GSThread::ExecuteTaskInThread()
|
||||||
case 2:
|
case 2:
|
||||||
renderer = GSRendererType::OGL;
|
renderer = GSRendererType::OGL;
|
||||||
break;
|
break;
|
||||||
|
case 3:
|
||||||
#ifdef ENABLE_VULKAN
|
#ifdef ENABLE_VULKAN
|
||||||
// Vulkan
|
// Vulkan
|
||||||
case 3:
|
|
||||||
renderer = GSRendererType::VK;
|
renderer = GSRendererType::VK;
|
||||||
break;
|
break;
|
||||||
|
case 4:
|
||||||
#endif
|
#endif
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// D3D11
|
// D3D11
|
||||||
case 4: // WIN32 implies WITH_VULKAN so this is okay
|
|
||||||
renderer = GSRendererType::DX11;
|
renderer = GSRendererType::DX11;
|
||||||
break;
|
#elif defined(__APPLE__)
|
||||||
|
// Metal
|
||||||
|
renderer = GSRendererType::Metal;
|
||||||
#endif
|
#endif
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue