On Tue, 30 Aug 2022 17:29:35 +0000 Simon Ser <contact@xxxxxxxxxxx> wrote: > If the driver supports it, allow user-space to supply the > DRM_MODE_PAGE_FLIP_ASYNC flag to request an async page-flip. > Set drm_crtc_state.async_flip accordingly. > > Document that drivers will reject atomic commits if an async > flip isn't possible. This allows user-space to fall back to > something else. For instance, Xorg falls back to a blit. > Another option is to wait as close to the next vblank as > possible before performing the page-flip to reduce latency. > > v2: document new uAPI > > Signed-off-by: Simon Ser <contact@xxxxxxxxxxx> > Co-developed-by: André Almeida <andrealmeid@xxxxxxxxxx> > Signed-off-by: André Almeida <andrealmeid@xxxxxxxxxx> > Cc: Daniel Vetter <daniel.vetter@xxxxxxxx> > Cc: Joshua Ashton <joshua@xxxxxxxxx> > Cc: Melissa Wen <mwen@xxxxxxxxxx> > Cc: Alex Deucher <alexander.deucher@xxxxxxx> > Cc: Harry Wentland <hwentlan@xxxxxxx> > Cc: Nicholas Kazlauskas <nicholas.kazlauskas@xxxxxxx> > Cc: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/drm_atomic_uapi.c | 28 +++++++++++++++++++++++++--- > include/uapi/drm/drm_mode.h | 4 ++++ > 2 files changed, 29 insertions(+), 3 deletions(-) ... > diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h > index 86a292c3185a..cce1a1bea645 100644 > --- a/include/uapi/drm/drm_mode.h > +++ b/include/uapi/drm/drm_mode.h > @@ -942,6 +942,10 @@ struct hdr_output_metadata { > * Request that the page-flip is performed as soon as possible, ie. with no > * delay due to waiting for vblank. This may cause tearing to be visible on > * the screen. > + * > + * When used with atomic uAPI, the driver will return an error if the hardware > + * doesn't support performing an asynchronous page-flip for this update. > + * User-space should handle this, e.g. by falling back to a regular page-flip. > */ > #define DRM_MODE_PAGE_FLIP_ASYNC 0x02 > #define DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE 0x4 Hi Simon, recalling what Ville explained that enabling async flips might require one more sync flip first, how is that supposed to work? A TEST_ONLY commit is not allowed to change hardware state, and a failing real commit is not allowed to change hardware state either (right?), therefore a failing async flip cannot prepare the next flip to be async, meaning async will never work. Thanks, pq
Attachment:
pgpjlNbfx2ZP8.pgp
Description: OpenPGP digital signature