1
0
Fork 0

backend/native: Create MetaRenderDevice on_gpu_added when it does not exists

Fixes GNOME/mutter#2481

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2676>
This commit is contained in:
Łukasz Spintzyk 2022-10-26 09:22:24 +02:00
parent 986d3be7ac
commit c57a500ccb
3 changed files with 27 additions and 9 deletions

View file

@ -33,7 +33,9 @@ MetaBarrierManagerNative *meta_backend_native_get_barrier_manager (MetaBackendNa
META_EXPORT_TEST
MetaDevicePool * meta_backend_native_get_device_pool (MetaBackendNative *native);
MetaRenderDevice * meta_backend_native_take_render_device (MetaBackendNative *backend_native,
const char *device_path);
MetaRenderDevice * meta_backend_native_take_render_device (MetaBackendNative *backend_native,
const char *device_path,
GError **error);
#endif /* META_BACKEND_NATIVE_PRIVATE_H */

View file

@ -991,9 +991,21 @@ void meta_backend_native_resume (MetaBackendNative *native)
clutter_seat_ensure_a11y_state (CLUTTER_SEAT (seat));
}
static MetaRenderDevice *
meta_backend_native_create_render_device (MetaBackendNative *backend_native,
const char *device_path,
GError **error)
{
g_autoptr (MetaRenderDevice) render_device = NULL;
render_device = create_render_device (backend_native, device_path, error);
return g_steal_pointer (&render_device);
}
MetaRenderDevice *
meta_backend_native_take_render_device (MetaBackendNative *backend_native,
const char *device_path)
meta_backend_native_take_render_device (MetaBackendNative *backend_native,
const char *device_path,
GError **error)
{
MetaRenderDevice *render_device;
@ -1001,7 +1013,12 @@ meta_backend_native_take_render_device (MetaBackendNative *backend_native,
device_path,
NULL,
(gpointer *) &render_device))
return render_device;
{
return render_device;
}
else
return NULL;
{
return meta_backend_native_create_render_device (backend_native,
device_path, error);
}
}

View file

@ -1781,11 +1781,10 @@ meta_renderer_native_create_renderer_gpu_data (MetaRendererNative *renderer_nat
device_path = meta_gpu_kms_get_file_path (gpu_kms);
render_device = meta_backend_native_take_render_device (backend_native,
device_path);
device_path,
error);
if (!render_device)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
"No render device found for %s", device_path);
return NULL;
}