[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 16/18] ui: introduce egl_init()
From: |
Marc-André Lureau |
Subject: |
Re: [PATCH v2 16/18] ui: introduce egl_init() |
Date: |
Mon, 13 Mar 2023 13:59:01 +0400 |
Hi
On Fri, Mar 10, 2023 at 2:07 PM Daniel P. Berrangé <berrange@redhat.com> wrote:
>
> On Tue, Mar 07, 2023 at 03:56:35PM +0400, marcandre.lureau@redhat.com wrote:
> > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> >
> > 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>
> > ---
> > include/ui/egl-helpers.h | 2 ++
> > ui/dbus.c | 7 +------
> > ui/egl-headless.c | 16 ++++++++--------
> > ui/egl-helpers.c | 25 +++++++++++++++++++++++++
> > ui/spice-core.c | 7 +------
> > 5 files changed, 37 insertions(+), 20 deletions(-)
> >
> > diff --git a/include/ui/egl-helpers.h b/include/ui/egl-helpers.h
> > index c92dd90e33..53d953ddf4 100644
> > --- a/include/ui/egl-helpers.h
> > +++ b/include/ui/egl-helpers.h
> > @@ -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 */
> > diff --git a/ui/dbus.c b/ui/dbus.c
> > index f529928f0b..ebf03bd84d 100644
> > --- a/ui/dbus.c
> > +++ b/ui/dbus.c
> > @@ -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);
> > diff --git a/ui/egl-headless.c b/ui/egl-headless.c
> > index ae07e91302..ef70e6a18e 100644
> > --- a/ui/egl-headless.c
> > +++ b/ui/egl-headless.c
> > @@ -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;
>
> Why isn't the egl_init() call being made from this egl_headless_init
> method, so egl_rendernode_init() is called at the same logical point
> as before this change ?
For consistency with the other egl_init() callers, called during
qemu_create_early_backends(). That way display_opengl is set early too
(as before).
>
>
> > diff --git a/ui/egl-helpers.c b/ui/egl-helpers.c
> > index 10772b6471..36b4fc51d9 100644
> > --- a/ui/egl-helpers.c
> > +++ b/ui/egl-helpers.c
> > @@ -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,26 @@ 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;
> > + }
> > +#else
> > + error_setg(errp, "egl: not available on this platform");
> > + return false;
> > +#endif
> > +
> > + display_opengl = 1;
> > + return true;
> > +}
>
> Surely this is going to result in compile errors when !CONFIG_GBM
> because these two lines are going to be flagged as unreachable
> code, due to the 'return false' in the #else branch.
Interestingly, I don't get a warning (-g -O2).. I'll change the code
nonetheless.
>
> > diff --git a/ui/spice-core.c b/ui/spice-core.c
> > index 76f7c2bc3d..b05c830086 100644
> > --- a/ui/spice-core.c
> > +++ b/ui/spice-core.c
> > @@ -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
> > --
> > 2.39.2
> >
>
> With regards,
> Daniel
> --
> |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
> |: https://libvirt.org -o- https://fstop138.berrange.com :|
> |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
>
>
--
Marc-André Lureau
- Re: [PATCH v2 14/18] ui/sdl: add optional logging when _SDL_DEBUG is set, (continued)
[PATCH v2 12/18] ui/shader: fix #version directive must occur on first line, marcandre . lureau, 2023/03/07
[PATCH v2 15/18] ui/sdl: try to instantiate the matching opengl renderer, marcandre . lureau, 2023/03/07
[PATCH v2 16/18] ui: introduce egl_init(), marcandre . lureau, 2023/03/07
[PATCH v2 17/18] ui/dbus: do not require opengl & gbm, marcandre . lureau, 2023/03/07
[PATCH v2 18/18] ui/dbus: restrict opengl to gbm-enabled config, marcandre . lureau, 2023/03/07
Re: [PATCH v2 00/18] ui: dbus & misc fixes, Marc-André Lureau, 2023/03/09