From 187497eea832dbf21c2387b139b9159cb22b9bf0 Mon Sep 17 00:00:00 2001 From: Eric Warmenhoven Date: Thu, 19 Sep 2024 14:48:40 -0400 Subject: [PATCH] Revert "apple: switch from MTKView to CAMetalLayer for vulkan (#16959)" (#17017) This reverts commit 95d53183f5d3b8719a4c2d595b12de16da2e31af. --- gfx/common/vksym.h | 8 +++++-- gfx/common/vulkan_common.c | 38 +++++++++++++++++++++++------- gfx/drivers_context/cocoa_vk_ctx.m | 4 ++-- ui/drivers/cocoa/apple_platform.h | 8 ------- ui/drivers/ui_cocoa.m | 10 -------- ui/drivers/ui_cocoatouch.m | 38 ------------------------------ 6 files changed, 37 insertions(+), 69 deletions(-) diff --git a/gfx/common/vksym.h b/gfx/common/vksym.h index d07baed072a..f7f704b8a87 100644 --- a/gfx/common/vksym.h +++ b/gfx/common/vksym.h @@ -47,8 +47,12 @@ #define VK_USE_PLATFORM_XLIB_KHR #endif -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) || defined(HAVE_COCOATOUCH) -#define VK_USE_PLATFORM_METAL_EXT +#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#define VK_USE_PLATFORM_MACOS_MVK +#endif + +#ifdef HAVE_COCOATOUCH +#define VK_USE_PLATFORM_IOS_MVK #endif #include diff --git a/gfx/common/vulkan_common.c b/gfx/common/vulkan_common.c index 7033e68668e..ad1b89122e6 100644 --- a/gfx/common/vulkan_common.c +++ b/gfx/common/vulkan_common.c @@ -899,8 +899,10 @@ static VkInstance vulkan_context_create_instance_wrapper(void *opaque, const VkI required_extensions[required_extension_count++] = "VK_KHR_display"; break; case VULKAN_WSI_MVK_MACOS: + required_extensions[required_extension_count++] = "VK_MVK_macos_surface"; + break; case VULKAN_WSI_MVK_IOS: - required_extensions[required_extension_count++] = "VK_EXT_metal_surface"; + required_extensions[required_extension_count++] = "VK_MVK_ios_surface"; break; case VULKAN_WSI_NONE: default: @@ -1675,18 +1677,36 @@ bool vulkan_surface_create(gfx_ctx_vulkan_data_t *vk, return false; break; case VULKAN_WSI_MVK_MACOS: +#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) + { + VkMacOSSurfaceCreateInfoMVK surf_info; + PFN_vkCreateMacOSSurfaceMVK create; + if (!VULKAN_SYMBOL_WRAPPER_LOAD_INSTANCE_SYMBOL(vk->context.instance, "vkCreateMacOSSurfaceMVK", create)) + return false; + + surf_info.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK; + surf_info.pNext = NULL; + surf_info.flags = 0; + surf_info.pView = surface; + + if (create(vk->context.instance, &surf_info, NULL, &vk->vk_surface) + != VK_SUCCESS) + return false; + } +#endif + break; case VULKAN_WSI_MVK_IOS: -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) || defined(HAVE_COCOATOUCH) +#ifdef HAVE_COCOATOUCH { - VkMetalSurfaceCreateInfoEXT surf_info; - PFN_vkCreateMetalSurfaceEXT create; - if (!VULKAN_SYMBOL_WRAPPER_LOAD_INSTANCE_SYMBOL(vk->context.instance, "vkCreateMetalSurfaceEXT", create)) + VkIOSSurfaceCreateInfoMVK surf_info; + PFN_vkCreateIOSSurfaceMVK create; + if (!VULKAN_SYMBOL_WRAPPER_LOAD_INSTANCE_SYMBOL(vk->context.instance, "vkCreateIOSSurfaceMVK", create)) return false; - surf_info.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT; - surf_info.pNext = NULL; - surf_info.flags = 0; - surf_info.pLayer = surface; + surf_info.sType = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK; + surf_info.pNext = NULL; + surf_info.flags = 0; + surf_info.pView = surface; if (create(vk->context.instance, &surf_info, NULL, &vk->vk_surface) != VK_SUCCESS) diff --git a/gfx/drivers_context/cocoa_vk_ctx.m b/gfx/drivers_context/cocoa_vk_ctx.m index 9e732dc3197..232f1afa762 100755 --- a/gfx/drivers_context/cocoa_vk_ctx.m +++ b/gfx/drivers_context/cocoa_vk_ctx.m @@ -249,7 +249,7 @@ static bool cocoa_vk_gfx_ctx_set_video_mode(void *data, &cocoa_ctx->vk, VULKAN_WSI_MVK_MACOS, NULL, - (BRIDGE void *)g_view.layer, + (BRIDGE void *)g_view, cocoa_ctx->width, cocoa_ctx->height, cocoa_ctx->swap_interval)) @@ -298,7 +298,7 @@ static bool cocoa_vk_gfx_ctx_set_video_mode(void *data, if (!vulkan_surface_create(&cocoa_ctx->vk, VULKAN_WSI_MVK_IOS, NULL, - (BRIDGE void *)((MetalLayerView*)g_view).metalLayer, + (BRIDGE void *)g_view, cocoa_ctx->width, cocoa_ctx->height, cocoa_ctx->swap_interval)) diff --git a/ui/drivers/cocoa/apple_platform.h b/ui/drivers/cocoa/apple_platform.h index 86bb97ee19a..badd8d217cd 100644 --- a/ui/drivers/cocoa/apple_platform.h +++ b/ui/drivers/cocoa/apple_platform.h @@ -70,14 +70,6 @@ extern id apple_platform; void rarch_start_draw_observer(void); void rarch_stop_draw_observer(void); -#if defined(HAVE_COCOA_METAL) -@interface MetalLayerView : UIView -@property (nonatomic, readonly) CAMetalLayer *metalLayer; -@end -#endif - -#import - @interface RetroArch_iOS : UINavigationController { UIView *_renderView; diff --git a/ui/drivers/ui_cocoa.m b/ui/drivers/ui_cocoa.m index 0c2d405554a..9dcb1344434 100644 --- a/ui/drivers/ui_cocoa.m +++ b/ui/drivers/ui_cocoa.m @@ -667,16 +667,6 @@ - (void)setViewType:(apple_view_type_t)vt switch (vt) { case APPLE_VIEW_TYPE_VULKAN: - { - _renderView = [CocoaView get]; - CAMetalLayer *metal_layer = [[CAMetalLayer alloc] init]; - metal_layer.device = MTLCreateSystemDefaultDevice(); - metal_layer.framebufferOnly = YES; - metal_layer.contentsScale = [[NSScreen mainScreen] backingScaleFactor]; - _renderView.layer = metal_layer; - [_renderView setWantsLayer:YES]; - } - break; case APPLE_VIEW_TYPE_METAL: { MetalView *v = [MetalView new]; diff --git a/ui/drivers/ui_cocoatouch.m b/ui/drivers/ui_cocoatouch.m index e5500703039..822db5577ba 100644 --- a/ui/drivers/ui_cocoatouch.m +++ b/ui/drivers/ui_cocoatouch.m @@ -500,42 +500,6 @@ - (void)sendEvent:(UIEvent *)event @end -#ifdef HAVE_COCOA_METAL -@implementation MetalLayerView - -+ (Class)layerClass { - return [CAMetalLayer class]; -} - -- (instancetype)init { - self = [super init]; - if (self) { - [self setupMetalLayer]; - } - return self; -} - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self setupMetalLayer]; - } - return self; -} - -- (CAMetalLayer *)metalLayer { - return (CAMetalLayer *)self.layer; -} - -- (void)setupMetalLayer { - self.metalLayer.device = MTLCreateSystemDefaultDevice(); - self.metalLayer.contentsScale = [UIScreen mainScreen].scale; - self.metalLayer.opaque = YES; -} - -@end -#endif - #if TARGET_OS_IOS @interface RetroArch_iOS () @end @@ -566,8 +530,6 @@ - (void)setViewType:(apple_view_type_t)vt { #ifdef HAVE_COCOA_METAL case APPLE_VIEW_TYPE_VULKAN: - _renderView = [MetalLayerView new]; - break; case APPLE_VIEW_TYPE_METAL: { MetalView *v = [MetalView new];