From a834eb5c94552527ba4238cdecf209d3b6d421fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Wed, 10 Apr 2024 10:36:41 +0200 Subject: [PATCH] onscreen/native: Don't create timestamp query with secondary GPU work The timestamp query is currently always created for the primary GPU, so it doesn't cover any later secondary GPU work. Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3070 Part-of: --- src/backends/native/meta-onscreen-native.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/backends/native/meta-onscreen-native.c b/src/backends/native/meta-onscreen-native.c index cbf9c1530..40ed15a65 100644 --- a/src/backends/native/meta-onscreen-native.c +++ b/src/backends/native/meta-onscreen-native.c @@ -1281,12 +1281,14 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, MetaMonitorManager *monitor_manager = meta_backend_get_monitor_manager (backend); MetaOnscreenNative *onscreen_native = META_ONSCREEN_NATIVE (onscreen); + MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state; MetaGpuKms *render_gpu = onscreen_native->render_gpu; MetaDeviceFile *render_device_file; ClutterFrame *frame = user_data; MetaFrameNative *frame_native = meta_frame_native_from_frame (frame); MetaKmsUpdate *kms_update; CoglOnscreenClass *parent_class; + gboolean create_timestamp_query = TRUE; gboolean egl_context_changed = FALSE; MetaPowerSave power_save_mode; g_autoptr (GError) error = NULL; @@ -1305,7 +1307,21 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, rectangles, n_rectangles); - cogl_onscreen_egl_maybe_create_timestamp_query (onscreen, frame_info); + secondary_gpu_state = onscreen_native->secondary_gpu_state; + if (secondary_gpu_state) + { + MetaRendererNativeGpuData *secondary_gpu_data; + + secondary_gpu_data = + meta_renderer_native_get_gpu_data (renderer_native, + secondary_gpu_state->gpu_kms); + if (secondary_gpu_data->secondary.copy_mode == + META_SHARED_FRAMEBUFFER_COPY_MODE_SECONDARY_GPU) + create_timestamp_query = FALSE; + } + + if (create_timestamp_query) + cogl_onscreen_egl_maybe_create_timestamp_query (onscreen, frame_info); parent_class = COGL_ONSCREEN_CLASS (meta_onscreen_native_parent_class); parent_class->swap_buffers_with_damage (onscreen,