On Tue, 30 Aug 2022 17:29:35 +0000 Simon Ser <cont...@emersion.fr> 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 <cont...@emersion.fr> > Co-developed-by: André Almeida <andrealm...@igalia.com> > Signed-off-by: André Almeida <andrealm...@igalia.com> > Cc: Daniel Vetter <daniel.vet...@ffwll.ch> > Cc: Joshua Ashton <jos...@froggi.es> > Cc: Melissa Wen <m...@igalia.com> > Cc: Alex Deucher <alexander.deuc...@amd.com> > Cc: Harry Wentland <hwent...@amd.com> > Cc: Nicholas Kazlauskas <nicholas.kazlaus...@amd.com> > Cc: Ville Syrjälä <ville.syrj...@linux.intel.com> > --- > 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
pgps9fLqoImFH.pgp
Description: OpenPGP digital signature