[PATCH v2] tests/kms_async_flips: Create subtest for overlay planes

Alex Hung alex.hung at amd.com
Tue Feb 25 21:40:38 UTC 2025



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

> 
> 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