2023-08-15 19:33:24

by André Almeida

[permalink] [raw]
Subject: [PATCH v6 6/6] drm/doc: Define KMS atomic state set

From: Pekka Paalanen <[email protected]>

Specify how the atomic state is maintained between userspace and
kernel, plus the special case for async flips.

Signed-off-by: Pekka Paalanen <[email protected]>
Signed-off-by: André Almeida <[email protected]>
---
v5: Add note that not every redundant attribute will result in no-op
v4: total rework by Pekka
---
Documentation/gpu/drm-uapi.rst | 44 ++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)

diff --git a/Documentation/gpu/drm-uapi.rst b/Documentation/gpu/drm-uapi.rst
index 65fb3036a580..b91ccaddeeb9 100644
--- a/Documentation/gpu/drm-uapi.rst
+++ b/Documentation/gpu/drm-uapi.rst
@@ -486,3 +486,47 @@ and the CRTC index is its position in this array.

.. kernel-doc:: include/uapi/drm/drm_mode.h
:internal:
+
+KMS atomic state
+================
+
+An atomic commit can change multiple KMS properties in an atomic fashion,
+without ever applying intermediate or partial state changes. Either the whole
+commit succeeds or fails, and it will never be applied partially. This is the
+fundamental improvement of the atomic API over the older non-atomic API which is
+referred to as the "legacy API". Applying intermediate state could unexpectedly
+fail, cause visible glitches, or delay reaching the final state.
+
+An atomic commit can be flagged with DRM_MODE_ATOMIC_TEST_ONLY, which means the
+complete state change is validated but not applied. Userspace should use this
+flag to validate any state change before asking to apply it. If validation fails
+for any reason, userspace should attempt to fall back to another, perhaps
+simpler, final state. This allows userspace to probe for various configurations
+without causing visible glitches on screen and without the need to undo a
+probing change.
+
+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.
+
+A "modeset" is a change in KMS state that might enable, disable, or temporarily
+disrupt the emitted video signal, possibly causing visible glitches on screen. A
+modeset may also take considerably more time to complete than other kinds of
+changes, and the video sink might also need time to adapt to the new signal
+properties. Therefore a modeset must be explicitly allowed with the flag
+DRM_MODE_ATOMIC_ALLOW_MODESET. This in combination with
+DRM_MODE_ATOMIC_TEST_ONLY allows userspace to determine if a state change is
+likely to cause visible disruption on screen and avoid such changes when end
+users do not expect them.
+
+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. Changing any other property will cause the commit to be
+rejected.
--
2.41.0



2023-08-21 20:28:23

by André Almeida

[permalink] [raw]
Subject: 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 <[email protected]>
>>
>> Specify how the atomic state is maintained between userspace and
>> kernel, plus the special case for async flips.
>>
>> Signed-off-by: Pekka Paalanen <[email protected]>
>> Signed-off-by: André Almeida <[email protected]>
>
> [...]
>
>> +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?

2023-10-16 10:53:04

by André Almeida

[permalink] [raw]
Subject: 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 <[email protected]>
>>
>> Specify how the atomic state is maintained between userspace and
>> kernel, plus the special case for async flips.
>>
>> Signed-off-by: Pekka Paalanen <[email protected]>
>> Signed-off-by: André Almeida <[email protected]>
> [...]
>
>> +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é


2023-10-16 12:19:25

by Pekka Paalanen

[permalink] [raw]
Subject: Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set

On Mon, 16 Oct 2023 12:52:32 +0200
André Almeida <[email protected]> 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 <[email protected]>
> >>
> >> Specify how the atomic state is maintained between userspace and
> >> kernel, plus the special case for async flips.
> >>
> >> Signed-off-by: Pekka Paalanen <[email protected]>
> >> Signed-off-by: André Almeida <[email protected]>
> > [...]
> >
> >> +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


Attachments:
(No filename) (849.00 B)
OpenPGP digital signature

2023-10-16 13:42:51

by André Almeida

[permalink] [raw]
Subject: 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 <[email protected]> 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 <[email protected]>
>>>>
>>>> Specify how the atomic state is maintained between userspace and
>>>> kernel, plus the special case for async flips.
>>>>
>>>> Signed-off-by: Pekka Paalanen <[email protected]>
>>>> Signed-off-by: André Almeida <[email protected]>
>>> [...]
>>>
>>>> +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

2023-10-16 14:52:50

by Pekka Paalanen

[permalink] [raw]
Subject: Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set

On Mon, 16 Oct 2023 15:42:16 +0200
André Almeida <[email protected]> wrote:

> Hi Pekka,
>
> On 10/16/23 14:18, Pekka Paalanen wrote:
> > On Mon, 16 Oct 2023 12:52:32 +0200
> > André Almeida <[email protected]> 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 <[email protected]>
> >>>>
> >>>> Specify how the atomic state is maintained between userspace and
> >>>> kernel, plus the special case for async flips.
> >>>>
> >>>> Signed-off-by: Pekka Paalanen <[email protected]>
> >>>> Signed-off-by: André Almeida <[email protected]>
> >>> [...]
> >>>
> >>>> +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


