[PATCH i-g-t 4/4] tests/intel/kms_dsc: Add force dsc and joiner test cases
Nautiyal, Ankit K
ankit.k.nautiyal at intel.com
Wed Mar 12 12:51:41 UTC 2025
On 3/12/2025 2:39 PM, Nautiyal, Ankit K wrote:
>
> On 1/8/2025 12:27 AM, Swati Sharma wrote:
>> Add test cases where we are validating force dsc and force
>> joiner.
>>
>> Signed-off-by: Swati Sharma <swati2.sharma at intel.com>
>> ---
>> tests/intel/kms_dsc.c | 192 ++++++++++++++++++++++++++----------------
>> 1 file changed, 120 insertions(+), 72 deletions(-)
>>
>> diff --git a/tests/intel/kms_dsc.c b/tests/intel/kms_dsc.c
>> index 5508e7a9e..b88a4875e 100644
>> --- a/tests/intel/kms_dsc.c
>> +++ b/tests/intel/kms_dsc.c
>> @@ -57,7 +57,27 @@
>> * @with-output-formats-with-bpc: DSC with output formats with
>> certain input BPC for the connector
>> * @fractional-bpp: DSC with fractional bpp with
>> default parameters
>> * @fractional-bpp-with-bpc: DSC with fractional bpp with
>> certain input BPC for the connector
>> - */
>> + *
>> + * SUBTEST: dsc-%s-%s
>> + * Description: Tests Display Stream Compression functionality if
>> supported by a
>> + * connector by forcing %arg[1] and %arg[2] on all
>> connectors that support it
>> + *
>> + * arg[1]:
>> + *
>> + * @basic: DSC with default parameters
>> + * @with-bpc: DSC with certain input BPC for the
>> connector
>> + * @with-bpc-formats: DSC with certain input BPC for the
>> connector and diff formats
>> + * @with-formats: DSC with default parameters and
>> creating fb with diff formats
>> + * @with-output-formats: DSC with output formats
>> + * @with-output-formats-with-bpc: DSC with output formats with
>> certain input BPC for the connector
>> + * @fractional-bpp: DSC with fractional bpp with
>> default parameters
>> + * @fractional-bpp-with-bpc: DSC with fractional bpp with
>> certain input BPC for the connector
>> + *
>> + * arg[2]:
>> + *
>> + * @big-joiner: big joiner
>> + * @ultra-joiner: ultra joiner
>> +*/
>> IGT_TEST_DESCRIPTION("Test to validate display stream compression");
>> @@ -83,11 +103,13 @@ typedef struct {
>> int disp_ver;
>> enum pipe pipe;
>> bool limited;
>> + int joined_pipes;
>> } data_t;
>> static int output_format_list[] = {DSC_FORMAT_YCBCR420,
>> DSC_FORMAT_YCBCR444};
>> static int format_list[] = {DRM_FORMAT_XYUV8888,
>> DRM_FORMAT_XRGB2101010, DRM_FORMAT_XRGB16161616F, DRM_FORMAT_YUYV};
>> static uint32_t bpc_list[] = {8, 10, 12};
>> +static int joiner_tests[] = {JOINED_PIPES_DEFAULT,
>> JOINED_PIPES_BIG_JOINER, JOINED_PIPES_ULTRA_JOINER};
>> static inline void manual(const char *expected)
>> {
>> @@ -149,6 +171,7 @@ static void update_display(data_t *data, uint32_t
>> test_type)
>> int current_bpc = 0;
>> igt_plane_t *primary;
>> drmModeModeInfo *mode;
>> + bool status;
>> igt_output_t *output = data->output;
>> igt_display_t *display = &data->display;
>> drmModeConnector *connector = output->config.connector;
>> @@ -161,6 +184,11 @@ static void update_display(data_t *data,
>> uint32_t test_type)
>> save_force_dsc_en(data->drm_fd, data->output);
>> force_dsc_enable(data->drm_fd, data->output);
>> + if (data->joined_pipes == JOINED_PIPES_BIG_JOINER ||
>> data->joined_pipes == JOINED_PIPES_ULTRA_JOINER) {
>> + status = kmstest_force_connector_joiner(data->drm_fd,
>> connector, data->joined_pipes);
>> + igt_assert_f(status, "Failed to toggle force joiner\n");
>> + }
>> +
>> if (test_type & TEST_DSC_BPC) {
>> igt_debug("Trying to set input BPC to %d\n", data->input_bpc);
>> force_dsc_enable_bpc(data->drm_fd, data->output,
>> data->input_bpc);
>> @@ -260,17 +288,22 @@ reset:
>> static void test_dsc(data_t *data, uint32_t test_type, int bpc,
>> unsigned int plane_format,
>> - enum dsc_output_format output_format)
>> + enum dsc_output_format output_format,
>> + int joined_pipes)
>> {
>> igt_display_t *display = &data->display;
>> igt_output_t *output;
>> enum pipe pipe;
>> + int n_pipes = 0;
>> char name[3][LEN] = {
>> {0},
>> {0},
>> {0},
>> };
>> + for_each_pipe(display, pipe)
>> + n_pipes++;
>> +
>> igt_require(check_gen11_bpc_constraint(data->drm_fd,
>> data->input_bpc));
>> for_each_pipe_with_valid_output(display, pipe, output) {
>> @@ -279,6 +312,7 @@ static void test_dsc(data_t *data, uint32_t
>> test_type, int bpc,
>> data->input_bpc = bpc;
>> data->output = output;
>> data->pipe = pipe;
>> + data->joined_pipes = joined_pipes;
>> if (!is_dsc_supported_by_sink(data->drm_fd, data->output) ||
>> !check_gen11_dp_constraint(data->drm_fd, data->output,
>> data->pipe))
>> @@ -299,6 +333,16 @@ static void test_dsc(data_t *data, uint32_t
>> test_type, int bpc,
>> data->drm_fd, data->output)))
>> continue;
>> + if (((joined_pipes == JOINED_PIPES_BIG_JOINER) &&
>> (data->pipe == n_pipes - 1)) ||
>> + ((joined_pipes == JOINED_PIPES_BIG_JOINER) &&
>> (!check_bigjoiner_constraints(data->disp_ver, n_pipes,
>> + data->drm_fd, data->output))))
>> + continue;
>> +
>> + if (((joined_pipes == JOINED_PIPES_ULTRA_JOINER) &&
>> (data->pipe == n_pipes - 1)) ||
>> + ((joined_pipes == JOINED_PIPES_ULTRA_JOINER) &&
>> (!check_ultrajoiner_constraints(data->disp_ver, n_pipes,
>> + data->drm_fd, data->output))))
>> + continue;
>> +
>
> Hmm we want to skip the cases where we have joiner and we are either
> executing for the last pipe or check_constraint fails.
>
> With the suggested function in previous patch, both of these can be
> simplified to just one:
>
> if ((joined_pipes == JOINED_PIPES_BIG_JOINER || joined_pipes ==
> JOINED_PIPES_ULTRA_JOINER) &&
> (data->pipe == n_pipes - 1 ||
> !check_dsc_joiner_constraints(n_pipes, joined_pipes ==
> JOINED_PIPES_BIG_JOINER ? "Bigjoiner" : "Ultrajoiner")))
> continue;
The condition for ultrajoiner is incorrect.
For ultrajoiner we want to ensure that n_pipes >= 4 before entering the
for loop , and data->pipe < n_pipes - 3 inside the loop.
So we need to skip the iteration, if data->pipe >= n_pipes - 3
Regards,
Ankit
>
> Overall I agree with the patch and the new subtests.
>
> Regards,
>
> Ankit
>
>> if (test_type & TEST_DSC_OUTPUT_FORMAT)
>> snprintf(&name[0][0], LEN, "-%s",
>> kmstest_dsc_output_format_str(data->output_format));
>> if (test_type & TEST_DSC_FORMAT)
>> @@ -348,85 +392,89 @@ igt_main_args("l", NULL, help_str, opt_handler,
>> &data)
>> igt_require(is_dsc_supported_by_source(data.drm_fd));
>> }
>> - igt_describe("Tests basic display stream compression
>> functionality if supported "
>> - "by a connector by forcing DSC on all connectors that
>> support it "
>> - "with default parameters");
>> - igt_subtest_with_dynamic("dsc-basic")
>> - test_dsc(&data, TEST_DSC_BASIC, DEFAULT_BPC,
>> - DRM_FORMAT_XRGB8888, DSC_FORMAT_RGB);
>> -
>> - igt_describe("Tests basic display stream compression
>> functionality if supported "
>> - "by a connector by forcing DSC on all connectors that
>> support it "
>> - "with default parameters and creating fb with diff
>> formats");
>> - igt_subtest_with_dynamic("dsc-with-formats") {
>> - for (int k = 0; k < ARRAY_SIZE(format_list); k++)
>> - test_dsc(&data, TEST_DSC_FORMAT, DEFAULT_BPC,
>> - format_list[k], DSC_FORMAT_RGB);
>> - }
>> - igt_describe("Tests basic display stream compression
>> functionality if supported "
>> - "by a connector by forcing DSC on all connectors that
>> support it "
>> - "with certain input BPC for the connector");
>> - igt_subtest_with_dynamic("dsc-with-bpc") {
>> - for (int j = 0; j < ARRAY_SIZE(bpc_list); j++)
>> - test_dsc(&data, TEST_DSC_BPC, bpc_list[j],
>> - DRM_FORMAT_XRGB8888, DSC_FORMAT_RGB);
>> - }
>> + for (int i = 0; i < ARRAY_SIZE(joiner_tests) ; i++) {
>> + igt_describe("Tests basic display stream compression
>> functionality if supported "
>> + "by a connector by forcing DSC on all connectors
>> that support it "
>> + "with default parameters");
>> + igt_subtest_with_dynamic_f("dsc-basic%s",
>> igt_get_joined_pipes_name(joiner_tests[i])) {
>> + test_dsc(&data, TEST_DSC_BASIC, DEFAULT_BPC,
>> + DRM_FORMAT_XRGB8888, DSC_FORMAT_RGB,
>> joiner_tests[i]);
>> + }
>> - igt_describe("Tests basic display stream compression
>> functionality if supported "
>> - "by a connector by forcing DSC on all connectors that
>> support it "
>> - "with certain input BPC for the connector with diff
>> formats");
>> - igt_subtest_with_dynamic("dsc-with-bpc-formats") {
>> - for (int j = 0; j < ARRAY_SIZE(bpc_list); j++) {
>> - for (int k = 0; k < ARRAY_SIZE(format_list); k++) {
>> - test_dsc(&data, TEST_DSC_BPC | TEST_DSC_FORMAT,
>> - bpc_list[j], format_list[k],
>> - DSC_FORMAT_RGB);
>> - }
>> + igt_describe("Tests basic display stream compression
>> functionality if supported "
>> + "by a connector by forcing DSC on all connectors
>> that support it "
>> + "with default parameters and creating fb with diff
>> formats");
>> + igt_subtest_with_dynamic_f("dsc-with-formats%s",
>> igt_get_joined_pipes_name(joiner_tests[i])) {
>> + for (int k = 0; k < ARRAY_SIZE(format_list); k++)
>> + test_dsc(&data, TEST_DSC_FORMAT, DEFAULT_BPC,
>> + format_list[k], DSC_FORMAT_RGB, joiner_tests[i]);
>> }
>> - }
>> - igt_describe("Tests basic display stream compression
>> functionality if supported "
>> - "by a connector by forcing DSC and output format on all
>> connectors "
>> - "that support it");
>> - igt_subtest_with_dynamic("dsc-with-output-formats") {
>> - for (int k = 0; k < ARRAY_SIZE(output_format_list); k++)
>> - test_dsc(&data, TEST_DSC_OUTPUT_FORMAT, DEFAULT_BPC,
>> - DRM_FORMAT_XRGB8888,
>> - output_format_list[k]);
>> - }
>> + igt_describe("Tests basic display stream compression
>> functionality if supported "
>> + "by a connector by forcing DSC on all connectors
>> that support it "
>> + "with certain input BPC for the connector");
>> + igt_subtest_with_dynamic_f("dsc-with-bpc%s",
>> igt_get_joined_pipes_name(joiner_tests[i])) {
>> + for (int j = 0; j < ARRAY_SIZE(bpc_list); j++)
>> + test_dsc(&data, TEST_DSC_BPC, bpc_list[j],
>> + DRM_FORMAT_XRGB8888, DSC_FORMAT_RGB,
>> joiner_tests[i]);
>> + }
>> - igt_describe("Tests basic display stream compression
>> functionality if supported "
>> - "by a connector by forcing DSC and output format on all
>> connectors "
>> - "that support it with certain input BPC for the
>> connector");
>> - igt_subtest_with_dynamic("dsc-with-output-formats-with-bpc") {
>> - for (int k = 0; k < ARRAY_SIZE(output_format_list); k++) {
>> + igt_describe("Tests basic display stream compression
>> functionality if supported "
>> + "by a connector by forcing DSC on all connectors
>> that support it "
>> + "with certain input BPC for the connector with diff
>> formats");
>> + igt_subtest_with_dynamic_f("dsc-with-bpc-formats%s",
>> igt_get_joined_pipes_name(joiner_tests[i])) {
>> for (int j = 0; j < ARRAY_SIZE(bpc_list); j++) {
>> - test_dsc(&data, TEST_DSC_OUTPUT_FORMAT | TEST_DSC_BPC,
>> - bpc_list[j], DRM_FORMAT_XRGB8888,
>> - output_format_list[k]);
>> + for (int k = 0; k < ARRAY_SIZE(format_list); k++) {
>> + test_dsc(&data, TEST_DSC_BPC | TEST_DSC_FORMAT,
>> + bpc_list[j], format_list[k],
>> + DSC_FORMAT_RGB, joiner_tests[i]);
>> + }
>> }
>> }
>> - }
>> - igt_describe("Tests fractional compressed bpp functionality if
>> supported "
>> - "by a connector by forcing fractional_bpp on all
>> connectors that support it "
>> - "with default parameter. While finding the optimum
>> compressed bpp, driver will "
>> - "skip over the compressed bpps with integer values. It
>> will go ahead with DSC, "
>> - "iff compressed bpp is fractional, failing in which, it
>> will fail the commit.");
>> - igt_subtest_with_dynamic("dsc-fractional-bpp")
>> - test_dsc(&data, TEST_DSC_FRACTIONAL_BPP,
>> - DEFAULT_BPC, DRM_FORMAT_XRGB8888,
>> - DSC_FORMAT_RGB);
>> -
>> - igt_describe("Tests fractional compressed bpp functionality if
>> supported "
>> - "by a connector by forcing fractional_bpp on all
>> connectors that support it "
>> - "with certain input BPC for the connector.");
>> - igt_subtest_with_dynamic("dsc-fractional-bpp-with-bpc") {
>> - for (int j = 0; j < ARRAY_SIZE(bpc_list); j++)
>> - test_dsc(&data, TEST_DSC_FRACTIONAL_BPP | TEST_DSC_BPC,
>> - bpc_list[j], DRM_FORMAT_XRGB8888,
>> - DSC_FORMAT_RGB);
>> + igt_describe("Tests basic display stream compression
>> functionality if supported "
>> + "by a connector by forcing DSC and output format on
>> all connectors "
>> + "that support it");
>> + igt_subtest_with_dynamic_f("dsc-with-output-formats%s",
>> igt_get_joined_pipes_name(joiner_tests[i])) {
>> + for (int k = 0; k < ARRAY_SIZE(output_format_list); k++)
>> + test_dsc(&data, TEST_DSC_OUTPUT_FORMAT, DEFAULT_BPC,
>> + DRM_FORMAT_XRGB8888,
>> + output_format_list[k], joiner_tests[i]);
>> + }
>> +
>> + igt_describe("Tests basic display stream compression
>> functionality if supported "
>> + "by a connector by forcing DSC and output format on
>> all connectors "
>> + "that support it with certain input BPC for the
>> connector");
>> + igt_subtest_with_dynamic_f("dsc-with-output-formats-with-bpc%s",
>> igt_get_joined_pipes_name(joiner_tests[i])) {
>> + for (int k = 0; k < ARRAY_SIZE(output_format_list); k++) {
>> + for (int j = 0; j < ARRAY_SIZE(bpc_list); j++) {
>> + test_dsc(&data, TEST_DSC_OUTPUT_FORMAT |
>> TEST_DSC_BPC,
>> + bpc_list[j], DRM_FORMAT_XRGB8888,
>> + output_format_list[k], joiner_tests[i]);
>> + }
>> + }
>> + }
>> +
>> + igt_describe("Tests fractional compressed bpp functionality
>> if supported "
>> + "by a connector by forcing fractional_bpp on all
>> connectors that support it "
>> + "with default parameter. While finding the optimum
>> compressed bpp, driver will "
>> + "skip over the compressed bpps with integer values.
>> It will go ahead with DSC, "
>> + "iff compressed bpp is fractional, failing in
>> which, it will fail the commit.");
>> + igt_subtest_with_dynamic_f("dsc-fractional-bpp%s",
>> igt_get_joined_pipes_name(joiner_tests[i]))
>> + test_dsc(&data, TEST_DSC_FRACTIONAL_BPP,
>> + DEFAULT_BPC, DRM_FORMAT_XRGB8888,
>> + DSC_FORMAT_RGB, joiner_tests[i]);
>> +
>> + igt_describe("Tests fractional compressed bpp functionality
>> if supported "
>> + "by a connector by forcing fractional_bpp on all
>> connectors that support it "
>> + "with certain input BPC for the connector.");
>> + igt_subtest_with_dynamic_f("dsc-fractional-bpp-with-bpc%s",
>> igt_get_joined_pipes_name(joiner_tests[i])) {
>> + for (int j = 0; j < ARRAY_SIZE(bpc_list); j++)
>> + test_dsc(&data, TEST_DSC_FRACTIONAL_BPP | TEST_DSC_BPC,
>> + bpc_list[j], DRM_FORMAT_XRGB8888,
>> + DSC_FORMAT_RGB, joiner_tests[i]);
>> + }
>> }
>> igt_fixture {
More information about the igt-dev
mailing list