Re: [PATCH i-g-t v4 4/6] tests/kms_ccs: Test case where the CCS buffer was not provided

Ben Widawsky
2017-10-03T16:35:39Z

On 17-09-27 15:34:17, Gabriel Krisman Bertazi wrote:
>Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.co.uk>
>---
> tests/kms_ccs.c | 37 +++++++++++++++++++++++++++----------
> 1 file changed, 27 insertions(+), 10 deletions(-)
>
>diff --git a/tests/kms_ccs.c b/tests/kms_ccs.c
>index 73025a1e019f..35dfcca6be14 100644
>--- a/tests/kms_ccs.c
>+++ b/tests/kms_ccs.c
>@@ -33,8 +33,12 @@ enum test_flags {
> TEST_ROTATE_180 = 1 << 2,
> TEST_BAD_PIXEL_FORMAT = 1 << 3,
> TEST_BAD_ROTATION_90 = 1 << 4,
>+ TEST_NO_AUX_BUFFER = 1 << 5,
> };
>
>+#define TEST_FAIL_ON_ADDFB2 \
>+ (TEST_BAD_PIXEL_FORMAT | TEST_NO_AUX_BUFFER)
>+

Adding the define confuses things more than it helps IMO.

> enum test_fb_flags {
> FB_COMPRESSED = 1 << 0,
> FB_HAS_PLANE = 1 << 1,
>@@ -315,22 +319,29 @@ static void generate_fb(data_t *data, struct igt_fb *fb,
> */
> int ccs_width = ALIGN(width * 4, 32) / 32;
> int ccs_height = ALIGN(height, 16) / 16;
>- f.pitches[1] = ALIGN(ccs_width * 1, 128);
>- f.modifier[1] = modifier;

I think the case you're trying to test should have the modifier set for plane1,
just no handle, size or whatever. If you don't do this, I'm not sure what you're
actually testing.

>- f.offsets[1] = size[0];
>- size[1] = f.pitches[1] * ALIGN(ccs_height, 32);
>+ int ccs_pitches = ALIGN(ccs_width * 1, 128);
>+ int ccs_offsets = size[0];
>+
>+ size[1] = ccs_pitches * ALIGN(ccs_height, 32);
>
> f.handles[0] = gem_create(data->drm_fd, size[0] + size[1]);
>- f.handles[1] = f.handles[0];
>- render_ccs(data, f.handles[1], f.offsets[1], size[1],
>- height, f.pitches[1]);
>+
>+ if (!(data->flags & TEST_NO_AUX_BUFFER)) {
>+ f.modifier[1] = modifier;
>+ f.handles[1] = f.handles[0];
>+ f.pitches[1] = ccs_pitches;
>+ f.offsets[1] = ccs_offsets;
>+
>+ render_ccs(data, f.handles[1], f.offsets[1], size[1],
>+ height, f.pitches[1]);
>+ }
> } else
> f.handles[0] = gem_create(data->drm_fd, size[0]);
>
> render_fb(data, f.handles[0], size[0], fb_flags, height, f.pitches[0]);
>
> ret = drmIoctl(data->drm_fd, LOCAL_DRM_IOCTL_MODE_ADDFB2, &f);
>- if (data->flags & TEST_BAD_PIXEL_FORMAT) {
>+ if (data->flags & TEST_FAIL_ON_ADDFB2) {
> igt_assert_eq(ret, -1);
> igt_assert_eq(errno, EINVAL);
> return;
>@@ -379,7 +390,7 @@ static void try_config(data_t *data, enum test_fb_flags fb_flags)
> drm_mode->vdisplay, fb_flags);
> }
>
>- if (data->flags & TEST_BAD_PIXEL_FORMAT)
>+ if (data->flags & TEST_FAIL_ON_ADDFB2)
> return;
>
> igt_plane_set_position(primary, 0, 0);
>@@ -446,7 +457,8 @@ static void test_output(data_t *data)
> }
>
> if (data->flags & TEST_BAD_PIXEL_FORMAT ||
>- data->flags & TEST_BAD_ROTATION_90) {
>+ data->flags & TEST_BAD_ROTATION_90 ||
>+ data->flags & TEST_NO_AUX_BUFFER) {
> try_config(data, fb_flags | FB_COMPRESSED);
> }
>
>@@ -515,6 +527,11 @@ igt_main
> }
>
> data.plane = NULL;
>+
>+ data.flags = TEST_NO_AUX_BUFFER;
>+ igt_subtest_f("pipe-%s-missing-ccs-buffer", pipe_name)
>+ test_output(&data);
>+
> }
>
> igt_fixture