* [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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).