Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revert "apple: switch from MTKView to CAMetalLayer for vulkan (#16959)" #17017

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions gfx/common/vksym.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 <vulkan/vulkan_symbol_wrapper.h>
Expand Down
38 changes: 29 additions & 9 deletions gfx/common/vulkan_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions gfx/drivers_context/cocoa_vk_ctx.m
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down Expand Up @@ -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))
Expand Down
8 changes: 0 additions & 8 deletions ui/drivers/cocoa/apple_platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 <UIKit/UIKit.h>

@interface RetroArch_iOS : UINavigationController<ApplePlatform, UIApplicationDelegate,
UINavigationControllerDelegate> {
UIView *_renderView;
Expand Down
10 changes: 0 additions & 10 deletions ui/drivers/ui_cocoa.m
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down
38 changes: 0 additions & 38 deletions ui/drivers/ui_cocoatouch.m
Original file line number Diff line number Diff line change
Expand Up @@ -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 () <MXMetricManagerSubscriber, UIPointerInteractionDelegate>
@end
Expand Down Expand Up @@ -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];
Expand Down
Loading