<div dir="ltr"><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Fri, Dec 20, 2024 at 10:24 AM Simona Vetter <<a href="mailto:simona.vetter@ffwll.ch">simona.vetter@ffwll.ch</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Thu, Dec 19, 2024 at 05:09:33PM +0100, Michel Dänzer wrote:<br>
> On 2024-12-19 10:02, Daniel Stone wrote:<br>
> > <br>
> > How this would be used in practice is also way too underdocumented. We<br>
> > need to document that exact-round-up 64b is more restrictive than<br>
> > any-multiple-of 64b is more restrictive than 'classic' linear. We need<br>
> > to document what people should advertise - if we were starting from<br>
> > scratch, the clear answer would be that anything which doesn't care<br>
> > should advertise all three, anything advertising any-multiple-of<br>
> > should also advertise exact-round-up, etc.<br>
> > <br>
> > But we're not starting from scratch, and since linear is 'special',<br>
> > userspace already has explicit knowledge of it. So AMD is going to<br>
> > have to advertise LINEAR forever, because media frameworks know about<br>
> > DRM_FORMAT_MOD_LINEAR and pass that around explicitly when they know<br>
> > that the buffer is linear. That and not breaking older userspace<br>
> > running in containers or as part of a bisect or whatever.<br>
> > <br>
> > There's also the question of what e.g. gbm_bo_get_modifier() should<br>
> > return. Again, if we were starting from scratch, most restrictive<br>
> > would make sense. But we're not, so I think it has to return LINEAR<br>
> > for maximum compatibility (because modifiers can't be morphed into<br>
> > other ones for fun), which further cements that we're not removing<br>
> > LINEAR.<br>
> > <br>
> > And how should allocators determine what to go for? Given that, I<br>
> > think the only sensible semantics are, when only LINEAR has been<br>
> > passed, to pick the most restrictive set possible; when LINEAR<br>
> > variants have been passed as well as LINEAR, to act as if LINEAR were<br>
> > not passed at all.<br>
> <br>
> These are all very good points, which call for stricter-than-usual<br>
> application of the "new UAPI requires corresponding user-space patches"<br>
> rule:<br>
> <br>
> * Patches adding support for the new modifiers in Mesa (and kernel)<br>
> drivers for at least two separate vendors<br>
<br>
I think this is too strict? At least I could come up with other scenarios<br>
where we'd need a new linear variant:<br>
- one driver, but two different devices that happen to have incompatible<br>
  linear requirements which break and get fixed with the new linear mode.<br>
- one driver, one device, but non-driver userspace allocates the linear<br>
  buffer somewhere else (e.g. from dma-buf heaps) and gets pitch<br>
  constraints wrong<br>
<br>
> * Patches adding support in at least one non-Mesa user-space component,<br>
> e.g. a Wayland compositor which has code using the existing linear<br>
> modifier (e.g. mutter)<br>
<br>
This also feels a bit too strict, since I think what Daniel proposed is<br>
that drivers do the special LINEAR handling when there are variants<br>
present in the list of compatible modifiers for an alloation. Hence I<br>
don't think compositor patches are necessarily required, but we definitely<br>
need to test to make sure it actually works and there's not surprises.<br>
<br>
The exception is of course when non-mesa userspace allocates/sizes the<br>
buffer itself (maybe for an soc where the display is separate and the gpu<br>
has stricter stride constraints than the display).<br>
<br>
> Ideally also describe a specific multi-vendor scenario which can't work<br>
> with the existing linear modifier, and validate that it works with the<br>
> new ones.<br>
<br>
I think that's really the crucial part, because adding modifiers without<br>
an actual use-case that they fix is just asking for more future trouble I<br>
think.<br></blockquote><div><br></div>It won't always "work" with the new linear modifiers, but when it fails, it will fail in a manner that is debuggable, understandable, and explainable by non-driver developers, such as getting 0 common modifiers between 2 devices. For example, the GUI can report to a user that DRI_PRIME failed because there are no common modifiers between the 2 devices, which is better than failing with an unqueriable difficult-to-handle reason (rejected pitch) or continuing with corruption (invalid pitch) or hangs (invalid pitch causing buffer overrun and corrupting shader binaries next to it).<br></div><div class="gmail_quote gmail_quote_container"><br></div><div class="gmail_quote gmail_quote_container">Marek<br></div></div>