1+ diff --git forkSrcPrefix/meson.build forkDstPrefix/meson.build
2+ index 7572769e0e6f280391668c6797d67e37e2dea30f..e6109987a3d38025a5eede04441c03ee23413255 100644
3+ --- forkSrcPrefix/meson.build
4+ +++ forkDstPrefix/meson.build
5+ @@ -1315,6 +1315,17 @@ if features['vulkan'] and features['x11']
6+ sources += files('video/out/vulkan/context_xlib.c')
7+ endif
8+
9+ + if host_machine.system() == 'darwin'
10+ + moltenvk = get_option('moltenvk').require(
11+ + features['vulkan'],
12+ + error_message: 'vulkan or moltenvk header could not be found!',
13+ + )
14+ + features += {'moltenvk': moltenvk.allowed()}
15+ + if features['vulkan'] and features['moltenvk']
16+ + sources += files('video/out/vulkan/context_moltenvk.m')
17+ + endif
18+ + endif
19+ +
20+ features += {'vk-khr-display': vulkan.type_name() == 'internal' or
21+ cc.has_function('vkCreateDisplayPlaneSurfaceKHR', prefix: '#include <vulkan/vulkan_core.h>',
22+ dependencies: [vulkan])}
23+ diff --git forkSrcPrefix/meson.options forkDstPrefix/meson.options
24+ index dae0a333ef71b75a6bb36a236de7feebd99bda40..6ed28af20a09501b4997ca81e86bb198e75327fd 100644
25+ --- forkSrcPrefix/meson.options
26+ +++ forkDstPrefix/meson.options
27+ @@ -101,6 +101,7 @@ option('gl-dxinterop-d3d9', type: 'feature', value: 'auto', description: 'OpenGL
28+ option('ios-gl', type: 'feature', value: 'auto', description: 'iOS OpenGL ES interop support')
29+ option('videotoolbox-gl', type: 'feature', value: 'auto', description: 'Videotoolbox with OpenGL')
30+ option('videotoolbox-pl', type: 'feature', value: 'auto', description: 'Videotoolbox with libplacebo')
31+ + option('moltenvk', type: 'feature', value: 'auto', description: 'Moltenvk context')
32+
33+ # macOS features
34+ option('macos-10-15-4-features', type: 'feature', value: 'auto', description: 'macOS 10.15.4 SDK Features')
135diff --git forkSrcPrefix/video/out/vulkan/context_moltenvk.m forkDstPrefix/video/out/vulkan/context_moltenvk.m
236new file mode 100644
3- index 0000000000000000000000000000000000000000..e24572375775622c9e00f11f200bafb4bc38c4b4
37+ index 0000000000000000000000000000000000000000..445b907f795b24b8df80389394d4ae7b3f94c6e5
438--- /dev/null
539+++ forkDstPrefix/video/out/vulkan/context_moltenvk.m
640@@ -0,0 +1,96 @@
@@ -61,7 +95,7 @@ index 0000000000000000000000000000000000000000..e24572375775622c9e00f11f200bafb4
6195+ .pLayer = p->layer,
6296+ };
6397+
64- + struct ra_vk_ctx_params params = {0};
98+ + struct ra_ctx_params params = {0};
6599+
66100+ VkInstance inst = vk->vkinst->instance;
67101+ VkResult res = vkCreateMetalSurfaceEXT(inst, &info, NULL, &vk->surface);
@@ -100,9 +134,22 @@ index 0000000000000000000000000000000000000000..e24572375775622c9e00f11f200bafb4
100134+ .init = moltenvk_init,
101135+ .uninit = moltenvk_uninit,
102136+ };
103- \ No newline at end of file
137+ diff --git forkSrcPrefix/video/out/vulkan/common.h forkDstPrefix/video/out/vulkan/common.h
138+ index e75cb228f8d99462ccecf7780098ea97ae7cfe02..afc17284773204563f4c90b4860758e61068d460 100644
139+ --- forkSrcPrefix/video/out/vulkan/common.h
140+ +++ forkDstPrefix/video/out/vulkan/common.h
141+ @@ -22,6 +22,9 @@
142+ #if HAVE_WIN32_DESKTOP
143+ #define VK_USE_PLATFORM_WIN32_KHR
144+ #endif
145+ + #if HAVE_MOLTENVK
146+ + #include <MoltenVK/mvk_vulkan.h>
147+ + #endif
148+ #if HAVE_COCOA
149+ #define VK_USE_PLATFORM_METAL_EXT
150+ #endif
104151diff --git forkSrcPrefix/video/out/gpu/context.c forkDstPrefix/video/out/gpu/context.c
105- index 88d4f4232ddd3886e42ddf23dd2970b13bdd1e92..df9bd99de126d2e2371544248d528b21b99be263 100644
152+ index 75dd804005ba3a1e36375b47dcc9d9bb756ab867..4ab72a00b3dd3539a06129702e41796fd00a8af3 100644
106153--- forkSrcPrefix/video/out/gpu/context.c
107154+++ forkDstPrefix/video/out/gpu/context.c
108155@@ -50,6 +50,7 @@ extern const struct ra_ctx_fns ra_ctx_vulkan_xlib;
@@ -113,61 +160,13 @@ index 88d4f4232ddd3886e42ddf23dd2970b13bdd1e92..df9bd99de126d2e2371544248d528b21
113160
114161 /* Direct3D 11 */
115162 extern const struct ra_ctx_fns ra_ctx_d3d11;
116- @@ -91,6 +92,9 @@ static const struct ra_ctx_fns *contexts[] = {
117- // Vulkan contexts:
118- #if HAVE_VULKAN
163+ @@ -126,6 +127,9 @@ static const struct ra_ctx_fns *contexts[] = {
119164
165+ // Vulkan contexts (fallbacks):
166+ #if HAVE_VULKAN
120167+ #if HAVE_MOLTENVK
121168+ &ra_ctx_vulkan_moltenvk,
122169+ #endif
123170 #if HAVE_ANDROID
124171 &ra_ctx_vulkan_android,
125172 #endif
126- diff --git forkSrcPrefix/video/out/vulkan/common.h forkDstPrefix/video/out/vulkan/common.h
127- index e75cb228f8d99462ccecf7780098ea97ae7cfe02..afc17284773204563f4c90b4860758e61068d460 100644
128- --- forkSrcPrefix/video/out/vulkan/common.h
129- +++ forkDstPrefix/video/out/vulkan/common.h
130- @@ -22,6 +22,9 @@
131- #if HAVE_WIN32_DESKTOP
132- #define VK_USE_PLATFORM_WIN32_KHR
133- #endif
134- + #if HAVE_MOLTENVK
135- + #include <MoltenVK/mvk_vulkan.h>
136- + #endif
137- #if HAVE_COCOA
138- #define VK_USE_PLATFORM_METAL_EXT
139- #endif
140- diff --git forkSrcPrefix/meson.build forkDstPrefix/meson.build
141- index b7bcb1b0badb21743f40f707d908092042de6db3..ebba7eeb7365b0e3cced1b3f2f23971101b0f66b 100644
142- --- forkSrcPrefix/meson.build
143- +++ forkDstPrefix/meson.build
144- @@ -1310,6 +1310,17 @@ if features['vulkan'] and features['x11']
145- sources += files('video/out/vulkan/context_xlib.c')
146- endif
147-
148- + if host_machine.system() == 'darwin'
149- + moltenvk = get_option('moltenvk').require(
150- + features['vulkan'],
151- + error_message: 'vulkan or moltenvk header could not be found!',
152- + )
153- + features += {'moltenvk': moltenvk.allowed()}
154- + if features['vulkan'] and features['moltenvk']
155- + sources += files('video/out/vulkan/context_moltenvk.m')
156- + endif
157- + endif
158- +
159- features += {'vk-khr-display': vulkan.type_name() == 'internal' or
160- cc.has_function('vkCreateDisplayPlaneSurfaceKHR', prefix: '#include <vulkan/vulkan_core.h>',
161- dependencies: [vulkan])}
162- diff --git forkSrcPrefix/meson_options.txt forkDstPrefix/meson_options.txt
163- index c6e6337d68b3e1210513c767db79cc204f404000..55fc334edf27f4e495dbb75f6316ecaffc661a8c 100644
164- --- forkSrcPrefix/meson_options.txt
165- +++ forkDstPrefix/meson_options.txt
166- @@ -103,6 +103,7 @@ option('gl-dxinterop-d3d9', type: 'feature', value: 'auto', description: 'OpenGL
167- option('ios-gl', type: 'feature', value: 'auto', description: 'iOS OpenGL ES interop support')
168- option('videotoolbox-gl', type: 'feature', value: 'auto', description: 'Videotoolbox with OpenGL')
169- option('videotoolbox-pl', type: 'feature', value: 'auto', description: 'Videotoolbox with libplacebo')
170- + option('moltenvk', type: 'feature', value: 'auto', description: 'Moltenvk context')
171-
172- # macOS features
173- option('macos-10-15-4-features', type: 'feature', value: 'auto', description: 'macOS 10.15.4 SDK Features')
0 commit comments