* [PATCH 1/3] ui/gtk-egl: un-tab and re-tab should destroy egl surface and context
@ 2021-07-03 0:28 Dongwon Kim
2021-07-03 0:28 ` [PATCH 2/3] ui/gtk-egl: make sure the right context is set as the current Dongwon Kim
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Dongwon Kim @ 2021-07-03 0:28 UTC (permalink / raw)
To: qemu-devel; +Cc: Khairul Anuar Romli, Dongwon Kim
An old esurface should be destroyed and set to be NULL when doing
un-tab and re-tab so that a new esurface an context can be created
for the window widget that those will be bound to.
Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
Signed-off-by: Khairul Anuar Romli <khairul.anuar.romli@intel.com>
---
ui/gtk.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/ui/gtk.c b/ui/gtk.c
index 98046f577b..bfb95f3b4b 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -1232,6 +1232,14 @@ static gboolean gd_tab_window_close(GtkWidget *widget, GdkEvent *event,
vc->tab_item, vc->label);
gtk_widget_destroy(vc->window);
vc->window = NULL;
+ if (vc->gfx.esurface) {
+ eglDestroySurface(qemu_egl_display, vc->gfx.esurface);
+ vc->gfx.esurface = NULL;
+ }
+ if (vc->gfx.ectx) {
+ eglDestroyContext(qemu_egl_display, vc->gfx.ectx);
+ vc->gfx.ectx = NULL;
+ }
return TRUE;
}
@@ -1261,6 +1269,14 @@ static void gd_menu_untabify(GtkMenuItem *item, void *opaque)
if (!vc->window) {
gtk_widget_set_sensitive(vc->menu_item, false);
vc->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ if (vc->gfx.esurface) {
+ eglDestroySurface(qemu_egl_display, vc->gfx.esurface);
+ vc->gfx.esurface = NULL;
+ }
+ if (vc->gfx.esurface) {
+ eglDestroyContext(qemu_egl_display, vc->gfx.ectx);
+ vc->gfx.ectx = NULL;
+ }
gd_widget_reparent(s->notebook, vc->window, vc->tab_item);
g_signal_connect(vc->window, "delete-event",
--
2.17.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH 2/3] ui/gtk-egl: make sure the right context is set as the current
2021-07-03 0:28 [PATCH 1/3] ui/gtk-egl: un-tab and re-tab should destroy egl surface and context Dongwon Kim
@ 2021-07-03 0:28 ` Dongwon Kim
2021-07-16 22:18 ` Kasireddy, Vivek
2021-07-03 0:28 ` [PATCH 3/3] ui/gtk: gd_draw_event returns FALSE when no cairo surface is bound Dongwon Kim
2021-07-16 22:08 ` [PATCH 1/3] ui/gtk-egl: un-tab and re-tab should destroy egl surface and context Kasireddy, Vivek
2 siblings, 1 reply; 8+ messages in thread
From: Dongwon Kim @ 2021-07-03 0:28 UTC (permalink / raw)
To: qemu-devel; +Cc: Dongwon Kim
Making the vc->gfx.ectx current before handling textures
associated with it
Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
---
ui/gtk-egl.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c
index 2a2e6d3a17..32516b806c 100644
--- a/ui/gtk-egl.c
+++ b/ui/gtk-egl.c
@@ -126,6 +126,7 @@ void gd_egl_refresh(DisplayChangeListener *dcl)
}
vc->gfx.gls = qemu_gl_init_shader();
if (vc->gfx.ds) {
+ surface_gl_destroy_texture(vc->gfx.gls, vc->gfx.ds);
surface_gl_create_texture(vc->gfx.gls, vc->gfx.ds);
}
}
@@ -152,6 +153,8 @@ void gd_egl_switch(DisplayChangeListener *dcl,
surface_height(vc->gfx.ds) == surface_height(surface)) {
resized = false;
}
+ eglMakeCurrent(qemu_egl_display, vc->gfx.esurface,
+ vc->gfx.esurface, vc->gfx.ectx);
surface_gl_destroy_texture(vc->gfx.gls, vc->gfx.ds);
vc->gfx.ds = surface;
@@ -209,6 +212,11 @@ void gd_egl_scanout_dmabuf(DisplayChangeListener *dcl,
QemuDmaBuf *dmabuf)
{
#ifdef CONFIG_GBM
+ VirtualConsole *vc = container_of(dcl, VirtualConsole, gfx.dcl);
+
+ eglMakeCurrent(qemu_egl_display, vc->gfx.esurface,
+ vc->gfx.esurface, vc->gfx.ectx);
+
egl_dmabuf_import_texture(dmabuf);
if (!dmabuf->texture) {
return;
--
2.17.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* RE: [PATCH 2/3] ui/gtk-egl: make sure the right context is set as the current
2021-07-03 0:28 ` [PATCH 2/3] ui/gtk-egl: make sure the right context is set as the current Dongwon Kim
@ 2021-07-16 22:18 ` Kasireddy, Vivek
0 siblings, 0 replies; 8+ messages in thread
From: Kasireddy, Vivek @ 2021-07-16 22:18 UTC (permalink / raw)
To: Kim, Dongwon, qemu-devel@nongnu.org; +Cc: Kim, Dongwon
Acknowledged-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
> -----Original Message-----
> From: Qemu-devel <qemu-devel-bounces+vivek.kasireddy=intel.com@nongnu.org> On
> Behalf Of Dongwon Kim
> Sent: Friday, July 02, 2021 5:28 PM
> To: qemu-devel@nongnu.org
> Cc: Kim, Dongwon <dongwon.kim@intel.com>
> Subject: [PATCH 2/3] ui/gtk-egl: make sure the right context is set as the current
>
> Making the vc->gfx.ectx current before handling textures
> associated with it
>
> Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
> ---
> ui/gtk-egl.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c
> index 2a2e6d3a17..32516b806c 100644
> --- a/ui/gtk-egl.c
> +++ b/ui/gtk-egl.c
> @@ -126,6 +126,7 @@ void gd_egl_refresh(DisplayChangeListener *dcl)
> }
> vc->gfx.gls = qemu_gl_init_shader();
> if (vc->gfx.ds) {
> + surface_gl_destroy_texture(vc->gfx.gls, vc->gfx.ds);
> surface_gl_create_texture(vc->gfx.gls, vc->gfx.ds);
> }
> }
> @@ -152,6 +153,8 @@ void gd_egl_switch(DisplayChangeListener *dcl,
> surface_height(vc->gfx.ds) == surface_height(surface)) {
> resized = false;
> }
> + eglMakeCurrent(qemu_egl_display, vc->gfx.esurface,
> + vc->gfx.esurface, vc->gfx.ectx);
>
> surface_gl_destroy_texture(vc->gfx.gls, vc->gfx.ds);
> vc->gfx.ds = surface;
> @@ -209,6 +212,11 @@ void gd_egl_scanout_dmabuf(DisplayChangeListener *dcl,
> QemuDmaBuf *dmabuf)
> {
> #ifdef CONFIG_GBM
> + VirtualConsole *vc = container_of(dcl, VirtualConsole, gfx.dcl);
> +
> + eglMakeCurrent(qemu_egl_display, vc->gfx.esurface,
> + vc->gfx.esurface, vc->gfx.ectx);
> +
> egl_dmabuf_import_texture(dmabuf);
> if (!dmabuf->texture) {
> return;
> --
> 2.17.1
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/3] ui/gtk: gd_draw_event returns FALSE when no cairo surface is bound
2021-07-03 0:28 [PATCH 1/3] ui/gtk-egl: un-tab and re-tab should destroy egl surface and context Dongwon Kim
2021-07-03 0:28 ` [PATCH 2/3] ui/gtk-egl: make sure the right context is set as the current Dongwon Kim
@ 2021-07-03 0:28 ` Dongwon Kim
2021-07-06 23:34 ` [PATCH 4/4] ui/gtk-egl: guest fb texture needs to be regenerated when reinitializing egl Dongwon Kim
2021-07-16 21:55 ` [PATCH 3/3] ui/gtk: gd_draw_event returns FALSE when no cairo surface is bound Kasireddy, Vivek
2021-07-16 22:08 ` [PATCH 1/3] ui/gtk-egl: un-tab and re-tab should destroy egl surface and context Kasireddy, Vivek
2 siblings, 2 replies; 8+ messages in thread
From: Dongwon Kim @ 2021-07-03 0:28 UTC (permalink / raw)
To: qemu-devel; +Cc: Dongwon Kim
gd_draw_event shouldn't try to repaint if surface does not exist
for the VC.
Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
---
ui/gtk.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/ui/gtk.c b/ui/gtk.c
index bfb95f3b4b..0a38deedc7 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -756,6 +756,9 @@ static gboolean gd_draw_event(GtkWidget *widget, cairo_t *cr, void *opaque)
if (!vc->gfx.ds) {
return FALSE;
}
+ if (!vc->gfx.surface) {
+ return FALSE;
+ }
vc->gfx.dcl.update_interval =
gd_monitor_update_interval(vc->window ? vc->window : s->window);
--
2.17.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH 4/4] ui/gtk-egl: guest fb texture needs to be regenerated when reinitializing egl
2021-07-03 0:28 ` [PATCH 3/3] ui/gtk: gd_draw_event returns FALSE when no cairo surface is bound Dongwon Kim
@ 2021-07-06 23:34 ` Dongwon Kim
2021-07-16 22:23 ` Kasireddy, Vivek
2021-07-16 21:55 ` [PATCH 3/3] ui/gtk: gd_draw_event returns FALSE when no cairo surface is bound Kasireddy, Vivek
1 sibling, 1 reply; 8+ messages in thread
From: Dongwon Kim @ 2021-07-06 23:34 UTC (permalink / raw)
To: qemu-devel; +Cc: Dongwon Kim
If guest fb is backed by dmabuf (blob-resource), the texture bound to the
old context needs to be recreated in case the egl is re-initialized (e.g.
new window for vc is created in case of detaching/reattaching of the tab)
Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
---
ui/gtk-egl.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c
index 32516b806c..5dd7c7e1f5 100644
--- a/ui/gtk-egl.c
+++ b/ui/gtk-egl.c
@@ -129,6 +129,10 @@ void gd_egl_refresh(DisplayChangeListener *dcl)
surface_gl_destroy_texture(vc->gfx.gls, vc->gfx.ds);
surface_gl_create_texture(vc->gfx.gls, vc->gfx.ds);
}
+ if (vc->gfx.guest_fb.dmabuf) {
+ vc->gfx.guest_fb.dmabuf->texture = 0;
+ gd_egl_scanout_dmabuf(dcl, vc->gfx.guest_fb.dmabuf);
+ }
}
graphic_hw_update(dcl->con);
--
2.17.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* RE: [PATCH 4/4] ui/gtk-egl: guest fb texture needs to be regenerated when reinitializing egl
2021-07-06 23:34 ` [PATCH 4/4] ui/gtk-egl: guest fb texture needs to be regenerated when reinitializing egl Dongwon Kim
@ 2021-07-16 22:23 ` Kasireddy, Vivek
0 siblings, 0 replies; 8+ messages in thread
From: Kasireddy, Vivek @ 2021-07-16 22:23 UTC (permalink / raw)
To: Kim, Dongwon, qemu-devel@nongnu.org; +Cc: Kim, Dongwon
>
> If guest fb is backed by dmabuf (blob-resource), the texture bound to the old context needs
> to be recreated in case the egl is re-initialized (e.g.
> new window for vc is created in case of detaching/reattaching of the tab)
>
> Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
> ---
> ui/gtk-egl.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c index 32516b806c..5dd7c7e1f5 100644
> --- a/ui/gtk-egl.c
> +++ b/ui/gtk-egl.c
> @@ -129,6 +129,10 @@ void gd_egl_refresh(DisplayChangeListener *dcl)
> surface_gl_destroy_texture(vc->gfx.gls, vc->gfx.ds);
> surface_gl_create_texture(vc->gfx.gls, vc->gfx.ds);
> }
> + if (vc->gfx.guest_fb.dmabuf) {
> + vc->gfx.guest_fb.dmabuf->texture = 0;
[Kasireddy, Vivek] Shouldn't you call egl_dmabuf_release_texture() instead?
Thanks,
Vivek
> + gd_egl_scanout_dmabuf(dcl, vc->gfx.guest_fb.dmabuf);
> + }
> }
>
> graphic_hw_update(dcl->con);
> --
> 2.17.1
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH 3/3] ui/gtk: gd_draw_event returns FALSE when no cairo surface is bound
2021-07-03 0:28 ` [PATCH 3/3] ui/gtk: gd_draw_event returns FALSE when no cairo surface is bound Dongwon Kim
2021-07-06 23:34 ` [PATCH 4/4] ui/gtk-egl: guest fb texture needs to be regenerated when reinitializing egl Dongwon Kim
@ 2021-07-16 21:55 ` Kasireddy, Vivek
1 sibling, 0 replies; 8+ messages in thread
From: Kasireddy, Vivek @ 2021-07-16 21:55 UTC (permalink / raw)
To: Kim, Dongwon, qemu-devel@nongnu.org; +Cc: Kim, Dongwon
Reviewed-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
> -----Original Message-----
> From: Qemu-devel <qemu-devel-bounces+vivek.kasireddy=intel.com@nongnu.org> On
> Behalf Of Dongwon Kim
> Sent: Friday, July 02, 2021 5:28 PM
> To: qemu-devel@nongnu.org
> Cc: Kim, Dongwon <dongwon.kim@intel.com>
> Subject: [PATCH 3/3] ui/gtk: gd_draw_event returns FALSE when no cairo surface is
> bound
>
> gd_draw_event shouldn't try to repaint if surface does not exist
> for the VC.
>
> Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
> ---
> ui/gtk.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/ui/gtk.c b/ui/gtk.c
> index bfb95f3b4b..0a38deedc7 100644
> --- a/ui/gtk.c
> +++ b/ui/gtk.c
> @@ -756,6 +756,9 @@ static gboolean gd_draw_event(GtkWidget *widget, cairo_t *cr,
> void *opaque)
> if (!vc->gfx.ds) {
> return FALSE;
> }
> + if (!vc->gfx.surface) {
> + return FALSE;
> + }
>
> vc->gfx.dcl.update_interval =
> gd_monitor_update_interval(vc->window ? vc->window : s->window);
> --
> 2.17.1
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH 1/3] ui/gtk-egl: un-tab and re-tab should destroy egl surface and context
2021-07-03 0:28 [PATCH 1/3] ui/gtk-egl: un-tab and re-tab should destroy egl surface and context Dongwon Kim
2021-07-03 0:28 ` [PATCH 2/3] ui/gtk-egl: make sure the right context is set as the current Dongwon Kim
2021-07-03 0:28 ` [PATCH 3/3] ui/gtk: gd_draw_event returns FALSE when no cairo surface is bound Dongwon Kim
@ 2021-07-16 22:08 ` Kasireddy, Vivek
2 siblings, 0 replies; 8+ messages in thread
From: Kasireddy, Vivek @ 2021-07-16 22:08 UTC (permalink / raw)
To: Kim, Dongwon, qemu-devel@nongnu.org; +Cc: Romli, Khairul Anuar, Kim, Dongwon
Reviewed-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
> -----Original Message-----
> From: Qemu-devel <qemu-devel-bounces+vivek.kasireddy=intel.com@nongnu.org> On
> Behalf Of Dongwon Kim
> Sent: Friday, July 02, 2021 5:28 PM
> To: qemu-devel@nongnu.org
> Cc: Romli, Khairul Anuar <khairul.anuar.romli@intel.com>; Kim, Dongwon
> <dongwon.kim@intel.com>
> Subject: [PATCH 1/3] ui/gtk-egl: un-tab and re-tab should destroy egl surface and context
>
> An old esurface should be destroyed and set to be NULL when doing
> un-tab and re-tab so that a new esurface an context can be created
> for the window widget that those will be bound to.
>
> Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
> Signed-off-by: Khairul Anuar Romli <khairul.anuar.romli@intel.com>
> ---
> ui/gtk.c | 16 ++++++++++++++++
> 1 file changed, 16 insertions(+)
>
> diff --git a/ui/gtk.c b/ui/gtk.c
> index 98046f577b..bfb95f3b4b 100644
> --- a/ui/gtk.c
> +++ b/ui/gtk.c
> @@ -1232,6 +1232,14 @@ static gboolean gd_tab_window_close(GtkWidget *widget,
> GdkEvent *event,
> vc->tab_item, vc->label);
> gtk_widget_destroy(vc->window);
> vc->window = NULL;
> + if (vc->gfx.esurface) {
> + eglDestroySurface(qemu_egl_display, vc->gfx.esurface);
> + vc->gfx.esurface = NULL;
> + }
> + if (vc->gfx.ectx) {
> + eglDestroyContext(qemu_egl_display, vc->gfx.ectx);
> + vc->gfx.ectx = NULL;
> + }
> return TRUE;
> }
>
> @@ -1261,6 +1269,14 @@ static void gd_menu_untabify(GtkMenuItem *item, void
> *opaque)
> if (!vc->window) {
> gtk_widget_set_sensitive(vc->menu_item, false);
> vc->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
> + if (vc->gfx.esurface) {
> + eglDestroySurface(qemu_egl_display, vc->gfx.esurface);
> + vc->gfx.esurface = NULL;
> + }
> + if (vc->gfx.esurface) {
> + eglDestroyContext(qemu_egl_display, vc->gfx.ectx);
> + vc->gfx.ectx = NULL;
> + }
> gd_widget_reparent(s->notebook, vc->window, vc->tab_item);
>
> g_signal_connect(vc->window, "delete-event",
> --
> 2.17.1
>
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2021-07-16 22:23 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-07-03 0:28 [PATCH 1/3] ui/gtk-egl: un-tab and re-tab should destroy egl surface and context Dongwon Kim
2021-07-03 0:28 ` [PATCH 2/3] ui/gtk-egl: make sure the right context is set as the current Dongwon Kim
2021-07-16 22:18 ` Kasireddy, Vivek
2021-07-03 0:28 ` [PATCH 3/3] ui/gtk: gd_draw_event returns FALSE when no cairo surface is bound Dongwon Kim
2021-07-06 23:34 ` [PATCH 4/4] ui/gtk-egl: guest fb texture needs to be regenerated when reinitializing egl Dongwon Kim
2021-07-16 22:23 ` Kasireddy, Vivek
2021-07-16 21:55 ` [PATCH 3/3] ui/gtk: gd_draw_event returns FALSE when no cairo surface is bound Kasireddy, Vivek
2021-07-16 22:08 ` [PATCH 1/3] ui/gtk-egl: un-tab and re-tab should destroy egl surface and context Kasireddy, Vivek
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.