Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
On Monday, November 13th, 2023 at 11:15, Pekka Paalanen wrote: > > > On Mon, 13 Nov 2023 09:44:15 + > Simon Ser cont...@emersion.fr wrote: > > > On Monday, November 13th, 2023 at 10:38, Pekka Paalanen ppaala...@gmail.com > > wrote: > > > > > On Mon, 13 Nov 2023 09:18:39 + > > > Simon Ser cont...@emersion.fr 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? > > > > > > Hi Simon, > > > > > > a fly-by question... > > > > > > > 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 > > > > - 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) > > > > > > It should not be a no-op for the hw, because the hw might be in the > > > middle of a VRR front-porch waiting period, and the commit needs to end > > > the waiting immediately rather than time out? > > > > I'm not sure > > Wou
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
On Mon, 13 Nov 2023 09:44:15 + Simon Ser wrote: > On Monday, November 13th, 2023 at 10:38, Pekka Paalanen > wrote: > > > On Mon, 13 Nov 2023 09:18:39 + > > Simon Ser cont...@emersion.fr 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? > > > > > > Hi Simon, > > > > a fly-by question... > > > > > 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 > > > - 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) > > > > It should not be a no-op for the hw, because the hw might be in the > > middle of a VRR front-porch waiting period, and the commit needs to end > > the waiting immediately rather than time out? > > I'm not sure Would people not want to use async commits to trigger new VRR scanout cycles without content updates? I seem to recall previous comments that switching between sync and async commit modes may take a moment (intel's one last sync flip), so using sync once in a while then using async otherwise is probably not a good idea. > > > - Set another plane
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
On 11/13/23 10:47, Simon Ser wrote: > On Monday, November 13th, 2023 at 10:41, Michel Dänzer > 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
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
On Monday, November 13th, 2023 at 10:41, Michel Dänzer 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.
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
On Monday, November 13th, 2023 at 10:38, Pekka Paalanen wrote: > On Mon, 13 Nov 2023 09:18:39 + > Simon Ser cont...@emersion.fr 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? > > > Hi Simon, > > a fly-by question... > > > 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 > > - 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) > > It should not be a no-op for the hw, because the hw might be in the > middle of a VRR front-porch waiting period, and the commit needs to end > the waiting immediately rather than time out? I'm not sure > > - Set another plane prop to same value: ignored, sends immediate uevent > > (special codepath) > > If the sync case says "same", then shouldn't this say "same" as well to > be consistent? Okay, I think I chose my words badly. By "same" I meant "same as previous item in the list". Here I tried to be more explicit and explain why it's the same behavior. We have a special path in the kernel code that ignores the change, but the effective result is that it doesn't differ from the sync case. Here's a fixed matrix where I don't use confusing words: - Sync atomic page-flip - Set FB_ID to different value: programs hw for page-flip, sends uevent -
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
On 11/13/23 10:18, Simon Ser wrote: > On Monday, October 23rd, 2023 at 10:25, Simon Ser 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? > - 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. -- Earthling Michel Dänzer| https://redhat.com Libre software enthusiast | Mesa and Xwayland developer
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
On Mon, 13 Nov 2023 09:18:39 + Simon Ser wrote: > On Monday, October 23rd, 2023 at 10:25, Simon Ser 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? Hi Simon, a fly-by question... > 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 > - 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) It should not be a no-op for the hw, because the hw might be in the middle of a VRR front-porch waiting period, and the commit needs to end the waiting immediately rather than time out? > - Set another plane prop to same value: ignored, sends immediate uevent > (special codepath) If the sync case says "same", then shouldn't this say "same" as well to be consistent? > - Set another plane prop to different value: always rejected > > To me sync and async look consistent. Thanks, pq pgp046Y78ir6V.pgp Description: OpenPGP digital signature
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
On Monday, October 23rd, 2023 at 10:25, Simon Ser 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 - 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) - Set another plane prop to same value: ignored, sends immediate uevent (special codepath) - Set another plane prop to different value: always rejected To me sync and async look consistent.
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
On Tuesday, October 17th, 2023 at 14:10, Ville Syrjälä wrote: > On Mon, Oct 16, 2023 at 10:00:51PM +, Simon Ser wrote: > > > On Monday, October 16th, 2023 at 17:10, Ville Syrjälä > > ville.syrj...@linux.intel.com wrote: > > > > > On Mon, Oct 16, 2023 at 05:52:22PM +0300, Pekka Paalanen wrote: > > > > > > > On Mon, 16 Oct 2023 15:42:16 +0200 > > > > André Almeida andrealm...@igalia.com wrote: > > > > > > > > > Hi Pekka, > > > > > > > > > > On 10/16/23 14:18, Pekka Paalanen wrote: > > > > > > > > > > > On Mon, 16 Oct 2023 12:52:32 +0200 > > > > > > André Almeida andrealm...@igalia.com wrote: > > > > > > > > > > > > > Hi Michel, > > > > > > > > > > > > > > On 8/17/23 12:37, Michel Dänzer wrote: > > > > > > > > > > > > > > > On 8/15/23 20:57, André Almeida wrote: > > > > > > > > > > > > > > > > > From: Pekka Paalanen pekka.paala...@collabora.com > > > > > > > > > > > > > > > > > > Specify how the atomic state is maintained between userspace > > > > > > > > > and > > > > > > > > > kernel, plus the special case for async flips. > > > > > > > > > > > > > > > > > > Signed-off-by: Pekka Paalanen pekka.paala...@collabora.com > > > > > > > > > Signed-off-by: André Almeida andrealm...@igalia.com > > > > > > > > > [...] > > > > > > > > > > > > > > > > > +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?
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
On Mon, Oct 16, 2023 at 10:00:51PM +, Simon Ser wrote: > On Monday, October 16th, 2023 at 17:10, Ville Syrjälä > wrote: > > > On Mon, Oct 16, 2023 at 05:52:22PM +0300, Pekka Paalanen wrote: > > > > > On Mon, 16 Oct 2023 15:42:16 +0200 > > > André Almeida andrealm...@igalia.com wrote: > > > > > > > Hi Pekka, > > > > > > > > On 10/16/23 14:18, Pekka Paalanen wrote: > > > > > > > > > On Mon, 16 Oct 2023 12:52:32 +0200 > > > > > André Almeida andrealm...@igalia.com wrote: > > > > > > > > > > > Hi Michel, > > > > > > > > > > > > On 8/17/23 12:37, Michel Dänzer wrote: > > > > > > > > > > > > > On 8/15/23 20:57, André Almeida wrote: > > > > > > > > > > > > > > > From: Pekka Paalanen pekka.paala...@collabora.com > > > > > > > > > > > > > > > > Specify how the atomic state is maintained between userspace and > > > > > > > > kernel, plus the special case for async flips. > > > > > > > > > > > > > > > > Signed-off-by: Pekka Paalanen pekka.paala...@collabora.com > > > > > > > > Signed-off-by: André Almeida andrealm...@igalia.com > > > > > > > > [...] > > > > > > > > > > > > > > > +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. -- Ville Syrjälä Intel
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
On Monday, October 16th, 2023 at 17:10, Ville Syrjälä wrote: > On Mon, Oct 16, 2023 at 05:52:22PM +0300, Pekka Paalanen wrote: > > > On Mon, 16 Oct 2023 15:42:16 +0200 > > André Almeida andrealm...@igalia.com wrote: > > > > > Hi Pekka, > > > > > > On 10/16/23 14:18, Pekka Paalanen wrote: > > > > > > > On Mon, 16 Oct 2023 12:52:32 +0200 > > > > André Almeida andrealm...@igalia.com wrote: > > > > > > > > > Hi Michel, > > > > > > > > > > On 8/17/23 12:37, Michel Dänzer wrote: > > > > > > > > > > > On 8/15/23 20:57, André Almeida wrote: > > > > > > > > > > > > > From: Pekka Paalanen pekka.paala...@collabora.com > > > > > > > > > > > > > > Specify how the atomic state is maintained between userspace and > > > > > > > kernel, plus the special case for async flips. > > > > > > > > > > > > > > Signed-off-by: Pekka Paalanen pekka.paala...@collabora.com > > > > > > > Signed-off-by: André Almeida andrealm...@igalia.com > > > > > > > [...] > > > > > > > > > > > > > +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.
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
On Mon, Oct 16, 2023 at 05:52:22PM +0300, Pekka Paalanen wrote: > On Mon, 16 Oct 2023 15:42:16 +0200 > André Almeida wrote: > > > Hi Pekka, > > > > On 10/16/23 14:18, Pekka Paalanen wrote: > > > On Mon, 16 Oct 2023 12:52:32 +0200 > > > André Almeida wrote: > > > > > >> Hi Michel, > > >> > > >> On 8/17/23 12:37, Michel Dänzer wrote: > > >>> On 8/15/23 20:57, André Almeida wrote: > > From: Pekka Paalanen > > > > Specify how the atomic state is maintained between userspace and > > kernel, plus the special case for async flips. > > > > Signed-off-by: Pekka Paalanen > > Signed-off-by: André Almeida > > >>> [...] > > >>> > > +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. The other issues (mainly relating to hardware where not all planes support async flips) I've already highlighted in some earlier mail. -- Ville Syrjälä Intel
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
On 10/16/23 16:52, Pekka Paalanen wrote: On Mon, 16 Oct 2023 15:42:16 +0200 André Almeida wrote: Hi Pekka, On 10/16/23 14:18, Pekka Paalanen wrote: On Mon, 16 Oct 2023 12:52:32 +0200 André Almeida wrote: Hi Michel, On 8/17/23 12:37, Michel Dänzer wrote: On 8/15/23 20:57, André Almeida wrote: From: Pekka Paalanen Specify how the atomic state is maintained between userspace and kernel, plus the special case for async flips. Signed-off-by: Pekka Paalanen Signed-off-by: André Almeida [...] +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? So it should be called out somewhere that applies regardless of PAGE_FLIP_ASYNC. Maybe to the end of the earlier paragraph: +The changes recorded in an atomic commit apply on top the current KMS state in +the kernel. Hence, the complete new KMS state is the complete old KMS state with +the committed property settings done on top. The kernel will try to avoid +no-operation changes, so it is safe for userspace to send redundant property +settings. However, not every situation allows for no-op changes, due to the +need to acquire locks for some attributes. Userspace needs to be aware that some +redundant information might result in oversynchronization issues. No-operation +changes do not count towards actually needed changes, e.g. setting MODE_ID to a +different blob with identical contents as the current KMS state shall not be a +modeset on its own. +As a special exception for VRR needs, explicitly setting FB_ID to its +current value is not a no-op. Would that work? I liked this suggestion, thanks! I'll wrap up a v7 I'd like to try to avoid being more specific about what it does exactly, because that's not the topic here. Such things can be documented with the property itself. This is a summary of what is or is not a no-op or a modeset. Thanks, pq
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
On Mon, 16 Oct 2023 15:42:16 +0200 André Almeida wrote: > Hi Pekka, > > On 10/16/23 14:18, Pekka Paalanen wrote: > > On Mon, 16 Oct 2023 12:52:32 +0200 > > André Almeida wrote: > > > >> Hi Michel, > >> > >> On 8/17/23 12:37, Michel Dänzer wrote: > >>> On 8/15/23 20:57, André Almeida wrote: > From: Pekka Paalanen > > Specify how the atomic state is maintained between userspace and > kernel, plus the special case for async flips. > > Signed-off-by: Pekka Paalanen > Signed-off-by: André Almeida > >>> [...] > >>> > +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? So it should be called out somewhere that applies regardless of PAGE_FLIP_ASYNC. Maybe to the end of the earlier paragraph: > +The changes recorded in an atomic commit apply on top the current KMS state > in > +the kernel. Hence, the complete new KMS state is the complete old KMS state > with > +the committed property settings done on top. The kernel will try to avoid > +no-operation changes, so it is safe for userspace to send redundant property > +settings. However, not every situation allows for no-op changes, due to the > +need to acquire locks for some attributes. Userspace needs to be aware that > some > +redundant information might result in oversynchronization issues. > No-operation > +changes do not count towards actually needed changes, e.g. setting MODE_ID > to a > +different blob with identical contents as the current KMS state shall not be > a > +modeset on its own. +As a special exception for VRR needs, explicitly setting FB_ID to its +current value is not a no-op. Would that work? I'd like to try to avoid being more specific about what it does exactly, because that's not the topic here. Such things can be documented with the property itself. This is a summary of what is or is not a no-op or a modeset. Thanks, pq pgpe4pXB96TQe.pgp Description: OpenPGP digital signature
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
Hi Pekka, On 10/16/23 14:18, Pekka Paalanen wrote: On Mon, 16 Oct 2023 12:52:32 +0200 André Almeida wrote: Hi Michel, On 8/17/23 12:37, Michel Dänzer wrote: On 8/15/23 20:57, André Almeida wrote: From: Pekka Paalanen Specify how the atomic state is maintained between userspace and kernel, plus the special case for async flips. Signed-off-by: Pekka Paalanen Signed-off-by: André Almeida [...] +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. Thanks, pq
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
On Mon, 16 Oct 2023 12:52:32 +0200 André Almeida wrote: > Hi Michel, > > On 8/17/23 12:37, Michel Dänzer wrote: > > On 8/15/23 20:57, André Almeida wrote: > >> From: Pekka Paalanen > >> > >> Specify how the atomic state is maintained between userspace and > >> kernel, plus the special case for async flips. > >> > >> Signed-off-by: Pekka Paalanen > >> Signed-off-by: André Almeida > > [...] > > > >> +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? Thanks, pq pgpcvfTtErhDd.pgp Description: OpenPGP digital signature
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
Hi Michel, On 8/17/23 12:37, Michel Dänzer wrote: On 8/15/23 20:57, André Almeida wrote: From: Pekka Paalanen Specify how the atomic state is maintained between userspace and kernel, plus the special case for async flips. Signed-off-by: Pekka Paalanen Signed-off-by: André Almeida [...] +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. Thanks, André
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
On 8/21/23 22:02, André Almeida wrote: > Em 17/08/2023 07:37, Michel Dänzer escreveu: >> On 8/15/23 20:57, André Almeida wrote: >>> From: Pekka Paalanen >>> >>> Specify how the atomic state is maintained between userspace and >>> kernel, plus the special case for async flips. >>> >>> Signed-off-by: Pekka Paalanen >>> Signed-off-by: André Almeida >> >> [...] >> >>> +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. >> > > I believe the documentation already addresses that sending redundant > information may not lead to the desired behavior during an async flip. Do you > think adding a note about using the same FB_ID would be helpful? Maybe not. -- Earthling Michel Dänzer| https://redhat.com Libre software enthusiast | Mesa and Xwayland developer
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
Hi Michel, Em 17/08/2023 07:37, Michel Dänzer escreveu: On 8/15/23 20:57, André Almeida wrote: From: Pekka Paalanen Specify how the atomic state is maintained between userspace and kernel, plus the special case for async flips. Signed-off-by: Pekka Paalanen Signed-off-by: André Almeida [...] +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. I believe the documentation already addresses that sending redundant information may not lead to the desired behavior during an async flip. Do you think adding a note about using the same FB_ID would be helpful?
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
On 8/17/23 12:37, Michel Dänzer wrote: > On 8/15/23 20:57, André Almeida wrote: >> From: Pekka Paalanen >> >> Specify how the atomic state is maintained between userspace and >> kernel, plus the special case for async flips. >> >> Signed-off-by: Pekka Paalanen >> Signed-off-by: André Almeida > > [...] > >> +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. That said, it doesn't make too much sense to use DRM_MODE_PAGE_FLIP_ASYNC for this, since it won't have any effect outside of vertical blank anyway. -- Earthling Michel Dänzer| https://redhat.com Libre software enthusiast | Mesa and Xwayland developer
Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set
On 8/15/23 20:57, André Almeida wrote: > From: Pekka Paalanen > > Specify how the atomic state is maintained between userspace and > kernel, plus the special case for async flips. > > Signed-off-by: Pekka Paalanen > Signed-off-by: André Almeida [...] > +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. -- Earthling Michel Dänzer| https://redhat.com Libre software enthusiast | Mesa and Xwayland developer