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@emersion.fr Reviewed-by: Daniel Vetter daniel.vetter@ffwll.ch Cc: Daniel Stone daniel@fooishbar.org Cc: Bas Nieuwenhuizen bas@basnieuwenhuizen.nl Cc: Dave Airlie airlied@gmail.com Cc: Marek Olšák maraeo@gmail.com Cc: Alex Deucher alexdeucher@gmail.com Cc: Neil Armstrong narmstrong@baylibre.com Cc: Michel Dänzer michel@daenzer.net Cc: Brian Starkey brian.starkey@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.
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