On 27 October 2015 at 10:37, Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxxxxxxxx> wrote: > > On 23/10/15 12:35, Daniel Vetter 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@xxxxxxxxx> >>>> Signed-off-by: Vivek Kasireddy <vivek.kasireddy@xxxxxxxxx> >>>> --- >>>> 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@xxxxxxxxx> >> >> >> Applied, thanks. > > > Hasn't hit the repo yet. Daniel has now pushed this patch (v3), so the further changes that have been made will need to be split into new patches. > > Regards, > > Tvrtko > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx