summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel A. Vico <mvicomoya@nvidia.com>2018-06-07 23:29:44 +0000
committerRay Strode <rstrode@redhat.com>2019-01-14 10:06:52 -0500
commit62fd182272c440daa58cda63b8ebd6a26267d8c2 (patch)
tree7219bc4a180f4f204ece86a05809e374fe019f10
parentf48c8c582496e61935fd325f2c18419535651bbb (diff)
downloadmutter-62fd182272c440daa58cda63b8ebd6a26267d8c2.tar.gz
renderer/native: Choose first EGL config for non-GBM backends
Commit 712ec30cd9be1f180c3789e7e6a042c5f7b5781d added the logic to only choose EGL configs that match the GBM_FORMAT_XRGB8888 pixel format. However, there won't be any EGL config satisfying such criteria for non-GBM backends, such as EGLDevice. This change will let us choose the first EGL config for the EGLDevice backend, while still forcing GBM_FORMAT_XRGB8888 configs for the GBM one. Related to: https://gitlab.gnome.org/GNOME/mutter/issues/2 (cherry picked from commit 1bf2eb95b502ed0419b0fe8979c022cacaf79e84)
-rw-r--r--src/backends/native/meta-renderer-native.c65
1 files changed, 48 insertions, 17 deletions
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
index 250a6b6c1..d0da98f74 100644
--- a/src/backends/native/meta-renderer-native.c
+++ b/src/backends/native/meta-renderer-native.c
@@ -993,14 +993,29 @@ meta_renderer_native_choose_egl_config (CoglDisplay *cogl_display,
CoglRendererEGL *cogl_renderer_egl = cogl_renderer->winsys;
MetaBackend *backend = meta_get_backend ();
MetaEgl *egl = meta_backend_get_egl (backend);
+ MetaRendererNativeGpuData *renderer_gpu_data = cogl_renderer_egl->platform;
EGLDisplay egl_display = cogl_renderer_egl->edpy;
- return choose_egl_config_from_gbm_format (egl,
- egl_display,
- attributes,
- GBM_FORMAT_XRGB8888,
- out_config,
- error);
+ switch (renderer_gpu_data->mode)
+ {
+ case META_RENDERER_NATIVE_MODE_GBM:
+ return choose_egl_config_from_gbm_format (egl,
+ egl_display,
+ attributes,
+ GBM_FORMAT_XRGB8888,
+ out_config,
+ error);
+#ifdef HAVE_EGL_DEVICE
+ case META_RENDERER_NATIVE_MODE_EGL_DEVICE:
+ return meta_egl_choose_first_config (egl,
+ egl_display,
+ attributes,
+ out_config,
+ error);
+#endif
+ }
+
+ return FALSE;
}
static gboolean
@@ -2923,10 +2938,11 @@ meta_renderer_native_set_property (GObject *object,
}
static gboolean
-create_secondary_egl_config (MetaEgl *egl,
- EGLDisplay egl_display,
- EGLConfig *egl_config,
- GError **error)
+create_secondary_egl_config (MetaEgl *egl,
+ MetaRendererNativeMode mode,
+ EGLDisplay egl_display,
+ EGLConfig *egl_config,
+ GError **error)
{
EGLint attributes[] = {
EGL_RED_SIZE, 1,
@@ -2939,12 +2955,26 @@ create_secondary_egl_config (MetaEgl *egl,
EGL_NONE
};
- return choose_egl_config_from_gbm_format (egl,
- egl_display,
- attributes,
- GBM_FORMAT_XRGB8888,
- egl_config,
- error);
+ switch (mode)
+ {
+ case META_RENDERER_NATIVE_MODE_GBM:
+ return choose_egl_config_from_gbm_format (egl,
+ egl_display,
+ attributes,
+ GBM_FORMAT_XRGB8888,
+ egl_config,
+ error);
+#ifdef HAVE_EGL_DEVICE
+ case META_RENDERER_NATIVE_MODE_EGL_DEVICE:
+ return meta_egl_choose_first_config (egl,
+ egl_display,
+ attributes,
+ egl_config,
+ error);
+#endif
+ }
+
+ return FALSE;
}
static EGLContext
@@ -2988,7 +3018,8 @@ init_secondary_gpu_data_gpu (MetaRendererNativeGpuData *renderer_gpu_data,
EGLContext egl_context;
char **missing_gl_extensions;
- if (!create_secondary_egl_config (egl,egl_display, &egl_config, error))
+ if (!create_secondary_egl_config (egl, renderer_gpu_data->mode, egl_display,
+ &egl_config, error))
return FALSE;
egl_context = create_secondary_egl_context (egl, egl_display, egl_config, error);