[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