[igt-dev] [RESEND, v3 3/5] kms_plane: Split helpers creating reference FB and capturing CRC

Gwan-gyeong Mun
2018-09-06T07:24:10Z

From: Imre Deak <imre.deak@intel.com>

Split creating a reference FB and capturing the CRC for it into separate
functions, so in a follow-up patch we can reuse the CRC capture function
for a reference FB created in a different way.

Signed-off-by: Imre Deak <imre.deak@intel.com>
Reviewed-by: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
---
tests/kms_plane.c | 50 ++++++++++++++++++++++++++++++-----------------
1 file changed, 32 insertions(+), 18 deletions(-)

diff --git a/tests/kms_plane.c b/tests/kms_plane.c
index aceae591..3f48c821 100644
--- a/tests/kms_plane.c
+++ b/tests/kms_plane.c
@@ -61,11 +61,9 @@ static void test_fini(data_t *data)
}

static void
-test_grab_crc(data_t *data, igt_output_t *output, enum pipe pipe,
- color_t *fb_color, igt_crc_t *crc /* out */)
+test_grab_crc_for_fb(data_t *data, igt_output_t *output, enum pipe pipe,
+ igt_fb_t *fb, igt_crc_t *crc /* out */)
{
- struct igt_fb fb;
- drmModeModeInfo *mode;
igt_plane_t *primary;
char *crc_str;
int ret;
@@ -74,13 +72,7 @@ test_grab_crc(data_t *data, igt_output_t *output, enum pipe pipe,

primary = igt_output_get_plane(output, 0);

- mode = igt_output_get_mode(output);
- igt_create_color_fb(data->drm_fd, mode->hdisplay, mode->vdisplay,
- DRM_FORMAT_XRGB8888,
- LOCAL_DRM_FORMAT_MOD_NONE,
- fb_color->red, fb_color->green, fb_color->blue,
- &fb);
- igt_plane_set_fb(primary, &fb);
+ igt_plane_set_fb(primary, fb);

ret = igt_display_try_commit2(&data->display, COMMIT_LEGACY);
igt_skip_on(ret != 0);
@@ -89,14 +81,24 @@ test_grab_crc(data_t *data, igt_output_t *output, enum pipe pipe,

igt_plane_set_fb(primary, NULL);

- igt_remove_fb(data->drm_fd, &fb);
-
crc_str = igt_crc_to_string(crc);
- igt_debug("CRC for a (%.02f,%.02f,%.02f) fb: %s\n", fb_color->red,
- fb_color->green, fb_color->blue, crc_str);
+ igt_debug("CRC for fb: %s\n", crc_str);
free(crc_str);
}

+static void
+test_create_fb_for_output(data_t *data, igt_output_t *output, color_t *fb_color,
+ igt_fb_t *fb)
+{
+ drmModeModeInfo *mode = igt_output_get_mode(output);
+
+ igt_create_color_fb(data->drm_fd, mode->hdisplay, mode->vdisplay,
+ DRM_FORMAT_XRGB8888,
+ LOCAL_DRM_FORMAT_MOD_NONE,
+ fb_color->red, fb_color->green, fb_color->blue,
+ fb);
+}
+
/*
* Plane position test.
* - We start by grabbing a reference CRC of a full green fb being scanned
@@ -222,11 +224,15 @@ test_plane_position(data_t *data, enum pipe pipe, unsigned int flags)

for_each_valid_output_on_pipe(&data->display, pipe, output) {
int n_planes = data->display.pipes[pipe].n_planes;
+ igt_fb_t reference_fb;
igt_crc_t reference_crc;

test_init(data, pipe);

- test_grab_crc(data, output, pipe, &green, &reference_crc);
+ test_create_fb_for_output(data, output, &green, &reference_fb);
+ test_grab_crc_for_fb(data, output, pipe, &reference_fb,
+ &reference_crc);
+ igt_remove_fb(data->drm_fd, &reference_fb);

for (int plane = 1; plane < n_planes; plane++)
test_plane_position_with_output(data, pipe, plane,
@@ -343,13 +349,21 @@ test_plane_panning(data_t *data, enum pipe pipe, unsigned int flags)

for_each_valid_output_on_pipe(&data->display, pipe, output) {
int n_planes = data->display.pipes[pipe].n_planes;
+ igt_fb_t red_fb;
+ igt_fb_t blue_fb;
igt_crc_t red_crc;
igt_crc_t blue_crc;

test_init(data, pipe);

- test_grab_crc(data, output, pipe, &red, &red_crc);
- test_grab_crc(data, output, pipe, &blue, &blue_crc);
+ test_create_fb_for_output(data, output, &red, &red_fb);
+ test_create_fb_for_output(data, output, &blue, &blue_fb);
+
+ test_grab_crc_for_fb(data, output, pipe, &red_fb, &red_crc);
+ test_grab_crc_for_fb(data, output, pipe, &blue_fb, &blue_crc);
+
+ igt_remove_fb(data->drm_fd, &blue_fb);
+ igt_remove_fb(data->drm_fd, &red_fb);

for (int plane = 1; plane < n_planes; plane++)
test_plane_panning_with_output(data, pipe, plane,