1
0
Fork 0

onscreen/native: Precalculate secondary_gpu_used flag

It's slightly more efficient, but also we'll soon need it in multiple
functions.

(cherry picked from commit 0fe3c5c29776e87407dadee90edecc6c8ea36960)
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1441>
Signed-off-by: Mingi Sung <sungmg@saltyming.net>
This commit is contained in:
Daniel van Vugt 2024-10-22 13:33:01 +08:00 committed by Mingi Sung
parent f78c6603d2
commit 4fd33b4fdc
Signed by: sungmg
GPG key ID: 41BAFD6FFD8036C5

View file

@ -102,6 +102,7 @@ struct _MetaOnscreenNative
MetaCrtc *crtc; MetaCrtc *crtc;
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state; MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state;
gboolean secondary_gpu_used;
ClutterFrame *presented_frame; ClutterFrame *presented_frame;
ClutterFrame *next_frame; ClutterFrame *next_frame;
@ -1350,14 +1351,12 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen,
MetaMonitorManager *monitor_manager = MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (backend); meta_backend_get_monitor_manager (backend);
MetaOnscreenNative *onscreen_native = META_ONSCREEN_NATIVE (onscreen); MetaOnscreenNative *onscreen_native = META_ONSCREEN_NATIVE (onscreen);
MetaOnscreenNativeSecondaryGpuState *secondary_gpu_state;
MetaGpuKms *render_gpu = onscreen_native->render_gpu; MetaGpuKms *render_gpu = onscreen_native->render_gpu;
MetaDeviceFile *render_device_file; MetaDeviceFile *render_device_file;
ClutterFrame *frame = user_data; ClutterFrame *frame = user_data;
MetaFrameNative *frame_native = meta_frame_native_from_frame (frame); MetaFrameNative *frame_native = meta_frame_native_from_frame (frame);
MetaKmsUpdate *kms_update; MetaKmsUpdate *kms_update;
CoglOnscreenClass *parent_class; CoglOnscreenClass *parent_class;
gboolean secondary_gpu_used = FALSE;
MetaPowerSave power_save_mode; MetaPowerSave power_save_mode;
g_autoptr (GError) error = NULL; g_autoptr (GError) error = NULL;
MetaDrmBufferFlags buffer_flags; MetaDrmBufferFlags buffer_flags;
@ -1378,20 +1377,7 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen,
rectangles, rectangles,
n_rectangles); n_rectangles);
secondary_gpu_state = onscreen_native->secondary_gpu_state; if (!onscreen_native->secondary_gpu_used)
if (secondary_gpu_state)
{
MetaRendererNativeGpuData *secondary_gpu_data;
secondary_gpu_data =
meta_renderer_native_get_gpu_data (renderer_native,
secondary_gpu_state->gpu_kms);
secondary_gpu_used =
secondary_gpu_data->secondary.copy_mode ==
META_SHARED_FRAMEBUFFER_COPY_MODE_SECONDARY_GPU;
}
if (!secondary_gpu_used)
cogl_onscreen_egl_maybe_create_timestamp_query (onscreen, frame_info); cogl_onscreen_egl_maybe_create_timestamp_query (onscreen, frame_info);
parent_class = COGL_ONSCREEN_CLASS (meta_onscreen_native_parent_class); parent_class = COGL_ONSCREEN_CLASS (meta_onscreen_native_parent_class);
@ -1552,7 +1538,7 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen,
kms_update = meta_frame_native_steal_kms_update (frame_native); kms_update = meta_frame_native_steal_kms_update (frame_native);
if (!secondary_gpu_used) if (!onscreen_native->secondary_gpu_used)
{ {
int sync_fd; int sync_fd;
@ -2717,7 +2703,10 @@ init_secondary_gpu_state (MetaRendererNative *renderer_native,
onscreen, onscreen,
renderer_gpu_data, renderer_gpu_data,
&local_error)) &local_error))
return TRUE; {
onscreen_native->secondary_gpu_used = TRUE;
return TRUE;
}
g_warning ("Secondary GPU initialization failed (%s). " g_warning ("Secondary GPU initialization failed (%s). "
"Falling back to GPU-less mode instead, so the " "Falling back to GPU-less mode instead, so the "