[PATCH v4] drm/fourcc: document modifier uniqueness requirements

Daniel Vetter daniel at ffwll.ch
Fri Jun 19 16:36:17 UTC 2020


On Fri, Jun 19, 2020 at 01:39:34PM +0100, Brian Starkey wrote:
> Hi Simon,
> 
> On Fri, Jun 19, 2020 at 11:12:25AM +0000, Simon Ser wrote:
> > There have suggestions to bake pitch alignment, address alignement,
> > contiguous memory or other placement (hidden VRAM, GTT/BAR, etc)
> > constraints into modifiers. Last time this was brought up it seemed
> > like the consensus was to not allow this. Document this in drm_fourcc.h.
> > 
> > There are several reasons for this.
> > 
> > - Encoding all of these constraints in the modifiers would explode the
> >   search space pretty quickly (we only have 64 bits to work with).
> > - Modifiers need to be unambiguous: a buffer can only have a single
> >   modifier.
> > - Modifier users aren't expected to parse modifiers (except drivers).
> > 
> > v2: add paragraph about aliases (Daniel)
> > 
> > v3: fix unrelated changes sent with the patch
> > 
> > v4: disambiguate users between driver and higher-level programs (Brian,
> > Daniel)
> > 
> > Signed-off-by: Simon Ser <contact at emersion.fr>
> > Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> > Cc: Daniel Stone <daniel at fooishbar.org>
> > Cc: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
> > Cc: Dave Airlie <airlied at gmail.com>
> > Cc: Marek Olšák <maraeo at gmail.com>
> > Cc: Alex Deucher <alexdeucher at gmail.com>
> > Cc: Neil Armstrong <narmstrong at baylibre.com>
> > Cc: Michel Dänzer <michel at daenzer.net>
> > Cc: Brian Starkey <brian.starkey at arm.com>
> > ---
> >  include/uapi/drm/drm_fourcc.h | 22 ++++++++++++++++++++++
> >  1 file changed, 22 insertions(+)
> > 
> > diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h
> > index 490143500a50..4d3f819dca0b 100644
> > --- a/include/uapi/drm/drm_fourcc.h
> > +++ b/include/uapi/drm/drm_fourcc.h
> > @@ -58,6 +58,28 @@ extern "C" {
> >   * may preserve meaning - such as number of planes - from the fourcc code,
> >   * whereas others may not.
> >   *
> > + * Modifiers must uniquely encode buffer layout. In other words, a buffer must
> > + * match only a single modifier. A modifier must not be a subset of layouts of
> > + * another modifier. For instance, it's incorrect to encode pitch alignment in
> > + * a modifier: a buffer may match a 64-pixel aligned modifier and a 32-pixel
> > + * aligned modifier. That said, modifiers can have implicit minimal
> > + * requirements.
> > + *
> > + * For modifiers where the combination of fourcc code and modifier can alias,
> > + * a canonical pair needs to be defined and used by all drivers. An example
> > + * is AFBC, where both ARGB and ABGR have the exact same compressed layout.
> 
> I still don't agree with this sentence. ARGB and ABGR have different
> compressed layouts in AFBC.

Hm then maybe I got confused for the exact reason why afbc has defined
canonical fourcc codes in Documentation/gpu/afbc.rst? They all use the
BGR versions, no RGB anywhere to be found.

What's the reason then behind the "Formats which are not listed should be
avoided." in that doc? That's the case I wanted to refer to here.
-Daniel

> 
> Thanks,
> -Brian
> 
> > + *
> > + * There are two kinds of modifier users:
> > + *
> > + * - Kernel and user-space drivers: for drivers it's important that modifiers
> > + *   don't alias, otherwise two drivers might support the same format but use
> > + *   different aliases, preventing them from sharing buffers in an efficient
> > + *   format.
> > + * - Higher-level programs interfacing with KMS/GBM/EGL/Vulkan/etc: these users
> > + *   see modifiers as opaque tokens they can check for equality and intersect.
> > + *   These users musn't need to know to reason about the modifier value
> > + *   (i.e. they are not expected to extract information out of the modifier).
> > + *
> >   * Vendors should document their modifier usage in as much detail as
> >   * possible, to ensure maximum compatibility across devices, drivers and
> >   * applications.
> > -- 
> > 2.27.0
> > 
> > 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the dri-devel mailing list