From a2d6a5f88528ea4cacb9fc981c060e4613089229 Mon Sep 17 00:00:00 2001 From: Duncan Hopkins Date: Wed, 2 Jun 2021 10:28:32 +0100 Subject: [PATCH] zink: Fix MacOS compiling issues Add a moltenvk-dir build option to supply the MacOS Vulkan SDK MoltenVK location. Force compiler, for zink only, into object-c mode when MoltenVK is used to allow for the MacOS ioSurface and CAMetalLayer types that the headers expose. Reviewed-by: Erik Faye-Lund Part-of: --- meson.build | 1 + meson_options.txt | 6 ++++++ src/gallium/drivers/zink/meson.build | 11 ++++++++++- src/gallium/drivers/zink/zink_batch.c | 3 +++ src/gallium/drivers/zink/zink_resource.c | 3 +++ 5 files changed, 23 insertions(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 00bf9cc1456..33db495afcc 100644 --- a/meson.build +++ b/meson.build @@ -51,6 +51,7 @@ pre_args = [ c_args = [] cpp_args = [] +with_moltenvk_dir = get_option('moltenvk-dir') with_vulkan_icd_dir = get_option('vulkan-icd-dir') with_tests = get_option('build-tests') with_aco_tests = get_option('build-aco-tests') diff --git a/meson_options.txt b/meson_options.txt index fa6a9809e11..11feb3f6763 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -223,6 +223,12 @@ option( value : '', description : 'Location relative to prefix to put vulkan icds on install. Default: $datadir/vulkan/icd.d' ) +option( + 'moltenvk-dir', + type : 'string', + value : '', + description : 'Location of the MoltenVk SDK. Default: ' +) option( 'vulkan-layers', type : 'array', diff --git a/src/gallium/drivers/zink/meson.build b/src/gallium/drivers/zink/meson.build index dc029088fdb..90f743ca6eb 100644 --- a/src/gallium/drivers/zink/meson.build +++ b/src/gallium/drivers/zink/meson.build @@ -74,15 +74,24 @@ zink_nir_algebraic_c = custom_target( ) zink_c_args = [] +inc_zink_vk = [] + if with_swrast_vk zink_c_args += '-DZINK_WITH_SWRAST_VK' endif +# MoltenVK options +if with_moltenvk_dir != '' + inc_zink_vk = [inc_zink_vk, include_directories( join_paths(with_moltenvk_dir, 'include') )] + zink_c_args += ['-x','objective-c'] # Put compiler into objective-C mode to allow for MacOS types, like IOSurface and CAMetalLayer + zink_c_args += ['-iframework' , 'Foundation'] +endif + libzink = static_library( 'zink', [files_libzink, zink_device_info, zink_instance, zink_nir_algebraic_c], gnu_symbol_visibility : 'hidden', - include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_vulkan_wsi, inc_vulkan_util], + include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_vulkan_wsi, inc_vulkan_util, inc_zink_vk], dependencies: [dep_vulkan, idep_nir_headers, idep_mesautil], c_args: zink_c_args, ) diff --git a/src/gallium/drivers/zink/zink_batch.c b/src/gallium/drivers/zink/zink_batch.c index 846a91f5424..799ba1a4cf4 100644 --- a/src/gallium/drivers/zink/zink_batch.c +++ b/src/gallium/drivers/zink/zink_batch.c @@ -14,6 +14,9 @@ #include "util/u_debug.h" #include "util/set.h" +#ifdef VK_USE_PLATFORM_METAL_EXT +#include "QuartzCore/CAMetalLayer.h" +#endif #include "wsi_common.h" void diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index 60db3c8a15d..1e811f6703d 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -29,6 +29,9 @@ #include "zink_program.h" #include "zink_screen.h" +#ifdef VK_USE_PLATFORM_METAL_EXT +#include "QuartzCore/CAMetalLayer.h" +#endif #include "vulkan/wsi/wsi_common.h" #include "util/slab.h"