[Intel-gfx] [PATCH] igt/kms_rotation_crc: Add a subtest to validate Y-tiled obj + Y fb modifier (v3)

Vivek Kasireddy vivek.kasireddy at intel.com
Fri Oct 23 18:03:33 PDT 2015


On Fri, 23 Oct 2015 13:35:21 +0200
Daniel Vetter <daniel at ffwll.ch> wrote:

> On Fri, Oct 23, 2015 at 09:51:06AM +0100, Tvrtko Ursulin wrote:
> > 
> > Hi,
> > 
> > On 23/10/15 02:34, Vivek Kasireddy wrote:
> > >The main goal of this subtest is to trigger the following warning
> > >in the function i915_gem_object_get_fence():
> > >	if (WARN_ON(!obj->map_and_fenceable))
> > >
> > >To trigger this warning, the subtest first creates a Y-tiled
> > >object and an associated framebuffer with the Y-fb modifier.
> > >Furthermore, to prevent the map_and_fenceable from being set, we
> > >make sure that the object does not have a normal VMA by refraining
> > >from rendering to the object and by setting the rotation property
> > >upfront before calling commit.
> > >
> > >v2: Do not call paint_squares and just use one output.
> > >
> > >v3: Convert an if condition to igt_require and move the plane
> > >rotation requirement further up before the fb allocation.
> > >
> > >Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> > >Signed-off-by: Vivek Kasireddy <vivek.kasireddy at intel.com>
> > >---
> > >  tests/kms_rotation_crc.c | 68
> > > ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed,
> > > 68 insertions(+)
> > >
> > >diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
> > >index cc9847e..b25a949 100644
> > >--- a/tests/kms_rotation_crc.c
> > >+++ b/tests/kms_rotation_crc.c
> > >@@ -264,6 +264,68 @@ static void test_plane_rotation(data_t *data,
> > >enum igt_plane plane_type)
> > >  	igt_require_f(valid_tests, "no valid crtc/connector
> > > combinations found\n"); }
> > >
> > >+static void test_plane_rotation_ytiled_obj(data_t *data, enum
> > >igt_plane plane_type) +{
> > >+	igt_display_t *display = &data->display;
> > >+	uint64_t tiling = LOCAL_I915_FORMAT_MOD_Y_TILED;
> > >+	uint32_t format = DRM_FORMAT_XRGB8888;
> > >+	int bpp = igt_drm_format_to_bpp(format);
> > >+	enum igt_commit_style commit = COMMIT_LEGACY;
> > >+	int fd = data->gfx_fd;
> > >+	igt_output_t *output = &display->outputs[0];
> > >+	igt_plane_t *plane;
> > >+	drmModeModeInfo *mode;
> > >+	unsigned int stride, size, w, h;
> > >+	uint32_t gem_handle;
> > >+	int ret;
> > >+
> > >+	igt_require(output != NULL && output->valid == true);
> > >+
> > >+	plane = igt_output_get_plane(output, plane_type);
> > >+	igt_require(igt_plane_supports_rotation(plane));
> > >+
> > >+	if (plane_type == IGT_PLANE_PRIMARY || plane_type ==
> > >IGT_PLANE_CURSOR) {
> > >+		igt_require(data->display.has_universal_planes);
> > >+		commit = COMMIT_UNIVERSAL;
> > >+	}
> > >+
> > >+	mode = igt_output_get_mode(output);
> > >+	w = mode->hdisplay;
> > >+	h = mode->vdisplay;
> > >+
> > >+	for (stride = 512; stride < (w * bpp / 8); stride *= 2)
> > >+		;
> > >+	for (size = 1024*1024; size < stride * h; size *= 2)
> > >+		;
> > >+
> > >+	gem_handle = gem_create(fd, size);
> > >+	ret = __gem_set_tiling(fd, gem_handle, I915_TILING_Y,
> > >stride);
> > >+	igt_assert(ret == 0);
> > >+
> > >+	do_or_die(__kms_addfb(fd, gem_handle, w, h, stride,
> > >+		  format, tiling, LOCAL_DRM_MODE_FB_MODIFIERS,
> > >+		  &data->fb.fb_id));
> > >+	data->fb.width = w;
> > >+	data->fb.height = h;
> > >+	data->fb.gem_handle = gem_handle;
> > >+
> > >+	igt_plane_set_fb(plane, NULL);
> > >+	igt_display_commit(display);
> > >+
> > >+	igt_plane_set_rotation(plane, data->rotation);
> > >+	igt_plane_set_fb(plane, &data->fb);
> > >+
> > >+	drmModeObjectSetProperty(fd, plane->drm_plane->plane_id,
> > >+				 DRM_MODE_OBJECT_PLANE,
> > >+				 plane->rotation_property,
> > >+				 plane->rotation);
> > >+	ret = igt_display_try_commit2(display, commit);
> > >+
> > >+	kmstest_restore_vt_mode();
> > >+	igt_remove_fb(fd, &data->fb);
> > >+	igt_assert(ret == 0);
> > >+}
> > >+
> > >  igt_main
> > >  {
> > >  	data_t data = {};
> > >@@ -345,6 +407,12 @@ igt_main
> > >  		test_plane_rotation(&data, IGT_PLANE_PRIMARY);
> > >  	}
> > >
> > >+	igt_subtest_f("primary-rotation-90-Y-tiled") {
> > >+		igt_require(gen >= 9);
> > >+		data.rotation = IGT_ROTATION_90;
> > >+		test_plane_rotation_ytiled_obj(&data,
> > >IGT_PLANE_PRIMARY);
> > >+	}
> > >+
> > >  	igt_fixture {
> > >  		igt_display_fini(&data.display);
> > >  	}
> > >
> > 
> > Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> 
> Applied, thanks.
> -Daniel
Hi Daniel,
Not sure whether Tvrtko or Chris have any futher comments on the fix
for this bug but do you have any comments?

This was the fix:
http://lists.freedesktop.org/archives/intel-gfx/2015-September/076183.html

Thanks and Regards,
Vivek



More information about the Intel-gfx mailing list