Skip to content

Commit

Permalink
ui: introduce egl_init()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
elmarco committed Mar 13, 2023
1 parent da3f7a3 commit 0e1be59
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 20 deletions.
2 changes: 2 additions & 0 deletions include/ui/egl-helpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
7 changes: 1 addition & 6 deletions ui/dbus.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
16 changes: 8 additions & 8 deletions ui/egl-headless.c
Original file line number Diff line number Diff line change
@@ -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"
Expand Down Expand Up @@ -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;

Expand Down
24 changes: 24 additions & 0 deletions ui/egl-helpers.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
}
7 changes: 1 addition & 6 deletions ui/spice-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 0e1be59

Please sign in to comment.