From: Bhanuprakash Modem <bhanuprakash.modem@intel.com> To: igt-dev@lists.freedesktop.org, dri-devel@lists.freedesktop.org Cc: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>, Uma Shankar <uma.shankar@intel.com>, Bhanuprakash Modem <bhanuprakash.modem@intel.com> Subject: [i-g-t 05/14] tests/kms_color: New subtests for Plane degamma Date: Mon, 15 Nov 2021 15:17:50 +0530 [thread overview] Message-ID: <20211115094759.520955-6-bhanuprakash.modem@intel.com> (raw) In-Reply-To: <20211115094759.520955-1-bhanuprakash.modem@intel.com> To verify Plane degamma, draw 3 gradient rectangles in red, green and blue, with a maxed out degamma LUT and verify we have the same CRC as drawing solid color rectangles without degamma. Cc: Harry Wentland <harry.wentland@amd.com> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com> Cc: Uma Shankar <uma.shankar@intel.com> Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com> --- tests/kms_color.c | 124 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) diff --git a/tests/kms_color.c b/tests/kms_color.c index b45d66762f..920a5eaadd 100644 --- a/tests/kms_color.c +++ b/tests/kms_color.c @@ -781,6 +781,125 @@ static bool plane_gamma_test(data_t *data, igt_plane_t *plane) return ret; } +static bool plane_degamma_test(data_t *data, igt_plane_t *plane) +{ + igt_output_t *output; + igt_display_t *display = &data->display; + drmModeModeInfo *mode; + drmModePropertyPtr degamma_mode; + struct igt_fb fb; + 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 degamma 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_DEGAMMA_MODE)); + igt_require(igt_plane_has_prop(plane, IGT_PLANE_DEGAMMA_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_XRGB8888, + DRM_FORMAT_MOD_LINEAR, + &fb)); + + igt_plane_set_fb(plane, &fb); + + /* Disable Pipe color props. */ + disable_ctm(plane->pipe); + disable_degamma(plane->pipe); + disable_gamma(plane->pipe); + + disable_plane_ctm(plane); + disable_plane_gamma(plane); + igt_display_commit2(display, display->is_atomic ? + COMMIT_ATOMIC : COMMIT_LEGACY); + + degamma_mode = get_plane_gamma_degamma_mode(plane, IGT_PLANE_DEGAMMA_MODE); + + /* Iterate all supported degamma modes. */ + for (i = 0; i < degamma_mode->count_enums; i++) { + igt_crc_t crc_degamma, crc_fullcolors; + segment_data_t *degamma_segment_info = NULL; + struct drm_color_lut_ext *degamma_lut = NULL; + uint32_t degamma_lut_size = 0; + + /* Ignore 'no degamma' from enum list. */ + if (!strcmp(degamma_mode->enums[i].name, "no degamma")) + continue; + + degamma_segment_info = get_segment_data(data, degamma_mode->enums[i].value, + degamma_mode->enums[i].name); + degamma_lut_size = sizeof(struct drm_color_lut_ext) * degamma_segment_info->entries_count; + degamma_lut = create_max_lut(degamma_segment_info); + + igt_info("Trying to use degamma mode: \'%s\'\n", degamma_mode->enums[i].name); + + /* Draw solid colors with no degamma. */ + disable_plane_degamma(plane); + paint_rectangles(data, mode, red_green_blue, &fb); + igt_plane_set_fb(plane, &fb); + 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, &crc_fullcolors); + + /* Draw gradient colors with degamma LUT to remap all + * values to max red/green/blue. + */ + paint_gradient_rectangles(data, mode, red_green_blue, &fb); + igt_plane_set_fb(plane, &fb); + set_plane_degamma(plane, degamma_mode->enums[i].name, + degamma_lut, degamma_lut_size); + 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, &crc_degamma); + + /* Verify that the CRC of the software computed output + * is equal to the CRC of the degamma LUT transformation + * output. + */ + ret &= igt_check_crc_equal(&crc_degamma, &crc_fullcolors); + + free(degamma_lut); + clear_segment_data(degamma_segment_info); + } + + disable_plane_degamma(plane); + igt_plane_set_fb(plane, NULL); + igt_output_set_pipe(output, PIPE_NONE); + igt_display_commit2(display, display->is_atomic ? + COMMIT_ATOMIC : COMMIT_LEGACY); + + igt_pipe_crc_free(pipe_crc); + drmModeFreeProperty(degamma_mode); + + return ret; +} + static void prep_pipe(data_t *data, enum pipe p) { @@ -1062,6 +1181,11 @@ static void run_tests_for_plane(data_t *data, enum pipe pipe) igt_describe("Compare maxed out plane gamma LUT and solid color linear LUT"); igt_subtest_f("pipe-%s-plane-gamma", kmstest_pipe_name(pipe)) run_plane_color_test(data, pipe, plane_gamma_test); + + igt_describe("Compare maxed out plane degamma LUT and solid color linear LUT"); + igt_subtest_f("pipe-%s-plane-degamma", + kmstest_pipe_name(pipe)) + run_plane_color_test(data, pipe, plane_degamma_test); } igt_main -- 2.32.0
WARNING: multiple messages have this Message-ID (diff)
From: Bhanuprakash Modem <bhanuprakash.modem@intel.com> To: igt-dev@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [igt-dev] [i-g-t 05/14] tests/kms_color: New subtests for Plane degamma Date: Mon, 15 Nov 2021 15:17:50 +0530 [thread overview] Message-ID: <20211115094759.520955-6-bhanuprakash.modem@intel.com> (raw) In-Reply-To: <20211115094759.520955-1-bhanuprakash.modem@intel.com> To verify Plane degamma, draw 3 gradient rectangles in red, green and blue, with a maxed out degamma LUT and verify we have the same CRC as drawing solid color rectangles without degamma. Cc: Harry Wentland <harry.wentland@amd.com> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com> Cc: Uma Shankar <uma.shankar@intel.com> Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com> --- tests/kms_color.c | 124 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) diff --git a/tests/kms_color.c b/tests/kms_color.c index b45d66762f..920a5eaadd 100644 --- a/tests/kms_color.c +++ b/tests/kms_color.c @@ -781,6 +781,125 @@ static bool plane_gamma_test(data_t *data, igt_plane_t *plane) return ret; } +static bool plane_degamma_test(data_t *data, igt_plane_t *plane) +{ + igt_output_t *output; + igt_display_t *display = &data->display; + drmModeModeInfo *mode; + drmModePropertyPtr degamma_mode; + struct igt_fb fb; + 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 degamma 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_DEGAMMA_MODE)); + igt_require(igt_plane_has_prop(plane, IGT_PLANE_DEGAMMA_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_XRGB8888, + DRM_FORMAT_MOD_LINEAR, + &fb)); + + igt_plane_set_fb(plane, &fb); + + /* Disable Pipe color props. */ + disable_ctm(plane->pipe); + disable_degamma(plane->pipe); + disable_gamma(plane->pipe); + + disable_plane_ctm(plane); + disable_plane_gamma(plane); + igt_display_commit2(display, display->is_atomic ? + COMMIT_ATOMIC : COMMIT_LEGACY); + + degamma_mode = get_plane_gamma_degamma_mode(plane, IGT_PLANE_DEGAMMA_MODE); + + /* Iterate all supported degamma modes. */ + for (i = 0; i < degamma_mode->count_enums; i++) { + igt_crc_t crc_degamma, crc_fullcolors; + segment_data_t *degamma_segment_info = NULL; + struct drm_color_lut_ext *degamma_lut = NULL; + uint32_t degamma_lut_size = 0; + + /* Ignore 'no degamma' from enum list. */ + if (!strcmp(degamma_mode->enums[i].name, "no degamma")) + continue; + + degamma_segment_info = get_segment_data(data, degamma_mode->enums[i].value, + degamma_mode->enums[i].name); + degamma_lut_size = sizeof(struct drm_color_lut_ext) * degamma_segment_info->entries_count; + degamma_lut = create_max_lut(degamma_segment_info); + + igt_info("Trying to use degamma mode: \'%s\'\n", degamma_mode->enums[i].name); + + /* Draw solid colors with no degamma. */ + disable_plane_degamma(plane); + paint_rectangles(data, mode, red_green_blue, &fb); + igt_plane_set_fb(plane, &fb); + 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, &crc_fullcolors); + + /* Draw gradient colors with degamma LUT to remap all + * values to max red/green/blue. + */ + paint_gradient_rectangles(data, mode, red_green_blue, &fb); + igt_plane_set_fb(plane, &fb); + set_plane_degamma(plane, degamma_mode->enums[i].name, + degamma_lut, degamma_lut_size); + 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, &crc_degamma); + + /* Verify that the CRC of the software computed output + * is equal to the CRC of the degamma LUT transformation + * output. + */ + ret &= igt_check_crc_equal(&crc_degamma, &crc_fullcolors); + + free(degamma_lut); + clear_segment_data(degamma_segment_info); + } + + disable_plane_degamma(plane); + igt_plane_set_fb(plane, NULL); + igt_output_set_pipe(output, PIPE_NONE); + igt_display_commit2(display, display->is_atomic ? + COMMIT_ATOMIC : COMMIT_LEGACY); + + igt_pipe_crc_free(pipe_crc); + drmModeFreeProperty(degamma_mode); + + return ret; +} + static void prep_pipe(data_t *data, enum pipe p) { @@ -1062,6 +1181,11 @@ static void run_tests_for_plane(data_t *data, enum pipe pipe) igt_describe("Compare maxed out plane gamma LUT and solid color linear LUT"); igt_subtest_f("pipe-%s-plane-gamma", kmstest_pipe_name(pipe)) run_plane_color_test(data, pipe, plane_gamma_test); + + igt_describe("Compare maxed out plane degamma LUT and solid color linear LUT"); + igt_subtest_f("pipe-%s-plane-degamma", + kmstest_pipe_name(pipe)) + run_plane_color_test(data, pipe, plane_degamma_test); } igt_main -- 2.32.0
next prev parent reply other threads:[~2021-11-15 9:50 UTC|newest] Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-11-15 9:47 [i-g-t 00/14] Add IGT support for plane color management Bhanuprakash Modem 2021-11-15 9:47 ` [igt-dev] " Bhanuprakash Modem 2021-11-15 9:47 ` [i-g-t 01/14] HAX: Get uapi headers to compile the IGT Bhanuprakash Modem 2021-11-15 9:47 ` [i-g-t 02/14] lib/igt_kms: Add plane color mgmt properties Bhanuprakash Modem 2021-11-15 9:47 ` [igt-dev] " Bhanuprakash Modem 2021-11-15 9:47 ` [i-g-t 03/14] kms_color_helper: Add helper functions for plane color mgmt Bhanuprakash Modem 2021-11-15 9:47 ` [igt-dev] " Bhanuprakash Modem 2021-11-18 8:41 ` Pekka Paalanen 2021-11-18 8:41 ` [igt-dev] " Pekka Paalanen 2022-01-03 4:02 ` Modem, Bhanuprakash 2022-01-03 4:02 ` [igt-dev] " Modem, Bhanuprakash 2021-11-26 16:54 ` Harry Wentland 2021-11-26 16:54 ` [igt-dev] " Harry Wentland 2022-01-03 4:02 ` Modem, Bhanuprakash 2022-01-03 4:02 ` [igt-dev] " Modem, Bhanuprakash 2021-11-15 9:47 ` [i-g-t 04/14] tests/kms_color: New subtests for Plane gamma Bhanuprakash Modem 2021-11-15 9:47 ` [igt-dev] " Bhanuprakash Modem 2021-11-18 9:02 ` Pekka Paalanen 2021-11-18 9:02 ` [igt-dev] " Pekka Paalanen 2022-01-03 4:09 ` Modem, Bhanuprakash 2022-01-03 4:09 ` [igt-dev] " Modem, Bhanuprakash 2021-11-26 16:55 ` Harry Wentland 2021-11-26 16:55 ` [igt-dev] " Harry Wentland 2022-01-03 4:05 ` Modem, Bhanuprakash 2022-01-03 4:05 ` [igt-dev] " Modem, Bhanuprakash 2022-01-04 21:19 ` Harry Wentland 2022-01-05 11:21 ` Modem, Bhanuprakash 2022-01-05 11:21 ` [igt-dev] " Modem, Bhanuprakash 2022-01-05 22:13 ` Harry Wentland 2021-11-15 9:47 ` Bhanuprakash Modem [this message] 2021-11-15 9:47 ` [igt-dev] [i-g-t 05/14] tests/kms_color: New subtests for Plane degamma Bhanuprakash Modem 2021-11-15 9:47 ` [i-g-t 06/14] tests/kms_color: New subtests for Plane CTM Bhanuprakash Modem 2021-11-15 9:47 ` [igt-dev] " Bhanuprakash Modem 2021-11-26 16:55 ` Harry Wentland 2021-11-15 9:47 ` [i-g-t 07/14] tests/kms_color: New negative tests for plane level color mgmt Bhanuprakash Modem 2021-11-15 9:47 ` [igt-dev] " Bhanuprakash Modem 2021-11-18 9:19 ` Pekka Paalanen 2021-11-18 9:19 ` [igt-dev] " Pekka Paalanen 2021-11-29 14:56 ` Harry Wentland 2022-01-03 4:05 ` Modem, Bhanuprakash 2022-01-03 4:05 ` [igt-dev] " Modem, Bhanuprakash 2021-11-15 9:47 ` [i-g-t 08/14] tests/kms_color_chamelium: New subtests for Plane gamma Bhanuprakash Modem 2021-11-15 9:47 ` [igt-dev] " Bhanuprakash Modem 2021-11-18 9:32 ` Pekka Paalanen 2021-11-18 9:32 ` [igt-dev] " Pekka Paalanen 2022-01-03 4:06 ` Modem, Bhanuprakash 2022-01-03 4:06 ` [igt-dev] " Modem, Bhanuprakash 2021-11-15 9:47 ` [i-g-t 09/14] tests/kms_color_chamelium: New subtests for Plane degamma Bhanuprakash Modem 2021-11-15 9:47 ` [igt-dev] " Bhanuprakash Modem 2021-11-15 9:47 ` [i-g-t 10/14] tests/kms_color_chamelium: New subtests for Plane CTM Bhanuprakash Modem 2021-11-15 9:47 ` [igt-dev] " Bhanuprakash Modem 2021-11-15 9:47 ` [i-g-t 11/14] lib/igt_kms: Add pipe color mgmt properties Bhanuprakash Modem 2021-11-15 9:47 ` [igt-dev] " Bhanuprakash Modem 2021-11-18 9:34 ` Pekka Paalanen 2021-11-18 9:34 ` [igt-dev] " Pekka Paalanen 2021-11-15 9:47 ` [i-g-t 12/14] kms_color_helper: Add helper functions to support logarithmic gamma mode Bhanuprakash Modem 2021-11-15 9:47 ` [igt-dev] " Bhanuprakash Modem 2021-11-18 9:45 ` Pekka Paalanen 2021-11-18 9:45 ` [igt-dev] " Pekka Paalanen 2022-01-03 4:07 ` Modem, Bhanuprakash 2022-01-03 4:07 ` [igt-dev] " Modem, Bhanuprakash 2021-11-26 16:55 ` Harry Wentland 2021-11-26 16:55 ` [igt-dev] " Harry Wentland 2022-01-03 4:08 ` Modem, Bhanuprakash 2022-01-03 4:08 ` [igt-dev] " Modem, Bhanuprakash 2021-11-15 9:47 ` [i-g-t 13/14] tests/kms_color: Extended IGT tests " Bhanuprakash Modem 2021-11-15 9:47 ` [igt-dev] " Bhanuprakash Modem 2021-11-15 9:47 ` [i-g-t 14/14] tests/kms_color_chamelium: " Bhanuprakash Modem 2021-11-15 9:47 ` [igt-dev] " Bhanuprakash Modem 2021-11-15 11:14 ` [igt-dev] ✓ Fi.CI.BAT: success for Add IGT support for plane color management Patchwork 2021-11-15 13:36 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork 2021-11-18 9:50 ` [i-g-t 00/14] " Pekka Paalanen 2021-11-18 9:50 ` [igt-dev] " Pekka Paalanen 2021-11-26 16:54 ` Harry Wentland 2021-11-29 9:20 ` Pekka Paalanen 2021-11-29 9:20 ` [igt-dev] " Pekka Paalanen 2021-11-29 15:20 ` Harry Wentland 2022-01-03 4:11 ` Modem, Bhanuprakash 2022-01-03 4:11 ` [igt-dev] " Modem, Bhanuprakash 2022-01-04 22:01 ` Harry Wentland 2022-01-04 7:57 ` [igt-dev] [v2 i-g-t 00/15] " Bhanuprakash Modem 2022-01-04 7:57 ` [igt-dev] [v2 i-g-t 01/15] HAX: Get uapi headers to compile the IGT Bhanuprakash Modem 2022-01-04 7:57 ` [igt-dev] [v2 i-g-t 02/15] lib/igt_kms: Add plane color mgmt properties Bhanuprakash Modem 2022-01-04 7:57 ` [igt-dev] [v2 i-g-t 03/15] kms_color_helper: Add helper functions for plane color mgmt Bhanuprakash Modem 2022-01-04 7:57 ` [igt-dev] [v2 i-g-t 04/15] tests/kms_color: New subtests for Plane gamma Bhanuprakash Modem 2022-01-04 7:57 ` [igt-dev] [v2 i-g-t 05/15] tests/kms_color: New subtests for Plane degamma Bhanuprakash Modem 2022-01-04 7:57 ` [igt-dev] [v2 i-g-t 06/15] tests/kms_color: New subtests for Plane CTM Bhanuprakash Modem 2022-01-04 7:57 ` [igt-dev] [v2 i-g-t 07/15] tests/kms_color: New negative tests for plane level color mgmt Bhanuprakash Modem 2022-01-04 7:57 ` [igt-dev] [v2 i-g-t 08/15] tests/kms_color_chamelium: New subtests for Plane gamma Bhanuprakash Modem 2022-01-04 7:57 ` [igt-dev] [v2 i-g-t 09/15] tests/kms_color_chamelium: New subtests for Plane degamma Bhanuprakash Modem 2022-01-04 7:57 ` [igt-dev] [v2 i-g-t 10/15] tests/kms_color_chamelium: New subtests for Plane CTM Bhanuprakash Modem 2022-01-04 7:57 ` [igt-dev] [v2 i-g-t 11/15] lib/igt_kms: Add pipe color mgmt properties Bhanuprakash Modem 2022-01-04 7:57 ` [igt-dev] [v2 i-g-t 12/15] kms_color_helper: Add helper functions to support logarithmic gamma mode Bhanuprakash Modem 2022-01-04 7:57 ` [igt-dev] [v2 i-g-t 13/15] tests/kms_color: Extended IGT tests " Bhanuprakash Modem 2022-01-04 7:57 ` [igt-dev] [v2 i-g-t 14/15] tests/kms_color_chamelium: " Bhanuprakash Modem 2022-01-04 7:57 ` [igt-dev] [v2 i-g-t 15/15] HAX: Add color mgmt tests to BAT Bhanuprakash Modem
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20211115094759.520955-6-bhanuprakash.modem@intel.com \ --to=bhanuprakash.modem@intel.com \ --cc=dri-devel@lists.freedesktop.org \ --cc=igt-dev@lists.freedesktop.org \ --cc=juhapekka.heikkila@gmail.com \ --cc=uma.shankar@intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.