public inbox for igt-dev@lists.freedesktop.org
 help / color / mirror / Atom feed
From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
To: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>,
	igt-dev@lists.freedesktop.org
Cc: ville.syrjala@intel.com, martin.peres@intel.com
Subject: Re: [igt-dev] [PATCH i-g-t v10] lib/igt_fb: Added XYUV format support for testing
Date: Tue, 23 Oct 2018 13:33:13 +0200	[thread overview]
Message-ID: <ce53193d-4334-dc15-2073-a8a3921273f3@linux.intel.com> (raw)
In-Reply-To: <20181008081800.1953-1-stanislav.lisovskiy@intel.com>

Op 08-10-18 om 10:18 schreef Stanislav Lisovskiy:
> XYUV format support has been added to DRM, modified
> IGT to reflect those changes.
>
> v2: Fixed merge conflict, started to use new yuv<=>rgb
>     conversion functions.
>
> v3: Fixed kms_available_modes_crc test to support new XYUV
>     format. Fixed a problem, where test complains that two
>     outputs might use same pipe at the same time.
>
> v4: Fixed convertion procedure in igt_fb to support XYUV
>     properly.
>
> v5: Fixed a coding typo.
>
> v6: Set depth equal to -1 for XYUV format in order to prevent
>     it to be used by igt_bpp_depth_to_drm_format, as we do not
>     want YUV formats to be used in that case.
>
> v7: Fix "black" color initialization for create_bo_for_fb with
>     proper value. Changed naming "planar_stride" to "xyuv_stride".
>
> v8: Change naming from DRM_FORMAT_XYUV to DRM_FORMAT_XYUV8888
>
> v9: Fixed compilation errors by rebasing to recent master.
>
> v10: Adding reference to correspondent kernel commit with the new format
>      in include/drm-uapi
>
> drm-tip:
> 	commit f75df2cad986f40e190ee97fe3b49dd17174f1af
> 	Author: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> 	Date:   Fri Jul 6 11:57:27 2018 +0300
>
> 	    drm: Introduce new DRM_FORMAT_XYUV
In what tree is this commit included? I don't see it in drm-tip, drm-intel or drm-misc.
>
> Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> ---
>  include/drm-uapi/drm_fourcc.h |  1 +
>  lib/igt_fb.c                  | 89 +++++++++++++++++++++++++++++++++++
>  2 files changed, 90 insertions(+)
>
> diff --git a/include/drm-uapi/drm_fourcc.h b/include/drm-uapi/drm_fourcc.h
> index e04613d3..03e5466c 100644
> --- a/include/drm-uapi/drm_fourcc.h
> +++ b/include/drm-uapi/drm_fourcc.h
> @@ -112,6 +112,7 @@ extern "C" {
>  #define DRM_FORMAT_VYUY		fourcc_code('V', 'Y', 'U', 'Y') /* [31:0] Y1:Cb0:Y0:Cr0 8:8:8:8 little endian */
>  
>  #define DRM_FORMAT_AYUV		fourcc_code('A', 'Y', 'U', 'V') /* [31:0] A:Y:Cb:Cr 8:8:8:8 little endian */
> +#define DRM_FORMAT_XYUV8888	fourcc_code('X', 'Y', 'U', 'V') /* [31:0] X:Y:Cb:Cr 8:8:8:8 little endian */
>  
>  /*
>   * 2 plane RGB + A
> diff --git a/lib/igt_fb.c b/lib/igt_fb.c
> index cba67f41..7d72ee2f 100644
> --- a/lib/igt_fb.c
> +++ b/lib/igt_fb.c
> @@ -72,6 +72,10 @@ static const struct format_desc_struct {
>  	  .cairo_id = CAIRO_FORMAT_RGB16_565,
>  	  .num_planes = 1, .plane_bpp = { 16, },
>  	},
> +	{ .name = "XYUV8888", .depth = -1, .drm_id = DRM_FORMAT_XYUV8888,
> +	  .cairo_id = CAIRO_FORMAT_RGB24,
> +	  .num_planes = 1, .plane_bpp = { 32, },
> +	},
>  	{ .name = "XRGB8888", .depth = 24, .drm_id = DRM_FORMAT_XRGB8888,
>  	  .cairo_id = CAIRO_FORMAT_RGB24,
>  	  .num_planes = 1, .plane_bpp = { 32, },
> @@ -453,6 +457,10 @@ static int create_bo_for_fb(struct igt_fb *fb)
>  				       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],
> @@ -1510,6 +1518,79 @@ static void convert_nv12_to_rgb24(struct igt_fb *fb, struct fb_convert_blit_uplo
>  	free(buf);
>  }
>  
> +static void convert_yuv444_to_rgb24(struct igt_fb *fb, struct fb_convert_blit_upload *blit)
> +{
> +	int i, j;
> +	uint8_t *yuv24;
> +	uint8_t *rgb24 = blit->rgb24.map;
> +	unsigned rgb24_stride = blit->rgb24.stride, xyuv_stride = blit->base.linear.fb.strides[0];
> +	uint8_t *buf = malloc(blit->base.linear.fb.size);
> +	struct igt_mat4 m = igt_ycbcr_to_rgb_matrix(fb->color_encoding,
> +						    fb->color_range);
> +
> +	/*
> +	 * Reading from the BO is awfully slow because of lack of read caching,
> +	 * it's faster to copy the whole BO to a temporary buffer and convert
> +	 * from there.
> +	 */
> +	igt_memcpy_from_wc(buf, &blit->base.linear.map[blit->base.linear.fb.offsets[0]], blit->base.linear.fb.size);
> +	yuv24 = buf;
> +
> +	for (i = 0; i < fb->plane_height[0]; i++) {
> +		for (j = 0; j < fb->plane_width[0]; j++) {
> +			float y, u, v;
> +			struct igt_vec4 yuv;
> +			struct igt_vec4 rgb;
> +
> +			v = yuv24[i * xyuv_stride + j*sizeof(uint32_t)];
> +			u = yuv24[i * xyuv_stride + j*sizeof(uint32_t) + 1];
> +			y = yuv24[i * xyuv_stride + j*sizeof(uint32_t) + 2];
Just use '4' here.
> +			yuv.d[0] = y;
> +			yuv.d[1] = u;
> +			yuv.d[2] = v;
> +			yuv.d[3] = 1.0f;
> +
> +			rgb = igt_matrix_transform(&m, &yuv);
> +
> +			write_rgb(&rgb24[i * rgb24_stride + j*sizeof(uint32_t)], &rgb);
^Ditto.
> +		}
> +	}
> +
> +	free(buf);
> +}
> +
> +
> +static void convert_rgb24_to_yuv444(struct igt_fb *fb, struct fb_convert_blit_upload *blit)
> +{
> +	int i, j;
> +	uint8_t *rgb24;
> +	uint8_t *yuv444 = &blit->base.linear.map[blit->base.linear.fb.offsets[0]];
> +	unsigned int rgb24_stride = blit->rgb24.stride, xyuv_stride = blit->base.linear.fb.strides[0];
> +	struct igt_mat4 m = igt_rgb_to_ycbcr_matrix(fb->color_encoding,
> +						    fb->color_range);
> +
> +	rgb24 = blit->rgb24.map;
> +
> +	for (i = 0; i < fb->plane_height[0]; i++) {
> +		for (j = 0; j < fb->plane_width[0]; j++) {
> +			struct igt_vec4 rgb;
> +			struct igt_vec4 yuv;
> +			float y, u, v;
> +
> +			read_rgb(&rgb, &rgb24[i * rgb24_stride + j*sizeof(uint32_t)]);
^
> +			yuv = igt_matrix_transform(&m, &rgb);
> +
> +			yuv444[i * xyuv_stride + j*sizeof(uint32_t)] = yuv.d[2];
> +			yuv444[i * xyuv_stride + j*sizeof(uint32_t) + 1] = yuv.d[1];
> +			yuv444[i * xyuv_stride + j*sizeof(uint32_t) + 2] = yuv.d[0];
Ditto.

Otherwise looks good, so with that fixed:
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

  parent reply	other threads:[~2018-10-23 11:33 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-08  8:18 [igt-dev] [PATCH i-g-t v10] lib/igt_fb: Added XYUV format support for testing Stanislav Lisovskiy
2018-10-08  9:19 ` [igt-dev] ✓ Fi.CI.BAT: success for lib/igt_fb: Added XYUV format support for testing (rev11) Patchwork
2018-10-08 10:31 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2018-10-23 11:33 ` Maarten Lankhorst [this message]
2018-10-23 13:51   ` [igt-dev] [PATCH i-g-t v10] lib/igt_fb: Added XYUV format support for testing Lisovskiy, Stanislav
2018-10-23 13:54     ` Maarten Lankhorst
2018-10-24  6:42       ` Lisovskiy, Stanislav
2018-10-24  7:35         ` Maarten Lankhorst
  -- strict thread matches above, loose matches on Subject: below --
2018-10-08  8:13 Stanislav Lisovskiy

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=ce53193d-4334-dc15-2073-a8a3921273f3@linux.intel.com \
    --to=maarten.lankhorst@linux.intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=martin.peres@intel.com \
    --cc=stanislav.lisovskiy@intel.com \
    --cc=ville.syrjala@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox