On 11/13/23 10:47, Simon Ser wrote: > On Monday, November 13th, 2023 at 10:41, Michel Dänzer > <michel.daen...@mailbox.org> wrote: > >> On 11/13/23 10:18, Simon Ser wrote: >> >>> On Monday, October 23rd, 2023 at 10:25, Simon Ser cont...@emersion.fr wrote: >>> >>>>>>>>>>>>> +An atomic commit with the flag DRM_MODE_PAGE_FLIP_ASYNC is >>>>>>>>>>>>> allowed to >>>>>>>>>>>>> +effectively change only the FB_ID property on any planes. >>>>>>>>>>>>> No-operation changes >>>>>>>>>>>>> +are ignored as always. [...] >>>>>>>>>>>>> During the hackfest in Brno, it was mentioned that a commit which >>>>>>>>>>>>> re-sets the same FB_ID could actually have an effect with VRR: It >>>>>>>>>>>>> could trigger scanout of the next frame before vertical blank has >>>>>>>>>>>>> reached its maximum duration. Some kind of mechanism is required >>>>>>>>>>>>> for this in order to allow user space to perform low frame rate >>>>>>>>>>>>> compensation. >>>>>>>>>>> >>>>>>>>>>> Xaver tested this hypothesis in a flipping the same fb in a VRR >>>>>>>>>>> monitor >>>>>>>>>>> and it worked as expected, so this shouldn't be a concern. >>>>>>>>>>> Right, so it must have some effect. It cannot be simply ignored >>>>>>>>>>> like in >>>>>>>>>>> the proposed doc wording. Do we special-case re-setting the same >>>>>>>>>>> FB_ID >>>>>>>>>>> as "not a no-op" or "not ignored" or some other way? >>>>>>>>>>> There's an effect in the refresh rate, the image won't change but it >>>>>>>>>>> will report that a flip had happened asynchronously so the reported >>>>>>>>>>> framerate will be increased. Maybe an additional wording could be >>>>>>>>>>> like: >>>>>>>>> >>>>>>>>> Flipping to the same FB_ID will result in a immediate flip as if it >>>>>>>>> was >>>>>>>>> changing to a different one, with no effect on the image but effecting >>>>>>>>> the reported frame rate. >>>>>>>> >>>>>>>> Re-setting FB_ID to its current value is a special case regardless of >>>>>>>> PAGE_FLIP_ASYNC, is it not? >>>>>>> >>>>>>> No. The rule has so far been that all side effects are observed >>>>>>> even if you flip to the same fb. And that is one of my annoyances >>>>>>> with this proposal. The rules will now be different for async flips >>>>>>> vs. everything else. >>>>>> >>>>>> Well with the patches the async page-flip case is exactly the same as >>>>>> the non-async page-flip case. In both cases, if a FB_ID is included in >>>>>> an atomic commit then the side effects are triggered even if the property >>>>>> value didn't change. The rules are the same for everything. >>>>> >>>>> I see it only checking if FB_ID changes or not. If it doesn't >>>>> change then the implication is that the side effects will in >>>>> fact be skipped as not all planes may even support async flips. >>>> >>>> Hm right. So the problem is that setting any prop = same value as >>>> previous one will result in a new page-flip for asynchronous page-flips, >>>> but will not result in any side-effect for asynchronous page-flips. >>>> >>>> Does it actually matter though? For async page-flips, I don't think this >>>> would result in any actual difference in behavior? >>> >>> To sum this up, here is a matrix of behavior as seen by user-space: >>> >>> - Sync atomic page-flip >>> - Set FB_ID to different value: programs hw for page-flip, sends uevent >>> - Set FB_ID to same value: same (important for VRR) >>> - Set another plane prop to same value: same >> >> A page flip is programmed even if FB_ID isn't touched? > > I believe so. Set CRTC_X on a plane to the same value as before, and the > CRTC gets implicitly included in the atomic commit? > >>> - Set another plane prop to different value: maybe rejected if modeset >>> required >>> - Async atomic page-flip >>> - Set FB_ID to different value: updates hw with new FB address, sends >>> immediate uevent >>> - Set FB_ID to same value: same (no-op for the hw) >> >> No-op implies it doesn't trigger scanning out a frame with VRR, if >> scanout is currently in vertical blank. Is that the case? If so, async >> flips can't reliably trigger scanning out a frame with VRR. > > By no-op I mean that the hw is programmed for an immediate async flip > with the same buffer addr as the previous one. So this doesn't actually > change anything.
If a flip is programmed to the HW, it's not a no-op any more than in the sync case, in particular not with VRR. -- Earthling Michel Dänzer | https://redhat.com Libre software enthusiast | Mesa and Xwayland developer