All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Paul Kocialkowski <paul.kocialkowski@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 i-g-t v2 04/13] igt: fb: Move i915 YUV buffer clearing code to a function
Date: Mon, 14 Jan 2019 18:40:10 +0200	[thread overview]
Message-ID: <20190114164010.GC20097@intel.com> (raw)
In-Reply-To: <d3c5cbb3bba5b0d44498031e8de1ec3b256acec7.camel@bootlin.com>

On Mon, Jan 14, 2019 at 04:13:02PM +0100, Paul Kocialkowski wrote:
> Hi,
> 
> On Thu, 2019-01-10 at 16:38 +0200, Ville Syrjälä wrote:
> > On Thu, Jan 10, 2019 at 11:10:09AM +0100, Paul Kocialkowski wrote:
> > > On Tue, 2019-01-08 at 16:19 +0100, Maxime Ripard wrote:
> > > > The YUV buffer allocation path for the i915 driver also has some code to
> > > > clear a YUV buffer.
> > > > 
> > > > As that is going to be useful for all the other drivers, let's move it to
> > > > a separate function.
> > > > 
> > > > Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
> > > 
> > > I'm not really sure why clearing the buffers is a useful thing to do
> > > and why we should only do it for YUV and not RGB formats.
> > 
> > 0 = black for RGB, 0 != black for YUV. The memset was just to make
> > things more consistent. But not sure if any test would actually
> > fail if we just drop the memset.
> 
> Right, I understand that this is required for setting the framebuffer
> to black, but I'm just wondering why this has to be done in the first
> place.
> 
> As far as I know, (RGB) buffers allocated with GEM are not zero-ed by
> the allocator,

They are zeroed. You wouldn't want the kernel to leak random
memory contents all over.

