mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-06-08 03:33:14 +00:00
Add initial macOS support.
This commit is contained in:
parent
36d528743a
commit
66fa29059c
29 changed files with 523 additions and 26 deletions
|
@ -292,10 +292,14 @@ bool Instance::CreateDevice() {
|
|||
const bool has_host_time_domain =
|
||||
std::find(time_domains.cbegin(), time_domains.cend(),
|
||||
vk::TimeDomainEXT::eQueryPerformanceCounter) != time_domains.cend();
|
||||
#else
|
||||
#elif __linux__
|
||||
const bool has_host_time_domain =
|
||||
std::find(time_domains.cbegin(), time_domains.cend(),
|
||||
vk::TimeDomainEXT::eClockMonotonicRaw) != time_domains.cend();
|
||||
#else
|
||||
// Tracy limitation means only Windows and Linux can use host time domain.
|
||||
// See https://github.com/shadps4-emu/tracy/blob/c6d779d78508514102fbe1b8eb28bda10d95bb2a/public/tracy/TracyVulkan.hpp#L384-L389
|
||||
const bool has_host_time_domain = false;
|
||||
#endif
|
||||
if (has_host_time_domain) {
|
||||
static constexpr std::string_view context_name{"vk_rasterizer"};
|
||||
|
|
|
@ -16,6 +16,12 @@ class WindowSDL;
|
|||
|
||||
VK_DEFINE_HANDLE(VmaAllocator)
|
||||
|
||||
#ifdef __APPLE__
|
||||
#define VULKAN_LIBRARY_NAME "libMoltenVK.dylib"
|
||||
#else
|
||||
#define VULKAN_LIBRARY_NAME
|
||||
#endif
|
||||
|
||||
namespace Vulkan {
|
||||
|
||||
class Instance {
|
||||
|
@ -206,7 +212,7 @@ private:
|
|||
void CollectToolingInfo();
|
||||
|
||||
private:
|
||||
vk::DynamicLoader dl;
|
||||
vk::DynamicLoader dl{VULKAN_LIBRARY_NAME};
|
||||
vk::UniqueInstance instance;
|
||||
vk::PhysicalDevice physical_device;
|
||||
vk::UniqueDevice device;
|
||||
|
|
|
@ -99,6 +99,17 @@ vk::SurfaceKHR CreateSurface(vk::Instance instance, const Frontend::WindowSDL& e
|
|||
UNREACHABLE();
|
||||
}
|
||||
}
|
||||
#elif defined(VK_USE_PLATFORM_METAL_EXT)
|
||||
if (window_info.type == Frontend::WindowSystemType::Metal) {
|
||||
const vk::MetalSurfaceCreateInfoEXT macos_ci = {
|
||||
.pLayer = static_cast<const CAMetalLayer*>(window_info.render_surface),
|
||||
};
|
||||
|
||||
if (instance.createMetalSurfaceEXT(&macos_ci, nullptr, &surface) != vk::Result::eSuccess) {
|
||||
LOG_CRITICAL(Render_Vulkan, "Failed to initialize MacOS surface");
|
||||
UNREACHABLE();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!surface) {
|
||||
|
@ -135,6 +146,10 @@ std::vector<const char*> GetInstanceExtensions(Frontend::WindowSystemType window
|
|||
case Frontend::WindowSystemType::Wayland:
|
||||
extensions.push_back(VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME);
|
||||
break;
|
||||
#elif defined(VK_USE_PLATFORM_METAL_EXT)
|
||||
case Frontend::WindowSystemType::Metal:
|
||||
extensions.push_back(VK_EXT_METAL_SURFACE_EXTENSION_NAME);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
LOG_ERROR(Render_Vulkan, "Presentation not supported on this platform");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue