ui: introduce egl_init()
Future patches will introduce EGL support on win32 (too late for 8.0 though). Having a common place for EGL initialization and error handling will make it simpler. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
da3f7a3ab9
commit
0e1be59ed9
@ -65,4 +65,6 @@ int qemu_egl_init_dpy_mesa(EGLNativeDisplayType dpy, DisplayGLMode mode);
|
||||
EGLContext qemu_egl_init_ctx(void);
|
||||
bool qemu_egl_has_dmabuf(void);
|
||||
|
||||
bool egl_init(const char *rendernode, DisplayGLMode mode, Error **errp);
|
||||
|
||||
#endif /* EGL_HELPERS_H */
|
||||
|
@ -451,12 +451,7 @@ early_dbus_init(DisplayOptions *opts)
|
||||
DisplayGLMode mode = opts->has_gl ? opts->gl : DISPLAYGL_MODE_OFF;
|
||||
|
||||
if (mode != DISPLAYGL_MODE_OFF) {
|
||||
if (egl_rendernode_init(opts->u.dbus.rendernode, mode) < 0) {
|
||||
error_report("dbus: render node init failed");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
display_opengl = 1;
|
||||
egl_init(opts->u.dbus.rendernode, mode, &error_fatal);
|
||||
}
|
||||
|
||||
type_register(&dbus_vc_type_info);
|
||||
|
@ -1,7 +1,7 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qemu/module.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
#include "qapi/error.h"
|
||||
#include "ui/console.h"
|
||||
#include "ui/egl-helpers.h"
|
||||
#include "ui/egl-context.h"
|
||||
@ -191,21 +191,21 @@ static const DisplayGLCtxOps eglctx_ops = {
|
||||
|
||||
static void early_egl_headless_init(DisplayOptions *opts)
|
||||
{
|
||||
display_opengl = 1;
|
||||
DisplayGLMode mode = DISPLAYGL_MODE_ON;
|
||||
|
||||
if (opts->has_gl) {
|
||||
mode = opts->gl;
|
||||
}
|
||||
|
||||
egl_init(opts->u.egl_headless.rendernode, mode, &error_fatal);
|
||||
}
|
||||
|
||||
static void egl_headless_init(DisplayState *ds, DisplayOptions *opts)
|
||||
{
|
||||
DisplayGLMode mode = opts->has_gl ? opts->gl : DISPLAYGL_MODE_ON;
|
||||
QemuConsole *con;
|
||||
egl_dpy *edpy;
|
||||
int idx;
|
||||
|
||||
if (egl_rendernode_init(opts->u.egl_headless.rendernode, mode) < 0) {
|
||||
error_report("egl: render node init failed");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for (idx = 0;; idx++) {
|
||||
DisplayGLCtx *ctx;
|
||||
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include "qemu/error-report.h"
|
||||
#include "ui/console.h"
|
||||
#include "ui/egl-helpers.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
#include "qapi/error.h"
|
||||
|
||||
EGLDisplay *qemu_egl_display;
|
||||
EGLConfig qemu_egl_config;
|
||||
@ -569,3 +571,25 @@ EGLContext qemu_egl_init_ctx(void)
|
||||
|
||||
return ectx;
|
||||
}
|
||||
|
||||
bool egl_init(const char *rendernode, DisplayGLMode mode, Error **errp)
|
||||
{
|
||||
ERRP_GUARD();
|
||||
|
||||
if (mode == DISPLAYGL_MODE_OFF) {
|
||||
error_setg(errp, "egl: turning off GL doesn't make sense");
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_GBM
|
||||
if (egl_rendernode_init(rendernode, mode) < 0) {
|
||||
error_setg(errp, "egl: render node init failed");
|
||||
return false;
|
||||
}
|
||||
display_opengl = 1;
|
||||
return true;
|
||||
#else
|
||||
error_setg(errp, "egl: not available on this platform");
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
@ -820,12 +820,7 @@ static void qemu_spice_init(void)
|
||||
"incompatible with -spice port/tls-port");
|
||||
exit(1);
|
||||
}
|
||||
if (egl_rendernode_init(qemu_opt_get(opts, "rendernode"),
|
||||
DISPLAYGL_MODE_ON) != 0) {
|
||||
error_report("Failed to initialize EGL render node for SPICE GL");
|
||||
exit(1);
|
||||
}
|
||||
display_opengl = 1;
|
||||
egl_init(qemu_opt_get(opts, "rendernode"), DISPLAYGL_MODE_ON, &error_fatal);
|
||||
spice_opengl = 1;
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user