Add back CMake build config for macOS (#2729)

Co-authored-by: Andrew Calcutt <acalcutt@techidiots.net>
This commit is contained in:
Bart Louwers
2024-08-22 01:13:42 +02:00
committed by GitHub
parent a4258ccbb8
commit d377bcc5ba
12 changed files with 305 additions and 61 deletions

View File

@@ -80,5 +80,3 @@ jobs:
- name: Generate Xcode project for macOS
run: bazel run //platform/macos:xcodeproj --@rules_xcodeproj//xcodeproj:extra_common_flags="--//:renderer=metal"

View File

@@ -78,12 +78,10 @@ jobs:
arch: x86_64
- runs-on: [self-hosted, linux, ARM64]
arch: arm64
# Disabled until Metal backend is complete
# A release for macOS can be made from the opengl-2 branch
# - runs-on: macos-12
# arch: x86_64
# - runs-on: macos-13-xlarge
# arch: arm64
- runs-on: macos-14
arch: arm64
- runs-on: macos-14-large
arch: x86_64
- runs-on: windows-2022
arch: x86_64
continue-on-error: true
@@ -209,7 +207,12 @@ jobs:
-G Ninja \
-DCMAKE_BUILD_TYPE=${{ env.BUILDTYPE }} \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DMLN_WITH_NODE=ON
-DMLN_WITH_NODE=ON \
-DMLN_WITH_OPENGL=OFF \
-DMLN_WITH_METAL=ON \
-DMLN_LEGACY_RENDERER=OFF \
-DMLN_DRAWABLE_RENDERER=ON \
-DMLN_WITH_WERROR=OFF
- name: Configure maplibre-native (Linux)
if: runner.os == 'Linux'
@@ -261,13 +264,17 @@ jobs:
- name: Run render tests on macOS
if: runner.os == 'macOS'
run: set -o pipefail && ./build/mbgl-render-test-runner --manifestPath metrics/macos-xcode11-release-style.json
# A few are failing
# https://github.com/maplibre/maplibre-native/issues/2741
# Almost all are failing on Intel GitHub runners (but only on CI)
continue-on-error: true
run: ./build/mbgl-render-test-runner --manifestPath metrics/macos-xcode11-release-style.json
- name: Upload render test artifacts (MacOS)
if: runner.os == 'MacOS'
uses: actions/upload-artifact@v4
with:
name: render-query-test-results
name: render-query-test-results_${{ runner.os }}_${{ matrix.arch }}
path: metrics/macos-xcode11-release-style.html
- name: Test (Linux)
@@ -277,6 +284,7 @@ jobs:
- name: Test (MacOS)
if: runner.os == 'MacOS'
continue-on-error: true # flaky on CI
working-directory: platform/node
run: npm test

View File

@@ -1166,22 +1166,16 @@ if(MLN_WITH_OPENGL)
${PROJECT_SOURCE_DIR}/src/mbgl/gl/uniform_block_gl.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/uniform_buffer_gl.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/gl/vertex_attribute_gl.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/style/layers/custom_drawable_layer.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/layermanager/custom_drawable_layer_factory.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/style/layers/custom_drawable_layer_impl.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/style/layers/custom_drawable_layer_impl.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/render_custom_drawable_layer.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/render_custom_drawable_layer.hpp
)
endif()
endif()
if(MBGL_WITH_METAL)
if(MLN_WITH_METAL)
message(STATUS "Configuring Metal renderer backend")
target_compile_definitions(
mbgl-core
PRIVATE
MBGL_RENDER_BACKEND_METAL=1
PRIVATE MLN_RENDER_BACKEND_METAL=1
PUBLIC
"MLN_USE_UNORDERED_DENSE=$<BOOL:${MLN_USE_UNORDERED_DENSE}>"
)
list(APPEND
@@ -1251,28 +1245,33 @@ if(MBGL_WITH_METAL)
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/vertex_attribute.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/mtl/vertex_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/shader_program.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/background.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/background_pattern.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/circle.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/collision_box.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/collision_circle.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/clipping_mask.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/custom_symbol_icon.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/debug.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/fill.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/fill_extrusion.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/fill_extrusion_pattern.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/heatmap.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/heatmap_texture.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/hillshade.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/hillshade_prepare.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/line.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/raster.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/symbol_icon.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/symbol_sdf.cpp
${PROJECT_SOURCE_DIR}src/mbgl/shaders/mtl/symbol_text_and_icon.cpp
]
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/background.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/background_pattern.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/circle.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/collision_box.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/collision_circle.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/clipping_mask.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/custom_symbol_icon.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/debug.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/fill.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/fill_extrusion.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/fill_extrusion_pattern.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/heatmap.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/heatmap_texture.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/hillshade.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/hillshade_prepare.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/line.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/raster.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/symbol_icon.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/symbol_sdf.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/symbol_text_and_icon.cpp
)
find_library(METAL_FRAMEWORK Metal)
if (METAL_FRAMEWORK)
target_link_libraries(mbgl-core PRIVATE ${METAL_FRAMEWORK})
endif()
endif()
if(MLN_WITH_VULKAN)
@@ -1352,8 +1351,9 @@ if(MLN_WITH_VULKAN)
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/raster.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/symbol.cpp
)
endif()
#TODO merge with MLN_DRAWABLE_RENDERER? These are added only for GL path
if(MLN_DRAWABLE_RENDERER)
list(APPEND
SRC_FILES
${PROJECT_SOURCE_DIR}/src/mbgl/style/layers/custom_drawable_layer.cpp
@@ -1439,6 +1439,8 @@ include(${PROJECT_SOURCE_DIR}/vendor/tracy.cmake)
include(${PROJECT_SOURCE_DIR}/vendor/unique_resource.cmake)
include(${PROJECT_SOURCE_DIR}/vendor/vector-tile.cmake)
include(${PROJECT_SOURCE_DIR}/vendor/wagyu.cmake)
include(${PROJECT_SOURCE_DIR}/vendor/metal-cpp.cmake)
add_subdirectory(${PROJECT_SOURCE_DIR}/vendor/unordered_dense)
set_target_properties(
@@ -1469,6 +1471,7 @@ target_link_libraries(
mbgl-vendor-unique_resource
mbgl-vendor-vector-tile
mbgl-vendor-wagyu
$<$<BOOL:${MLN_WITH_METAL}>:mbgl-vendor-metal-cpp>
PUBLIC
Mapbox::Base
Mapbox::Base::Extras::expected-lite
@@ -1507,6 +1510,7 @@ export(TARGETS
mbgl-vendor-unique_resource
mbgl-vendor-vector-tile
mbgl-vendor-wagyu
mbgl-vendor-metal-cpp
unordered_dense
FILE MapboxCoreTargets.cmake
@@ -1553,6 +1557,8 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL Android)
include(${PROJECT_SOURCE_DIR}/platform/android/android.cmake)
elseif(CMAKE_SYSTEM_NAME STREQUAL Linux)
include(${PROJECT_SOURCE_DIR}/platform/linux/linux.cmake)
elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
include(${PROJECT_SOURCE_DIR}/platform/macos/macos.cmake)
elseif(WIN32)
include(${PROJECT_SOURCE_DIR}/platform/windows/windows.cmake)
else()

View File

@@ -127,7 +127,7 @@ public:
virtual bool emplaceOrUpdateUniformBuffer(gfx::UniformBufferPtr&,
const void* data,
std::size_t size,
bool persistent);
bool persistent) override;
/// Get an empty buffer to act as a placeholder
const BufferResource& getEmptyBuffer();

View File

@@ -59,6 +59,26 @@ if(MLN_WITH_VULKAN)
)
endif()
if(MLN_WITH_METAL)
target_sources(
mbgl-glfw
PRIVATE
${PROJECT_SOURCE_DIR}/platform/glfw/glfw_metal_backend.mm
${PROJECT_SOURCE_DIR}/platform/glfw/metal_backend.mm
${PROJECT_SOURCE_DIR}/platform/glfw/glfw_metal_backend.h
${PROJECT_SOURCE_DIR}/platform/glfw/metal_backend.h
)
target_compile_definitions(
mbgl-glfw
PRIVATE MLN_RENDER_BACKEND_METAL=1
)
target_link_libraries(
mbgl-glfw
PRIVATE
mbgl-vendor-metal-cpp
)
endif()
target_include_directories(
mbgl-glfw
PRIVATE
@@ -113,6 +133,8 @@ if(NOT WIN32 AND MLN_WITH_OPENGL)
)
endif()
set_property(TARGET mbgl-glfw PROPERTY FOLDER MapLibre)
install(TARGETS mbgl-glfw RUNTIME DESTINATION bin)

View File

@@ -218,7 +218,7 @@ GLFWView::GLFWView(bool fullscreen_,
#ifdef __APPLE__
int fbW, fbH;
glfwGetFramebufferSize(window, &fbW, &fbH);
backend->setSize({fbW, fbH});
backend->setSize({static_cast<uint32_t>(fbW), static_cast<uint32_t>(fbH)});
#endif
pixelRatio = static_cast<float>(backend->getSize().width) / width;
@@ -900,7 +900,7 @@ void GLFWView::onWindowResize(GLFWwindow *window, int width, int height) {
#ifdef __APPLE__
int fbW, fbH;
glfwGetFramebufferSize(window, &fbW, &fbH);
view->backend->setSize({fbW, fbH});
view->backend->setSize({static_cast<uint32_t>(fbW), static_cast<uint32_t>(fbH)});
#endif
}

View File

@@ -22,7 +22,7 @@ public:
void setBackendSize(mbgl::Size size_) {
size = size_;
swapchain->setDrawableSize({size.width, size.height});
swapchain->setDrawableSize({static_cast<CGFloat>(size.width), static_cast<CGFloat>(size.height)});
buffersInvalid = true;
}

181
platform/macos/macos.cmake Normal file
View File

@@ -0,0 +1,181 @@
cmake_minimum_required(VERSION 3.19)
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15")
# Override default CMake NATIVE_ARCH_ACTUAL
# https://gitlab.kitware.com/cmake/cmake/-/issues/20893
# https://stackoverflow.com/a/22689917/5531400
if(CMAKE_GENERATOR STREQUAL Xcode)
set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD)")
endif()
set_target_properties(mbgl-core PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] "YES")
set_target_properties(mbgl-core PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)
if(MLN_WITH_OPENGL)
find_package(OpenGL REQUIRED)
target_compile_definitions(
mbgl-core
PUBLIC GL_SILENCE_DEPRECATION
)
target_sources(
mbgl-core
PRIVATE
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gl/headless_backend.cpp
${PROJECT_SOURCE_DIR}/platform/darwin/src/gl_functions.cpp ${PROJECT_SOURCE_DIR}/platform/darwin/src/headless_backend_cgl.mm
)
target_link_libraries(
mbgl-core
PRIVATE OpenGL::GL
)
endif()
if(MLN_WITH_METAL)
find_package(OpenGL REQUIRED)
target_sources(
mbgl-core
PRIVATE
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/mtl/headless_backend.cpp
)
endif()
target_sources(
mbgl-core
PRIVATE
${PROJECT_SOURCE_DIR}/platform/darwin/src/async_task.cpp
${PROJECT_SOURCE_DIR}/platform/darwin/src/collator.mm
${PROJECT_SOURCE_DIR}/platform/darwin/src/http_file_source.mm
${PROJECT_SOURCE_DIR}/platform/darwin/src/image.mm
${PROJECT_SOURCE_DIR}/platform/darwin/src/local_glyph_rasterizer.mm
${PROJECT_SOURCE_DIR}/platform/darwin/src/logging_nslog.mm
${PROJECT_SOURCE_DIR}/platform/darwin/src/native_apple_interface.m
${PROJECT_SOURCE_DIR}/platform/darwin/src/nsthread.mm
${PROJECT_SOURCE_DIR}/platform/darwin/src/number_format.mm
${PROJECT_SOURCE_DIR}/platform/darwin/src/run_loop.cpp
${PROJECT_SOURCE_DIR}/platform/darwin/src/string_nsstring.mm
${PROJECT_SOURCE_DIR}/platform/darwin/src/timer.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gfx/headless_backend.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gfx/headless_frontend.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/layermanager/layer_manager.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/map/map_snapshotter.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/platform/time.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/asset_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/mbtiles_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/database_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/file_source_manager.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/file_source_request.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/local_file_request.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/local_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/main_resource_loader.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/offline.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/offline_database.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/offline_download.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/online_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/sqlite3.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/text/bidi.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/compression.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/filesystem.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/monotonic_timer.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/png_writer.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/thread_local.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/util/utf.cpp
)
target_compile_options(mbgl-core PRIVATE -fobjc-arc)
# FIXME: Should not be needed, but now needed by node because of the headless frontend.
target_include_directories(
mbgl-core
PUBLIC ${PROJECT_SOURCE_DIR}/platform/default/include
)
target_include_directories(
mbgl-core
PRIVATE
${PROJECT_SOURCE_DIR}/platform/darwin/include ${PROJECT_SOURCE_DIR}/platform/darwin/src ${PROJECT_SOURCE_DIR}/platform/macos/src
)
include(${PROJECT_SOURCE_DIR}/vendor/icu.cmake)
target_link_libraries(
mbgl-core
PRIVATE
"-framework AppKit"
"-framework CoreGraphics"
"-framework CoreLocation"
"-framework SystemConfiguration"
mbgl-vendor-icu
sqlite3
z
)
add_subdirectory(${PROJECT_SOURCE_DIR}/bin)
add_subdirectory(${PROJECT_SOURCE_DIR}/expression-test)
add_subdirectory(${PROJECT_SOURCE_DIR}/platform/glfw)
if(MLN_WITH_NODE)
add_subdirectory(${PROJECT_SOURCE_DIR}/platform/node)
endif()
add_executable(
mbgl-test-runner
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/test/main.cpp
)
target_include_directories(
mbgl-test-runner
PUBLIC ${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/test/include
)
target_compile_definitions(
mbgl-test-runner
PRIVATE WORK_DIRECTORY=${PROJECT_SOURCE_DIR}
)
target_link_libraries(
mbgl-test-runner
PRIVATE mbgl-compiler-options -Wl,-force_load mbgl-test
)
add_executable(
mbgl-benchmark-runner
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/benchmark/main.cpp
)
target_include_directories(
mbgl-benchmark-runner
PUBLIC ${PROJECT_SOURCE_DIR}/benchmark/include
)
target_link_libraries(
mbgl-benchmark-runner
PRIVATE mbgl-compiler-options -Wl,-force_load mbgl-benchmark
)
add_executable(
mbgl-render-test-runner
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/render-test/main.cpp
)
target_link_libraries(
mbgl-render-test-runner
PRIVATE mbgl-compiler-options mbgl-render-test
)
set_property(TARGET mbgl-benchmark-runner PROPERTY FOLDER Executables)
set_property(TARGET mbgl-test-runner PROPERTY FOLDER Executables)
set_property(TARGET mbgl-render-test-runner PROPERTY FOLDER Executables)
set_target_properties(mbgl-benchmark-runner mbgl-test-runner mbgl-render-test-runner PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] "YES")
# Disable benchmarks in CI as they run in VM environment
if(NOT DEFINED ENV{CI})
add_test(NAME mbgl-benchmark-runner COMMAND mbgl-benchmark-runner WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
endif()
add_test(
NAME mbgl-test-runner
COMMAND
node
${PROJECT_SOURCE_DIR}/test/storage/with-server.js
${PROJECT_SOURCE_DIR}/test/storage/server.js
$<TARGET_FILE:mbgl-test-runner>
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})

