From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Maxime Ripard <maxime.ripard@bootlin.com>
Cc: Petri Latvala <petri.latvala@intel.com>,
eben@raspberrypi.org, igt-dev@lists.freedesktop.org,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Subject: Re: [igt-dev] [PATCH 5/8] igt: fb: Move i915 buffer allocation to a function of its own
Date: Tue, 4 Dec 2018 21:28:29 +0200 [thread overview]
Message-ID: <20181204192829.GO9144@intel.com> (raw)
In-Reply-To: <892b6e0724e7f5a76c9e37474aaa8ff387a3fab8.1543917797.git-series.maxime.ripard@bootlin.com>
On Tue, Dec 04, 2018 at 11:08:19AM +0100, Maxime Ripard wrote:
> The create_bo_for_fb function has a rather big, non trivial block of
> code to allocate buffers in some non-trivial situation on the i915
> driver.
>
> Since this is both non-trivial and driver specific, move that code
> into a function of its own so that we can rework that function later
> on.
>
> Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
> ---
> lib/igt_fb.c | 89 +++++++++++++++++++++++++++--------------------------
> 1 file changed, 47 insertions(+), 42 deletions(-)
>
> diff --git a/lib/igt_fb.c b/lib/igt_fb.c
> index 2462d6ba6fab..d96689aa5fe6 100644
> --- a/lib/igt_fb.c
> +++ b/lib/igt_fb.c
> @@ -453,6 +453,52 @@ uint64_t igt_fb_tiling_to_mod(uint64_t tiling)
> }
> }
>
> +static int i915_create_gem_for_fb(struct igt_fb *fb)
> +{
> + bool full_range = fb->color_range == IGT_COLOR_YCBCR_FULL_RANGE;
> + int fd = fb->fd;
> + void *ptr;
> +
> + fb->gem_handle = gem_create(fd, fb->size);
> + gem_set_tiling(fd, fb->gem_handle,
> + igt_fb_mod_to_tiling(fb->tiling),
> + fb->strides[0]);
> +
> + gem_set_domain(fd, fb->gem_handle,
> + I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> +
> + /* Ensure the framebuffer is preallocated */
> + ptr = gem_mmap__gtt(fd, fb->gem_handle,
> + fb->size, PROT_READ | PROT_WRITE);
> + igt_assert(*(uint32_t *)ptr == 0);
> +
> + switch (fb->drm_format) {
> + case DRM_FORMAT_NV12:
> + memset(ptr + fb->offsets[0],
> + full_range ? 0x00 : 0x10,
> + fb->strides[0] * fb->plane_height[0]);
> + memset(ptr + fb->offsets[1],
> + 0x80,
> + fb->strides[1] * fb->plane_height[1]);
> + break;
> + case DRM_FORMAT_YUYV:
> + case DRM_FORMAT_YVYU:
> + wmemset(ptr + fb->offsets[0],
> + full_range ? 0x80008000 : 0x80108010,
> + fb->strides[0] * fb->plane_height[0] / sizeof(wchar_t));
> + break;
> + case DRM_FORMAT_UYVY:
> + case DRM_FORMAT_VYUY:
> + wmemset(ptr + fb->offsets[0],
> + full_range ? 0x00800080 : 0x10801080,
> + fb->strides[0] * fb->plane_height[0] / sizeof(wchar_t));
> + break;
> + }
> + gem_munmap(ptr, fb->size);
We should probably extract this memset() stuff into a separate
function because every driver will require it.
> +
> + return fb->gem_handle;
> +}
> +
> /* helpers to create nice-looking framebuffers */
> static int create_bo_for_fb(struct igt_fb *fb)
> {
> @@ -470,48 +516,7 @@ static int create_bo_for_fb(struct igt_fb *fb)
> fb->is_dumb = false;
>
> if (is_i915_device(fd)) {
> - void *ptr;
> - bool full_range = fb->color_range == IGT_COLOR_YCBCR_FULL_RANGE;
> -
> - fb->gem_handle = gem_create(fd, fb->size);
> -
> - gem_set_tiling(fd, fb->gem_handle,
> - igt_fb_mod_to_tiling(fb->tiling),
> - fb->strides[0]);
> -
> - gem_set_domain(fd, fb->gem_handle,
> - I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
> -
> - /* Ensure the framebuffer is preallocated */
> - ptr = gem_mmap__gtt(fd, fb->gem_handle,
> - fb->size, PROT_READ | PROT_WRITE);
> - igt_assert(*(uint32_t *)ptr == 0);
> -
> - switch (fb->drm_format) {
> - case DRM_FORMAT_NV12:
> - memset(ptr + fb->offsets[0],
> - full_range ? 0x00 : 0x10,
> - fb->strides[0] * fb->plane_height[0]);
> - memset(ptr + fb->offsets[1],
> - 0x80,
> - fb->strides[1] * fb->plane_height[1]);
> - break;
> - case DRM_FORMAT_YUYV:
> - case DRM_FORMAT_YVYU:
> - wmemset(ptr + fb->offsets[0],
> - full_range ? 0x80008000 : 0x80108010,
> - fb->strides[0] * fb->plane_height[0] / sizeof(wchar_t));
> - break;
> - case DRM_FORMAT_UYVY:
> - case DRM_FORMAT_VYUY:
> - wmemset(ptr + fb->offsets[0],
> - full_range ? 0x00800080 : 0x10801080,
> - fb->strides[0] * fb->plane_height[0] / sizeof(wchar_t));
> - break;
> - }
> - gem_munmap(ptr, fb->size);
> -
> - return fb->gem_handle;
> + return i915_create_gem_for_fb(fb);
> } else {
> bool driver_has_gem_api = false;
>
> --
> git-series 0.9.1
--
Ville Syrjälä
Intel
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
next prev parent reply other threads:[~2018-12-04 19:28 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-04 10:08 [igt-dev] [PATCH i-g-t 0/8] igt: chamelium: Test YUV buffers using the Chamelium Maxime Ripard
2018-12-04 10:08 ` [igt-dev] [PATCH i-g-t 1/8] chamelium: Fix inverted xr24 pattern paint dimensions Maxime Ripard
2018-12-04 10:08 ` [igt-dev] [PATCH i-g-t 2/8] chamelium: Pass and use stride for xr24 pattern paint Maxime Ripard
2018-12-04 10:08 ` [igt-dev] [PATCH i-g-t 3/8] igt: tests: chamelium: Start to unify tests Maxime Ripard
2018-12-04 10:08 ` [igt-dev] [PATCH i-g-t 4/8] igt: tests: chamelium: Convert VGA tests to do_test_display Maxime Ripard
2018-12-04 10:08 ` [igt-dev] [PATCH " Maxime Ripard
2018-12-04 10:08 ` [igt-dev] [PATCH 5/8] igt: fb: Move i915 buffer allocation to a function of its own Maxime Ripard
2018-12-04 19:28 ` Ville Syrjälä [this message]
2018-12-04 10:08 ` [igt-dev] [PATCH i-g-t " Maxime Ripard
2018-12-04 10:08 ` [igt-dev] [PATCH i-g-t 6/8] igt: fb: Separate YUV allocation from the rest Maxime Ripard
2018-12-04 10:08 ` [igt-dev] [PATCH i-g-t 7/8] igt: fb: Fallback on KMS dumb buffer allocation for YUV buffers Maxime Ripard
2018-12-04 19:32 ` Ville Syrjälä
2018-12-07 15:29 ` Maxime Ripard
2018-12-07 17:39 ` Ville Syrjälä
2018-12-04 10:08 ` [igt-dev] [PATCH " Maxime Ripard
2018-12-04 10:08 ` [igt-dev] [PATCH i-g-t 8/8] igt: tests: chamelium: Add NV12 format Maxime Ripard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181204192829.GO9144@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=eben@raspberrypi.org \
--cc=igt-dev@lists.freedesktop.org \
--cc=maxime.ripard@bootlin.com \
--cc=petri.latvala@intel.com \
--cc=thomas.petazzoni@bootlin.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.