[igt-dev] [PATCH i-g-t v3] tests/kms_plane_cursor: Change API for collecting the CRC for AMDGPU
Alex Hung
alex.hung at amd.com
Wed Oct 19 23:33:18 UTC 2022
On 2022-10-19 13:55, Aurabindo Pillai wrote:
> On AMD hw, igt_pipe_crc_get_current() alone does not work correctly, but
> igt_pipe_crc_collect_crc() does. The latter is more robust and reports
> the expected crc.
>
> This is because cursor updates are not synchronized to
> the frame in the same atomic commit and can get deferred to the next.
> Until cursor updates are synchronized with the frame, use
> igt_pipe_crc_collect_crc() for the side effect of skipping 2 frames
> within the driver thereby giving expected CRC values
>
> Signed-off-by: Aurabindo Pillai <aurabindo.pillai at amd.com>
> --
>
> Changes in V3
> -------------
>
> * Fix a copy paste error
> ---
> tests/kms_plane_cursor.c | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/tests/kms_plane_cursor.c b/tests/kms_plane_cursor.c
> index e9abfd78..1caa822e 100644
> --- a/tests/kms_plane_cursor.c
> +++ b/tests/kms_plane_cursor.c
> @@ -150,8 +150,12 @@ static void test_cursor_pos(data_t *data, int x, int y, unsigned int flags)
> igt_plane_set_fb(data->cursor, NULL);
> igt_display_commit_atomic(&data->display, 0, NULL);
>
> - igt_pipe_crc_start(data->pipe_crc);
> - igt_pipe_crc_get_current(data->drm_fd, data->pipe_crc, &ref_crc);
> + if (!is_amdgpu_device(data->drm_fd)) {
> + igt_pipe_crc_start(data->pipe_crc);
> + igt_pipe_crc_get_current(data->drm_fd, data->pipe_crc, &ref_crc);
> + } else {
> + igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
> + }
>
> draw_color(pfb, 1.0, 1.0, 1.0);
>
> @@ -169,8 +173,12 @@ static void test_cursor_pos(data_t *data, int x, int y, unsigned int flags)
> igt_plane_set_position(data->cursor, x, y);
> igt_display_commit_atomic(&data->display, 0, NULL);
>
> - igt_pipe_crc_get_current(data->drm_fd, data->pipe_crc, &test_crc);
> - igt_pipe_crc_stop(data->pipe_crc);
> + if (!is_amdgpu_device(data->drm_fd)) {
> + igt_pipe_crc_get_current(data->drm_fd, data->pipe_crc, &test_crc);
> + igt_pipe_crc_stop(data->pipe_crc);
> + } else {
> + igt_pipe_crc_collect_crc(data->pipe_crc, &test_crc);
> + }
>
> igt_assert_crc_equal(&ref_crc, &test_crc);
> }
Reviewed-by: Alex Hung <alex.hung at amd.com>
More information about the igt-dev
mailing list