All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] virtio-gpu: update done only on the scanout associated with rect
@ 2022-05-05 21:40 Dongwon Kim
  2022-05-06  7:53 ` Marc-André Lureau
  0 siblings, 1 reply; 5+ messages in thread
From: Dongwon Kim @ 2022-05-05 21:40 UTC (permalink / raw)
  To: qemu-devel; +Cc: Dongwon Kim, Gerd Hoffmann, Vivek Kasireddy

It only needs to update the scanouts containing the rect area
coming with the resource-flush request from the guest.

Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Vivek Kasireddy <vivek.kasireddy@intel.com>
Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
---
 hw/display/virtio-gpu.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
index 529b5246b2..165ecafd7a 100644
--- a/hw/display/virtio-gpu.c
+++ b/hw/display/virtio-gpu.c
@@ -514,6 +514,9 @@ static void virtio_gpu_resource_flush(VirtIOGPU *g,
         for (i = 0; i < g->parent_obj.conf.max_outputs; i++) {
             scanout = &g->parent_obj.scanout[i];
             if (scanout->resource_id == res->resource_id &&
+                rf.r.x >= scanout->x && rf.r.y >= scanout->y &&
+                rf.r.x + rf.r.width <= scanout->x + scanout->width &&
+                rf.r.y + rf.r.height <= scanout->y + scanout->height &&
                 console_has_gl(scanout->con)) {
                 dpy_gl_update(scanout->con, 0, 0, scanout->width,
                               scanout->height);
-- 
2.30.2



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] virtio-gpu: update done only on the scanout associated with rect
  2022-05-05 21:40 [PATCH] virtio-gpu: update done only on the scanout associated with rect Dongwon Kim
@ 2022-05-06  7:53 ` Marc-André Lureau
  2022-05-06 17:09   ` Dongwon Kim
  0 siblings, 1 reply; 5+ messages in thread
From: Marc-André Lureau @ 2022-05-06  7:53 UTC (permalink / raw)
  To: Dongwon Kim; +Cc: QEMU, Gerd Hoffmann, Vivek Kasireddy

[-- Attachment #1: Type: text/plain, Size: 1398 bytes --]

Hi

On Fri, May 6, 2022 at 1:46 AM Dongwon Kim <dongwon.kim@intel.com> wrote:

> It only needs to update the scanouts containing the rect area
> coming with the resource-flush request from the guest.
>
>
Cc: Gerd Hoffmann <kraxel@redhat.com>
> Cc: Vivek Kasireddy <vivek.kasireddy@intel.com>
> Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
> ---
>  hw/display/virtio-gpu.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
> index 529b5246b2..165ecafd7a 100644
> --- a/hw/display/virtio-gpu.c
> +++ b/hw/display/virtio-gpu.c
> @@ -514,6 +514,9 @@ static void virtio_gpu_resource_flush(VirtIOGPU *g,
>          for (i = 0; i < g->parent_obj.conf.max_outputs; i++) {
>              scanout = &g->parent_obj.scanout[i];
>              if (scanout->resource_id == res->resource_id &&
> +                rf.r.x >= scanout->x && rf.r.y >= scanout->y &&
> +                rf.r.x + rf.r.width <= scanout->x + scanout->width &&
> +                rf.r.y + rf.r.height <= scanout->y + scanout->height &&
>


That doesn't seem to handle intersections/overlapping, I think it should.


>                  console_has_gl(scanout->con)) {
>                  dpy_gl_update(scanout->con, 0, 0, scanout->width,
>                                scanout->height);
> --
> 2.30.2
>
>
>

-- 
Marc-André Lureau

[-- Attachment #2: Type: text/html, Size: 2513 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] virtio-gpu: update done only on the scanout associated with rect
  2022-05-06  7:53 ` Marc-André Lureau
@ 2022-05-06 17:09   ` Dongwon Kim
  2022-07-19 11:15     ` Gerd Hoffmann
  0 siblings, 1 reply; 5+ messages in thread
From: Dongwon Kim @ 2022-05-06 17:09 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: QEMU, Gerd Hoffmann, Vivek Kasireddy

