[igt-dev] [PATCH i-g-t 4/4] tests/intel/kms_psr2_sf: Add FBC support to PSR2 tests
Sharma, Swati2
swati2.sharma at intel.com
Fri Dec 1 12:57:36 UTC 2023
LGTM
Reviewed-by: Swati Sharma <swati2.sharma at intel.com>
On 01-Dec-23 6:19 PM, Jeevan B wrote:
> For LunarLake (intel_display_ver 20), FBC can be enabled along with PSR2,
> thereby adding FBC checks to validate this scenario.
>
> Signed-off-by: Jeevan B <jeevan.b at intel.com>
> Reviewed-by: Vinod Govindapillai <vinod.govindapillai at intel.com>
> ---
> tests/intel/kms_psr2_sf.c | 623 +++++++++++++++++++++-----------------
> 1 file changed, 351 insertions(+), 272 deletions(-)
>
> diff --git a/tests/intel/kms_psr2_sf.c b/tests/intel/kms_psr2_sf.c
> index 27faa93d9..779dd8c58 100644
> --- a/tests/intel/kms_psr2_sf.c
> +++ b/tests/intel/kms_psr2_sf.c
> @@ -28,11 +28,11 @@
> * Description: Tests to varify PSR2 selective fetch by sending multiple damaged
> * areas
> * Driver requirement: i915, xe
> - * Functionality: plane, psr2, selective_fetch
> * Mega feature: PSR
> * Test category: functionality test
> */
>
> +#include "i915/intel_fbc.h"
> #include "igt.h"
> #include "igt_sysfs.h"
> #include "igt_psr.h"
> @@ -46,6 +46,12 @@
> * SUBTEST: %s-plane-move-continuous-%s
> * Description: Test that selective fetch works on moving %arg[1] plane %arg[2]
> * visible area (no update)
> + * Functionality: plane, psr2, selective_fetch
> + *
> + * SUBTEST: fbc-%s-plane-move-continuous-%s
> + * Description: Test that fbc with selective fetch works on moving %arg[1] plane %arg[2]
> + * visible area (no update)
> + * Functionality: plane, psr2, selective_fetch, fbc
> *
> * arg[1]:
> *
> @@ -62,25 +68,61 @@
> /**
> * SUBTEST: cursor-plane-update-sf
> * Description: Test that selective fetch works on cursor plane
> + * Functionality: plane, psr2, selective_fetch
> + *
> + * SUBTEST: fbc-cursor-plane-update-continuous-sf
> + * Description: Test that fbc with selective fetch works on cursor plane
> + * Functionality: plane, psr2, selective_fetch, fbc
> *
> * SUBTEST: overlay-plane-update-continuous-sf
> * Description: Test that selective fetch works on overlay plane
> + * Functionality: plane, psr2, selective_fetch
> + *
> + * SUBTEST: fbc-overlay-plane-update-continuous-sf-dmg-area
> + * Description: Test that fbc with selective fetch works on overlay plane
> + * Functionality: plane, psr2, selective_fetch, fbc
> *
> * SUBTEST: overlay-plane-update-sf-dmg-area
> * Description: Test that selective fetch works on overlay plane
> + * Functionality: plane, psr2, selective_fetch
> + *
> + * SUBTEST: fbc-overlay-plane-update-continuous-sf
> + * Description: Test that fbc with selective fetch works on overlay plane
> + * Functionality: plane, psr2, selective_fetch, fbc
> *
> * SUBTEST: overlay-primary-update-sf-dmg-area
> * Description: Test that selective fetch works on primary plane with blended
> * overlay plane
> + * Functionality: plane, psr2, selective_fetch
> + *
> + * SUBTEST: fbc-overlay-primary-update-sf-dmg-area
> + * Description: Test that fbc with selective fetch works on primary plane with blended
> + * overlay plane
> + * Functionality: plane, psr2, selective_fetch, fbc
> *
> * SUBTEST: plane-move-sf-dmg-area
> * Description: Test that selective fetch works on moving overlay plane
> + * Functionality: plane, psr2, selective_fetch
> + *
> + * SUBTEST: fbc-plane-move-sf-dmg-area
> + * Description: Test that fbc with selective fetch works on moving overlay plane
> + * Functionality: plane, psr2, selective_fetch, fbc
> *
> * SUBTEST: primary-plane-update-sf-dmg-area
> * Description: Test that selective fetch works on primary plane
> + * Functionality: plane, psr2, selective_fetch
> + *
> + * SUBTEST: fbc-primary-plane-update-continuous-sf-dmg-area
> + * Description: Test that fbc with selective fetch works on primary plane
> + * Functionality: plane, psr2, selective_fetch, fbc
> *
> * SUBTEST: primary-plane-update-sf-dmg-area-big-fb
> * Description: Test that selective fetch works on primary plane with big fb
> + * Functionality: plane, psr2, selective_fetch
> + *
> + * SUBTEST: fbc-primary-plane-update-continuous-sf-dmg-area-big-fb
> + * Description: Test that fbc with selective fetch works on primary plane with big fb
> + * Functionality: plane, psr2, selective_fetch, fbc
> */
>
> IGT_TEST_DESCRIPTION("Tests to varify PSR2 selective fetch by sending multiple"
> @@ -131,10 +173,12 @@ typedef struct {
> struct drm_mode_rect plane_move_clip;
> struct drm_mode_rect cursor_clip;
> enum operations op;
> + enum fbc_mode op_fbc_mode;
> enum plane_move_postion pos;
> int test_plane_id;
> igt_plane_t *test_plane;
> bool big_fb_test;
> + bool fbc_flag;
> cairo_t *cr;
> uint32_t screen_changes;
> int cur_x, cur_y;
> @@ -840,6 +884,11 @@ static void run(data_t *data)
>
> igt_assert(psr_wait_entry(data->debugfs_fd, PSR_MODE_2, NULL));
>
> + if (data->fbc_flag == true && data->op_fbc_mode == FBC_ENABLED)
> + igt_assert_f(intel_fbc_wait_until_enabled(data->drm_fd,
> + data->pipe),
> + "FBC still disabled");
> +
> data->screen_changes = 0;
>
> switch (data->op) {
> @@ -942,10 +991,15 @@ igt_main
> {
> data_t data = {};
> igt_output_t *outputs[IGT_MAX_PIPES * IGT_MAX_PIPES];
> - int i, j, k;
> + int i, j, k, y;
> int pipes[IGT_MAX_PIPES * IGT_MAX_PIPES];
> int n_pipes = 0;
> int coexist_features[IGT_MAX_PIPES * IGT_MAX_PIPES];
> + const char *append_fbc_subtest[2] = {
> + "",
> + "fbc-"
> + };
> + int fbc_status[] = {FBC_DISABLED, FBC_ENABLED};
>
> igt_fixture {
> drmModeResPtr res;
> @@ -961,6 +1015,11 @@ igt_main
>
> display_init(&data);
>
> + if ((intel_display_ver(intel_get_drm_devid(data.drm_fd) == 20)) &&
> + (intel_fbc_supported_on_chipset(data.drm_fd, data.pipe))) {
> + data.fbc_flag = true;
> + }
> +
> /* Test if PSR2 can be enabled */
> igt_require_f(psr_enable(data.drm_fd,
> data.debugfs_fd, PSR_MODE_2_SEL_FETCH),
> @@ -995,54 +1054,116 @@ igt_main
> }
> }
>
> - /* Verify primary plane selective fetch */
> - igt_describe("Test that selective fetch works on primary plane");
> - igt_subtest_with_dynamic_f("primary-%s-sf-dmg-area", op_str(data.op)) {
> - for (i = 0; i < n_pipes; i++) {
> - if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> - continue;
> + for (y = 0; y < ARRAY_SIZE(fbc_status); y++) {
> + data.op_fbc_mode = fbc_status[y];
> + /* Verify primary plane selective fetch */
> + igt_describe("Test that selective fetch works on primary plane");
> + igt_subtest_with_dynamic_f("%sprimary-%s-sf-dmg-area", append_fbc_subtest[y],
> + op_str(data.op)) {
> + for (i = 0; i < n_pipes; i++) {
> + if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> + continue;
> +
> + for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> + if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + continue;
> + igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> + igt_output_name(outputs[i]),
> + coexist_feature_str(j)) {
> + data.pipe = pipes[i];
> + data.output = outputs[i];
> + data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
> + data.coexist_feature = j;
> + for (k = 1; k <= MAX_DAMAGE_AREAS; k++) {
> + data.damage_area_count = k;
> + prepare(&data);
> + run(&data);
> + cleanup(&data);
> + }
> + }
> + }
> + }
> + }
>
> - for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> - if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + /* Verify primary plane selective fetch with big fb */
> + data.big_fb_test = 1;
> + igt_describe("Test that selective fetch works on primary plane with big fb");
> + igt_subtest_with_dynamic_f("%sprimary-%s-sf-dmg-area-big-fb", append_fbc_subtest[y],
> + op_str(data.op)) {
> + for (i = 0; i < n_pipes; i++) {
> + if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> continue;
> - igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> - igt_output_name(outputs[i]),
> - coexist_feature_str(j)) {
> - data.pipe = pipes[i];
> - data.output = outputs[i];
> - data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
> - data.coexist_feature = j;
> - for (k = 1; k <= MAX_DAMAGE_AREAS; k++) {
> - data.damage_area_count = k;
> - prepare(&data);
> - run(&data);
> - cleanup(&data);
> +
> + for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> + if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + continue;
> + igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> + igt_output_name(outputs[i]),
> + coexist_feature_str(j)) {
> + data.pipe = pipes[i];
> + data.output = outputs[i];
> + data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
> + data.coexist_feature = j;
> + for (k = 1; k <= MAX_DAMAGE_AREAS; k++) {
> + data.damage_area_count = k;
> + prepare(&data);
> + run(&data);
> + cleanup(&data);
> + }
> }
> }
> }
> }
> - }
>
> - /* Verify primary plane selective fetch with big fb */
> - data.big_fb_test = 1;
> - igt_describe("Test that selective fetch works on primary plane with big fb");
> - igt_subtest_with_dynamic_f("primary-%s-sf-dmg-area-big-fb", op_str(data.op)) {
> - for (i = 0; i < n_pipes; i++) {
> - if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> - continue;
> + data.big_fb_test = 0;
> + /* Verify overlay plane selective fetch */
> + igt_describe("Test that selective fetch works on overlay plane");
> + igt_subtest_with_dynamic_f("%soverlay-%s-sf-dmg-area", append_fbc_subtest[y],
> + op_str(data.op)) {
> + for (i = 0; i < n_pipes; i++) {
> + if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> + continue;
>
> - for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> - if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> + if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + continue;
> + igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> + igt_output_name(outputs[i]),
> + coexist_feature_str(j)) {
> + data.pipe = pipes[i];
> + data.output = outputs[i];
> + data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
> + data.coexist_feature = j;
> + for (k = 1; k <= MAX_DAMAGE_AREAS; k++) {
> + data.damage_area_count = k;
> + prepare(&data);
> + run(&data);
> + cleanup(&data);
> + }
> + }
> + }
> + }
> + }
> +
> + data.damage_area_count = 1;
> + /* Verify cursor plane selective fetch */
> + igt_describe("Test that selective fetch works on cursor plane");
> + igt_subtest_with_dynamic_f("%scursor-%s-sf", append_fbc_subtest[y],
> + op_str(data.op)) {
> + for (i = 0; i < n_pipes; i++) {
> + if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> continue;
> - igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> - igt_output_name(outputs[i]),
> - coexist_feature_str(j)) {
> - data.pipe = pipes[i];
> - data.output = outputs[i];
> - data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
> - data.coexist_feature = j;
> - for (k = 1; k <= MAX_DAMAGE_AREAS; k++) {
> - data.damage_area_count = k;
> +
> + for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> + if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + continue;
> + igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> + igt_output_name(outputs[i]),
> + coexist_feature_str(j)) {
> + data.pipe = pipes[i];
> + data.output = outputs[i];
> + data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
> + data.coexist_feature = j;
> prepare(&data);
> run(&data);
> cleanup(&data);
> @@ -1050,28 +1171,25 @@ igt_main
> }
> }
> }
> - }
>
> - data.big_fb_test = 0;
> - /* Verify overlay plane selective fetch */
> - igt_describe("Test that selective fetch works on overlay plane");
> - igt_subtest_with_dynamic_f("overlay-%s-sf-dmg-area", op_str(data.op)) {
> - for (i = 0; i < n_pipes; i++) {
> - if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> - continue;
> -
> - for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> - if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + data.op = PLANE_MOVE_CONTINUOUS;
> + igt_describe("Test that selective fetch works on moving cursor plane (no update)");
> + igt_subtest_with_dynamic_f("%scursor-%s-sf", append_fbc_subtest[y],
> + op_str(data.op)) {
> + for (i = 0; i < n_pipes; i++) {
> + if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> continue;
> - igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> - igt_output_name(outputs[i]),
> - coexist_feature_str(j)) {
> - data.pipe = pipes[i];
> - data.output = outputs[i];
> - data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
> - data.coexist_feature = j;
> - for (k = 1; k <= MAX_DAMAGE_AREAS; k++) {
> - data.damage_area_count = k;
> +
> + for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> + if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + continue;
> + igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> + igt_output_name(outputs[i]),
> + coexist_feature_str(j)) {
> + data.pipe = pipes[i];
> + data.output = outputs[i];
> + data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
> + data.coexist_feature = j;
> prepare(&data);
> run(&data);
> cleanup(&data);
> @@ -1079,130 +1197,137 @@ igt_main
> }
> }
> }
> - }
> -
> - data.damage_area_count = 1;
> - /* Verify cursor plane selective fetch */
> - igt_describe("Test that selective fetch works on cursor plane");
> - igt_subtest_with_dynamic_f("cursor-%s-sf", op_str(data.op)) {
> - for (i = 0; i < n_pipes; i++) {
> - if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> - continue;
>
> - for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> - if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + data.op = PLANE_MOVE_CONTINUOUS_EXCEED;
> + igt_describe("Test that selective fetch works on moving cursor plane exceeding "
> + "partially visible area (no update)");
> + igt_subtest_with_dynamic_f("%scursor-%s-sf", append_fbc_subtest[y],
> + op_str(data.op)) {
> + for (i = 0; i < n_pipes; i++) {
> + if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> continue;
> - igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> - igt_output_name(outputs[i]),
> - coexist_feature_str(j)) {
> - data.pipe = pipes[i];
> - data.output = outputs[i];
> - data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
> - data.coexist_feature = j;
> - prepare(&data);
> - run(&data);
> - cleanup(&data);
> +
> + for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> + if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + continue;
> + igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> + igt_output_name(outputs[i]),
> + coexist_feature_str(j)) {
> + data.pipe = pipes[i];
> + data.output = outputs[i];
> + data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
> + data.coexist_feature = j;
> + prepare(&data);
> + run(&data);
> + cleanup(&data);
> + }
> }
> }
> }
> - }
>
> - data.op = PLANE_MOVE_CONTINUOUS;
> - igt_describe("Test that selective fetch works on moving cursor plane (no update)");
> - igt_subtest_with_dynamic_f("cursor-%s-sf", op_str(data.op)) {
> - for (i = 0; i < n_pipes; i++) {
> - if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> - continue;
> -
> - for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> - if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + data.op = PLANE_MOVE_CONTINUOUS_EXCEED_FULLY;
> + igt_describe("Test that selective fetch works on moving cursor plane exceeding "
> + "fully visible area (no update)");
> + igt_subtest_with_dynamic_f("%scursor-%s-sf", append_fbc_subtest[y],
> + op_str(data.op)) {
> + for (i = 0; i < n_pipes; i++) {
> + if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> continue;
> - igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> - igt_output_name(outputs[i]),
> - coexist_feature_str(j)) {
> - data.pipe = pipes[i];
> - data.output = outputs[i];
> - data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
> - data.coexist_feature = j;
> - prepare(&data);
> - run(&data);
> - cleanup(&data);
> +
> + for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> + if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + continue;
> + igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> + igt_output_name(outputs[i]),
> + coexist_feature_str(j)) {
> + data.pipe = pipes[i];
> + data.output = outputs[i];
> + data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
> + data.coexist_feature = j;
> + prepare(&data);
> + run(&data);
> + cleanup(&data);
> + }
> }
> }
> }
> - }
>
> - data.op = PLANE_MOVE_CONTINUOUS_EXCEED;
> - igt_describe("Test that selective fetch works on moving cursor plane exceeding partially visible area (no update)");
> - igt_subtest_with_dynamic_f("cursor-%s-sf", op_str(data.op)) {
> - for (i = 0; i < n_pipes; i++) {
> - if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> - continue;
> -
> - for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> - if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + /* Only for overlay plane */
> + data.op = PLANE_MOVE;
> + /* Verify overlay plane move selective fetch */
> + igt_describe("Test that selective fetch works on moving overlay plane");
> + igt_subtest_with_dynamic_f("%s%s-sf-dmg-area", append_fbc_subtest[y],
> + op_str(data.op)) {
> + for (i = 0; i < n_pipes; i++) {
> + if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> continue;
> - igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> - igt_output_name(outputs[i]),
> - coexist_feature_str(j)) {
> - data.pipe = pipes[i];
> - data.output = outputs[i];
> - data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
> - data.coexist_feature = j;
> - prepare(&data);
> - run(&data);
> - cleanup(&data);
> +
> + for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> + if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + continue;
> + igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> + igt_output_name(outputs[i]),
> + coexist_feature_str(j)) {
> + data.pipe = pipes[i];
> + data.output = outputs[i];
> + data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
> + data.coexist_feature = j;
> + for (k = POS_TOP_LEFT; k <= POS_BOTTOM_RIGHT ; k++) {
> + data.pos = k;
> + prepare(&data);
> + run(&data);
> + cleanup(&data);
> + }
> + }
> }
> }
> }
> - }
> -
> - data.op = PLANE_MOVE_CONTINUOUS_EXCEED_FULLY;
> - igt_describe("Test that selective fetch works on moving cursor plane exceeding fully visible area (no update)");
> - igt_subtest_with_dynamic_f("cursor-%s-sf", op_str(data.op)) {
> - for (i = 0; i < n_pipes; i++) {
> - if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> - continue;
>
> - for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> - if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + data.op = PLANE_MOVE_CONTINUOUS;
> + igt_describe("Test that selective fetch works on moving overlay plane (no update)");
> + igt_subtest_with_dynamic_f("%soverlay-%s-sf", append_fbc_subtest[y],
> + op_str(data.op)) {
> + for (i = 0; i < n_pipes; i++) {
> + if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> continue;
> - igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> - igt_output_name(outputs[i]),
> - coexist_feature_str(j)) {
> +
> + for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> + if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + continue;
> + igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> + igt_output_name(outputs[i]),
> + coexist_feature_str(j)) {
> data.pipe = pipes[i];
> data.output = outputs[i];
> - data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
> + data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
> data.coexist_feature = j;
> prepare(&data);
> run(&data);
> cleanup(&data);
> + }
> }
> }
> }
> - }
>
> - /* Only for overlay plane */
> - data.op = PLANE_MOVE;
> - /* Verify overlay plane move selective fetch */
> - igt_describe("Test that selective fetch works on moving overlay plane");
> - igt_subtest_with_dynamic_f("%s-sf-dmg-area", op_str(data.op)) {
> - for (i = 0; i < n_pipes; i++) {
> - if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> - continue;
> -
> - for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> - if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + data.op = PLANE_MOVE_CONTINUOUS_EXCEED;
> + igt_describe("Test that selective fetch works on moving overlay plane partially "
> + "exceeding visible area (no update)");
> + igt_subtest_with_dynamic_f("%soverlay-%s-sf", append_fbc_subtest[y],
> + op_str(data.op)) {
> + for (i = 0; i < n_pipes; i++) {
> + if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> continue;
> - igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> - igt_output_name(outputs[i]),
> - coexist_feature_str(j)) {
> - data.pipe = pipes[i];
> - data.output = outputs[i];
> - data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
> - data.coexist_feature = j;
> - for (k = POS_TOP_LEFT; k <= POS_BOTTOM_RIGHT ; k++) {
> - data.pos = k;
> +
> + for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> + if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + continue;
> + igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> + igt_output_name(outputs[i]),
> + coexist_feature_str(j)) {
> + data.pipe = pipes[i];
> + data.output = outputs[i];
> + data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
> + data.coexist_feature = j;
> prepare(&data);
> run(&data);
> cleanup(&data);
> @@ -1210,103 +1335,88 @@ igt_main
> }
> }
> }
> - }
> -
> - data.op = PLANE_MOVE_CONTINUOUS;
> - igt_describe("Test that selective fetch works on moving overlay plane (no update)");
> - igt_subtest_with_dynamic_f("overlay-%s-sf", op_str(data.op)) {
> - for (i = 0; i < n_pipes; i++) {
> - if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> - continue;
>
> - for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> - if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + data.op = PLANE_MOVE_CONTINUOUS_EXCEED_FULLY;
> + igt_describe("Test that selective fetch works on moving overlay plane fully "
> + "exceeding visible area (no update)");
> + igt_subtest_with_dynamic_f("%soverlay-%s-sf", append_fbc_subtest[y],
> + op_str(data.op)) {
> + for (i = 0; i < n_pipes; i++) {
> + if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> continue;
> - igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> - igt_output_name(outputs[i]),
> - coexist_feature_str(j)) {
> - data.pipe = pipes[i];
> - data.output = outputs[i];
> - data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
> - data.coexist_feature = j;
> - prepare(&data);
> - run(&data);
> - cleanup(&data);
> - }
> - }
> - }
> - }
> -
> - data.op = PLANE_MOVE_CONTINUOUS_EXCEED;
> - igt_describe("Test that selective fetch works on moving overlay plane partially exceeding visible area (no update)");
> - igt_subtest_with_dynamic_f("overlay-%s-sf", op_str(data.op)) {
> - for (i = 0; i < n_pipes; i++) {
> - if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> - continue;
>
> - for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> - if (j != FEATURE_NONE && !(coexist_features[i] & j))
> - continue;
> - igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> - igt_output_name(outputs[i]),
> - coexist_feature_str(j)) {
> - data.pipe = pipes[i];
> - data.output = outputs[i];
> - data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
> - data.coexist_feature = j;
> - prepare(&data);
> - run(&data);
> - cleanup(&data);
> + for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> + if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + continue;
> + igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> + igt_output_name(outputs[i]),
> + coexist_feature_str(j)) {
> + data.pipe = pipes[i];
> + data.output = outputs[i];
> + data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
> + data.coexist_feature = j;
> + prepare(&data);
> + run(&data);
> + cleanup(&data);
> + }
> }
> }
> }
> - }
>
> - data.op = PLANE_MOVE_CONTINUOUS_EXCEED_FULLY;
> - igt_describe("Test that selective fetch works on moving overlay plane fully exceeding visible area (no update)");
> - igt_subtest_with_dynamic_f("overlay-%s-sf", op_str(data.op)) {
> - for (i = 0; i < n_pipes; i++) {
> - if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> - continue;
> -
> - for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> - if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + /* Verify primary plane selective fetch with overplay plane blended */
> + data.op = OVERLAY_PRIM_UPDATE;
> + igt_describe("Test that selective fetch works on primary plane "
> + "with blended overlay plane");
> + igt_subtest_with_dynamic_f("%s%s-sf-dmg-area", append_fbc_subtest[y],
> + op_str(data.op)) {
> + for (i = 0; i < n_pipes; i++) {
> + if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> continue;
> - igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> - igt_output_name(outputs[i]),
> - coexist_feature_str(j)) {
> - data.pipe = pipes[i];
> - data.output = outputs[i];
> - data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
> - data.coexist_feature = j;
> - prepare(&data);
> - run(&data);
> - cleanup(&data);
> +
> + for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> + if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + continue;
> + igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> + igt_output_name(outputs[i]),
> + coexist_feature_str(j)) {
> + data.pipe = pipes[i];
> + data.output = outputs[i];
> + for (k = 1; k <= MAX_DAMAGE_AREAS; k++) {
> + data.damage_area_count = k;
> + data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
> + data.coexist_feature = j;
> + prepare(&data);
> + run(&data);
> + cleanup(&data);
> + }
> + }
> }
> }
> }
> - }
>
> - /* Verify primary plane selective fetch with overplay plane blended */
> - data.op = OVERLAY_PRIM_UPDATE;
> - igt_describe("Test that selective fetch works on primary plane "
> - "with blended overlay plane");
> - igt_subtest_with_dynamic_f("%s-sf-dmg-area", op_str(data.op)) {
> - for (i = 0; i < n_pipes; i++) {
> - if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> - continue;
> -
> - for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> - if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + /*
> + * Verify overlay plane selective fetch using NV12 primary
> + * plane and continuous updates.
> + */
> + data.op = PLANE_UPDATE_CONTINUOUS;
> + data.primary_format = DRM_FORMAT_NV12;
> + igt_describe("Test that selective fetch works on overlay plane");
> + igt_subtest_with_dynamic_f("%soverlay-%s-sf", append_fbc_subtest[y],
> + op_str(data.op)) {
> + for (i = 0; i < n_pipes; i++) {
> + if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> continue;
> - igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> - igt_output_name(outputs[i]),
> - coexist_feature_str(j)) {
> - data.pipe = pipes[i];
> - data.output = outputs[i];
> - for (k = 1; k <= MAX_DAMAGE_AREAS; k++) {
> - data.damage_area_count = k;
> - data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
> +
> + for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> + if (j != FEATURE_NONE && !(coexist_features[i] & j))
> + continue;
> + igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> + igt_output_name(outputs[i]),
> + coexist_feature_str(j)) {
> + data.pipe = pipes[i];
> + data.output = outputs[i];
> + data.damage_area_count = 1;
> + data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
> data.coexist_feature = j;
> prepare(&data);
> run(&data);
> @@ -1317,37 +1427,6 @@ igt_main
> }
> }
>
> - /*
> - * Verify overlay plane selective fetch using NV12 primary
> - * plane and continuous updates.
> - */
> - data.op = PLANE_UPDATE_CONTINUOUS;
> - data.primary_format = DRM_FORMAT_NV12;
> - igt_describe("Test that selective fetch works on overlay plane");
> - igt_subtest_with_dynamic_f("overlay-%s-sf", op_str(data.op)) {
> - for (i = 0; i < n_pipes; i++) {
> - if (!pipe_output_combo_valid(&data.display, pipes[i], outputs[i]))
> - continue;
> -
> - for (j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
> - if (j != FEATURE_NONE && !(coexist_features[i] & j))
> - continue;
> - igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(pipes[i]),
> - igt_output_name(outputs[i]),
> - coexist_feature_str(j)) {
> - data.pipe = pipes[i];
> - data.output = outputs[i];
> - data.damage_area_count = 1;
> - data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
> - data.coexist_feature = j;
> - prepare(&data);
> - run(&data);
> - cleanup(&data);
> - }
> - }
> - }
> - }
> -
> igt_fixture {
> close(data.debugfs_fd);
> display_fini(&data);
More information about the igt-dev
mailing list