[PATCH v2] tests/kms_async_flips: Create subtest for overlay planes
André Almeida
andrealmeid at igalia.com
Thu Feb 27 02:07:26 UTC 2025
Hi Alex,
Em 25/02/2025 19:47, Alex Hung escreveu:
>
>
> On 2/25/25 15:01, André Almeida wrote:
>> Hi Alex,
>>
>> Em 25/02/2025 18:40, Alex Hung escreveu:
>>>
>>>
>>> On 2/25/25 13:16, André Almeida wrote:
>>>> Hi Alex,
>>>>
>>>> Thanks for testing it.
>>>>
>>>> Em 25/02/2025 16:06, Alex Hung escreveu:
>>>>>
>>>>> We don't have a CI to test individual IGT patches so I tested this
>>>>> patch on an APU and dGPU with kms_async_flips
>>>>
>>>> [...]
>>>>
>>>>>
>>>>>
>>>>> If I run overlay-atomic alone (i.e., --run-subtest overlay-atomic),
>>>>> overlay-atomic fails as below (partial outputs only). Is this an
>>>>> expected result? Does overlay-atomic need to run along with other
>>>>> subtests?
>>>>>
>>>>
>>>> This is not the expected result, I tried to reproduce here but it
>>>> worked fine. Tested on Steam Deck, rebased on current igt master
>>>> (commit 6cdff4099c6c95e):
>>>
>>> I also have IGT rebased to current commit (same as yours)
>>>
>>> db3a185f3 (HEAD -> master) tests/kms_async_flips: Create subtest for
>>> overlay planes
>>> 6cdff4099 (origin/master, origin/HEAD) lib/i915/fbc: fbc psr combo
>>> support update for xe3
>>>
>>> The kernels I tried are
>>> - 6.11.0-18-generic (from Ubuntu's current)
>>> - 6.12.0 from amd-staging-drm-next
>>>
>>
>> The changes required for this tested can't be found in any of those
>> branches. They are in after the tag drm-misc-next-2025-02-20 ("drm-
>> misc- next for v6.15") and this is the patchset:
>>
>> https://lore.kernel.org/lkml/20250127-tonyk-async_flip-
>> v12-2-0f7f8a8610d3 at igalia.com/
>>
>> So now the mistery is not about why this test fails, but why it
>> succeeds in the first place :) I will have a look using an older
>> kernel to see if I can figure that out, thanks!
>>
>
> I applied the two patches on top of amd-staging-drm-next:
> drm/amdgpu: Enable async flip on overlay planes
> drm/atomic: Let drivers decide which planes to async flip
>
> The results are the same, i.e. SUCCESS when running kms_async_flips, and
> FAIL when running overlay-atomic alone but with different error messages
> (see below). I can tell the patterns on screen are different.
>
>
This error signs that the commit was accepted but the flip wasn't async.
Could you try to run in a newer kernel to see the results? This is the
HEAD that I'm using, no need to apply any kernel patch:
commit 72d0af4accd965dc32f504440d74d0a4d18bf781
(drm-misc/for-linux-next, drm-misc/drm-misc-next)
> IGT-Version: 1.30-gdcb53a091 (x86_64) (Linux: 6.12.0-99-custom x86_64)
> Using IGT_SRANDOM=1740523111 for randomisation
> Opened device: /dev/dri/card1
> Starting subtest: overlay-atomic
> Starting dynamic subtest: pipe-A-eDP-1
> (kms_async_flips:3133) CRITICAL: Test assertion failure function
> test_async_flip, file ../tests/kms_async_flips.c:384:
> (kms_async_flips:3133) CRITICAL: Failed assertion: (fps / 1000) > (data-
> >refresh_rate * MIN_FLIPS_PER_FRAME)
> (kms_async_flips:3133) CRITICAL: Last errno: 38, Function not implemented
> (kms_async_flips:3133) CRITICAL: FPS should be significantly higher than
> the refresh rate
> Stack trace:
> #0 ../lib/igt_core.c:2055 __igt_fail_assert()
> #1 ../tests/kms_async_flips.c:384 test_async_flip()
> #2 ../tests/kms_async_flips.c:728 run_test.constprop.0()
> #3 ../tests/kms_async_flips.c:840 __igt_unique____real_main773()
> #4 ../tests/kms_async_flips.c:773 main()
> #5 ../sysdeps/nptl/libc_start_call_main.h:74 __libc_start_call_main()
> #6 ../csu/libc-start.c:128 __libc_start_main@@GLIBC_2.34()
> #7 [_start+0x25]
> Dynamic subtest pipe-A-eDP-1 failed.
>
>
>
>>>>
>>>> sudo ./build/tests/kms_async_flips --run-subtest overlay-atomic
>>>> IGT-Version: 1.30-g19c7e62ea (x86_64) (Linux: 6.14.0-rc4-00318-
>>>> g72d0af4accd9 x86_64)
>>>> Using IGT_SRANDOM=1740513273 for randomisation
>>>> Opened device: /dev/dri/card0
>>>> Starting subtest: overlay-atomic
>>>> Starting dynamic subtest: pipe-A-eDP-1
>>>> Dynamic subtest pipe-A-eDP-1: SUCCESS (2.124s)
>>>> Starting dynamic subtest: pipe-B-eDP-1
>>>> Dynamic subtest pipe-B-eDP-1: SUCCESS (2.101s)
>>>> Starting dynamic subtest: pipe-C-eDP-1
>>>> Dynamic subtest pipe-C-eDP-1: SUCCESS (2.101s)
>>>> Starting dynamic subtest: pipe-D-eDP-1
>>>> Dynamic subtest pipe-D-eDP-1: SUCCESS (2.101s)
>>>> Subtest overlay-atomic: SUCCESS (8.950s)
>>>>
>>>> However, I saw this type of error before where the first flip is
>>>> refused with -EINVAL. That usually happens because we can't change
>>>> most of plane properties with the DRM_MODE_PAGE_FLIP_ASYNC flag and
>>>> the previous state was somewhat different from the one that we want
>>>> to present now, so we need to do a sync flip to modeset, and then do
>>>> the async ones.
>>>>
>>>> Is there anything particular from your setup so I can try to
>>>> reproduce here? I see that you have more than one card attached,
>>>> what did you run prior to the test on that card?
>>>
>>> I tried on phoenix APU and dGPU Radeon RX 6800/6800 XT, and both of
>>> them have the same results.
>>>
>>>>
>>>> Alternatively, adding the following lines in the begining of
>>>> test_async_flip() should force a DRM_MODE_ATOMIC_ALLOW_MODESET and
>>>> allow the next page flips:
>>>>
>>>> igt_plane_set_fb(data->overlay_plane, &data->bufs[0]);
>>>> igt_display_try_commit_atomic(&data->display,
>>>> DRM_MODE_ATOMIC_ALLOW_MODESET, data);
>>>>
>>>
>>> Like the below changes? It doesn't fix the error messages for me, and
>>> I saw some SIGSEGV.
>>>
>>> --- a/tests/kms_async_flips.c
>>> +++ b/tests/kms_async_flips.c
>>> @@ -326,6 +326,9 @@ static void test_async_flip(data_t *data)
>>> struct timeval start, end, diff;
>>> int suspend_time = RUN_TIME / 2;
>>>
>>> + igt_plane_set_fb(data->overlay_plane, &data->bufs[0]);
>>> + igt_display_try_commit_atomic(&data->display,
>>> DRM_MODE_ATOMIC_ALLOW_MODESET, data);
>>> +
>>> igt_display_commit2(&data->display, data-
>>> >display.is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY);
>>>
>>>
>>>
>>> If either alternate-sync-async-flip or alternate-sync-async-flip-
>>> atomic is run before overlay-atomic, overlay-atomic will SUCCESS
>>> (tested on phoenix APU)
>>>
>>> Cheers,
>>> Alex Hung
>>>
>>>> Thanks,
>>>> André
>>>>
>>>>> IGT-Version: 1.30-g8fee6d12c (x86_64) (Linux: 6.11.0-18-generic
>>>>> x86_64)
>>>>> Using IGT_SRANDOM=1740510058 for randomisation
>>>>> Opened device: /dev/dri/card1
>>>>> Starting subtest: overlay-atomic
>>>>> Starting dynamic subtest: pipe-A-DP-1
>>>>> (kms_async_flips:3180096) CRITICAL: Test assertion failure function
>>>>> test_async_flip, file ../tests/kms_async_flips.c:361:
>>>>> (kms_async_flips:3180096) CRITICAL: Failed assertion: ret == 0
>>>>> (kms_async_flips:3180096) CRITICAL: Last errno: 22, Invalid argument
>>>>> (kms_async_flips:3180096) CRITICAL: error: -22 != 0
>>>>> Stack trace:
>>>>> Dynamic subtest pipe-A-DP-1 failed.
>>>>> **** DEBUG ****
>>>>> (kms_async_flips:3180096) DEBUG: Test requirement passed: !
>>>>> (is_joiner_mode(data->drm_fd, data->output))
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG:
>>>>> igt_create_fb_with_bo_size(width=3440, height=1440,
>>>>> format=XR24(0x34325258), modifier=0x0, size=0)
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG:
>>>>> igt_create_fb_with_bo_size(handle=1, pitch=13824)
>>>>> (kms_async_flips:3180096) ioctl_wrappers-DEBUG: Test requirement
>>>>> passed: igt_has_fb_modifiers(fd)
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG: Test requirement passed:
>>>>> cairo_surface_status(fb->cairo_surface) == CAIRO_STATUS_SUCCESS
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG: Test requirement passed:
>>>>> cairo_surface_status(fb->cairo_surface) == CAIRO_STATUS_SUCCESS
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG:
>>>>> igt_create_fb_with_bo_size(width=3440, height=1440,
>>>>> format=XR24(0x34325258), modifier=0x0, size=0)
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG:
>>>>> igt_create_fb_with_bo_size(handle=2, pitch=13824)
>>>>> (kms_async_flips:3180096) ioctl_wrappers-DEBUG: Test requirement
>>>>> passed: igt_has_fb_modifiers(fd)
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG: Test requirement passed:
>>>>> cairo_surface_status(fb->cairo_surface) == CAIRO_STATUS_SUCCESS
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG: Test requirement passed:
>>>>> cairo_surface_status(fb->cairo_surface) == CAIRO_STATUS_SUCCESS
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG:
>>>>> igt_create_fb_with_bo_size(width=3440, height=1440,
>>>>> format=XR24(0x34325258), modifier=0x0, size=0)
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG:
>>>>> igt_create_fb_with_bo_size(handle=3, pitch=13824)
>>>>> (kms_async_flips:3180096) ioctl_wrappers-DEBUG: Test requirement
>>>>> passed: igt_has_fb_modifiers(fd)
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG: Test requirement passed:
>>>>> cairo_surface_status(fb->cairo_surface) == CAIRO_STATUS_SUCCESS
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG: Test requirement passed:
>>>>> cairo_surface_status(fb->cairo_surface) == CAIRO_STATUS_SUCCESS
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG:
>>>>> igt_create_fb_with_bo_size(width=3440, height=1440,
>>>>> format=XR24(0x34325258), modifier=0x0, size=0)
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG:
>>>>> igt_create_fb_with_bo_size(handle=4, pitch=13824)
>>>>> (kms_async_flips:3180096) ioctl_wrappers-DEBUG: Test requirement
>>>>> passed: igt_has_fb_modifiers(fd)
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG: Test requirement passed:
>>>>> cairo_surface_status(fb->cairo_surface) == CAIRO_STATUS_SUCCESS
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG: Test requirement passed:
>>>>> cairo_surface_status(fb->cairo_surface) == CAIRO_STATUS_SUCCESS
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG:
>>>>> igt_create_fb_with_bo_size(width=3440, height=1440,
>>>>> format=XR24(0x34325258), modifier=0x0, size=0)
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG:
>>>>> igt_create_fb_with_bo_size(handle=5, pitch=13824)
>>>>> (kms_async_flips:3180096) ioctl_wrappers-DEBUG: Test requirement
>>>>> passed: igt_has_fb_modifiers(fd)
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG: Test requirement passed:
>>>>> cairo_surface_status(fb->cairo_surface) == CAIRO_STATUS_SUCCESS
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG: Test requirement passed:
>>>>> cairo_surface_status(fb->cairo_surface) == CAIRO_STATUS_SUCCESS
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG:
>>>>> igt_create_fb_with_bo_size(width=3440, height=1440,
>>>>> format=XR24(0x34325258), modifier=0x0, size=0)
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG:
>>>>> igt_create_fb_with_bo_size(handle=6, pitch=13824)
>>>>> (kms_async_flips:3180096) ioctl_wrappers-DEBUG: Test requirement
>>>>> passed: igt_has_fb_modifiers(fd)
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG: Test requirement passed:
>>>>> cairo_surface_status(fb->cairo_surface) == CAIRO_STATUS_SUCCESS
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG: Test requirement passed:
>>>>> cairo_surface_status(fb->cairo_surface) == CAIRO_STATUS_SUCCESS
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG:
>>>>> igt_create_fb_with_bo_size(width=3440, height=1440,
>>>>> format=XR24(0x34325258), modifier=0x0, size=0)
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG:
>>>>> igt_create_fb_with_bo_size(handle=7, pitch=13824)
>>>>> (kms_async_flips:3180096) ioctl_wrappers-DEBUG: Test requirement
>>>>> passed: igt_has_fb_modifiers(fd)
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG: Test requirement passed:
>>>>> cairo_surface_status(fb->cairo_surface) == CAIRO_STATUS_SUCCESS
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG: Test requirement passed:
>>>>> cairo_surface_status(fb->cairo_surface) == CAIRO_STATUS_SUCCESS
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG:
>>>>> igt_create_fb_with_bo_size(width=3440, height=1440,
>>>>> format=XR24(0x34325258), modifier=0x0, size=0)
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG:
>>>>> igt_create_fb_with_bo_size(handle=8, pitch=13824)
>>>>> (kms_async_flips:3180096) ioctl_wrappers-DEBUG: Test requirement
>>>>> passed: igt_has_fb_modifiers(fd)
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG: Test requirement passed:
>>>>> cairo_surface_status(fb->cairo_surface) == CAIRO_STATUS_SUCCESS
>>>>> (kms_async_flips:3180096) igt_fb-DEBUG: Test requirement passed:
>>>>> cairo_surface_status(fb->cairo_surface) == CAIRO_STATUS_SUCCESS
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: A.0:
>>>>> plane_set_fb(151)
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: A.0:
>>>>> plane_set_size (3440x1440)
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: A.0:
>>>>> fb_set_position(0,0)
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: A.0:
>>>>> fb_set_size(3440x1440)
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: A.0:
>>>>> plane_set_size (3440x1440)
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: A.2:
>>>>> plane_set_fb(151)
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: A.2:
>>>>> plane_set_size (3440x1440)
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: A.2:
>>>>> fb_set_position(0,0)
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: A.2:
>>>>> fb_set_size(3440x1440)
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: A.2:
>>>>> plane_set_size (3440x1440)
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: commit {
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: Pipe A: Setting property
>>>>> "MODE_ID" to 0x96/150
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: Pipe A: Setting property
>>>>> "ACTIVE" to 0x1/1
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: populating
>>>>> plane data: A.0, fb 151
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.0: Setting
>>>>> property "SRC_X" to 0x0/0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.0: Setting
>>>>> property "SRC_Y" to 0x0/0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.0: Setting
>>>>> property "SRC_W" to 0xd700000/225443840
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.0: Setting
>>>>> property "SRC_H" to 0x5a00000/94371840
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.0: Setting
>>>>> property "CRTC_W" to 0xd70/3440
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.0: Setting
>>>>> property "CRTC_H" to 0x5a0/1440
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.0: Setting
>>>>> property "FB_ID" to 0x97/151
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.0: Setting
>>>>> property "CRTC_ID" to 0x5b/91
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.0: Setting
>>>>> property "COLOR_ENCODING" to 0x1/1
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.0: Setting
>>>>> property "COLOR_RANGE" to 0x0/0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: populating
>>>>> plane data: A.2, fb 151
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.2: Setting
>>>>> property "SRC_X" to 0x0/0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.2: Setting
>>>>> property "SRC_Y" to 0x0/0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.2: Setting
>>>>> property "SRC_W" to 0xd700000/225443840
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.2: Setting
>>>>> property "SRC_H" to 0x5a00000/94371840
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.2: Setting
>>>>> property "CRTC_W" to 0xd70/3440
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.2: Setting
>>>>> property "CRTC_H" to 0x5a0/1440
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.2: Setting
>>>>> property "FB_ID" to 0x97/151
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.2: Setting
>>>>> property "CRTC_ID" to 0x5b/91
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: populating
>>>>> plane data: B.0, fb 0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane B.0: Setting
>>>>> property "COLOR_ENCODING" to 0x0/0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane B.0: Setting
>>>>> property "COLOR_RANGE" to 0x0/0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: populating
>>>>> plane data: C.0, fb 0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane C.0: Setting
>>>>> property "COLOR_ENCODING" to 0x0/0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane C.0: Setting
>>>>> property "COLOR_RANGE" to 0x0/0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: populating
>>>>> plane data: D.0, fb 0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane D.0: Setting
>>>>> property "COLOR_ENCODING" to 0x0/0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane D.0: Setting
>>>>> property "COLOR_RANGE" to 0x0/0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: populating
>>>>> plane data: E.0, fb 0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane E.0: Setting
>>>>> property "COLOR_ENCODING" to 0x0/0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane E.0: Setting
>>>>> property "COLOR_RANGE" to 0x0/0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: populating
>>>>> plane data: F.0, fb 0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane F.0: Setting
>>>>> property "COLOR_ENCODING" to 0x0/0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane F.0: Setting
>>>>> property "COLOR_RANGE" to 0x0/0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: DP-1:
>>>>> preparing atomic, pipe: A
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: DP-1: Setting property
>>>>> "CRTC_ID" to 0x5b/91
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: }
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: A.2:
>>>>> plane_set_fb(154)
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: A.2:
>>>>> plane_set_size (3440x1440)
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: A.2:
>>>>> fb_set_position(0,0)
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: A.2:
>>>>> fb_set_size(3440x1440)
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: commit {
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: populating
>>>>> plane data: A.2, fb 154
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.2: Setting
>>>>> property "SRC_X" to 0x0/0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.2: Setting
>>>>> property "SRC_Y" to 0x0/0
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.2: Setting
>>>>> property "SRC_W" to 0xd700000/225443840
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.2: Setting
>>>>> property "SRC_H" to 0x5a00000/94371840
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.2: Setting
>>>>> property "CRTC_W" to 0xd70/3440
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.2: Setting
>>>>> property "CRTC_H" to 0x5a0/1440
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.2: Setting
>>>>> property "FB_ID" to 0x9a/154
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: plane A.2: Setting
>>>>> property "CRTC_ID" to 0x5b/91
>>>>> (kms_async_flips:3180096) igt_kms-DEBUG: display: }
>>>>> (kms_async_flips:3180096) CRITICAL: Test assertion failure function
>>>>> test_async_flip, file ../tests/kms_async_flips.c:361:
>>>>> (kms_async_flips:3180096) CRITICAL: Failed assertion: ret == 0
>>>>> (kms_async_flips:3180096) CRITICAL: Last errno: 22, Invalid argument
>>>>> (kms_async_flips:3180096) CRITICAL: error: -22 != 0
>>>>> (kms_async_flips:3180096) igt_core-INFO: Stack trace:
>>>>> **** END ****
>>>>> Dynamic subtest pipe-A-DP-1: FAIL (0.227s)
>>>>>
>>>>>
>>>>>
>>>>>>
>>>>>>>
>>>>>>> Thanks!
>>>>>>>
>>>>>>>> Vitaly
>>>>>>>>
>>>>>>>>> Please add to Cc Vitaly from AMD:
>>>>>>>>> Cc: Vitaly Prosyak <vitaly.prosyak at amd.com>
>>>>>>>>>
>>>>>>>>> Also add Jeevan here:
>>>>>>>>> Cc: Jeevan B <jeevan.b at intel.com>
>>>>>>>>>
>>>>>>>>> Regards,
>>>>>>>>> Kamil
>>>>>>>>>
>>>>>>>>>> Signed-off-by: André Almeida <andrealmeid at igalia.com>
>>>>>>>>>> ---
>>>>>>>>>> v2: Add test description for GitLab compilation
>>>>>>>>>> ---
>>>>>>>>>> tests/kms_async_flips.c | 45 ++++++++++++++++++++++++++++++
>>>>>>>>>> + + + + +++----
>>>>>>>>>> 1 file changed, 41 insertions(+), 4 deletions(-)
>>>>>>>>>>
>>>>>>>>>> diff --git a/tests/kms_async_flips.c b/tests/kms_async_flips.c
>>>>>>>>>> index 4a72be7b5..dd0907d50 100644
>>>>>>>>>> --- a/tests/kms_async_flips.c
>>>>>>>>>> +++ b/tests/kms_async_flips.c
>>>>>>>>>> @@ -89,6 +89,9 @@
>>>>>>>>>> *
>>>>>>>>>> * SUBTEST: async-flip-suspend-resume
>>>>>>>>>> * Description: Verify the async flip functionality with
>>>>>>>>>> suspend and resume cycle
>>>>>>>>>> + *
>>>>>>>>>> + * SUBTEST: overlay-atomic
>>>>>>>>>> + * Description: Verify overlay planes with async flips in
>>>>>>>>>> atomic API
>>>>>>>>>> */
>>>>>>>>>> #define CURSOR_POS 128
>>>>>>>>>> @@ -109,12 +112,14 @@ typedef struct {
>>>>>>>>>> uint32_t crtc_id;
>>>>>>>>>> uint32_t refresh_rate;
>>>>>>>>>> struct igt_fb bufs[NUM_FBS];
>>>>>>>>>> + struct igt_fb bufs_overlay[NUM_FBS];
>>>>>>>>>> igt_display_t display;
>>>>>>>>>> igt_output_t *output;
>>>>>>>>>> unsigned long flip_timestamp_us;
>>>>>>>>>> double flip_interval;
>>>>>>>>>> uint64_t modifier;
>>>>>>>>>> igt_plane_t *plane;
>>>>>>>>>> + igt_plane_t *overlay_plane;
>>>>>>>>>> igt_pipe_crc_t *pipe_crc;
>>>>>>>>>> igt_crc_t ref_crc;
>>>>>>>>>> int flip_count;
>>>>>>>>>> @@ -126,6 +131,7 @@ typedef struct {
>>>>>>>>>> bool allow_fail;
>>>>>>>>>> struct buf_ops *bops;
>>>>>>>>>> bool atomic_path;
>>>>>>>>>> + bool overlay_path;
>>>>>>>>>> } data_t;
>>>>>>>>>> static void flip_handler(int fd_, unsigned int sequence,
>>>>>>>>>> unsigned int tv_sec,
>>>>>>>>>> @@ -226,6 +232,8 @@ static void test_init(data_t *data)
>>>>>>>>>> igt_output_set_pipe(data->output, data->pipe);
>>>>>>>>>> data->plane = igt_output_get_plane_type(data->output,
>>>>>>>>>> DRM_PLANE_TYPE_PRIMARY);
>>>>>>>>>> + if (data->overlay_path)
>>>>>>>>>> + data->overlay_plane = igt_output_get_plane_type(data-
>>>>>>>>>> >output, DRM_PLANE_TYPE_OVERLAY);
>>>>>>>>>> }
>>>>>>>>>> static void test_init_fbs(data_t *data)
>>>>>>>>>> @@ -246,16 +254,27 @@ static void test_init_fbs(data_t *data)
>>>>>>>>>> prev_modifier = data->modifier;
>>>>>>>>>> if (data->bufs[0].fb_id) {
>>>>>>>>>> - for (i = 0; i < NUM_FBS; i++)
>>>>>>>>>> + for (i = 0; i < NUM_FBS; i++) {
>>>>>>>>>> igt_remove_fb(data->drm_fd, &data->bufs[i]);
>>>>>>>>>> + if (data->overlay_path)
>>>>>>>>>> + igt_remove_fb(data->drm_fd, &data-
>>>>>>>>>> >bufs_overlay[i]);
>>>>>>>>>> + }
>>>>>>>>>> }
>>>>>>>>>> - for (i = 0; i < NUM_FBS; i++)
>>>>>>>>>> + for (i = 0; i < NUM_FBS; i++) {
>>>>>>>>>> make_fb(data, &data->bufs[i], width, height, i);
>>>>>>>>>> + if (data->overlay_path)
>>>>>>>>>> + make_fb(data, &data->bufs_overlay[i], width,
>>>>>>>>>> height, i);
>>>>>>>>>> + }
>>>>>>>>>> }
>>>>>>>>>> igt_plane_set_fb(data->plane, &data->bufs[0]);
>>>>>>>>>> igt_plane_set_size(data->plane, width, height);
>>>>>>>>>> +
>>>>>>>>>> + if (data->overlay_path) {
>>>>>>>>>> + igt_plane_set_fb(data->overlay_plane, &data->bufs[0]);
>>>>>>>>>> + igt_plane_set_size(data->overlay_plane, width, height);
>>>>>>>>>> + }
>>>>>>>>>> }
>>>>>>>>>> static bool async_flip_needs_extra_frame(data_t *data)
>>>>>>>>>> @@ -283,12 +302,17 @@ static bool
>>>>>>>>>> async_flip_needs_extra_frame(data_t *data)
>>>>>>>>>> static int perform_flip(data_t *data, int frame, int flags)
>>>>>>>>>> {
>>>>>>>>>> int ret;
>>>>>>>>>> + igt_plane_t *plane;
>>>>>>>>>> + struct igt_fb *bufs;
>>>>>>>>>> +
>>>>>>>>>> + plane = data->overlay_path ? data->overlay_plane : data-
>>>>>>>>>> >plane;
>>>>>>>>>> + bufs = data->overlay_path ? data->bufs_overlay : data->bufs;
>>>>>>>>>> if (!data->atomic_path) {
>>>>>>>>>> ret = drmModePageFlip(data->drm_fd, data->crtc_id,
>>>>>>>>>> - data->bufs[frame % NUM_FBS].fb_id,
>>>>>>>>>> flags, data);
>>>>>>>>>> + bufs[frame % NUM_FBS].fb_id, flags, data);
>>>>>>>>>> } else {
>>>>>>>>>> - igt_plane_set_fb(data->plane, &data->bufs[frame %
>>>>>>>>>> NUM_FBS]);
>>>>>>>>>> + igt_plane_set_fb(plane, &data->bufs[frame % NUM_FBS]);
>>>>>>>>>> ret = igt_display_try_commit_atomic(&data->display,
>>>>>>>>>> flags, data);
>>>>>>>>>> }
>>>>>>>>>> @@ -772,6 +796,7 @@ igt_main
>>>>>>>>>> igt_subtest_with_dynamic("async-flip-with-page-
>>>>>>>>>> flip- events") {
>>>>>>>>>> data.alternate_sync_async = false;
>>>>>>>>>> data.atomic_path = false;
>>>>>>>>>> + data.overlay_path = false;
>>>>>>>>>> if (is_intel_device(data.drm_fd))
>>>>>>>>>> run_test_with_modifiers(&data,
>>>>>>>>>> test_async_flip);
>>>>>>>>>> else
>>>>>>>>>> @@ -783,6 +808,7 @@ igt_main
>>>>>>>>>> igt_subtest_with_dynamic("async-flip-with-page-
>>>>>>>>>> flip- events-atomic") {
>>>>>>>>>> data.alternate_sync_async = false;
>>>>>>>>>> data.atomic_path = true;
>>>>>>>>>> + data.overlay_path = false;
>>>>>>>>>> if (is_intel_device(data.drm_fd))
>>>>>>>>>> run_test_with_modifiers(&data,
>>>>>>>>>> test_async_flip);
>>>>>>>>>> else
>>>>>>>>>> @@ -793,6 +819,7 @@ igt_main
>>>>>>>>>> igt_subtest_with_dynamic("alternate-sync-async-
>>>>>>>>>> flip") {
>>>>>>>>>> data.alternate_sync_async = true;
>>>>>>>>>> data.atomic_path = false;
>>>>>>>>>> + data.overlay_path = false;
>>>>>>>>>> run_test(&data, test_async_flip);
>>>>>>>>>> }
>>>>>>>>>> @@ -800,7 +827,17 @@ igt_main
>>>>>>>>>> igt_subtest_with_dynamic("alternate-sync-async-
>>>>>>>>>> flip- atomic") {
>>>>>>>>>> data.alternate_sync_async = true;
>>>>>>>>>> data.atomic_path = true;
>>>>>>>>>> + data.overlay_path = false;
>>>>>>>>>> + run_test(&data, test_async_flip);
>>>>>>>>>> + }
>>>>>>>>>> +
>>>>>>>>>> + igt_describe("Verify overlay planes with async flips
>>>>>>>>>> in atomic API");
>>>>>>>>>> + igt_subtest_with_dynamic("overlay-atomic") {
>>>>>>>>>> + igt_require(is_amdgpu_device(data.drm_fd));
>>>>>>>>>> + data.atomic_path = true;
>>>>>>>>>> + data.overlay_path = true;
>>>>>>>>>> run_test(&data, test_async_flip);
>>>>>>>>>> + data.overlay_path = false;
>>>>>>>>>> }
>>>>>>>>>> igt_describe("Verify that the async flip timestamp
>>>>>>>>>> does not "
>>>>>>>>>> --
>>>>>>>>>> 2.47.1
>>>>>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
More information about the igt-dev
mailing list