Attachments:
(No filename) (849.00 B)
OpenPGP digital signature

2023-10-16 15:01:49

by André Almeida

[permalink] [raw]
Subject: 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 <[email protected]> wrote:
>
>> Hi Pekka,
>>
>> On 10/16/23 14:18, Pekka Paalanen wrote:
>>> On Mon, 16 Oct 2023 12:52:32 +0200
>>> André Almeida <[email protected]> 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 <[email protected]>
>>>>>>
>>>>>> Specify how the atomic state is maintained between userspace and
>>>>>> kernel, plus the special case for async flips.
>>>>>>
>>>>>> Signed-off-by: Pekka Paalanen <[email protected]>
>>>>>> Signed-off-by: André Almeida <[email protected]>
>>>>> [...]
>>>>>
>>>>>> +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

2023-10-16 15:10:34

by Ville Syrjälä

[permalink] [raw]
Subject: 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 <[email protected]> wrote:
>
> > Hi Pekka,
> >
> > On 10/16/23 14:18, Pekka Paalanen wrote:
> > > On Mon, 16 Oct 2023 12:52:32 +0200
> > > Andr? Almeida <[email protected]> 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 <[email protected]>
> > >>>>
> > >>>> Specify how the atomic state is maintained between userspace and
> > >>>> kernel, plus the special case for async flips.
> > >>>>
> > >>>> Signed-off-by: Pekka Paalanen <[email protected]>
> > >>>> Signed-off-by: Andr? Almeida <[email protected]>
> > >>> [...]
> > >>>
> > >>>> +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

2023-10-16 22:01:11

by Simon Ser

[permalink] [raw]
Subject: Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set

On Monday, October 16th, 2023 at 17:10, Ville Syrjälä <[email protected]> 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 [email protected] wrote:
> >
> > > Hi Pekka,
> > >
> > > On 10/16/23 14:18, Pekka Paalanen wrote:
> > >
> > > > On Mon, 16 Oct 2023 12:52:32 +0200
> > > > André Almeida [email protected] 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 [email protected]
> > > > > > >
> > > > > > > Specify how the atomic state is maintained between userspace and
> > > > > > > kernel, plus the special case for async flips.
> > > > > > >
> > > > > > > Signed-off-by: Pekka Paalanen [email protected]
> > > > > > > Signed-off-by: André Almeida [email protected]
> > > > > > > [...]
> > > > > >
> > > > > > > +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.

2023-10-17 12:14:32

by Ville Syrjälä

[permalink] [raw]
Subject: Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set

On Mon, Oct 16, 2023 at 10:00:51PM +0000, Simon Ser wrote:
> On Monday, October 16th, 2023 at 17:10, Ville Syrj?l? <[email protected]> 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 [email protected] wrote:
> > >
> > > > Hi Pekka,
> > > >
> > > > On 10/16/23 14:18, Pekka Paalanen wrote:
> > > >
> > > > > On Mon, 16 Oct 2023 12:52:32 +0200
> > > > > Andr? Almeida [email protected] 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 [email protected]
> > > > > > > >
> > > > > > > > Specify how the atomic state is maintained between userspace and
> > > > > > > > kernel, plus the special case for async flips.
> > > > > > > >
> > > > > > > > Signed-off-by: Pekka Paalanen [email protected]
> > > > > > > > Signed-off-by: Andr? Almeida [email protected]
> > > > > > > > [...]
> > > > > > >
> > > > > > > > +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

2023-10-23 08:25:39

by Simon Ser

[permalink] [raw]
Subject: Re: [PATCH v6 6/6] drm/doc: Define KMS atomic state set

On Tuesday, October 17th, 2023 at 14:10, Ville Syrjälä <[email protected]> wrote:

> On Mon, Oct 16, 2023 at 10:00:51PM +0000, Simon Ser wrote:
>
> > On Monday, October 16th, 2023 at 17:10, Ville Syrjälä [email protected] 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 [email protected] wrote:
> > > >
> > > > > Hi Pekka,
> > > > >
> > > > > On 10/16/23 14:18, Pekka Paalanen wrote:
> > > > >
> > > > > > On Mon, 16 Oct 2023 12:52:32 +0200
> > > > > > André Almeida [email protected] 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 [email protected]
> > > > > > > > >
> > > > > > > > > Specify how the atomic state is maintained between userspace and
> > > > > > > > > kernel, plus the special case for async flips.
> > > > > > > > >
> > > > > > > > > Signed-off-by: Pekka Paalanen [email protected]
> > > > > > > > > Signed-off-by: André Almeida [email protected]
> > > > > > > > > [...]
> > > > > > > >
> > > > > > > > > +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?