> nor by any component in IGT. So I'm wondering why we're
> taking the extra time for clearing buffers in the YUV case.
> 
> Cheers,
> 
> Paul
> 
> > > Anyway, since this code was already there and the refactoring
> > > definitely makes sense:
> > > 
> > > Reviewed-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
> > > 
> > > Cheers,
> > > 
> > > Paul
> > > 
> > > > ---
> > > >  lib/igt_fb.c | 80 +++++++++++++++++++++++++++-------------------------
> > > >  1 file changed, 42 insertions(+), 38 deletions(-)
> > > > 
> > > > diff --git a/lib/igt_fb.c b/lib/igt_fb.c
> > > > index 45691fd441d9..d69c3fb2d38d 100644
> > > > --- a/lib/igt_fb.c
> > > > +++ b/lib/igt_fb.c
> > > > @@ -484,6 +484,47 @@ uint64_t igt_fb_tiling_to_mod(uint64_t tiling)
> > > >  	}
> > > >  }
> > > >  
> > > > +static void clear_yuv_buffer(struct igt_fb *fb)
> > > > +{
> > > > +	bool full_range = fb->color_range == IGT_COLOR_YCBCR_FULL_RANGE;
> > > > +	void *ptr;
> > > > +
> > > > +	igt_assert(igt_format_is_yuv(fb->drm_format));
> > > > +
> > > > +	/* Ensure the framebuffer is preallocated */
> > > > +	ptr = igt_fb_map_buffer(fb->fd, fb);
> > > > +	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_XYUV8888:
> > > > +		wmemset(ptr + fb->offsets[0], full_range ? 0x00008080 : 0x00108080,
> > > > +			fb->strides[0] * fb->plane_height[0] / sizeof(wchar_t));
> > > > +		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;
> > > > +	}
> > > > +
> > > > +	igt_fb_unmap_buffer(fb, ptr);
> > > > +}
> > > > +
> > > >  /* helpers to create nice-looking framebuffers */
> > > >  static int create_bo_for_fb(struct igt_fb *fb)
> > > >  {
> > > > @@ -501,50 +542,13 @@ 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_XYUV8888:
> > > > -				wmemset(ptr + fb->offsets[0], full_range ? 0x00008080 : 0x00108080,
> > > > -					fb->strides[0] * fb->plane_height[0] / sizeof(wchar_t));
> > > > -				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);
> > > > +			clear_yuv_buffer(fd);
> > > >  
> > > >  			return fb->gem_handle;
> > > >  		} else {
> > > -- 
> > > Paul Kocialkowski, Bootlin
> > > Embedded Linux and kernel engineering
> > > https://bootlin.com
> -- 
> Paul Kocialkowski, Bootlin
> Embedded Linux and kernel engineering
> https://bootlin.com

-- 
Ville Syrjälä
Intel
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

  reply	other threads:[~2019-01-14 16:40 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-08 15:19 [igt-dev] [PATCH i-g-t v2 00/13] igt: chamelium: Test YUV buffers using the Chamelium Maxime Ripard
2019-01-08 15:19 ` [igt-dev] [PATCH i-g-t v2 01/13] igt: fb: Add subsampling parameters to the formats Maxime Ripard
2019-01-10  9:59   ` Paul Kocialkowski
2019-01-08 15:19 ` [igt-dev] [PATCH i-g-t v2 02/13] igt: fb: Reduce tile size alignment for non intel platforms Maxime Ripard
2019-01-10  9:59   ` Paul Kocialkowski
2019-01-08 15:19 ` [igt-dev] [PATCH i-g-t v2 03/13] igt: fb: generic YUV convertion function Maxime Ripard
2019-01-10 10:07   ` Paul Kocialkowski
2019-01-08 15:19 ` [igt-dev] [PATCH i-g-t v2 04/13] igt: fb: Move i915 YUV buffer clearing code to a function Maxime Ripard
2019-01-10 10:10   ` Paul Kocialkowski
2019-01-10 14:38     ` Ville Syrjälä
2019-01-14 15:13       ` Paul Kocialkowski
2019-01-14 16:40         ` Ville Syrjälä [this message]
2019-01-15 16:15           ` Paul Kocialkowski
2019-01-08 15:19 ` [igt-dev] [PATCH i-g-t v2 05/13] igt: fb: Move size computation to the common path Maxime Ripard
2019-01-10 10:10   ` Paul Kocialkowski
2019-01-10 10:43   ` Paul Kocialkowski
2019-01-08 15:19 ` [igt-dev] [PATCH i-g-t v2 06/13] igt: fb: Refactor dumb buffer allocation path Maxime Ripard
2019-01-10 10:11   ` Paul Kocialkowski
2019-01-08 15:19 ` [igt-dev] [PATCH i-g-t v2 07/13] igt: fb: Account for all planes bpp Maxime Ripard
2019-01-10 10:21   ` Paul Kocialkowski
2019-01-21 13:10     ` Maxime Ripard
2019-01-08 15:19 ` [igt-dev] [PATCH i-g-t v2 08/13] igt: fb: Clear YUV dumb buffers Maxime Ripard
2019-01-10 10:27   ` Paul Kocialkowski
2019-01-08 15:19 ` [igt-dev] [PATCH i-g-t v2 09/13] igt: fb: Rework YUV i915 allocation path Maxime Ripard
2019-01-08 15:19 ` [igt-dev] [PATCH i-g-t v2 10/13] igt: fb: Add a bunch of new YUV formats Maxime Ripard
2019-01-10 10:45   ` Paul Kocialkowski
2019-01-08 15:19 ` [igt-dev] [PATCH i-g-t v2 11/13] igt: tests: chamelium: Start to unify tests Maxime Ripard
2019-01-10 10:50   ` Paul Kocialkowski
2019-01-21 13:17     ` Maxime Ripard
2019-01-08 15:19 ` [igt-dev] [PATCH i-g-t v2 12/13] igt: tests: chamelium: Convert VGA tests to do_test_display Maxime Ripard
2019-01-10 10:50   ` Paul Kocialkowski
2019-01-08 15:19 ` [igt-dev] [PATCH i-g-t v2 13/13] igt: tests: chamelium: Add YUV formats tests Maxime Ripard
2019-01-10 10:54   ` Paul Kocialkowski
2019-01-08 15:31 ` [igt-dev] ✗ Fi.CI.BAT: failure for igt: chamelium: Test YUV buffers using the Chamelium (rev3) Patchwork
2019-01-08 17:59 ` [igt-dev] ✓ Fi.CI.BAT: success for igt: chamelium: Test YUV buffers using the Chamelium (rev4) Patchwork
2019-01-09  3:11 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork

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=20190114164010.GC20097@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=eben@raspberrypi.org \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=paul.kocialkowski@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.