From b545671d6729bcef8f6f9d103e7fd70ce19495bb Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 19 Jul 2025 00:56:52 +1000 Subject: [PATCH] MetalDevice: Retain references to layer Apparently the allocate method returns +0 references. --- src/util/metal_device.mm | 6 +++--- src/util/platform_misc_mac.mm | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/util/metal_device.mm b/src/util/metal_device.mm index d282a2899..24bc64eb5 100644 --- a/src/util/metal_device.mm +++ b/src/util/metal_device.mm @@ -163,7 +163,7 @@ void MetalSwapChain::Destroy(bool wait_for_gpu) MetalDevice::GetInstance().WaitForGPUIdle(); RunOnMainThread([this]() { - NSView* view = (__bridge NSView*)m_window_info.window_handle; + NSView* view = (NSView*)m_window_info.window_handle; [view setLayer:nil]; [view setWantsLayer:FALSE]; [m_layer release]; @@ -219,7 +219,7 @@ std::unique_ptr MetalDevice::CreateSwapChain(const WindowInfo& wi, @autoreleasepool { INFO_LOG("Creating a {}x{} Metal layer.", wi_copy.surface_width, wi_copy.surface_height); - layer = [CAMetalLayer layer]; // TODO: Does this need retain?? + layer = [[CAMetalLayer layer] retain]; if (layer == nil) { Error::SetStringView(error, "Failed to create metal layer."); @@ -242,7 +242,7 @@ std::unique_ptr MetalDevice::CreateSwapChain(const WindowInfo& wi, VERBOSE_LOG("Metal layer pixel format is {}.", GPUTexture::GetFormatName(wi_copy.surface_format)); - NSView* view = (__bridge NSView*)wi_copy.window_handle; + NSView* view = (NSView*)wi_copy.window_handle; [view setWantsLayer:TRUE]; [view setLayer:layer]; } diff --git a/src/util/platform_misc_mac.mm b/src/util/platform_misc_mac.mm index 507398eff..ec7fdf064 100644 --- a/src/util/platform_misc_mac.mm +++ b/src/util/platform_misc_mac.mm @@ -104,19 +104,19 @@ void* CocoaTools::CreateMetalLayer(const WindowInfo& wi, Error* error) return ret; } - CAMetalLayer* layer = [CAMetalLayer layer]; + CAMetalLayer* layer = [[CAMetalLayer layer] retain]; if (layer == nil) { Error::SetStringView(error, "Failed to create CAMetalLayer"); return nullptr; } - NSView* view = (__bridge NSView*)wi.window_handle; + NSView* view = (NSView*)wi.window_handle; [view setWantsLayer:TRUE]; [view setLayer:layer]; [layer setContentsScale:[[[view window] screen] backingScaleFactor]]; - return (__bridge void*)layer; + return layer; } void CocoaTools::DestroyMetalLayer(const WindowInfo& wi, void* layer) @@ -128,8 +128,8 @@ void CocoaTools::DestroyMetalLayer(const WindowInfo& wi, void* layer) return; } - NSView* view = (__bridge NSView*)wi.window_handle; - CAMetalLayer* clayer = (__bridge CAMetalLayer*)layer; + NSView* view = (NSView*)wi.window_handle; + CAMetalLayer* clayer = (CAMetalLayer*)layer; [view setLayer:nil]; [view setWantsLayer:NO]; [clayer release]; @@ -145,7 +145,7 @@ std::optional CocoaTools::GetViewRefreshRate(const WindowInfo& wi, Error* } std::optional ret; - NSView* const view = (__bridge NSView*)wi.window_handle; + NSView* const view = (NSView*)wi.window_handle; const u32 did = [[[[[view window] screen] deviceDescription] valueForKey:@"NSScreenNumber"] unsignedIntValue]; if (CGDisplayModeRef mode = CGDisplayCopyDisplayMode(did)) {