Re: [i-g-t 04/14] tests/kms_color: New subtests for Plane gamma

2022-01-05 Thread Harry Wentland



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

2022-01-05 Thread Modem, Bhanuprakash
> 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

2022-01-04 Thread Harry Wentland



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

2022-01-02 Thread Modem, Bhanuprakash
> 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

2022-01-02 Thread Modem, Bhanuprakash
> 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

2021-11-26 Thread Harry Wentland



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

2021-11-18 Thread Pekka Paalanen
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

2021-11-15 Thread Bhanuprakash Modem
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);
+