diff options
author | Miguel A. Vico <mvicomoya@nvidia.com> | 2018-06-07 23:29:44 +0000 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2019-01-14 10:06:52 -0500 |
commit | 62fd182272c440daa58cda63b8ebd6a26267d8c2 (patch) | |
tree | 7219bc4a180f4f204ece86a05809e374fe019f10 | |
parent | f48c8c582496e61935fd325f2c18419535651bbb (diff) | |
download | mutter-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.c | 65 |
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); |