View File

@@ -82,15 +82,16 @@ size_t Texture2D::numChannels() const noexcept {
}
MTL::PixelFormat Texture2D::getMetalPixelFormat() const noexcept {
// On iOS simulator, we need to use the combined depth/stencil format. If the depth and stencil
// On iOS simulator and x86-64, we need to use the combined depth/stencil format. If the depth and stencil
// formats are both set on a render pipeline, they have to be identical or we'll get, e.g.:
// validateWithDevice:4343: failed assertion `Render Pipeline Descriptor Validation
// depthAttachmentPixelFormat (MTLPixelFormatDepth32Float) and
// stencilAttachmentPixelFormat (MTLPixelFormatStencil8) must match.
#if TARGET_OS_SIMULATOR
if (channelType == gfx::TextureChannelDataType::Float && pixelFormat == gfx::TexturePixelType::Depth &&
(usage & MTL::TextureUsageRenderTarget)) {
#if TARGET_OS_SIMULATOR || defined(__x86_64__)
if ((channelType == gfx::TextureChannelDataType::Float ||
channelType == gfx::TextureChannelDataType::UnsignedByte) &&
(pixelFormat == gfx::TexturePixelType::Depth || pixelFormat == gfx::TexturePixelType::Stencil)) {
return MTL::PixelFormatDepth32Float_Stencil8;
}
#endif
@@ -151,7 +152,7 @@ void Texture2D::createMetalTexture() noexcept {
if (auto textureDescriptor = NS::RetainPtr(
MTL::TextureDescriptor::texture2DDescriptor(format, size.width, size.height, /*mipmapped=*/false))) {
textureDescriptor->setUsage(usage);
#if TARGET_OS_SIMULATOR
#if TARGET_OS_SIMULATOR || defined(__x86_64__)
switch (format) {
case MTL::PixelFormatDepth16Unorm:
case MTL::PixelFormatDepth32Float:
@@ -160,7 +161,7 @@ void Texture2D::createMetalTexture() noexcept {
case MTL::PixelFormatDepth32Float_Stencil8:
case MTL::PixelFormatX32_Stencil8:
case MTL::PixelFormatX24_Stencil8:
// On iOS simulator, the default shared mode is invalid for depth and stencil textures.
// On iOS simulator and x86-64, the default shared mode is invalid for depth and stencil textures.
// 'Texture Descriptor Validation MTLTextureDescriptor: Depth, Stencil, DepthStencil
// textures cannot be allocated with MTLStorageModeShared on this device.
textureDescriptor->setStorageMode(MTL::StorageMode::StorageModePrivate);

View File

@@ -192,7 +192,7 @@ void PaintParameters::renderTileClippingMasks(const RenderTiles& renderTiles) {
}
tileUBOs.emplace_back(shaders::ClipUBO{/*.matrix=*/util::cast<float>(matrixForTile(tileID)),
/*.stencil_ref=*/stencilID,
/*.stencil_ref=*/static_cast<uint32_t>(stencilID),
/*.pad=*/0,
0,
0});

View File

@@ -160,6 +160,13 @@ if(MLN_WITH_VULKAN)
)
endif()
if(MLN_WITH_METAL)
target_compile_definitions(
mbgl-test
PRIVATE MLN_RENDER_BACKEND_METAL=1
)
endif()
if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL Android)
message("Target platform does not support HTTP tests or dependencies not found.")

21
vendor/metal-cpp.cmake vendored Normal file
View File

@@ -0,0 +1,21 @@
if(TARGET mbgl-vendor-metal-cpp)
return()
endif()
add_library(
mbgl-vendor-metal-cpp INTERFACE
)
target_include_directories(
mbgl-vendor-metal-cpp SYSTEM
INTERFACE ${CMAKE_CURRENT_LIST_DIR}/metal-cpp
)
set_target_properties(
mbgl-vendor-metal-cpp
PROPERTIES
INTERFACE_MAPBOX_NAME "metal-cpp"
INTERFACE_MAPBOX_URL "https://developer.apple.com/metal/cpp/"
INTERFACE_MAPBOX_AUTHOR "Apple"
INTERFACE_MAPBOX_LICENSE ${CMAKE_CURRENT_LIST_DIR}/metal-cpp/LICENSE.txt
)