All of lore.kernel.org
 help / color / mirror / Atom feed
* [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

* [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 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

* 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

* 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

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.