From 1700249a79f2f91203b4c8f689cc6a8450c9eb00 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Thu, 25 Mar 2021 04:08:39 +0000 Subject: [PATCH] Do not access "view" in getMetalLayerSize Fixes Main thread checker assert in getMetalLayerSize Use the layer.contentsScale to adjust for high DPI instead of "view convertSizeToBacking" --- renderdoc/driver/vulkan/vk_apple.cpp | 4 ++-- renderdoc/driver/vulkan/vk_apple.mm | 10 ++++------ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_apple.cpp b/renderdoc/driver/vulkan/vk_apple.cpp index 57e7f8a85..1650c3cd1 100644 --- a/renderdoc/driver/vulkan/vk_apple.cpp +++ b/renderdoc/driver/vulkan/vk_apple.cpp @@ -29,7 +29,7 @@ #include // helpers defined in vk_apple.mm -void getMetalLayerSize(void *viewHandle, void *layerHandle, int &width, int &height); +void getMetalLayerSize(void *layerHandle, int &width, int &height); #if defined(VK_USE_PLATFORM_MACOS_MVK) @@ -147,7 +147,7 @@ void VulkanReplay::GetOutputWindowDimensions(uint64_t id, int32_t &w, int32_t &h return; } - getMetalLayerSize(outw.cocoa.view, outw.cocoa.layer, w, h); + getMetalLayerSize(outw.cocoa.layer, w, h); } static const rdcstr VulkanLibraryName = "libvulkan.1.dylib"_lit; diff --git a/renderdoc/driver/vulkan/vk_apple.mm b/renderdoc/driver/vulkan/vk_apple.mm index 9650fec85..47895b929 100644 --- a/renderdoc/driver/vulkan/vk_apple.mm +++ b/renderdoc/driver/vulkan/vk_apple.mm @@ -1,13 +1,11 @@ #import -void getMetalLayerSize(void *viewHandle, void* layerHandle, int& width, int& height) +void getMetalLayerSize(void* layerHandle, int& width, int& height) { - NSView *view = (NSView *)viewHandle; - assert([view isKindOfClass:[NSView class]]); CALayer *layer = (CALayer *)layerHandle; assert([layer isKindOfClass:[CALayer class]]); - CGSize viewScale = [view convertSizeToBacking:layer.bounds.size]; - width = viewScale.width; - height = viewScale.height; + const CGFloat scaleFactor = layer.contentsScale; + width = layer.bounds.size.width * scaleFactor; + height = layer.bounds.size.height * scaleFactor; }