From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by gabe.freedesktop.org (Postfix) with ESMTPS id A45C810E2EC for ; Sat, 7 Jan 2023 13:46:14 +0000 (UTC) From: Alaa Emad To: igt-dev@lists.freedesktop.org Date: Sat, 7 Jan 2023 15:45:58 +0200 Message-Id: In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [igt-dev] [PATCH RFC i-g-t v2 7/8] tests/kms_universal_plane: decouple verification of ablity to explicitly disable an already implicitly-disabled primary plane List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: petri.latvala@intel.com Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" List-ID: decouple verification of ablity to explicitly disable an already implicitly-disabled primary plane in a separated subtests to be able to run it individually, creating the function. Signed-off-by: Alaa Emad --- tests/kms_universal_plane.c | 94 +++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/tests/kms_universal_plane.c b/tests/kms_universal_plane.c index c513eff9..743ccbc6 100644 --- a/tests/kms_universal_plane.c +++ b/tests/kms_universal_plane.c @@ -546,6 +546,94 @@ test_set_primary_completely_offscreen(data_t *data, enum pipe pipe, igt_output_t functional_test_fini(&test, output); } +//SUCCESS on VKMS and i915 +static void +test_explicitly_disable_primary(data_t *data, enum pipe pipe, igt_output_t *output) +{ + functional_test_t test = {.data = data}; + igt_display_t *display = &data->display; + igt_plane_t *primary, *sprite; + int num_primary = 0, num_cursor = 0; + int i; + + igt_require_pipe(display, pipe); + + igt_info("Testing connector %s using pipe %s\n", igt_output_name(output), + kmstest_pipe_name(pipe)); + + functional_test_init(&test, output, pipe); + + /* + * Make sure we have no more than one primary or cursor plane per crtc. + * If the kernel accidentally calls drm_plane_init() rather than + * drm_universal_plane_init(), the type enum can get interpreted as a + * boolean and show up in userspace as the wrong type. + */ + for (i = 0; i < display->pipes[pipe].n_planes; i++) + if (display->pipes[pipe].planes[i].type == DRM_PLANE_TYPE_PRIMARY) + num_primary++; + else if (display->pipes[pipe].planes[i].type == DRM_PLANE_TYPE_CURSOR) + num_cursor++; + + igt_warn_on(num_primary != 1); + igt_warn_on(num_cursor > 1); + + primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY); + sprite = igt_output_get_plane_type(output, DRM_PLANE_TYPE_OVERLAY); + if (!sprite) + { + functional_test_fini(&test, output); + igt_skip("No sprite plane available\n"); + } + + igt_plane_set_position(sprite, 100, 100); + + /* Step 3: Legacy API's, yellow primary (CRC 3) */ + igt_plane_set_fb(primary, &test.yellow_fb); + igt_display_commit2(display, COMMIT_LEGACY); + igt_pipe_crc_collect_crc(test.pipe_crc, &test.crc_3); + + /* Step 4: Universal API's, blue primary, red sprite (CRC 4) */ + igt_plane_set_fb(primary, &test.blue_fb); + igt_plane_set_fb(sprite, &test.red_fb); + igt_display_commit2(display, COMMIT_UNIVERSAL); + igt_pipe_crc_collect_crc(test.pipe_crc, &test.crc_4); + + /* Step 5: Universal API's, disable primary plane (CRC 5) */ + if (!is_amdgpu_device(data->drm_fd)) { + igt_plane_set_fb(primary, NULL); + igt_display_commit2(display, COMMIT_UNIVERSAL); + igt_pipe_crc_collect_crc(test.pipe_crc, &test.crc_5); + } + + /* + * Step 15: Explicitly disable primary after it's already been + * implicitly disabled (CRC 10). + */ + if (!is_amdgpu_device(data->drm_fd)) { + igt_plane_set_fb(primary, NULL); + igt_display_commit2(display, COMMIT_UNIVERSAL); + igt_pipe_crc_collect_crc(test.pipe_crc, &test.crc_10); + } + + /* Step 16: Legacy API's, blue primary, red sprite */ + igt_plane_set_fb(primary, &test.blue_fb); + igt_plane_set_fb(sprite, &test.red_fb); + igt_display_commit2(display, COMMIT_LEGACY); + + /* + * We should be able to explicitly disable an already + * implicitly-disabled primary plane + */ + igt_assert_crc_equal(&test.crc_5, &test.crc_10); + + igt_plane_set_fb(primary, NULL); + igt_plane_set_fb(sprite, NULL); + + functional_test_fini(&test, output); +} + + /* * Universal plane functional testing. * - Black primary plane via traditional interfaces, red sprite, grab CRC:1. @@ -1251,6 +1339,12 @@ run_tests_for_pipe(data_t *data, enum pipe pipe) kmstest_pipe_name(pipe)) for_each_valid_output_on_pipe(&data->display, pipe, output) test_set_primary_completely_offscreen(data, pipe, output); + + igt_describe("Check the switching between different primary plane fbs with CRTC off"); + igt_subtest_f("explicitly-disable-primary-%s", + kmstest_pipe_name(pipe)) + for_each_valid_output_on_pipe(&data->display, pipe, output) + test_explicitly_disable_primary(data, pipe, output); igt_describe("Check the switching between different primary plane fbs with CRTC off"); igt_subtest_f("universal-plane-pipe-%s-functional", -- 2.34.1