From 6dfabddbb4c219f7a0ec0b2174d880040d43cf1d Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Fri, 19 Dec 2025 15:21:10 -0800 Subject: [PATCH] Revert "gpui: Enable direct-to-display optimization for metal" (#45405) Reverts zed-industries/zed#44334 From my testing, this PR introduced screen tearing, or some kind of strange visual artifact, when scrolling at medium speed on a large display. Release notes: - N/A --- crates/gpui/src/platform/mac/metal_renderer.rs | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/crates/gpui/src/platform/mac/metal_renderer.rs b/crates/gpui/src/platform/mac/metal_renderer.rs index 66f54e5ba0c66a508f9db73d5ad8f84cb52d0d69..550041a0ccb4cd39bc7a86317d9540e806af2a28 100644 --- a/crates/gpui/src/platform/mac/metal_renderer.rs +++ b/crates/gpui/src/platform/mac/metal_renderer.rs @@ -46,9 +46,9 @@ pub unsafe fn new_renderer( _native_window: *mut c_void, _native_view: *mut c_void, _bounds: crate::Size, - transparent: bool, + _transparent: bool, ) -> Renderer { - MetalRenderer::new(context, transparent) + MetalRenderer::new(context) } pub(crate) struct InstanceBufferPool { @@ -128,7 +128,7 @@ pub struct PathRasterizationVertex { } impl MetalRenderer { - pub fn new(instance_buffer_pool: Arc>, transparent: bool) -> Self { + pub fn new(instance_buffer_pool: Arc>) -> Self { // Prefer low‐power integrated GPUs on Intel Mac. On Apple // Silicon, there is only ever one GPU, so this is equivalent to // `metal::Device::system_default()`. @@ -152,13 +152,8 @@ impl MetalRenderer { let layer = metal::MetalLayer::new(); layer.set_device(&device); layer.set_pixel_format(MTLPixelFormat::BGRA8Unorm); - // Support direct-to-display rendering if the window is not transparent - // https://developer.apple.com/documentation/metal/managing-your-game-window-for-metal-in-macos - layer.set_opaque(!transparent); + layer.set_opaque(false); layer.set_maximum_drawable_count(3); - // We already present at display sync with the display link - // This allows to use direct-to-display even in window mode - layer.set_display_sync_enabled(false); unsafe { let _: () = msg_send![&*layer, setAllowsNextDrawableTimeout: NO]; let _: () = msg_send![&*layer, setNeedsDisplayOnBoundsChange: YES]; @@ -357,8 +352,8 @@ impl MetalRenderer { } } - pub fn update_transparency(&self, transparent: bool) { - self.layer.set_opaque(!transparent); + pub fn update_transparency(&self, _transparent: bool) { + // todo(mac)? } pub fn destroy(&self) {