MetaRendererNative: Get EGLDisplay on init

Use MetaEgl to get the EGLDisplay on initialization; use that when
constructing the Cogl renderer.

https://bugzilla.gnome.org/show_bug.cgi?id=773629
This commit is contained in:
Jonas Ådahl 2016-08-18 10:37:16 +08:00
parent 8b810193dd
commit cde622b8e1

View File

@ -82,6 +82,9 @@ struct _MetaRendererNative
MetaRenderer parent;
int kms_fd;
EGLDisplay egl_display;
struct gbm_device *gbm;
CoglClosure *swap_notify_idle;
@ -236,25 +239,7 @@ meta_renderer_native_connect (CoglRenderer *cogl_renderer,
egl_renderer->platform_vtable = &_cogl_winsys_egl_vtable;
egl_renderer->platform = renderer_native;
egl_renderer->edpy = EGL_NO_DISPLAY;
if (renderer_native->gbm == NULL)
{
_cogl_set_error (error, COGL_WINSYS_ERROR,
COGL_WINSYS_ERROR_INIT,
"Couldn't create gbm device");
goto fail;
}
egl_renderer->edpy =
eglGetDisplay ((EGLNativeDisplayType) renderer_native->gbm);
if (egl_renderer->edpy == EGL_NO_DISPLAY)
{
_cogl_set_error (error, COGL_WINSYS_ERROR,
COGL_WINSYS_ERROR_INIT,
"Couldn't get eglDisplay");
goto fail;
}
egl_renderer->edpy = renderer_native->egl_display;
if (!_cogl_winsys_egl_renderer_connect_common (cogl_renderer, error))
goto fail;
@ -1241,9 +1226,13 @@ meta_renderer_native_initable_init (GInitable *initable,
GError **error)
{
MetaRendererNative *renderer_native = META_RENDERER_NATIVE (initable);
MetaBackend *backend = meta_get_backend ();
MetaEgl *egl = meta_backend_get_egl (backend);
struct gbm_device *gbm_device;
EGLDisplay egl_display;
renderer_native->gbm = gbm_create_device (renderer_native->kms_fd);
if (!renderer_native->gbm)
gbm_device = gbm_create_device (renderer_native->kms_fd);
if (!gbm_device)
{
g_set_error (error, G_IO_ERROR,
G_IO_ERROR_FAILED,
@ -1251,6 +1240,17 @@ meta_renderer_native_initable_init (GInitable *initable,
return FALSE;
}
egl_display = meta_egl_get_display (egl, (EGLNativeDisplayType) gbm_device,
error);
if (egl_display == EGL_NO_DISPLAY)
{
gbm_device_destroy (gbm_device);
return FALSE;
}
renderer_native->egl_display = egl_display;
renderer_native->gbm = gbm_device;
return TRUE;
}