mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 09:30:45 -05:00
backends/native: Move primary_gpu into MetaRendererNative
Make the choosing and identity of the primary GPU an internal detail to the native renderer. MonitorManagerKms did not need it for anything. The primary GPU logic remains unchanged. This allows follow-up patches to change how the renderer chooses the primary GPU. It will be easier for the renderer to use private information for choosing. https://gitlab.gnome.org/GNOME/mutter/merge_requests/271
This commit is contained in:
parent
1def099047
commit
9182c8b801
@ -84,8 +84,6 @@ struct _MetaMonitorManagerKms
|
||||
{
|
||||
MetaMonitorManager parent_instance;
|
||||
|
||||
MetaGpuKms *primary_gpu;
|
||||
|
||||
GUdevClient *udev;
|
||||
guint uevent_handler_id;
|
||||
};
|
||||
@ -580,12 +578,6 @@ meta_monitor_manager_kms_get_default_layout_mode (MetaMonitorManager *manager)
|
||||
return META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL;
|
||||
}
|
||||
|
||||
MetaGpuKms *
|
||||
meta_monitor_manager_kms_get_primary_gpu (MetaMonitorManagerKms *manager_kms)
|
||||
{
|
||||
return manager_kms->primary_gpu;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
init_gpus (MetaMonitorManagerKms *manager_kms,
|
||||
GError **error)
|
||||
@ -692,37 +684,6 @@ init_gpus (MetaMonitorManagerKms *manager_kms,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static MetaGpuKms *
|
||||
choose_primary_gpu (MetaMonitorManagerKms *manager_kms)
|
||||
{
|
||||
MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_kms);
|
||||
GList *gpus = meta_monitor_manager_get_gpus (manager);
|
||||
GList *l;
|
||||
|
||||
g_return_val_if_fail (gpus, NULL);
|
||||
|
||||
/* Prefer a platform device */
|
||||
for (l = gpus; l; l = l->next)
|
||||
{
|
||||
MetaGpuKms *gpu_kms = META_GPU_KMS (l->data);
|
||||
|
||||
if (meta_gpu_kms_is_platform_device (gpu_kms))
|
||||
return gpu_kms;
|
||||
}
|
||||
|
||||
/* Otherwise a device we booted with */
|
||||
for (l = gpus; l; l = l->next)
|
||||
{
|
||||
MetaGpuKms *gpu_kms = META_GPU_KMS (l->data);
|
||||
|
||||
if (meta_gpu_kms_is_boot_vga (gpu_kms))
|
||||
return gpu_kms;
|
||||
}
|
||||
|
||||
/* Lastly, just pick the first device */
|
||||
return META_GPU_KMS (gpus->data);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_monitor_manager_kms_initable_init (GInitable *initable,
|
||||
GCancellable *cancellable,
|
||||
@ -743,8 +704,6 @@ meta_monitor_manager_kms_initable_init (GInitable *initable,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
manager_kms->primary_gpu = choose_primary_gpu (manager_kms);
|
||||
|
||||
can_have_outputs = FALSE;
|
||||
for (l = meta_monitor_manager_get_gpus (manager); l; l = l->next)
|
||||
{
|
||||
|
@ -35,8 +35,6 @@ G_DECLARE_FINAL_TYPE (MetaMonitorManagerKms, meta_monitor_manager_kms,
|
||||
META, MONITOR_MANAGER_KMS,
|
||||
MetaMonitorManager)
|
||||
|
||||
MetaGpuKms * meta_monitor_manager_kms_get_primary_gpu (MetaMonitorManagerKms *manager_kms);
|
||||
|
||||
void meta_monitor_manager_kms_pause (MetaMonitorManagerKms *manager_kms);
|
||||
|
||||
void meta_monitor_manager_kms_resume (MetaMonitorManagerKms *manager_kms);
|
||||
|
@ -195,6 +195,7 @@ struct _MetaRendererNative
|
||||
MetaRenderer parent;
|
||||
|
||||
MetaMonitorManagerKms *monitor_manager_kms;
|
||||
MetaGpuKms *primary_gpu_kms;
|
||||
MetaGles3 *gles3;
|
||||
|
||||
gboolean use_modifiers;
|
||||
@ -2857,12 +2858,8 @@ static CoglRenderer *
|
||||
meta_renderer_native_create_cogl_renderer (MetaRenderer *renderer)
|
||||
{
|
||||
MetaRendererNative *renderer_native = META_RENDERER_NATIVE (renderer);
|
||||
MetaMonitorManagerKms *monitor_manager_kms =
|
||||
renderer_native->monitor_manager_kms;
|
||||
MetaGpuKms *primary_gpu =
|
||||
meta_monitor_manager_kms_get_primary_gpu (monitor_manager_kms);
|
||||
|
||||
return create_cogl_renderer_for_gpu (primary_gpu);
|
||||
return create_cogl_renderer_for_gpu (renderer_native->primary_gpu_kms);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -2965,14 +2962,11 @@ meta_renderer_native_create_view (MetaRenderer *renderer,
|
||||
MetaLogicalMonitor *logical_monitor)
|
||||
{
|
||||
MetaRendererNative *renderer_native = META_RENDERER_NATIVE (renderer);
|
||||
MetaMonitorManagerKms *monitor_manager_kms =
|
||||
renderer_native->monitor_manager_kms;
|
||||
MetaMonitorManager *monitor_manager =
|
||||
META_MONITOR_MANAGER (monitor_manager_kms);
|
||||
META_MONITOR_MANAGER (renderer_native->monitor_manager_kms);
|
||||
CoglContext *cogl_context =
|
||||
cogl_context_from_renderer_native (renderer_native);
|
||||
CoglDisplay *cogl_display = cogl_context_get_display (cogl_context);
|
||||
MetaGpuKms *primary_gpu;
|
||||
CoglDisplayEGL *cogl_display_egl;
|
||||
CoglOnscreenEGL *onscreen_egl;
|
||||
MetaMonitorTransform view_transform;
|
||||
@ -2993,9 +2987,8 @@ meta_renderer_native_create_view (MetaRenderer *renderer,
|
||||
width = roundf (logical_monitor->rect.width * scale);
|
||||
height = roundf (logical_monitor->rect.height * scale);
|
||||
|
||||
primary_gpu = meta_monitor_manager_kms_get_primary_gpu (monitor_manager_kms);
|
||||
onscreen = meta_renderer_native_create_onscreen (renderer_native,
|
||||
primary_gpu,
|
||||
renderer_native->primary_gpu_kms,
|
||||
logical_monitor,
|
||||
cogl_context,
|
||||
view_transform,
|
||||
@ -3006,7 +2999,8 @@ meta_renderer_native_create_view (MetaRenderer *renderer,
|
||||
g_error ("Failed to allocate onscreen framebuffer: %s", error->message);
|
||||
|
||||
if (view_transform != META_MONITOR_TRANSFORM_NORMAL ||
|
||||
should_force_shadow_fb (renderer_native, primary_gpu))
|
||||
should_force_shadow_fb (renderer_native,
|
||||
renderer_native->primary_gpu_kms))
|
||||
{
|
||||
offscreen = meta_renderer_native_create_offscreen (renderer_native,
|
||||
cogl_context,
|
||||
@ -3283,13 +3277,11 @@ create_renderer_gpu_data_gbm (MetaRendererNative *renderer_native,
|
||||
MetaGpuKms *gpu_kms,
|
||||
GError **error)
|
||||
{
|
||||
MetaMonitorManagerKms *monitor_manager_kms;
|
||||
MetaEgl *egl = meta_renderer_native_get_egl (renderer_native);
|
||||
struct gbm_device *gbm_device;
|
||||
EGLDisplay egl_display;
|
||||
int kms_fd;
|
||||
MetaRendererNativeGpuData *renderer_gpu_data;
|
||||
MetaGpuKms *primary_gpu;
|
||||
|
||||
if (!meta_egl_has_extensions (egl, EGL_NO_DISPLAY, NULL,
|
||||
"EGL_MESA_platform_gbm",
|
||||
@ -3333,9 +3325,7 @@ create_renderer_gpu_data_gbm (MetaRendererNative *renderer_native,
|
||||
renderer_gpu_data->mode = META_RENDERER_NATIVE_MODE_GBM;
|
||||
renderer_gpu_data->egl_display = egl_display;
|
||||
|
||||
monitor_manager_kms = renderer_native->monitor_manager_kms;
|
||||
primary_gpu = meta_monitor_manager_kms_get_primary_gpu (monitor_manager_kms);
|
||||
if (gpu_kms != primary_gpu)
|
||||
if (gpu_kms != renderer_native->primary_gpu_kms)
|
||||
init_secondary_gpu_data (renderer_gpu_data);
|
||||
|
||||
return renderer_gpu_data;
|
||||
@ -3462,17 +3452,13 @@ create_renderer_gpu_data_egl_device (MetaRendererNative *renderer_native,
|
||||
MetaGpuKms *gpu_kms,
|
||||
GError **error)
|
||||
{
|
||||
MetaMonitorManagerKms *monitor_manager_kms =
|
||||
renderer_native->monitor_manager_kms;
|
||||
MetaEgl *egl = meta_renderer_native_get_egl (renderer_native);
|
||||
MetaGpuKms *primary_gpu;
|
||||
char **missing_extensions;
|
||||
EGLDeviceEXT egl_device;
|
||||
EGLDisplay egl_display;
|
||||
MetaRendererNativeGpuData *renderer_gpu_data;
|
||||
|
||||
primary_gpu = meta_monitor_manager_kms_get_primary_gpu (monitor_manager_kms);
|
||||
if (gpu_kms != primary_gpu)
|
||||
if (gpu_kms != renderer_native->primary_gpu)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR,
|
||||
G_IO_ERROR_FAILED,
|
||||
@ -3624,6 +3610,34 @@ on_gpu_added (MetaMonitorManager *monitor_manager,
|
||||
_cogl_winsys_egl_ensure_current (cogl_display);
|
||||
}
|
||||
|
||||
static MetaGpuKms *
|
||||
choose_primary_gpu (MetaMonitorManager *manager)
|
||||
{
|
||||
GList *gpus = meta_monitor_manager_get_gpus (manager);
|
||||
GList *l;
|
||||
|
||||
/* Prefer a platform device */
|
||||
for (l = gpus; l; l = l->next)
|
||||
{
|
||||
MetaGpuKms *gpu_kms = META_GPU_KMS (l->data);
|
||||
|
||||
if (meta_gpu_kms_is_platform_device (gpu_kms))
|
||||
return gpu_kms;
|
||||
}
|
||||
|
||||
/* Otherwise a device we booted with */
|
||||
for (l = gpus; l; l = l->next)
|
||||
{
|
||||
MetaGpuKms *gpu_kms = META_GPU_KMS (l->data);
|
||||
|
||||
if (meta_gpu_kms_is_boot_vga (gpu_kms))
|
||||
return gpu_kms;
|
||||
}
|
||||
|
||||
/* Lastly, just pick the first device */
|
||||
return META_GPU_KMS (gpus->data);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_renderer_native_initable_init (GInitable *initable,
|
||||
GCancellable *cancellable,
|
||||
@ -3637,6 +3651,8 @@ meta_renderer_native_initable_init (GInitable *initable,
|
||||
GList *gpus;
|
||||
GList *l;
|
||||
|
||||
renderer_native->primary_gpu_kms = choose_primary_gpu (monitor_manager);
|
||||
|
||||
gpus = meta_monitor_manager_get_gpus (monitor_manager);
|
||||
for (l = gpus; l; l = l->next)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user