On Fri, May 06, 2022 at 11:53:22AM +0400, Marc-André Lureau wrote:
> Hi
> 
> On Fri, May 6, 2022 at 1:46 AM Dongwon Kim <dongwon.kim@intel.com> wrote:
> 
> > It only needs to update the scanouts containing the rect area
> > coming with the resource-flush request from the guest.
> >
> >
> Cc: Gerd Hoffmann <kraxel@redhat.com>
> > Cc: Vivek Kasireddy <vivek.kasireddy@intel.com>
> > Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
> > ---
> >  hw/display/virtio-gpu.c | 3 +++
> >  1 file changed, 3 insertions(+)
> >
> > diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
> > index 529b5246b2..165ecafd7a 100644
> > --- a/hw/display/virtio-gpu.c
> > +++ b/hw/display/virtio-gpu.c
> > @@ -514,6 +514,9 @@ static void virtio_gpu_resource_flush(VirtIOGPU *g,
> >          for (i = 0; i < g->parent_obj.conf.max_outputs; i++) {
> >              scanout = &g->parent_obj.scanout[i];
> >              if (scanout->resource_id == res->resource_id &&
> > +                rf.r.x >= scanout->x && rf.r.y >= scanout->y &&
> > +                rf.r.x + rf.r.width <= scanout->x + scanout->width &&
> > +                rf.r.y + rf.r.height <= scanout->y + scanout->height &&
> >
> 
> 
> That doesn't seem to handle intersections/overlapping, I think it should.

so set-scanouts and resource flushes are issued per scanout(CRTC/plane
from guest's point of view). In case of intersections/overlapping, there
will be two resource flushes (in case there are two scanouts) and each
resource flush will take care of updating the scanout that covers
partial damaged area.

The problem with the original code is that even if there is a resource
flush request for a single scanout, it does update on both (or more) as
well, which is unnecessary burden.

Thanks

> 
> 
> >                  console_has_gl(scanout->con)) {
> >                  dpy_gl_update(scanout->con, 0, 0, scanout->width,
> >                                scanout->height);
> > --
> > 2.30.2
> >
> >
> >
> 
> -- 
> Marc-André Lureau


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] virtio-gpu: update done only on the scanout associated with rect
  2022-05-06 17:09   ` Dongwon Kim
@ 2022-07-19 11:15     ` Gerd Hoffmann
  2022-07-19 19:39       ` Dongwon Kim
  0 siblings, 1 reply; 5+ messages in thread
From: Gerd Hoffmann @ 2022-07-19 11:15 UTC (permalink / raw)
  To: Dongwon Kim; +Cc: Marc-André Lureau, QEMU, Vivek Kasireddy

On Fri, May 06, 2022 at 10:09:30AM -0700, Dongwon Kim wrote:
> On Fri, May 06, 2022 at 11:53:22AM +0400, Marc-André Lureau wrote:
> > Hi
> > 
> > On Fri, May 6, 2022 at 1:46 AM Dongwon Kim <dongwon.kim@intel.com> wrote:
> > 
> > > It only needs to update the scanouts containing the rect area
> > > coming with the resource-flush request from the guest.
> > >
> > >
> > Cc: Gerd Hoffmann <kraxel@redhat.com>
> > > Cc: Vivek Kasireddy <vivek.kasireddy@intel.com>
> > > Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
> > > ---
> > >  hw/display/virtio-gpu.c | 3 +++
> > >  1 file changed, 3 insertions(+)
> > >
> > > diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
> > > index 529b5246b2..165ecafd7a 100644
> > > --- a/hw/display/virtio-gpu.c
> > > +++ b/hw/display/virtio-gpu.c
> > > @@ -514,6 +514,9 @@ static void virtio_gpu_resource_flush(VirtIOGPU *g,
> > >          for (i = 0; i < g->parent_obj.conf.max_outputs; i++) {
> > >              scanout = &g->parent_obj.scanout[i];
> > >              if (scanout->resource_id == res->resource_id &&
> > > +                rf.r.x >= scanout->x && rf.r.y >= scanout->y &&
> > > +                rf.r.x + rf.r.width <= scanout->x + scanout->width &&
> > > +                rf.r.y + rf.r.height <= scanout->y + scanout->height &&
> > >
> > 
> > 
> > That doesn't seem to handle intersections/overlapping, I think it should.
> 
> so set-scanouts and resource flushes are issued per scanout(CRTC/plane
> from guest's point of view). In case of intersections/overlapping, there
> will be two resource flushes (in case there are two scanouts) and each
> resource flush will take care of updating the scanout that covers
> partial damaged area.

Even though the linux kernel driver sends two flushes, one for each
scanout, it is perfectly valid send a single flush for the complete
resource.

So checking whenever the rectangle is completely within the scanout is
not correct.  When the scanout is covered partly you must update too.
Only when the rectangle is completely outside the scanout it is valid to
skip it.

take care,
  Gerd



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] virtio-gpu: update done only on the scanout associated with rect
  2022-07-19 11:15     ` Gerd Hoffmann
@ 2022-07-19 19:39       ` Dongwon Kim
  0 siblings, 0 replies; 5+ messages in thread
From: Dongwon Kim @ 2022-07-19 19:39 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: Marc-André Lureau, QEMU, Vivek Kasireddy

On Tue, Jul 19, 2022 at 01:15:26PM +0200, Gerd Hoffmann wrote:
> On Fri, May 06, 2022 at 10:09:30AM -0700, Dongwon Kim wrote:
> > On Fri, May 06, 2022 at 11:53:22AM +0400, Marc-André Lureau wrote:
> > > Hi
> > > 
> > > On Fri, May 6, 2022 at 1:46 AM Dongwon Kim <dongwon.kim@intel.com> wrote:
> > > 
> > > > It only needs to update the scanouts containing the rect area
> > > > coming with the resource-flush request from the guest.
> > > >
> > > >
> > > Cc: Gerd Hoffmann <kraxel@redhat.com>
> > > > Cc: Vivek Kasireddy <vivek.kasireddy@intel.com>
> > > > Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
> > > > ---
> > > >  hw/display/virtio-gpu.c | 3 +++
> > > >  1 file changed, 3 insertions(+)
> > > >
> > > > diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
> > > > index 529b5246b2..165ecafd7a 100644
> > > > --- a/hw/display/virtio-gpu.c
> > > > +++ b/hw/display/virtio-gpu.c
> > > > @@ -514,6 +514,9 @@ static void virtio_gpu_resource_flush(VirtIOGPU *g,
> > > >          for (i = 0; i < g->parent_obj.conf.max_outputs; i++) {
> > > >              scanout = &g->parent_obj.scanout[i];
> > > >              if (scanout->resource_id == res->resource_id &&
> > > > +                rf.r.x >= scanout->x && rf.r.y >= scanout->y &&
> > > > +                rf.r.x + rf.r.width <= scanout->x + scanout->width &&
> > > > +                rf.r.y + rf.r.height <= scanout->y + scanout->height &&
> > > >
> > > 
> > > 
> > > That doesn't seem to handle intersections/overlapping, I think it should.
> > 
> > so set-scanouts and resource flushes are issued per scanout(CRTC/plane
> > from guest's point of view). In case of intersections/overlapping, there
> > will be two resource flushes (in case there are two scanouts) and each
> > resource flush will take care of updating the scanout that covers
> > partial damaged area.
> 
> Even though the linux kernel driver sends two flushes, one for each
> scanout, it is perfectly valid send a single flush for the complete
> resource.
> 
> So checking whenever the rectangle is completely within the scanout is
> not correct.  When the scanout is covered partly you must update too.
> Only when the rectangle is completely outside the scanout it is valid to
> skip it.

Gerd,

I got your point. I will take a look into it.

> 
> take care,
>   Gerd
> 


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-07-19 19:40 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-05 21:40 [PATCH] virtio-gpu: update done only on the scanout associated with rect Dongwon Kim
2022-05-06  7:53 ` Marc-André Lureau
2022-05-06 17:09   ` Dongwon Kim
2022-07-19 11:15     ` Gerd Hoffmann
2022-07-19 19:39       ` Dongwon Kim

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.