Enable using MoltenVK on macOS (#2846)
Co-authored-by: Adrian Cojocaru <adrian.cojocaru92@yahoo.com>
This commit is contained in:
@@ -3,13 +3,14 @@
|
||||
#include <mbgl/gfx/renderer_backend.hpp>
|
||||
#include <mbgl/gfx/context.hpp>
|
||||
|
||||
#define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1
|
||||
|
||||
#ifdef _WIN32
|
||||
#define VK_USE_PLATFORM_WIN32_KHR
|
||||
#elif defined(__ANDROID__)
|
||||
#define VK_USE_PLATFORM_ANDROID_KHR
|
||||
#endif
|
||||
|
||||
#define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1
|
||||
#include <vulkan/vulkan.hpp>
|
||||
|
||||
#define VMA_VULKAN_VERSION 1000000
|
||||
|
||||
@@ -215,7 +215,7 @@ GLFWView::GLFWView(bool fullscreen_,
|
||||
bool capFrameRate = !benchmark; // disable VSync in benchmark mode
|
||||
backend = GLFWBackend::Create(window, capFrameRate);
|
||||
|
||||
#ifdef __APPLE__
|
||||
#if defined(__APPLE__) && !defined(MLN_RENDER_BACKEND_VULKAN)
|
||||
int fbW, fbH;
|
||||
glfwGetFramebufferSize(window, &fbW, &fbH);
|
||||
backend->setSize({static_cast<uint32_t>(fbW), static_cast<uint32_t>(fbH)});
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.19)
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15")
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET "14.3")
|
||||
|
||||
# Override default CMake NATIVE_ARCH_ACTUAL
|
||||
# https://gitlab.kitware.com/cmake/cmake/-/issues/20893
|
||||
@@ -40,6 +40,26 @@ if(MLN_WITH_METAL)
|
||||
)
|
||||
endif()
|
||||
|
||||
if(MLN_WITH_VULKAN)
|
||||
find_package(Vulkan REQUIRED)
|
||||
|
||||
target_sources(
|
||||
mbgl-core
|
||||
PRIVATE
|
||||
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/vulkan/headless_backend.cpp
|
||||
)
|
||||
|
||||
if(Vulkan_FOUND)
|
||||
get_filename_component(Vulkan_LIBRARY_DIR ${Vulkan_LIBRARY} DIRECTORY)
|
||||
set(CMAKE_INSTALL_RPATH ${Vulkan_LIBRARY_DIR})
|
||||
else()
|
||||
set(CMAKE_INSTALL_RPATH "/usr/local/lib/")
|
||||
message(STATUS "Vulkan SDK not found! Using default homebrew install path")
|
||||
endif()
|
||||
|
||||
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
||||
endif()
|
||||
|
||||
target_sources(
|
||||
mbgl-core
|
||||
PRIVATE
|
||||
|
||||
@@ -102,11 +102,21 @@ std::vector<const char*> RendererBackend::getLayers() {
|
||||
}
|
||||
|
||||
std::vector<const char*> RendererBackend::getInstanceExtensions() {
|
||||
return {};
|
||||
return {
|
||||
#ifdef __APPLE__
|
||||
"VK_KHR_portability_enumeration"
|
||||
#endif
|
||||
};
|
||||
}
|
||||
|
||||
std::vector<const char*> RendererBackend::getDeviceExtensions() {
|
||||
return getDefaultRenderable().getResource<SurfaceRenderableResource>().getDeviceExtensions();
|
||||
auto extensions = getDefaultRenderable().getResource<SurfaceRenderableResource>().getDeviceExtensions();
|
||||
|
||||
#ifdef __APPLE__
|
||||
extensions.push_back("VK_KHR_portability_subset");
|
||||
#endif
|
||||
|
||||
return extensions;
|
||||
}
|
||||
|
||||
std::vector<const char*> RendererBackend::getDebugExtensions() {
|
||||
@@ -323,8 +333,14 @@ void RendererBackend::initInstance() {
|
||||
|
||||
// Vulkan 1.1 on Android is supported on 71% of devices (compared to 1.3 with 6%) as of April 23 2024
|
||||
// https://vulkan.gpuinfo.org/
|
||||
#ifdef __APPLE__
|
||||
vk::InstanceCreateFlags instanceFlags = vk::InstanceCreateFlagBits::eEnumeratePortabilityKHR;
|
||||
#else
|
||||
vk::InstanceCreateFlags instanceFlags = {};
|
||||
#endif
|
||||
|
||||
vk::ApplicationInfo appInfo("maplibre-native", 1, "maplibre-native", 1, VK_API_VERSION_1_0);
|
||||
vk::InstanceCreateInfo createInfo(vk::InstanceCreateFlags(), &appInfo);
|
||||
vk::InstanceCreateInfo createInfo(instanceFlags, &appInfo);
|
||||
|
||||
const auto& layers = getLayers();
|
||||
|
||||
@@ -501,7 +517,7 @@ void RendererBackend::initDevice() {
|
||||
// TODO
|
||||
// - WideLines disabled on Android (20.77% device coverage https://vulkan.gpuinfo.org/listfeaturescore10.php)
|
||||
// - Rework this to a dynamic toggle based on MLN_TRIANGULATE_FILL_OUTLINES/MLN_ENABLE_POLYLINE_DRAWABLES
|
||||
#if !defined(__ANDROID__) && !defined(__apple__)
|
||||
#if !defined(__ANDROID__) && !defined(__APPLE__)
|
||||
if (supportedDeviceFeatures.wideLines) {
|
||||
physicalDeviceFeatures.setWideLines(true);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user