Re: [i-g-t 04/14] tests/kms_color: New subtests for Plane gamma
On 2022-01-05 06:21, Modem, Bhanuprakash wrote: >> From: Harry Wentland >> Sent: Wednesday, January 5, 2022 2:49 AM >> To: Modem, Bhanuprakash ; igt- >> d...@lists.freedesktop.org; dri-devel@lists.freedesktop.org >> Cc: Ville Syrjälä ; Shankar, Uma >> ; ppaala...@gmail.com >> Subject: Re: [i-g-t 04/14] tests/kms_color: New subtests for Plane gamma >> >> On 2022-01-02 23:05, Modem, Bhanuprakash wrote: >>>> From: Harry Wentland >>>> Sent: Friday, November 26, 2021 10:25 PM >>>> To: Modem, Bhanuprakash ; igt- >>>> d...@lists.freedesktop.org; dri-devel@lists.freedesktop.org >>>> Cc: Ville Syrjälä ; Juha-Pekka Heikkila >>>> ; Shankar, Uma >>>> Subject: Re: [i-g-t 04/14] tests/kms_color: New subtests for Plane gamma >>>> >>>> On 2021-11-15 04:47, Bhanuprakash Modem wrote: >>>>> To verify Plane gamma, draw 3 gradient rectangles in red, green and blue, >>>>> with a maxed out gamma LUT and verify we have the same CRC as drawing >> solid >>>>> color rectangles. >>>>> >>>>> Cc: Harry Wentland >>>>> Cc: Ville Syrjälä >>>>> Cc: Juha-Pekka Heikkila >>>>> Cc: Uma Shankar >>>>> Signed-off-by: Bhanuprakash Modem >>>>> --- >>>>> tests/kms_color.c | 179 +- >>>>> 1 file changed, 178 insertions(+), 1 deletion(-) >>>>> >>>>> diff --git a/tests/kms_color.c b/tests/kms_color.c >>>>> index 775f35964f..b45d66762f 100644 >>>>> --- a/tests/kms_color.c >>>>> +++ b/tests/kms_color.c >>>>> @@ -24,7 +24,34 @@ >>>>> >>>>> #include "kms_color_helper.h" >>>>> >>>>> -IGT_TEST_DESCRIPTION("Test Color Features at Pipe level"); >>>>> +IGT_TEST_DESCRIPTION("Test Color Features at Pipe & Plane level"); >>>>> + >>>>> +#define MAX_SUPPORTED_PLANES 7 >>>>> +#define SDR_PLANE_BASE 3 >>>>> + >>>>> +typedef bool (*test_t)(data_t*, igt_plane_t*); >>>>> + >>>>> +static bool is_hdr_plane(const igt_plane_t *plane) >>>>> +{ >>>>> + return plane->index >= 0 && plane->index < SDR_PLANE_BASE; >>>>> +} >>>>> + >>>>> +static bool is_valid_plane(igt_plane_t *plane) >>>>> +{ >>>>> + int index = plane->index; >>>>> + >>>>> + if (plane->type != DRM_PLANE_TYPE_PRIMARY) >>>>> + return false; >>>>> + >>>>> + /* >>>>> + * Test 1 HDR plane, 1 SDR plane. >>>>> + * >>>>> + * 0,1,2 HDR planes >>>>> + * 3,4,5,6 SDR planes >>>>> + * >>>>> + */ >>>> >>>> This seems to be about Intel HW. AMD HW for example does >>>> not have HDR or SDR planes, only one generic plane. >>>> >>>>> + return index >= 0 && index < MAX_SUPPORTED_PLANES; >>>>> +} >>>>> >>>>> static void test_pipe_degamma(data_t *data, >>>>> igt_plane_t *primary) >>>>> @@ -638,6 +665,122 @@ static void test_pipe_limited_range_ctm(data_t >> *data, >>>>> } >>>>> #endif >>>>> >>>>> +static bool plane_gamma_test(data_t *data, igt_plane_t *plane) >>>>> +{ >>>>> + igt_output_t *output; >>>>> + igt_display_t *display = >display; >>>>> + drmModeModeInfo *mode; >>>>> + struct igt_fb fb; >>>>> + drmModePropertyPtr gamma_mode = NULL; >>>>> + uint32_t i; >>>>> + bool ret = true; >>>>> + igt_pipe_crc_t *pipe_crc = NULL; >>>>> + color_t red_green_blue[] = { >>>>> + { 1.0, 0.0, 0.0 }, >>>>> + { 0.0, 1.0, 0.0 }, >>>>> + { 0.0, 0.0, 1.0 } >>>>> + }; >>>>> + >>>>> + igt_info("Plane gamma test is running on pipe-%s plane-%s(%s)\n", >>>>> + kmstest_pipe_name(plane->pipe->pipe), >>>>> + kmstest_plane_type_name(plane->type), >>>>> + is_hdr_plane(plane) ? "hdr":"sdr"); >>>>> + >>>>
RE: [i-g-t 04/14] tests/kms_color: New subtests for Plane gamma
> From: Harry Wentland > Sent: Wednesday, January 5, 2022 2:49 AM > To: Modem, Bhanuprakash ; igt- > d...@lists.freedesktop.org; dri-devel@lists.freedesktop.org > Cc: Ville Syrjälä ; Shankar, Uma > ; ppaala...@gmail.com > Subject: Re: [i-g-t 04/14] tests/kms_color: New subtests for Plane gamma > > On 2022-01-02 23:05, Modem, Bhanuprakash wrote: > >> From: Harry Wentland > >> Sent: Friday, November 26, 2021 10:25 PM > >> To: Modem, Bhanuprakash ; igt- > >> d...@lists.freedesktop.org; dri-devel@lists.freedesktop.org > >> Cc: Ville Syrjälä ; Juha-Pekka Heikkila > >> ; Shankar, Uma > >> Subject: Re: [i-g-t 04/14] tests/kms_color: New subtests for Plane gamma > >> > >> On 2021-11-15 04:47, Bhanuprakash Modem wrote: > >>> To verify Plane gamma, draw 3 gradient rectangles in red, green and blue, > >>> with a maxed out gamma LUT and verify we have the same CRC as drawing > solid > >>> color rectangles. > >>> > >>> Cc: Harry Wentland > >>> Cc: Ville Syrjälä > >>> Cc: Juha-Pekka Heikkila > >>> Cc: Uma Shankar > >>> Signed-off-by: Bhanuprakash Modem > >>> --- > >>> tests/kms_color.c | 179 +- > >>> 1 file changed, 178 insertions(+), 1 deletion(-) > >>> > >>> diff --git a/tests/kms_color.c b/tests/kms_color.c > >>> index 775f35964f..b45d66762f 100644 > >>> --- a/tests/kms_color.c > >>> +++ b/tests/kms_color.c > >>> @@ -24,7 +24,34 @@ > >>> > >>> #include "kms_color_helper.h" > >>> > >>> -IGT_TEST_DESCRIPTION("Test Color Features at Pipe level"); > >>> +IGT_TEST_DESCRIPTION("Test Color Features at Pipe & Plane level"); > >>> + > >>> +#define MAX_SUPPORTED_PLANES 7 > >>> +#define SDR_PLANE_BASE 3 > >>> + > >>> +typedef bool (*test_t)(data_t*, igt_plane_t*); > >>> + > >>> +static bool is_hdr_plane(const igt_plane_t *plane) > >>> +{ > >>> + return plane->index >= 0 && plane->index < SDR_PLANE_BASE; > >>> +} > >>> + > >>> +static bool is_valid_plane(igt_plane_t *plane) > >>> +{ > >>> + int index = plane->index; > >>> + > >>> + if (plane->type != DRM_PLANE_TYPE_PRIMARY) > >>> + return false; > >>> + > >>> + /* > >>> + * Test 1 HDR plane, 1 SDR plane. > >>> + * > >>> + * 0,1,2 HDR planes > >>> + * 3,4,5,6 SDR planes > >>> + * > >>> + */ > >> > >> This seems to be about Intel HW. AMD HW for example does > >> not have HDR or SDR planes, only one generic plane. > >> > >>> + return index >= 0 && index < MAX_SUPPORTED_PLANES; > >>> +} > >>> > >>> static void test_pipe_degamma(data_t *data, > >>> igt_plane_t *primary) > >>> @@ -638,6 +665,122 @@ static void test_pipe_limited_range_ctm(data_t > *data, > >>> } > >>> #endif > >>> > >>> +static bool plane_gamma_test(data_t *data, igt_plane_t *plane) > >>> +{ > >>> + igt_output_t *output; > >>> + igt_display_t *display = >display; > >>> + drmModeModeInfo *mode; > >>> + struct igt_fb fb; > >>> + drmModePropertyPtr gamma_mode = NULL; > >>> + uint32_t i; > >>> + bool ret = true; > >>> + igt_pipe_crc_t *pipe_crc = NULL; > >>> + color_t red_green_blue[] = { > >>> + { 1.0, 0.0, 0.0 }, > >>> + { 0.0, 1.0, 0.0 }, > >>> + { 0.0, 0.0, 1.0 } > >>> + }; > >>> + > >>> + igt_info("Plane gamma test is running on pipe-%s plane-%s(%s)\n", > >>> + kmstest_pipe_name(plane->pipe->pipe), > >>> + kmstest_plane_type_name(plane->type), > >>> + is_hdr_plane(plane) ? "hdr":"sdr"); > >>> + > >> > >> is_hdr_plane is Intel-specific. > >> > >>> + igt_require(igt_plane_has_prop(plane, IGT_PLANE_GAMMA_MODE)); > >>> + igt_require(igt_plane_has_prop(plane, IGT_PLANE_GAMMA_LUT)); > >>> + > >>> + pipe_crc = igt_pipe_crc_new(data->drm_fd, > >>> + plane->p
Re: [i-g-t 04/14] tests/kms_color: New subtests for Plane gamma
On 2022-01-02 23:05, Modem, Bhanuprakash wrote: >> From: Harry Wentland >> Sent: Friday, November 26, 2021 10:25 PM >> To: Modem, Bhanuprakash ; igt- >> d...@lists.freedesktop.org; dri-devel@lists.freedesktop.org >> Cc: Ville Syrjälä ; Juha-Pekka Heikkila >> ; Shankar, Uma >> Subject: Re: [i-g-t 04/14] tests/kms_color: New subtests for Plane gamma >> >> On 2021-11-15 04:47, Bhanuprakash Modem wrote: >>> To verify Plane gamma, draw 3 gradient rectangles in red, green and blue, >>> with a maxed out gamma LUT and verify we have the same CRC as drawing solid >>> color rectangles. >>> >>> Cc: Harry Wentland >>> Cc: Ville Syrjälä >>> Cc: Juha-Pekka Heikkila >>> Cc: Uma Shankar >>> Signed-off-by: Bhanuprakash Modem >>> --- >>> tests/kms_color.c | 179 +- >>> 1 file changed, 178 insertions(+), 1 deletion(-) >>> >>> diff --git a/tests/kms_color.c b/tests/kms_color.c >>> index 775f35964f..b45d66762f 100644 >>> --- a/tests/kms_color.c >>> +++ b/tests/kms_color.c >>> @@ -24,7 +24,34 @@ >>> >>> #include "kms_color_helper.h" >>> >>> -IGT_TEST_DESCRIPTION("Test Color Features at Pipe level"); >>> +IGT_TEST_DESCRIPTION("Test Color Features at Pipe & Plane level"); >>> + >>> +#define MAX_SUPPORTED_PLANES 7 >>> +#define SDR_PLANE_BASE 3 >>> + >>> +typedef bool (*test_t)(data_t*, igt_plane_t*); >>> + >>> +static bool is_hdr_plane(const igt_plane_t *plane) >>> +{ >>> + return plane->index >= 0 && plane->index < SDR_PLANE_BASE; >>> +} >>> + >>> +static bool is_valid_plane(igt_plane_t *plane) >>> +{ >>> + int index = plane->index; >>> + >>> + if (plane->type != DRM_PLANE_TYPE_PRIMARY) >>> + return false; >>> + >>> + /* >>> +* Test 1 HDR plane, 1 SDR plane. >>> +* >>> +* 0,1,2 HDR planes >>> +* 3,4,5,6 SDR planes >>> +* >>> +*/ >> >> This seems to be about Intel HW. AMD HW for example does >> not have HDR or SDR planes, only one generic plane. >> >>> + return index >= 0 && index < MAX_SUPPORTED_PLANES; >>> +} >>> >>> static void test_pipe_degamma(data_t *data, >>> igt_plane_t *primary) >>> @@ -638,6 +665,122 @@ static void test_pipe_limited_range_ctm(data_t *data, >>> } >>> #endif >>> >>> +static bool plane_gamma_test(data_t *data, igt_plane_t *plane) >>> +{ >>> + igt_output_t *output; >>> + igt_display_t *display = >display; >>> + drmModeModeInfo *mode; >>> + struct igt_fb fb; >>> + drmModePropertyPtr gamma_mode = NULL; >>> + uint32_t i; >>> + bool ret = true; >>> + igt_pipe_crc_t *pipe_crc = NULL; >>> + color_t red_green_blue[] = { >>> + { 1.0, 0.0, 0.0 }, >>> + { 0.0, 1.0, 0.0 }, >>> + { 0.0, 0.0, 1.0 } >>> + }; >>> + >>> + igt_info("Plane gamma test is running on pipe-%s plane-%s(%s)\n", >>> + kmstest_pipe_name(plane->pipe->pipe), >>> + kmstest_plane_type_name(plane->type), >>> + is_hdr_plane(plane) ? "hdr":"sdr"); >>> + >> >> is_hdr_plane is Intel-specific. >> >>> + igt_require(igt_plane_has_prop(plane, IGT_PLANE_GAMMA_MODE)); >>> + igt_require(igt_plane_has_prop(plane, IGT_PLANE_GAMMA_LUT)); >>> + >>> + pipe_crc = igt_pipe_crc_new(data->drm_fd, >>> + plane->pipe->pipe, >>> + INTEL_PIPE_CRC_SOURCE_AUTO); >>> + >>> + output = igt_get_single_output_for_pipe(display, plane->pipe->pipe); >>> + igt_assert(output); >>> + >>> + igt_output_set_pipe(output, plane->pipe->pipe); >>> + mode = igt_output_get_mode(output); >>> + >>> + /* Create a framebuffer at the size of the output. */ >>> + igt_assert(igt_create_fb(data->drm_fd, >>> + mode->hdisplay, >>> + mode->vdisplay, >>> + DRM_FORMAT_XRGB, >>> + DRM_FORMAT_MOD_LINEAR, >>&
RE: [i-g-t 04/14] tests/kms_color: New subtests for Plane gamma
> From: Pekka Paalanen > Sent: Thursday, November 18, 2021 2:33 PM > To: Modem, Bhanuprakash > Cc: igt-...@lists.freedesktop.org; dri-devel@lists.freedesktop.org; Juha-Pekka > Heikkila ; Shankar, Uma > Subject: Re: [i-g-t 04/14] tests/kms_color: New subtests for Plane gamma > > On Mon, 15 Nov 2021 15:17:49 +0530 > Bhanuprakash Modem wrote: > > > To verify Plane gamma, draw 3 gradient rectangles in red, green and blue, > > with a maxed out gamma LUT and verify we have the same CRC as drawing solid > > color rectangles. > > > > Cc: Harry Wentland > > Cc: Ville Syrjälä > > Cc: Juha-Pekka Heikkila > > Cc: Uma Shankar > > Signed-off-by: Bhanuprakash Modem > > --- > > tests/kms_color.c | 179 +- > > 1 file changed, 178 insertions(+), 1 deletion(-) > > > > diff --git a/tests/kms_color.c b/tests/kms_color.c > > index 775f35964f..b45d66762f 100644 > > --- a/tests/kms_color.c > > +++ b/tests/kms_color.c > > @@ -24,7 +24,34 @@ > > > > #include "kms_color_helper.h" > > > > -IGT_TEST_DESCRIPTION("Test Color Features at Pipe level"); > > +IGT_TEST_DESCRIPTION("Test Color Features at Pipe & Plane level"); > > + > > +#define MAX_SUPPORTED_PLANES 7 > > +#define SDR_PLANE_BASE 3 > > + > > +typedef bool (*test_t)(data_t*, igt_plane_t*); > > + > > +static bool is_hdr_plane(const igt_plane_t *plane) > > +{ > > + return plane->index >= 0 && plane->index < SDR_PLANE_BASE; > > How can this be right for all KMS drivers? > > What is a HDR plane? > > > +} > > + > > +static bool is_valid_plane(igt_plane_t *plane) > > +{ > > + int index = plane->index; > > + > > + if (plane->type != DRM_PLANE_TYPE_PRIMARY) > > + return false; > > + > > + /* > > +* Test 1 HDR plane, 1 SDR plane. > > +* > > +* 0,1,2 HDR planes > > +* 3,4,5,6 SDR planes > > As above, where does this come from? Is this your hardware? It is specific to Intel hardware, I'll make this generic in next rev. Extended mode: By default to optimize the CI, we can run these tests on first & last planes only, If we want to cover all the planes, we need to pass an argument in commandline Example: ./kms_color --run-subtest pipe-A-plane-gamma ./kms_color --extend --run-subtest pipe-A-plane-gamma > > > +* > > +*/ > > + return index >= 0 && index < MAX_SUPPORTED_PLANES; > > +} > > > > static void test_pipe_degamma(data_t *data, > > igt_plane_t *primary) > > @@ -638,6 +665,122 @@ static void test_pipe_limited_range_ctm(data_t *data, > > } > > #endif > > > > +static bool plane_gamma_test(data_t *data, igt_plane_t *plane) > > +{ > > + igt_output_t *output; > > + igt_display_t *display = >display; > > + drmModeModeInfo *mode; > > + struct igt_fb fb; > > + drmModePropertyPtr gamma_mode = NULL; > > + uint32_t i; > > + bool ret = true; > > + igt_pipe_crc_t *pipe_crc = NULL; > > + color_t red_green_blue[] = { > > + { 1.0, 0.0, 0.0 }, > > + { 0.0, 1.0, 0.0 }, > > + { 0.0, 0.0, 1.0 } > > + }; > > + > > + igt_info("Plane gamma test is running on pipe-%s plane-%s(%s)\n", > > + kmstest_pipe_name(plane->pipe->pipe), > > + kmstest_plane_type_name(plane->type), > > + is_hdr_plane(plane) ? "hdr":"sdr"); > > + > > + igt_require(igt_plane_has_prop(plane, IGT_PLANE_GAMMA_MODE)); > > + igt_require(igt_plane_has_prop(plane, IGT_PLANE_GAMMA_LUT)); > > + > > + pipe_crc = igt_pipe_crc_new(data->drm_fd, > > + plane->pipe->pipe, > > + INTEL_PIPE_CRC_SOURCE_AUTO); > > + > > + output = igt_get_single_output_for_pipe(display, plane->pipe->pipe); > > + igt_assert(output); > > + > > + igt_output_set_pipe(output, plane->pipe->pipe); > > + mode = igt_output_get_mode(output); > > + > > + /* Create a framebuffer at the size of the output. */ > > + igt_assert(igt_create_fb(data->drm_fd, > > + mode->hdisplay, > > + mode->vdisplay, > > + DRM_FORMAT_XRGB, > > + DRM_FORMAT_MOD_LINEAR, > > + ));
RE: [i-g-t 04/14] tests/kms_color: New subtests for Plane gamma
> From: Harry Wentland > Sent: Friday, November 26, 2021 10:25 PM > To: Modem, Bhanuprakash ; igt- > d...@lists.freedesktop.org; dri-devel@lists.freedesktop.org > Cc: Ville Syrjälä ; Juha-Pekka Heikkila > ; Shankar, Uma > Subject: Re: [i-g-t 04/14] tests/kms_color: New subtests for Plane gamma > > On 2021-11-15 04:47, Bhanuprakash Modem wrote: > > To verify Plane gamma, draw 3 gradient rectangles in red, green and blue, > > with a maxed out gamma LUT and verify we have the same CRC as drawing solid > > color rectangles. > > > > Cc: Harry Wentland > > Cc: Ville Syrjälä > > Cc: Juha-Pekka Heikkila > > Cc: Uma Shankar > > Signed-off-by: Bhanuprakash Modem > > --- > > tests/kms_color.c | 179 +- > > 1 file changed, 178 insertions(+), 1 deletion(-) > > > > diff --git a/tests/kms_color.c b/tests/kms_color.c > > index 775f35964f..b45d66762f 100644 > > --- a/tests/kms_color.c > > +++ b/tests/kms_color.c > > @@ -24,7 +24,34 @@ > > > > #include "kms_color_helper.h" > > > > -IGT_TEST_DESCRIPTION("Test Color Features at Pipe level"); > > +IGT_TEST_DESCRIPTION("Test Color Features at Pipe & Plane level"); > > + > > +#define MAX_SUPPORTED_PLANES 7 > > +#define SDR_PLANE_BASE 3 > > + > > +typedef bool (*test_t)(data_t*, igt_plane_t*); > > + > > +static bool is_hdr_plane(const igt_plane_t *plane) > > +{ > > + return plane->index >= 0 && plane->index < SDR_PLANE_BASE; > > +} > > + > > +static bool is_valid_plane(igt_plane_t *plane) > > +{ > > + int index = plane->index; > > + > > + if (plane->type != DRM_PLANE_TYPE_PRIMARY) > > + return false; > > + > > + /* > > +* Test 1 HDR plane, 1 SDR plane. > > +* > > +* 0,1,2 HDR planes > > +* 3,4,5,6 SDR planes > > +* > > +*/ > > This seems to be about Intel HW. AMD HW for example does > not have HDR or SDR planes, only one generic plane. > > > + return index >= 0 && index < MAX_SUPPORTED_PLANES; > > +} > > > > static void test_pipe_degamma(data_t *data, > > igt_plane_t *primary) > > @@ -638,6 +665,122 @@ static void test_pipe_limited_range_ctm(data_t *data, > > } > > #endif > > > > +static bool plane_gamma_test(data_t *data, igt_plane_t *plane) > > +{ > > + igt_output_t *output; > > + igt_display_t *display = >display; > > + drmModeModeInfo *mode; > > + struct igt_fb fb; > > + drmModePropertyPtr gamma_mode = NULL; > > + uint32_t i; > > + bool ret = true; > > + igt_pipe_crc_t *pipe_crc = NULL; > > + color_t red_green_blue[] = { > > + { 1.0, 0.0, 0.0 }, > > + { 0.0, 1.0, 0.0 }, > > + { 0.0, 0.0, 1.0 } > > + }; > > + > > + igt_info("Plane gamma test is running on pipe-%s plane-%s(%s)\n", > > + kmstest_pipe_name(plane->pipe->pipe), > > + kmstest_plane_type_name(plane->type), > > + is_hdr_plane(plane) ? "hdr":"sdr"); > > + > > is_hdr_plane is Intel-specific. > > > + igt_require(igt_plane_has_prop(plane, IGT_PLANE_GAMMA_MODE)); > > + igt_require(igt_plane_has_prop(plane, IGT_PLANE_GAMMA_LUT)); > > + > > + pipe_crc = igt_pipe_crc_new(data->drm_fd, > > + plane->pipe->pipe, > > + INTEL_PIPE_CRC_SOURCE_AUTO); > > + > > + output = igt_get_single_output_for_pipe(display, plane->pipe->pipe); > > + igt_assert(output); > > + > > + igt_output_set_pipe(output, plane->pipe->pipe); > > + mode = igt_output_get_mode(output); > > + > > + /* Create a framebuffer at the size of the output. */ > > + igt_assert(igt_create_fb(data->drm_fd, > > + mode->hdisplay, > > + mode->vdisplay, > > + DRM_FORMAT_XRGB, > > + DRM_FORMAT_MOD_LINEAR, > > + )); > > + igt_plane_set_fb(plane, ); > > + > > + /* Disable Pipe color props. */ > > + disable_ctm(plane->pipe); > > + disable_degamma(plane->pipe); > > + disable_gamma(plane->pipe); > > + > > + disable_plane_ctm(plane); > > + disable_plane_degamma(plane); > > + igt_display_commit2(display,
Re: [i-g-t 04/14] tests/kms_color: New subtests for Plane gamma
On 2021-11-15 04:47, Bhanuprakash Modem wrote: > To verify Plane gamma, draw 3 gradient rectangles in red, green and blue, > with a maxed out gamma LUT and verify we have the same CRC as drawing solid > color rectangles. > > Cc: Harry Wentland > Cc: Ville Syrjälä > Cc: Juha-Pekka Heikkila > Cc: Uma Shankar > Signed-off-by: Bhanuprakash Modem > --- > tests/kms_color.c | 179 +- > 1 file changed, 178 insertions(+), 1 deletion(-) > > diff --git a/tests/kms_color.c b/tests/kms_color.c > index 775f35964f..b45d66762f 100644 > --- a/tests/kms_color.c > +++ b/tests/kms_color.c > @@ -24,7 +24,34 @@ > > #include "kms_color_helper.h" > > -IGT_TEST_DESCRIPTION("Test Color Features at Pipe level"); > +IGT_TEST_DESCRIPTION("Test Color Features at Pipe & Plane level"); > + > +#define MAX_SUPPORTED_PLANES 7 > +#define SDR_PLANE_BASE 3 > + > +typedef bool (*test_t)(data_t*, igt_plane_t*); > + > +static bool is_hdr_plane(const igt_plane_t *plane) > +{ > + return plane->index >= 0 && plane->index < SDR_PLANE_BASE; > +} > + > +static bool is_valid_plane(igt_plane_t *plane) > +{ > + int index = plane->index; > + > + if (plane->type != DRM_PLANE_TYPE_PRIMARY) > + return false; > + > + /* > + * Test 1 HDR plane, 1 SDR plane. > + * > + * 0,1,2 HDR planes > + * 3,4,5,6 SDR planes > + * > + */ This seems to be about Intel HW. AMD HW for example does not have HDR or SDR planes, only one generic plane. > + return index >= 0 && index < MAX_SUPPORTED_PLANES; > +} > > static void test_pipe_degamma(data_t *data, > igt_plane_t *primary) > @@ -638,6 +665,122 @@ static void test_pipe_limited_range_ctm(data_t *data, > } > #endif > > +static bool plane_gamma_test(data_t *data, igt_plane_t *plane) > +{ > + igt_output_t *output; > + igt_display_t *display = >display; > + drmModeModeInfo *mode; > + struct igt_fb fb; > + drmModePropertyPtr gamma_mode = NULL; > + uint32_t i; > + bool ret = true; > + igt_pipe_crc_t *pipe_crc = NULL; > + color_t red_green_blue[] = { > + { 1.0, 0.0, 0.0 }, > + { 0.0, 1.0, 0.0 }, > + { 0.0, 0.0, 1.0 } > + }; > + > + igt_info("Plane gamma test is running on pipe-%s plane-%s(%s)\n", > + kmstest_pipe_name(plane->pipe->pipe), > + kmstest_plane_type_name(plane->type), > + is_hdr_plane(plane) ? "hdr":"sdr"); > + is_hdr_plane is Intel-specific. > + igt_require(igt_plane_has_prop(plane, IGT_PLANE_GAMMA_MODE)); > + igt_require(igt_plane_has_prop(plane, IGT_PLANE_GAMMA_LUT)); > + > + pipe_crc = igt_pipe_crc_new(data->drm_fd, > + plane->pipe->pipe, > + INTEL_PIPE_CRC_SOURCE_AUTO); > + > + output = igt_get_single_output_for_pipe(display, plane->pipe->pipe); > + igt_assert(output); > + > + igt_output_set_pipe(output, plane->pipe->pipe); > + mode = igt_output_get_mode(output); > + > + /* Create a framebuffer at the size of the output. */ > + igt_assert(igt_create_fb(data->drm_fd, > + mode->hdisplay, > + mode->vdisplay, > + DRM_FORMAT_XRGB, > + DRM_FORMAT_MOD_LINEAR, > + )); > + igt_plane_set_fb(plane, ); > + > + /* Disable Pipe color props. */ > + disable_ctm(plane->pipe); > + disable_degamma(plane->pipe); > + disable_gamma(plane->pipe); > + > + disable_plane_ctm(plane); > + disable_plane_degamma(plane); > + igt_display_commit2(display, display->is_atomic ? > + COMMIT_ATOMIC : COMMIT_LEGACY); > + > + gamma_mode = get_plane_gamma_degamma_mode(plane, IGT_PLANE_GAMMA_MODE); > + > + /* Iterate all supported gamma modes. */ > + for (i = 0; i < gamma_mode->count_enums; i++) { > + igt_crc_t crc_gamma, crc_fullcolors; > + segment_data_t *segment_info = NULL; > + struct drm_color_lut_ext *lut = NULL; > + uint32_t lut_size = 0; > + > + /* Ignore 'no gamma' from enum list. */ > + if (!strcmp(gamma_mode->enums[i].name, "no gamma")) > + continue; > + It might still make sense to test that this is doing bypass. > + igt_info("Trying to use gamma mode: \'%s\'\n", > gamma_mode->enums[i].name); > + > + /* Draw solid colors with no gamma transformation. */ > + disable_plane_gamma(plane); > + paint_rectangles(data, mode, red_green_blue, ); > + igt_plane_set_fb(plane, ); > + igt_display_commit2(display, display->is_atomic ? > + COMMIT_ATOMIC : COMMIT_LEGACY); > + igt_wait_for_vblank(data->drm_fd, > +
Re: [i-g-t 04/14] tests/kms_color: New subtests for Plane gamma
On Mon, 15 Nov 2021 15:17:49 +0530 Bhanuprakash Modem wrote: > To verify Plane gamma, draw 3 gradient rectangles in red, green and blue, > with a maxed out gamma LUT and verify we have the same CRC as drawing solid > color rectangles. > > Cc: Harry Wentland > Cc: Ville Syrjälä > Cc: Juha-Pekka Heikkila > Cc: Uma Shankar > Signed-off-by: Bhanuprakash Modem > --- > tests/kms_color.c | 179 +- > 1 file changed, 178 insertions(+), 1 deletion(-) > > diff --git a/tests/kms_color.c b/tests/kms_color.c > index 775f35964f..b45d66762f 100644 > --- a/tests/kms_color.c > +++ b/tests/kms_color.c > @@ -24,7 +24,34 @@ > > #include "kms_color_helper.h" > > -IGT_TEST_DESCRIPTION("Test Color Features at Pipe level"); > +IGT_TEST_DESCRIPTION("Test Color Features at Pipe & Plane level"); > + > +#define MAX_SUPPORTED_PLANES 7 > +#define SDR_PLANE_BASE 3 > + > +typedef bool (*test_t)(data_t*, igt_plane_t*); > + > +static bool is_hdr_plane(const igt_plane_t *plane) > +{ > + return plane->index >= 0 && plane->index < SDR_PLANE_BASE; How can this be right for all KMS drivers? What is a HDR plane? > +} > + > +static bool is_valid_plane(igt_plane_t *plane) > +{ > + int index = plane->index; > + > + if (plane->type != DRM_PLANE_TYPE_PRIMARY) > + return false; > + > + /* > + * Test 1 HDR plane, 1 SDR plane. > + * > + * 0,1,2 HDR planes > + * 3,4,5,6 SDR planes As above, where does this come from? Is this your hardware? > + * > + */ > + return index >= 0 && index < MAX_SUPPORTED_PLANES; > +} > > static void test_pipe_degamma(data_t *data, > igt_plane_t *primary) > @@ -638,6 +665,122 @@ static void test_pipe_limited_range_ctm(data_t *data, > } > #endif > > +static bool plane_gamma_test(data_t *data, igt_plane_t *plane) > +{ > + igt_output_t *output; > + igt_display_t *display = >display; > + drmModeModeInfo *mode; > + struct igt_fb fb; > + drmModePropertyPtr gamma_mode = NULL; > + uint32_t i; > + bool ret = true; > + igt_pipe_crc_t *pipe_crc = NULL; > + color_t red_green_blue[] = { > + { 1.0, 0.0, 0.0 }, > + { 0.0, 1.0, 0.0 }, > + { 0.0, 0.0, 1.0 } > + }; > + > + igt_info("Plane gamma test is running on pipe-%s plane-%s(%s)\n", > + kmstest_pipe_name(plane->pipe->pipe), > + kmstest_plane_type_name(plane->type), > + is_hdr_plane(plane) ? "hdr":"sdr"); > + > + igt_require(igt_plane_has_prop(plane, IGT_PLANE_GAMMA_MODE)); > + igt_require(igt_plane_has_prop(plane, IGT_PLANE_GAMMA_LUT)); > + > + pipe_crc = igt_pipe_crc_new(data->drm_fd, > + plane->pipe->pipe, > + INTEL_PIPE_CRC_SOURCE_AUTO); > + > + output = igt_get_single_output_for_pipe(display, plane->pipe->pipe); > + igt_assert(output); > + > + igt_output_set_pipe(output, plane->pipe->pipe); > + mode = igt_output_get_mode(output); > + > + /* Create a framebuffer at the size of the output. */ > + igt_assert(igt_create_fb(data->drm_fd, > + mode->hdisplay, > + mode->vdisplay, > + DRM_FORMAT_XRGB, > + DRM_FORMAT_MOD_LINEAR, > + )); > + igt_plane_set_fb(plane, ); > + > + /* Disable Pipe color props. */ > + disable_ctm(plane->pipe); > + disable_degamma(plane->pipe); > + disable_gamma(plane->pipe); > + > + disable_plane_ctm(plane); > + disable_plane_degamma(plane); > + igt_display_commit2(display, display->is_atomic ? > + COMMIT_ATOMIC : COMMIT_LEGACY); > + > + gamma_mode = get_plane_gamma_degamma_mode(plane, IGT_PLANE_GAMMA_MODE); > + > + /* Iterate all supported gamma modes. */ > + for (i = 0; i < gamma_mode->count_enums; i++) { > + igt_crc_t crc_gamma, crc_fullcolors; > + segment_data_t *segment_info = NULL; > + struct drm_color_lut_ext *lut = NULL; > + uint32_t lut_size = 0; > + > + /* Ignore 'no gamma' from enum list. */ > + if (!strcmp(gamma_mode->enums[i].name, "no gamma")) > + continue; > + > + igt_info("Trying to use gamma mode: \'%s\'\n", > gamma_mode->enums[i].name); > + > + /* Draw solid colors with no gamma transformation. */ > + disable_plane_gamma(plane); > + paint_rectangles(data, mode, red_green_blue, ); > + igt_plane_set_fb(plane, ); > + igt_display_commit2(display, display->is_atomic ? > + COMMIT_ATOMIC : COMMIT_LEGACY); > + igt_wait_for_vblank(data->drm_fd, > + display->pipes[plane->pipe->pipe].crtc_offset); > +
[i-g-t 04/14] tests/kms_color: New subtests for Plane gamma
To verify Plane gamma, draw 3 gradient rectangles in red, green and blue, with a maxed out gamma LUT and verify we have the same CRC as drawing solid color rectangles. Cc: Harry Wentland Cc: Ville Syrjälä Cc: Juha-Pekka Heikkila Cc: Uma Shankar Signed-off-by: Bhanuprakash Modem --- tests/kms_color.c | 179 +- 1 file changed, 178 insertions(+), 1 deletion(-) diff --git a/tests/kms_color.c b/tests/kms_color.c index 775f35964f..b45d66762f 100644 --- a/tests/kms_color.c +++ b/tests/kms_color.c @@ -24,7 +24,34 @@ #include "kms_color_helper.h" -IGT_TEST_DESCRIPTION("Test Color Features at Pipe level"); +IGT_TEST_DESCRIPTION("Test Color Features at Pipe & Plane level"); + +#define MAX_SUPPORTED_PLANES 7 +#define SDR_PLANE_BASE 3 + +typedef bool (*test_t)(data_t*, igt_plane_t*); + +static bool is_hdr_plane(const igt_plane_t *plane) +{ + return plane->index >= 0 && plane->index < SDR_PLANE_BASE; +} + +static bool is_valid_plane(igt_plane_t *plane) +{ + int index = plane->index; + + if (plane->type != DRM_PLANE_TYPE_PRIMARY) + return false; + + /* +* Test 1 HDR plane, 1 SDR plane. +* +* 0,1,2 HDR planes +* 3,4,5,6 SDR planes +* +*/ + return index >= 0 && index < MAX_SUPPORTED_PLANES; +} static void test_pipe_degamma(data_t *data, igt_plane_t *primary) @@ -638,6 +665,122 @@ static void test_pipe_limited_range_ctm(data_t *data, } #endif +static bool plane_gamma_test(data_t *data, igt_plane_t *plane) +{ + igt_output_t *output; + igt_display_t *display = >display; + drmModeModeInfo *mode; + struct igt_fb fb; + drmModePropertyPtr gamma_mode = NULL; + uint32_t i; + bool ret = true; + igt_pipe_crc_t *pipe_crc = NULL; + color_t red_green_blue[] = { + { 1.0, 0.0, 0.0 }, + { 0.0, 1.0, 0.0 }, + { 0.0, 0.0, 1.0 } + }; + + igt_info("Plane gamma test is running on pipe-%s plane-%s(%s)\n", + kmstest_pipe_name(plane->pipe->pipe), + kmstest_plane_type_name(plane->type), + is_hdr_plane(plane) ? "hdr":"sdr"); + + igt_require(igt_plane_has_prop(plane, IGT_PLANE_GAMMA_MODE)); + igt_require(igt_plane_has_prop(plane, IGT_PLANE_GAMMA_LUT)); + + pipe_crc = igt_pipe_crc_new(data->drm_fd, + plane->pipe->pipe, + INTEL_PIPE_CRC_SOURCE_AUTO); + + output = igt_get_single_output_for_pipe(display, plane->pipe->pipe); + igt_assert(output); + + igt_output_set_pipe(output, plane->pipe->pipe); + mode = igt_output_get_mode(output); + + /* Create a framebuffer at the size of the output. */ + igt_assert(igt_create_fb(data->drm_fd, + mode->hdisplay, + mode->vdisplay, + DRM_FORMAT_XRGB, + DRM_FORMAT_MOD_LINEAR, + )); + igt_plane_set_fb(plane, ); + + /* Disable Pipe color props. */ + disable_ctm(plane->pipe); + disable_degamma(plane->pipe); + disable_gamma(plane->pipe); + + disable_plane_ctm(plane); + disable_plane_degamma(plane); + igt_display_commit2(display, display->is_atomic ? + COMMIT_ATOMIC : COMMIT_LEGACY); + + gamma_mode = get_plane_gamma_degamma_mode(plane, IGT_PLANE_GAMMA_MODE); + + /* Iterate all supported gamma modes. */ + for (i = 0; i < gamma_mode->count_enums; i++) { + igt_crc_t crc_gamma, crc_fullcolors; + segment_data_t *segment_info = NULL; + struct drm_color_lut_ext *lut = NULL; + uint32_t lut_size = 0; + + /* Ignore 'no gamma' from enum list. */ + if (!strcmp(gamma_mode->enums[i].name, "no gamma")) + continue; + + igt_info("Trying to use gamma mode: \'%s\'\n", gamma_mode->enums[i].name); + + /* Draw solid colors with no gamma transformation. */ + disable_plane_gamma(plane); + paint_rectangles(data, mode, red_green_blue, ); + igt_plane_set_fb(plane, ); + igt_display_commit2(display, display->is_atomic ? + COMMIT_ATOMIC : COMMIT_LEGACY); + igt_wait_for_vblank(data->drm_fd, + display->pipes[plane->pipe->pipe].crtc_offset); + igt_pipe_crc_collect_crc(pipe_crc, _fullcolors); + + /* Draw gradient colors with gamma LUT to remap all +* values to max red/green/blue. +*/ + segment_info = get_segment_data(data, gamma_mode->enums[i].value, + gamma_mode->enums[i].name); +