mbox series

[RFC,0/7] Asynchronous flip implementation for i915

Message ID 20200306113927.16904-1-karthik.b.s@intel.com (mailing list archive)
Headers show
Series Asynchronous flip implementation for i915 | expand

Message

Karthik B S March 6, 2020, 11:39 a.m. UTC
Without async flip support in the kernel, fullscreen apps where game
resolution is equal to the screen resolution, must perform an extra blit
per frame prior to flipping.

Asynchronous page flips will also boost the FPS of Mesa benchmarks.

Karthik B S (7):
  drm/i915: Define flip done functions and enable IER
  drm/i915: Add support for async flips in I915
  drm/i915: Make commit call blocking in case of async flips
  drm/i915: Add checks specific to async flips
  drm/i915: Add flip_done_handler definition
  drm/i915: Enable and handle flip done interrupt
  drm/i915: Do not call drm_crtc_arm_vblank_event in async flips

 drivers/gpu/drm/i915/display/intel_display.c | 55 +++++++++++++++++--
 drivers/gpu/drm/i915/display/intel_sprite.c  | 12 ++--
 drivers/gpu/drm/i915/i915_irq.c              | 58 +++++++++++++++++++-
 drivers/gpu/drm/i915/i915_irq.h              |  2 +
 drivers/gpu/drm/i915/i915_reg.h              |  1 +
 5 files changed, 117 insertions(+), 11 deletions(-)

Comments

Zanoni, Paulo R March 10, 2020, 12:04 a.m. UTC | #1
Em sex, 2020-03-06 às 17:09 +0530, Karthik B S escreveu:
> Without async flip support in the kernel, fullscreen apps where game
> resolution is equal to the screen resolution, must perform an extra blit
> per frame prior to flipping.
> 
> Asynchronous page flips will also boost the FPS of Mesa benchmarks.


Thanks a lot for doing this work!

I did some quick smoke tests on a Gemini Lake and while this appears to
be working fine with xf86-video-modesetting, the "pageflip.c" program I
shared previously breaks when you launch it as "./pageflip -n": this
argument makes the program *not* request for page flip events (by not
setting DRM_MODE_PAGE_FLIP_EVENT) and just try to flip as fast as it
can. I didn't investigate why this breaks, but it's probably some
corner case the series is forgetting.

Also, doesn't async pageflip interact with some other display features?
Don't we need to disable at least one of FBC, PSR and/or render
compression when using async page flips?

Ville mentioned some possible interactions with SURF/OFFSET tracking
too (framebuffers not being at the start of the bo), which doesn't seem
to be covered by the series.

Thanks,
Paulo

> 
> Karthik B S (7):
>   drm/i915: Define flip done functions and enable IER
>   drm/i915: Add support for async flips in I915
>   drm/i915: Make commit call blocking in case of async flips
>   drm/i915: Add checks specific to async flips
>   drm/i915: Add flip_done_handler definition
>   drm/i915: Enable and handle flip done interrupt
>   drm/i915: Do not call drm_crtc_arm_vblank_event in async flips
> 
>  drivers/gpu/drm/i915/display/intel_display.c | 55 +++++++++++++++++--
>  drivers/gpu/drm/i915/display/intel_sprite.c  | 12 ++--
>  drivers/gpu/drm/i915/i915_irq.c              | 58 +++++++++++++++++++-
>  drivers/gpu/drm/i915/i915_irq.h              |  2 +
>  drivers/gpu/drm/i915/i915_reg.h              |  1 +
>  5 files changed, 117 insertions(+), 11 deletions(-)
>
Karthik B S March 10, 2020, 10:07 a.m. UTC | #2
> -----Original Message-----
> From: Zanoni, Paulo R <paulo.r.zanoni@intel.com>
> Sent: Tuesday, March 10, 2020 5:35 AM
> To: B S, Karthik <karthik.b.s@intel.com>; intel-gfx@lists.freedesktop.org
> Cc: ville.syrjala@linux.intel.com; Kulkarni, Vandita
> <vandita.kulkarni@intel.com>; Shankar, Uma <uma.shankar@intel.com>
> Subject: Re: [RFC 0/7] Asynchronous flip implementation for i915
> 
> Em sex, 2020-03-06 às 17:09 +0530, Karthik B S escreveu:
> > Without async flip support in the kernel, fullscreen apps where game
> > resolution is equal to the screen resolution, must perform an extra
> > blit per frame prior to flipping.
> >
> > Asynchronous page flips will also boost the FPS of Mesa benchmarks.
> 
> 
> Thanks a lot for doing this work!

Thanks a lot for the review.
> 
> I did some quick smoke tests on a Gemini Lake and while this appears to be
> working fine with xf86-video-modesetting, the "pageflip.c" program I shared
> previously breaks when you launch it as "./pageflip -n": this argument makes
> the program *not* request for page flip events (by not setting
> DRM_MODE_PAGE_FLIP_EVENT) and just try to flip as fast as it can. I didn't
> investigate why this breaks, but it's probably some corner case the series is
> forgetting.

I hadn't tried out this option. Thanks for pointing this out.
Will fix this in the next revision.
> 
> Also, doesn't async pageflip interact with some other display features?
> Don't we need to disable at least one of FBC, PSR and/or render compression
> when using async page flips?
> 
> Ville mentioned some possible interactions with SURF/OFFSET tracking too
> (framebuffers not being at the start of the bo), which doesn't seem to be
> covered by the series.
> 

Yes, both the above hasn't been taken care of in this series. Thanks for pointing it out.
Will check it and update in the next revision.

Thanks,
Karthik

> Thanks,
> Paulo
> 
> >
> > Karthik B S (7):
> >   drm/i915: Define flip done functions and enable IER
> >   drm/i915: Add support for async flips in I915
> >   drm/i915: Make commit call blocking in case of async flips
> >   drm/i915: Add checks specific to async flips
> >   drm/i915: Add flip_done_handler definition
> >   drm/i915: Enable and handle flip done interrupt
> >   drm/i915: Do not call drm_crtc_arm_vblank_event in async flips
> >
> >  drivers/gpu/drm/i915/display/intel_display.c | 55 +++++++++++++++++--
> > drivers/gpu/drm/i915/display/intel_sprite.c  | 12 ++--
> >  drivers/gpu/drm/i915/i915_irq.c              | 58 +++++++++++++++++++-
> >  drivers/gpu/drm/i915/i915_irq.h              |  2 +
> >  drivers/gpu/drm/i915/i915_reg.h              |  1 +
> >  5 files changed, 117 insertions(+), 11 deletions(-)
> >