Message ID | 1445564043-15181-1-git-send-email-vivek.kasireddy@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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@intel.com> > Signed-off-by: Vivek Kasireddy <vivek.kasireddy@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@intel.com> Regards, Tvrtko
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@intel.com> > >Signed-off-by: Vivek Kasireddy <vivek.kasireddy@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@intel.com> Applied, thanks. -Daniel
On Fri, 23 Oct 2015 13:35:21 +0200 Daniel Vetter <daniel@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@intel.com> > > >Signed-off-by: Vivek Kasireddy <vivek.kasireddy@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@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
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@intel.com> >>> Signed-off-by: Vivek Kasireddy <vivek.kasireddy@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@intel.com> > > Applied, thanks. Hasn't hit the repo yet. Regards, Tvrtko
On 27 October 2015 at 10:37, Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> 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@intel.com> >>>> Signed-off-by: Vivek Kasireddy <vivek.kasireddy@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@intel.com> >> >> >> 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@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
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); }
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@intel.com> Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com> --- tests/kms_rotation_crc.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+)