All of lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t v5] lib/igt_fb: Added XYUV format support for testing
@ 2018-09-10 10:03 Stanislav Lisovskiy
  2018-09-10 16:29 ` [igt-dev] ✗ Fi.CI.BAT: failure for lib/igt_fb: Added XYUV format support for testing (rev5) Patchwork
  2018-09-11  8:26 ` [igt-dev] [PATCH i-g-t v5] lib/igt_fb: Added XYUV format support for testing Lisovskiy, Stanislav
  0 siblings, 2 replies; 7+ messages in thread
From: Stanislav Lisovskiy @ 2018-09-10 10:03 UTC (permalink / raw)
  To: igt-dev; +Cc: stanislav.lisovskiy, ville.syrjala, martin.peres

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.

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..0bf66de2 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_XYUV		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 ae71d967..b60b73b4 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -72,6 +72,10 @@ static struct format_desc_struct {
 	  .cairo_id = CAIRO_FORMAT_RGB16_565,
 	  .num_planes = 1, .plane_bpp = { 16, },
 	},
+	{ .name = "XYUV", .depth = 24, .drm_id = DRM_FORMAT_XYUV,
+	  .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, },
@@ -415,6 +419,10 @@ static int create_bo_for_fb(int fd, int width, int height,
 				memset(ptr + offsets[1], 0x80,
 				       calculated_stride * height/2);
 				break;
+			case DRM_FORMAT_XYUV:
+				wmemset(ptr, full_range ? 0x000f8080 : 0x000f8080,
+					calculated_stride * height / sizeof(wchar_t));
+				break;
 			case DRM_FORMAT_YUYV:
 			case DRM_FORMAT_YVYU:
 				wmemset(ptr, full_range ? 0x80008000 : 0x80108010,
@@ -1500,6 +1508,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, planar_stride = blit->linear.stride;
+	uint8_t *buf = malloc(blit->linear.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->linear.map, blit->linear.size);
+	yuv24 = &buf[blit->linear.offsets[0]];
+
+	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 * planar_stride + j*sizeof(uint32_t)];
+			u = yuv24[i * planar_stride + j*sizeof(uint32_t) + 1];
+			y = yuv24[i * planar_stride + j*sizeof(uint32_t) + 2];
+			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);
+		}
+	}
+
+	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->linear.map;
+	unsigned rgb24_stride = blit->rgb24.stride, planar_stride = blit->linear.stride;
+	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 * planar_stride + j*sizeof(uint32_t)] = yuv.d[2];
+			yuv444[i * planar_stride + j*sizeof(uint32_t) + 1] = yuv.d[1];
+			yuv444[i * planar_stride + j*sizeof(uint32_t) + 2] = yuv.d[0];
+		}
+	}
+}
+
+
+
+
 static void convert_rgb24_to_nv12(struct igt_fb *fb, struct fb_convert_blit_upload *blit)
 {
 	int i, j;
@@ -1756,6 +1837,9 @@ static void destroy_cairo_surface__convert(void *arg)
 	case DRM_FORMAT_VYUY:
 		convert_rgb24_to_yuyv(fb, blit, yuyv_swizzle(fb->drm_format));
 		break;
+	case DRM_FORMAT_XYUV:
+		convert_rgb24_to_yuv444(fb, blit);
+		break;
 	default:
 		igt_assert_f(false, "Conversion not implemented for formats 0x%x\n",
 			     fb->drm_format);
@@ -1809,6 +1893,9 @@ static void create_cairo_surface__convert(int fd, struct igt_fb *fb)
 	case DRM_FORMAT_VYUY:
 		convert_yuyv_to_rgb24(fb, blit, yuyv_swizzle(fb->drm_format));
 		break;
+	case DRM_FORMAT_XYUV:
+		convert_yuv444_to_rgb24(fb, blit);
+		break;
 	default:
 		igt_assert_f(false, "Conversion not implemented for formats 0x%x\n",
 			     fb->drm_format);
@@ -1825,6 +1912,7 @@ static void create_cairo_surface__convert(int fd, struct igt_fb *fb)
 				    blit, destroy_cairo_surface__convert);
 }
 
+
 /**
  * igt_get_cairo_surface:
  * @fd: open drm file descriptor
@@ -2011,6 +2099,7 @@ bool igt_format_is_yuv(uint32_t drm_format)
 	case DRM_FORMAT_YVYU:
 	case DRM_FORMAT_UYVY:
 	case DRM_FORMAT_VYUY:
+	case DRM_FORMAT_XYUV:
 		return true;
 	default:
 		return false;
-- 
2.17.0

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [igt-dev] ✗ Fi.CI.BAT: failure for lib/igt_fb: Added XYUV format support for testing (rev5)
  2018-09-10 10:03 [igt-dev] [PATCH i-g-t v5] lib/igt_fb: Added XYUV format support for testing Stanislav Lisovskiy
@ 2018-09-10 16:29 ` Patchwork
  2018-09-11  8:26 ` [igt-dev] [PATCH i-g-t v5] lib/igt_fb: Added XYUV format support for testing Lisovskiy, Stanislav
  1 sibling, 0 replies; 7+ messages in thread
From: Patchwork @ 2018-09-10 16:29 UTC (permalink / raw)
  To: Lisovskiy, Stanislav; +Cc: igt-dev

== Series Details ==

Series: lib/igt_fb: Added XYUV format support for testing (rev5)
URL   : https://patchwork.freedesktop.org/series/48789/
State : failure

== Summary ==

= CI Bug Log - changes from CI_DRM_4791 -> IGTPW_1817 =

== Summary - FAILURE ==

  Serious unknown changes coming with IGTPW_1817 absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_1817, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/48789/revisions/5/mbox/

== Possible new issues ==

  Here are the unknown changes that may have been introduced in IGTPW_1817:

  === IGT changes ===

    ==== Possible regressions ====

    igt@kms_flip@basic-flip-vs-dpms:
      fi-ilk-650:         PASS -> FAIL +4
      fi-pnv-d510:        PASS -> FAIL +3
      fi-skl-6770hq:      PASS -> FAIL +3
      fi-ivb-3520m:       PASS -> FAIL +3
      fi-snb-2520m:       PASS -> FAIL +3
      fi-gdg-551:         PASS -> FAIL +3
      fi-kbl-7500u:       PASS -> FAIL +4
      fi-bdw-gvtdvm:      PASS -> FAIL +3
      fi-glk-dsi:         NOTRUN -> FAIL +3

    igt@kms_flip@basic-flip-vs-modeset:
      fi-blb-e6850:       NOTRUN -> FAIL +3
      fi-byt-j1900:       PASS -> FAIL +3
      fi-ivb-3770:        PASS -> FAIL +3
      fi-glk-j4005:       PASS -> FAIL +3
      fi-bxt-j4205:       PASS -> FAIL +3
      fi-hsw-4770:        PASS -> FAIL +3
      fi-cfl-s3:          PASS -> FAIL +3

    igt@kms_flip@basic-flip-vs-wf_vblank:
      fi-icl-u:           PASS -> FAIL +3
      fi-snb-2600:        PASS -> FAIL +3
      fi-skl-6260u:       PASS -> FAIL +3
      fi-hsw-4770r:       PASS -> FAIL +3
      fi-bdw-samus:       PASS -> FAIL +3
      fi-cfl-8109u:       PASS -> FAIL +4
      fi-kbl-r:           PASS -> FAIL +3
      fi-bwr-2160:        PASS -> FAIL +3
      fi-bdw-5557u:       PASS -> FAIL +3
      fi-bsw-kefka:       PASS -> FAIL +3
      fi-skl-gvtdvm:      PASS -> FAIL +3
      fi-byt-clapper:     PASS -> FAIL +3

    igt@kms_flip@basic-plain-flip:
      fi-bsw-n3050:       PASS -> FAIL +3
      fi-byt-n2820:       PASS -> FAIL +3
      fi-cfl-guc:         PASS -> FAIL +3
      fi-skl-iommu:       PASS -> FAIL +3
      fi-cnl-psr:         PASS -> FAIL +3
      fi-bxt-dsi:         PASS -> FAIL +3
      fi-kbl-7560u:       PASS -> FAIL +3
      fi-skl-6600u:       PASS -> FAIL +3
      fi-whl-u:           PASS -> FAIL +3
      fi-cfl-8700k:       PASS -> FAIL +3
      fi-skl-guc:         PASS -> FAIL +4
      fi-kbl-7567u:       PASS -> FAIL +3
      fi-elk-e7500:       PASS -> FAIL +3

    igt@kms_setmode@basic-clone-single-crtc:
      fi-skl-6700k2:      PASS -> FAIL +4

    
== Known issues ==

  Here are the changes found in IGTPW_1817 that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@amdgpu/amd_prime@amd-to-i915:
      fi-kbl-8809g:       NOTRUN -> FAIL (fdo#107341)

    igt@drv_selftest@live_guc:
      fi-cfl-guc:         PASS -> DMESG-WARN (fdo#107258)

    igt@drv_selftest@live_hangcheck:
      fi-skl-guc:         PASS -> DMESG-FAIL (fdo#106685)

    igt@gem_exec_suspend@basic-s3:
      fi-skl-caroline:    NOTRUN -> INCOMPLETE (fdo#107556, fdo#104108)
      fi-kbl-soraka:      NOTRUN -> INCOMPLETE (fdo#107774, fdo#107556)

    igt@kms_chamelium@hdmi-hpd-fast:
      fi-kbl-7500u:       SKIP -> FAIL (fdo#103841, fdo#102672)

    igt@kms_pipe_crc_basic@nonblocking-crc-pipe-a:
      fi-byt-clapper:     PASS -> FAIL (fdo#107362)

    igt@kms_psr@primary_page_flip:
      fi-kbl-r:           PASS -> FAIL (fdo#107336)

    igt@pm_rpm@module-reload:
      fi-glk-j4005:       PASS -> DMESG-WARN (fdo#106000)

    
    ==== Possible fixes ====

    igt@amdgpu/amd_basic@cs-sdma:
      fi-skl-6700k2:      FAIL (fdo#107888) -> SKIP +7

    igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
      fi-byt-clapper:     FAIL (fdo#103191, fdo#107362) -> PASS

    igt@kms_psr@primary_page_flip:
      fi-whl-u:           FAIL (fdo#107336) -> PASS

    
  fdo#102672 https://bugs.freedesktop.org/show_bug.cgi?id=102672
  fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
  fdo#103841 https://bugs.freedesktop.org/show_bug.cgi?id=103841
  fdo#104108 https://bugs.freedesktop.org/show_bug.cgi?id=104108
  fdo#106000 https://bugs.freedesktop.org/show_bug.cgi?id=106000
  fdo#106685 https://bugs.freedesktop.org/show_bug.cgi?id=106685
  fdo#107258 https://bugs.freedesktop.org/show_bug.cgi?id=107258
  fdo#107336 https://bugs.freedesktop.org/show_bug.cgi?id=107336
  fdo#107341 https://bugs.freedesktop.org/show_bug.cgi?id=107341
  fdo#107362 https://bugs.freedesktop.org/show_bug.cgi?id=107362
  fdo#107556 https://bugs.freedesktop.org/show_bug.cgi?id=107556
  fdo#107774 https://bugs.freedesktop.org/show_bug.cgi?id=107774
  fdo#107888 https://bugs.freedesktop.org/show_bug.cgi?id=107888


== Participating hosts (46 -> 47) ==

  Additional (5): fi-kbl-soraka fi-skl-caroline fi-blb-e6850 fi-glk-dsi fi-kbl-8809g 
  Missing    (4): fi-ilk-m540 fi-byt-squawks fi-bsw-cyan fi-hsw-4200u 


== Build changes ==

    * IGT: IGT_4636 -> IGTPW_1817

  CI_DRM_4791: 07cf212bc704357ee60aba52ec40bab538222040 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_1817: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1817/
  IGT_4636: 40de31df52ffed5e392d607a83e3aea4efb150e6 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1817/issues.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [igt-dev] [PATCH i-g-t v5] lib/igt_fb: Added XYUV format support for testing
  2018-09-10 10:03 [igt-dev] [PATCH i-g-t v5] lib/igt_fb: Added XYUV format support for testing Stanislav Lisovskiy
  2018-09-10 16:29 ` [igt-dev] ✗ Fi.CI.BAT: failure for lib/igt_fb: Added XYUV format support for testing (rev5) Patchwork
@ 2018-09-11  8:26 ` Lisovskiy, Stanislav
  2018-09-11 12:50   ` Ville Syrjälä
  1 sibling, 1 reply; 7+ messages in thread
From: Lisovskiy, Stanislav @ 2018-09-11  8:26 UTC (permalink / raw)
  To: igt-dev; +Cc: Syrjala, Ville, Peres, Martin

On Mon, 2018-09-10 at 13:03 +0300, Stanislav Lisovskiy wrote:
> 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.

Minor comment: this change will fail all test cases where
drmModeAddFB2 is called with DRM_FORMAT_XYUV until correspondent
kernel patch is not in use, as many igt test cases do not check
if that kernel format is supported or not, so drmModeAddFB2 will
simply fail.

> 
> 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..0bf66de2 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_XYUV		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 ae71d967..b60b73b4 100644
> --- a/lib/igt_fb.c
> +++ b/lib/igt_fb.c
> @@ -72,6 +72,10 @@ static struct format_desc_struct {
>  	  .cairo_id = CAIRO_FORMAT_RGB16_565,
>  	  .num_planes = 1, .plane_bpp = { 16, },
>  	},
> +	{ .name = "XYUV", .depth = 24, .drm_id = DRM_FORMAT_XYUV,
> +	  .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, },
> @@ -415,6 +419,10 @@ static int create_bo_for_fb(int fd, int width,
> int height,
>  				memset(ptr + offsets[1], 0x80,
>  				       calculated_stride *
> height/2);
>  				break;
> +			case DRM_FORMAT_XYUV:
> +				wmemset(ptr, full_range ? 0x000f8080
> : 0x000f8080,
> +					calculated_stride * height /
> sizeof(wchar_t));
> +				break;
>  			case DRM_FORMAT_YUYV:
>  			case DRM_FORMAT_YVYU:
>  				wmemset(ptr, full_range ? 0x80008000
> : 0x80108010,
> @@ -1500,6 +1508,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, planar_stride =
> blit->linear.stride;
> +	uint8_t *buf = malloc(blit->linear.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->linear.map, blit-
> >linear.size);
> +	yuv24 = &buf[blit->linear.offsets[0]];
> +
> +	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 * planar_stride +
> j*sizeof(uint32_t)];
> +			u = yuv24[i * planar_stride +
> j*sizeof(uint32_t) + 1];
> +			y = yuv24[i * planar_stride +
> j*sizeof(uint32_t) + 2];
> +			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);
> +		}
> +	}
> +
> +	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->linear.map;
> +	unsigned rgb24_stride = blit->rgb24.stride, planar_stride =
> blit->linear.stride;
> +	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 * planar_stride +
> j*sizeof(uint32_t)] = yuv.d[2];
> +			yuv444[i * planar_stride +
> j*sizeof(uint32_t) + 1] = yuv.d[1];
> +			yuv444[i * planar_stride +
> j*sizeof(uint32_t) + 2] = yuv.d[0];
> +		}
> +	}
> +}
> +
> +
> +
> +
>  static void convert_rgb24_to_nv12(struct igt_fb *fb, struct
> fb_convert_blit_upload *blit)
>  {
>  	int i, j;
> @@ -1756,6 +1837,9 @@ static void destroy_cairo_surface__convert(void
> *arg)
>  	case DRM_FORMAT_VYUY:
>  		convert_rgb24_to_yuyv(fb, blit, yuyv_swizzle(fb-
> >drm_format));
>  		break;
> +	case DRM_FORMAT_XYUV:
> +		convert_rgb24_to_yuv444(fb, blit);
> +		break;
>  	default:
>  		igt_assert_f(false, "Conversion not implemented for
> formats 0x%x\n",
>  			     fb->drm_format);
> @@ -1809,6 +1893,9 @@ static void create_cairo_surface__convert(int
> fd, struct igt_fb *fb)
>  	case DRM_FORMAT_VYUY:
>  		convert_yuyv_to_rgb24(fb, blit, yuyv_swizzle(fb-
> >drm_format));
>  		break;
> +	case DRM_FORMAT_XYUV:
> +		convert_yuv444_to_rgb24(fb, blit);
> +		break;
>  	default:
>  		igt_assert_f(false, "Conversion not implemented for
> formats 0x%x\n",
>  			     fb->drm_format);
> @@ -1825,6 +1912,7 @@ static void create_cairo_surface__convert(int
> fd, struct igt_fb *fb)
>  				    blit,
> destroy_cairo_surface__convert);
>  }
>  
> +
>  /**
>   * igt_get_cairo_surface:
>   * @fd: open drm file descriptor
> @@ -2011,6 +2099,7 @@ bool igt_format_is_yuv(uint32_t drm_format)
>  	case DRM_FORMAT_YVYU:
>  	case DRM_FORMAT_UYVY:
>  	case DRM_FORMAT_VYUY:
> +	case DRM_FORMAT_XYUV:
>  		return true;
>  	default:
>  		return false;
-- 
Best Regards,

Lisovskiy Stanislav
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [igt-dev] [PATCH i-g-t v5] lib/igt_fb: Added XYUV format support for testing
  2018-09-11  8:26 ` [igt-dev] [PATCH i-g-t v5] lib/igt_fb: Added XYUV format support for testing Lisovskiy, Stanislav
@ 2018-09-11 12:50   ` Ville Syrjälä
  2018-09-11 13:22     ` Lisovskiy, Stanislav
  0 siblings, 1 reply; 7+ messages in thread
From: Ville Syrjälä @ 2018-09-11 12:50 UTC (permalink / raw)
  To: Lisovskiy, Stanislav; +Cc: igt-dev, Syrjala, Ville, Peres, Martin

On Tue, Sep 11, 2018 at 08:26:29AM +0000, Lisovskiy, Stanislav wrote:
> On Mon, 2018-09-10 at 13:03 +0300, Stanislav Lisovskiy wrote:
> > 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.
> 
> Minor comment: this change will fail all test cases where
> drmModeAddFB2 is called with DRM_FORMAT_XYUV until correspondent
> kernel patch is not in use, as many igt test cases do not check
> if that kernel format is supported or not, so drmModeAddFB2 will
> simply fail.

Which tests are those? They should be fixed.

> 
> > 
> > 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..0bf66de2 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_XYUV		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 ae71d967..b60b73b4 100644
> > --- a/lib/igt_fb.c
> > +++ b/lib/igt_fb.c
> > @@ -72,6 +72,10 @@ static struct format_desc_struct {
> >  	  .cairo_id = CAIRO_FORMAT_RGB16_565,
> >  	  .num_planes = 1, .plane_bpp = { 16, },
> >  	},
> > +	{ .name = "XYUV", .depth = 24, .drm_id = DRM_FORMAT_XYUV,
> > +	  .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, },
> > @@ -415,6 +419,10 @@ static int create_bo_for_fb(int fd, int width,
> > int height,
> >  				memset(ptr + offsets[1], 0x80,
> >  				       calculated_stride *
> > height/2);
> >  				break;
> > +			case DRM_FORMAT_XYUV:
> > +				wmemset(ptr, full_range ? 0x000f8080
> > : 0x000f8080,
> > +					calculated_stride * height /
> > sizeof(wchar_t));
> > +				break;
> >  			case DRM_FORMAT_YUYV:
> >  			case DRM_FORMAT_YVYU:
> >  				wmemset(ptr, full_range ? 0x80008000
> > : 0x80108010,
> > @@ -1500,6 +1508,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, planar_stride =
> > blit->linear.stride;
> > +	uint8_t *buf = malloc(blit->linear.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->linear.map, blit-
> > >linear.size);
> > +	yuv24 = &buf[blit->linear.offsets[0]];
> > +
> > +	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 * planar_stride +
> > j*sizeof(uint32_t)];
> > +			u = yuv24[i * planar_stride +
> > j*sizeof(uint32_t) + 1];
> > +			y = yuv24[i * planar_stride +
> > j*sizeof(uint32_t) + 2];
> > +			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);
> > +		}
> > +	}
> > +
> > +	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->linear.map;
> > +	unsigned rgb24_stride = blit->rgb24.stride, planar_stride =
> > blit->linear.stride;
> > +	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 * planar_stride +
> > j*sizeof(uint32_t)] = yuv.d[2];
> > +			yuv444[i * planar_stride +
> > j*sizeof(uint32_t) + 1] = yuv.d[1];
> > +			yuv444[i * planar_stride +
> > j*sizeof(uint32_t) + 2] = yuv.d[0];
> > +		}
> > +	}
> > +}
> > +
> > +
> > +
> > +
> >  static void convert_rgb24_to_nv12(struct igt_fb *fb, struct
> > fb_convert_blit_upload *blit)
> >  {
> >  	int i, j;
> > @@ -1756,6 +1837,9 @@ static void destroy_cairo_surface__convert(void
> > *arg)
> >  	case DRM_FORMAT_VYUY:
> >  		convert_rgb24_to_yuyv(fb, blit, yuyv_swizzle(fb-
> > >drm_format));
> >  		break;
> > +	case DRM_FORMAT_XYUV:
> > +		convert_rgb24_to_yuv444(fb, blit);
> > +		break;
> >  	default:
> >  		igt_assert_f(false, "Conversion not implemented for
> > formats 0x%x\n",
> >  			     fb->drm_format);
> > @@ -1809,6 +1893,9 @@ static void create_cairo_surface__convert(int
> > fd, struct igt_fb *fb)
> >  	case DRM_FORMAT_VYUY:
> >  		convert_yuyv_to_rgb24(fb, blit, yuyv_swizzle(fb-
> > >drm_format));
> >  		break;
> > +	case DRM_FORMAT_XYUV:
> > +		convert_yuv444_to_rgb24(fb, blit);
> > +		break;
> >  	default:
> >  		igt_assert_f(false, "Conversion not implemented for
> > formats 0x%x\n",
> >  			     fb->drm_format);
> > @@ -1825,6 +1912,7 @@ static void create_cairo_surface__convert(int
> > fd, struct igt_fb *fb)
> >  				    blit,
> > destroy_cairo_surface__convert);
> >  }
> >  
> > +
> >  /**
> >   * igt_get_cairo_surface:
> >   * @fd: open drm file descriptor
> > @@ -2011,6 +2099,7 @@ bool igt_format_is_yuv(uint32_t drm_format)
> >  	case DRM_FORMAT_YVYU:
> >  	case DRM_FORMAT_UYVY:
> >  	case DRM_FORMAT_VYUY:
> > +	case DRM_FORMAT_XYUV:
> >  		return true;
> >  	default:
> >  		return false;
> -- 
> Best Regards,
> 
> Lisovskiy Stanislav
> _______________________________________________
> igt-dev mailing list
> igt-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev

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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [igt-dev] [PATCH i-g-t v5] lib/igt_fb: Added XYUV format support for testing
  2018-09-11 12:50   ` Ville Syrjälä
@ 2018-09-11 13:22     ` Lisovskiy, Stanislav
  2018-09-11 15:47       ` Ville Syrjälä
  0 siblings, 1 reply; 7+ messages in thread
From: Lisovskiy, Stanislav @ 2018-09-11 13:22 UTC (permalink / raw)
  To: ville.syrjala; +Cc: igt-dev, Syrjala, Ville, Peres, Martin

On Tue, 2018-09-11 at 15:50 +0300, Ville Syrjälä wrote:
> On Tue, Sep 11, 2018 at 08:26:29AM +0000, Lisovskiy, Stanislav wrote:
> > On Mon, 2018-09-10 at 13:03 +0300, Stanislav Lisovskiy wrote:
> > > 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.
> > 
> > Minor comment: this change will fail all test cases where
> > drmModeAddFB2 is called with DRM_FORMAT_XYUV until correspondent
> > kernel patch is not in use, as many igt test cases do not check
> > if that kernel format is supported or not, so drmModeAddFB2 will
> > simply fail.
> 
> Which tests are those? They should be fixed.

Those are:

 igt@kms_flip@basic-flip-vs-dpms
 
 igt@kms_flip@basic-flip-vs-modeset
 
 igt@kms_flip@basic-flip-vs-wf_vblank
 
 igt@kms_flip@basic-plain-flip
 
 igt@kms_setmode@basic-clone-single-crtc

Probably good idea to fix it so that it chooses only formats
specified in drm_plane->formats and igt_fb_supported_format, like in
kms_plane. 
Otherwise for example in kms_flip, it uses igt_bpp_depth_to_drm_format
which chooses any format with matching bpp and depth, which in case of
XRGB8888, also is the same for XYUV.
 

> > > 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..0bf66de2 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_XYUV		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 ae71d967..b60b73b4 100644
> > > --- a/lib/igt_fb.c
> > > +++ b/lib/igt_fb.c
> > > @@ -72,6 +72,10 @@ static struct format_desc_struct {
> > >  	  .cairo_id = CAIRO_FORMAT_RGB16_565,
> > >  	  .num_planes = 1, .plane_bpp = { 16, },
> > >  	},
> > > +	{ .name = "XYUV", .depth = 24, .drm_id =
> > > DRM_FORMAT_XYUV,
> > > +	  .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, },
> > > @@ -415,6 +419,10 @@ static int create_bo_for_fb(int fd, int
> > > width,
> > > int height,
> > >  				memset(ptr + offsets[1], 0x80,
> > >  				       calculated_stride *
> > > height/2);
> > >  				break;
> > > +			case DRM_FORMAT_XYUV:
> > > +				wmemset(ptr, full_range ?
> > > 0x000f8080
> > > : 0x000f8080,
> > > +					calculated_stride *
> > > height /
> > > sizeof(wchar_t));
> > > +				break;
> > >  			case DRM_FORMAT_YUYV:
> > >  			case DRM_FORMAT_YVYU:
> > >  				wmemset(ptr, full_range ?
> > > 0x80008000
> > > : 0x80108010,
> > > @@ -1500,6 +1508,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,
> > > planar_stride =
> > > blit->linear.stride;
> > > +	uint8_t *buf = malloc(blit->linear.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->linear.map, blit-
> > > > linear.size);
> > > 
> > > +	yuv24 = &buf[blit->linear.offsets[0]];
> > > +
> > > +	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 * planar_stride +
> > > j*sizeof(uint32_t)];
> > > +			u = yuv24[i * planar_stride +
> > > j*sizeof(uint32_t) + 1];
> > > +			y = yuv24[i * planar_stride +
> > > j*sizeof(uint32_t) + 2];
> > > +			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);
> > > +		}
> > > +	}
> > > +
> > > +	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->linear.map;
> > > +	unsigned rgb24_stride = blit->rgb24.stride,
> > > planar_stride =
> > > blit->linear.stride;
> > > +	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 * planar_stride +
> > > j*sizeof(uint32_t)] = yuv.d[2];
> > > +			yuv444[i * planar_stride +
> > > j*sizeof(uint32_t) + 1] = yuv.d[1];
> > > +			yuv444[i * planar_stride +
> > > j*sizeof(uint32_t) + 2] = yuv.d[0];
> > > +		}
> > > +	}
> > > +}
> > > +
> > > +
> > > +
> > > +
> > >  static void convert_rgb24_to_nv12(struct igt_fb *fb, struct
> > > fb_convert_blit_upload *blit)
> > >  {
> > >  	int i, j;
> > > @@ -1756,6 +1837,9 @@ static void
> > > destroy_cairo_surface__convert(void
> > > *arg)
> > >  	case DRM_FORMAT_VYUY:
> > >  		convert_rgb24_to_yuyv(fb, blit, yuyv_swizzle(fb-
> > > > drm_format));
> > > 
> > >  		break;
> > > +	case DRM_FORMAT_XYUV:
> > > +		convert_rgb24_to_yuv444(fb, blit);
> > > +		break;
> > >  	default:
> > >  		igt_assert_f(false, "Conversion not implemented
> > > for
> > > formats 0x%x\n",
> > >  			     fb->drm_format);
> > > @@ -1809,6 +1893,9 @@ static void
> > > create_cairo_surface__convert(int
> > > fd, struct igt_fb *fb)
> > >  	case DRM_FORMAT_VYUY:
> > >  		convert_yuyv_to_rgb24(fb, blit, yuyv_swizzle(fb-
> > > > drm_format));
> > > 
> > >  		break;
> > > +	case DRM_FORMAT_XYUV:
> > > +		convert_yuv444_to_rgb24(fb, blit);
> > > +		break;
> > >  	default:
> > >  		igt_assert_f(false, "Conversion not implemented
> > > for
> > > formats 0x%x\n",
> > >  			     fb->drm_format);
> > > @@ -1825,6 +1912,7 @@ static void
> > > create_cairo_surface__convert(int
> > > fd, struct igt_fb *fb)
> > >  				    blit,
> > > destroy_cairo_surface__convert);
> > >  }
> > >  
> > > +
> > >  /**
> > >   * igt_get_cairo_surface:
> > >   * @fd: open drm file descriptor
> > > @@ -2011,6 +2099,7 @@ bool igt_format_is_yuv(uint32_t drm_format)
> > >  	case DRM_FORMAT_YVYU:
> > >  	case DRM_FORMAT_UYVY:
> > >  	case DRM_FORMAT_VYUY:
> > > +	case DRM_FORMAT_XYUV:
> > >  		return true;
> > >  	default:
> > >  		return false;
> > 
> > -- 
> > Best Regards,
> > 
> > Lisovskiy Stanislav
> > _______________________________________________
> > igt-dev mailing list
> > igt-dev@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/igt-dev
> 
> 
-- 
Best Regards,

Lisovskiy Stanislav
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [igt-dev] [PATCH i-g-t v5] lib/igt_fb: Added XYUV format support for testing
  2018-09-11 13:22     ` Lisovskiy, Stanislav
@ 2018-09-11 15:47       ` Ville Syrjälä
  2018-09-12  7:25         ` Lisovskiy, Stanislav
  0 siblings, 1 reply; 7+ messages in thread
From: Ville Syrjälä @ 2018-09-11 15:47 UTC (permalink / raw)
  To: Lisovskiy, Stanislav; +Cc: igt-dev, Syrjala, Ville, Peres, Martin

On Tue, Sep 11, 2018 at 01:22:23PM +0000, Lisovskiy, Stanislav wrote:
> On Tue, 2018-09-11 at 15:50 +0300, Ville Syrjälä wrote:
> > On Tue, Sep 11, 2018 at 08:26:29AM +0000, Lisovskiy, Stanislav wrote:
> > > On Mon, 2018-09-10 at 13:03 +0300, Stanislav Lisovskiy wrote:
> > > > 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.
> > > 
> > > Minor comment: this change will fail all test cases where
> > > drmModeAddFB2 is called with DRM_FORMAT_XYUV until correspondent
> > > kernel patch is not in use, as many igt test cases do not check
> > > if that kernel format is supported or not, so drmModeAddFB2 will
> > > simply fail.
> > 
> > Which tests are those? They should be fixed.
> 
> Those are:
> 
>  igt@kms_flip@basic-flip-vs-dpms
>  
>  igt@kms_flip@basic-flip-vs-modeset
>  
>  igt@kms_flip@basic-flip-vs-wf_vblank
>  
>  igt@kms_flip@basic-plain-flip
>  
>  igt@kms_setmode@basic-clone-single-crtc
> 
> Probably good idea to fix it so that it chooses only formats
> specified in drm_plane->formats and igt_fb_supported_format, like in
> kms_plane. 
> Otherwise for example in kms_flip, it uses igt_bpp_depth_to_drm_format
> which chooses any format with matching bpp and depth, which in case of
> XRGB8888, also is the same for XYUV.

IIRC all YUV formats should have a depth of -1 in that table, pretty
much exactly for this reason. You never want to pick an YUV format when
just specifying depth/bpp.

>  
> 
> > > > 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..0bf66de2 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_XYUV		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 ae71d967..b60b73b4 100644
> > > > --- a/lib/igt_fb.c
> > > > +++ b/lib/igt_fb.c
> > > > @@ -72,6 +72,10 @@ static struct format_desc_struct {
> > > >  	  .cairo_id = CAIRO_FORMAT_RGB16_565,
> > > >  	  .num_planes = 1, .plane_bpp = { 16, },
> > > >  	},
> > > > +	{ .name = "XYUV", .depth = 24, .drm_id =
> > > > DRM_FORMAT_XYUV,
> > > > +	  .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, },
> > > > @@ -415,6 +419,10 @@ static int create_bo_for_fb(int fd, int
> > > > width,
> > > > int height,
> > > >  				memset(ptr + offsets[1], 0x80,
> > > >  				       calculated_stride *
> > > > height/2);
> > > >  				break;
> > > > +			case DRM_FORMAT_XYUV:
> > > > +				wmemset(ptr, full_range ?
> > > > 0x000f8080
> > > > : 0x000f8080,
> > > > +					calculated_stride *
> > > > height /
> > > > sizeof(wchar_t));
> > > > +				break;
> > > >  			case DRM_FORMAT_YUYV:
> > > >  			case DRM_FORMAT_YVYU:
> > > >  				wmemset(ptr, full_range ?
> > > > 0x80008000
> > > > : 0x80108010,
> > > > @@ -1500,6 +1508,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,
> > > > planar_stride =
> > > > blit->linear.stride;
> > > > +	uint8_t *buf = malloc(blit->linear.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->linear.map, blit-
> > > > > linear.size);
> > > > 
> > > > +	yuv24 = &buf[blit->linear.offsets[0]];
> > > > +
> > > > +	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 * planar_stride +
> > > > j*sizeof(uint32_t)];
> > > > +			u = yuv24[i * planar_stride +
> > > > j*sizeof(uint32_t) + 1];
> > > > +			y = yuv24[i * planar_stride +
> > > > j*sizeof(uint32_t) + 2];
> > > > +			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);
> > > > +		}
> > > > +	}
> > > > +
> > > > +	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->linear.map;
> > > > +	unsigned rgb24_stride = blit->rgb24.stride,
> > > > planar_stride =
> > > > blit->linear.stride;
> > > > +	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 * planar_stride +
> > > > j*sizeof(uint32_t)] = yuv.d[2];
> > > > +			yuv444[i * planar_stride +
> > > > j*sizeof(uint32_t) + 1] = yuv.d[1];
> > > > +			yuv444[i * planar_stride +
> > > > j*sizeof(uint32_t) + 2] = yuv.d[0];
> > > > +		}
> > > > +	}
> > > > +}
> > > > +
> > > > +
> > > > +
> > > > +
> > > >  static void convert_rgb24_to_nv12(struct igt_fb *fb, struct
> > > > fb_convert_blit_upload *blit)
> > > >  {
> > > >  	int i, j;
> > > > @@ -1756,6 +1837,9 @@ static void
> > > > destroy_cairo_surface__convert(void
> > > > *arg)
> > > >  	case DRM_FORMAT_VYUY:
> > > >  		convert_rgb24_to_yuyv(fb, blit, yuyv_swizzle(fb-
> > > > > drm_format));
> > > > 
> > > >  		break;
> > > > +	case DRM_FORMAT_XYUV:
> > > > +		convert_rgb24_to_yuv444(fb, blit);
> > > > +		break;
> > > >  	default:
> > > >  		igt_assert_f(false, "Conversion not implemented
> > > > for
> > > > formats 0x%x\n",
> > > >  			     fb->drm_format);
> > > > @@ -1809,6 +1893,9 @@ static void
> > > > create_cairo_surface__convert(int
> > > > fd, struct igt_fb *fb)
> > > >  	case DRM_FORMAT_VYUY:
> > > >  		convert_yuyv_to_rgb24(fb, blit, yuyv_swizzle(fb-
> > > > > drm_format));
> > > > 
> > > >  		break;
> > > > +	case DRM_FORMAT_XYUV:
> > > > +		convert_yuv444_to_rgb24(fb, blit);
> > > > +		break;
> > > >  	default:
> > > >  		igt_assert_f(false, "Conversion not implemented
> > > > for
> > > > formats 0x%x\n",
> > > >  			     fb->drm_format);
> > > > @@ -1825,6 +1912,7 @@ static void
> > > > create_cairo_surface__convert(int
> > > > fd, struct igt_fb *fb)
> > > >  				    blit,
> > > > destroy_cairo_surface__convert);
> > > >  }
> > > >  
> > > > +
> > > >  /**
> > > >   * igt_get_cairo_surface:
> > > >   * @fd: open drm file descriptor
> > > > @@ -2011,6 +2099,7 @@ bool igt_format_is_yuv(uint32_t drm_format)
> > > >  	case DRM_FORMAT_YVYU:
> > > >  	case DRM_FORMAT_UYVY:
> > > >  	case DRM_FORMAT_VYUY:
> > > > +	case DRM_FORMAT_XYUV:
> > > >  		return true;
> > > >  	default:
> > > >  		return false;
> > > 
> > > -- 
> > > Best Regards,
> > > 
> > > Lisovskiy Stanislav
> > > _______________________________________________
> > > igt-dev mailing list
> > > igt-dev@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/igt-dev
> > 
> > 
> -- 
> Best Regards,
> 
> Lisovskiy Stanislav

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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [igt-dev] [PATCH i-g-t v5] lib/igt_fb: Added XYUV format support for testing
  2018-09-11 15:47       ` Ville Syrjälä
@ 2018-09-12  7:25         ` Lisovskiy, Stanislav
  0 siblings, 0 replies; 7+ messages in thread
From: Lisovskiy, Stanislav @ 2018-09-12  7:25 UTC (permalink / raw)
  To: ville.syrjala; +Cc: igt-dev, Syrjala, Ville, Peres, Martin

On Tue, 2018-09-11 at 18:47 +0300, Ville Syrjälä wrote:
> On Tue, Sep 11, 2018 at 01:22:23PM +0000, Lisovskiy, Stanislav wrote:
> > On Tue, 2018-09-11 at 15:50 +0300, Ville Syrjälä wrote:
> > > On Tue, Sep 11, 2018 at 08:26:29AM +0000, Lisovskiy, Stanislav
> > > wrote:
> > > > On Mon, 2018-09-10 at 13:03 +0300, Stanislav Lisovskiy wrote:
> > > > > 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.
> > > > 
> > > > Minor comment: this change will fail all test cases where
> > > > drmModeAddFB2 is called with DRM_FORMAT_XYUV until
> > > > correspondent
> > > > kernel patch is not in use, as many igt test cases do not check
> > > > if that kernel format is supported or not, so drmModeAddFB2
> > > > will
> > > > simply fail.
> > > 
> > > Which tests are those? They should be fixed.
> > 
> > Those are:
> > 
> >  igt@kms_flip@basic-flip-vs-dpms
> >  
> >  igt@kms_flip@basic-flip-vs-modeset
> >  
> >  igt@kms_flip@basic-flip-vs-wf_vblank
> >  
> >  igt@kms_flip@basic-plain-flip
> >  
> >  igt@kms_setmode@basic-clone-single-crtc
> > 
> > Probably good idea to fix it so that it chooses only formats
> > specified in drm_plane->formats and igt_fb_supported_format, like
> > in
> > kms_plane. 
> > Otherwise for example in kms_flip, it uses
> > igt_bpp_depth_to_drm_format
> > which chooses any format with matching bpp and depth, which in case
> > of
> > XRGB8888, also is the same for XYUV.
> 
> IIRC all YUV formats should have a depth of -1 in that table, pretty
> much exactly for this reason. You never want to pick an YUV format
> when
> just specifying depth/bpp.

Ok, this sounds much easier. I will change it to -1 then and check
that it still works after that.

> 
> >  
> > 
> > > > > 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..0bf66de2 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_XYUV		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 ae71d967..b60b73b4 100644
> > > > > --- a/lib/igt_fb.c
> > > > > +++ b/lib/igt_fb.c
> > > > > @@ -72,6 +72,10 @@ static struct format_desc_struct {
> > > > >  	  .cairo_id = CAIRO_FORMAT_RGB16_565,
> > > > >  	  .num_planes = 1, .plane_bpp = { 16, },
> > > > >  	},
> > > > > +	{ .name = "XYUV", .depth = 24, .drm_id =
> > > > > DRM_FORMAT_XYUV,
> > > > > +	  .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, },
> > > > > @@ -415,6 +419,10 @@ static int create_bo_for_fb(int fd, int
> > > > > width,
> > > > > int height,
> > > > >  				memset(ptr + offsets[1],
> > > > > 0x80,
> > > > >  				       calculated_stride *
> > > > > height/2);
> > > > >  				break;
> > > > > +			case DRM_FORMAT_XYUV:
> > > > > +				wmemset(ptr, full_range ?
> > > > > 0x000f8080
> > > > > : 0x000f8080,
> > > > > +					calculated_stride *
> > > > > height /
> > > > > sizeof(wchar_t));
> > > > > +				break;
> > > > >  			case DRM_FORMAT_YUYV:
> > > > >  			case DRM_FORMAT_YVYU:
> > > > >  				wmemset(ptr, full_range ?
> > > > > 0x80008000
> > > > > : 0x80108010,
> > > > > @@ -1500,6 +1508,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,
> > > > > planar_stride =
> > > > > blit->linear.stride;
> > > > > +	uint8_t *buf = malloc(blit->linear.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->linear.map, blit-
> > > > > > linear.size);
> > > > > 
> > > > > +	yuv24 = &buf[blit->linear.offsets[0]];
> > > > > +
> > > > > +	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 * planar_stride +
> > > > > j*sizeof(uint32_t)];
> > > > > +			u = yuv24[i * planar_stride +
> > > > > j*sizeof(uint32_t) + 1];
> > > > > +			y = yuv24[i * planar_stride +
> > > > > j*sizeof(uint32_t) + 2];
> > > > > +			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);
> > > > > +		}
> > > > > +	}
> > > > > +
> > > > > +	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->linear.map;
> > > > > +	unsigned rgb24_stride = blit->rgb24.stride,
> > > > > planar_stride =
> > > > > blit->linear.stride;
> > > > > +	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 * planar_stride +
> > > > > j*sizeof(uint32_t)] = yuv.d[2];
> > > > > +			yuv444[i * planar_stride +
> > > > > j*sizeof(uint32_t) + 1] = yuv.d[1];
> > > > > +			yuv444[i * planar_stride +
> > > > > j*sizeof(uint32_t) + 2] = yuv.d[0];
> > > > > +		}
> > > > > +	}
> > > > > +}
> > > > > +
> > > > > +
> > > > > +
> > > > > +
> > > > >  static void convert_rgb24_to_nv12(struct igt_fb *fb, struct
> > > > > fb_convert_blit_upload *blit)
> > > > >  {
> > > > >  	int i, j;
> > > > > @@ -1756,6 +1837,9 @@ static void
> > > > > destroy_cairo_surface__convert(void
> > > > > *arg)
> > > > >  	case DRM_FORMAT_VYUY:
> > > > >  		convert_rgb24_to_yuyv(fb, blit,
> > > > > yuyv_swizzle(fb-
> > > > > > drm_format));
> > > > > 
> > > > >  		break;
> > > > > +	case DRM_FORMAT_XYUV:
> > > > > +		convert_rgb24_to_yuv444(fb, blit);
> > > > > +		break;
> > > > >  	default:
> > > > >  		igt_assert_f(false, "Conversion not
> > > > > implemented
> > > > > for
> > > > > formats 0x%x\n",
> > > > >  			     fb->drm_format);
> > > > > @@ -1809,6 +1893,9 @@ static void
> > > > > create_cairo_surface__convert(int
> > > > > fd, struct igt_fb *fb)
> > > > >  	case DRM_FORMAT_VYUY:
> > > > >  		convert_yuyv_to_rgb24(fb, blit,
> > > > > yuyv_swizzle(fb-
> > > > > > drm_format));
> > > > > 
> > > > >  		break;
> > > > > +	case DRM_FORMAT_XYUV:
> > > > > +		convert_yuv444_to_rgb24(fb, blit);
> > > > > +		break;
> > > > >  	default:
> > > > >  		igt_assert_f(false, "Conversion not
> > > > > implemented
> > > > > for
> > > > > formats 0x%x\n",
> > > > >  			     fb->drm_format);
> > > > > @@ -1825,6 +1912,7 @@ static void
> > > > > create_cairo_surface__convert(int
> > > > > fd, struct igt_fb *fb)
> > > > >  				    blit,
> > > > > destroy_cairo_surface__convert);
> > > > >  }
> > > > >  
> > > > > +
> > > > >  /**
> > > > >   * igt_get_cairo_surface:
> > > > >   * @fd: open drm file descriptor
> > > > > @@ -2011,6 +2099,7 @@ bool igt_format_is_yuv(uint32_t
> > > > > drm_format)
> > > > >  	case DRM_FORMAT_YVYU:
> > > > >  	case DRM_FORMAT_UYVY:
> > > > >  	case DRM_FORMAT_VYUY:
> > > > > +	case DRM_FORMAT_XYUV:
> > > > >  		return true;
> > > > >  	default:
> > > > >  		return false;
> > > > 
> > > > -- 
> > > > Best Regards,
> > > > 
> > > > Lisovskiy Stanislav
> > > > _______________________________________________
> > > > igt-dev mailing list
> > > > igt-dev@lists.freedesktop.org
> > > > https://lists.freedesktop.org/mailman/listinfo/igt-dev
> > > 
> > > 
> > 
> > -- 
> > Best Regards,
> > 
> > Lisovskiy Stanislav
> 
> 
-- 
Best Regards,

Lisovskiy Stanislav
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2018-09-12  7:25 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-10 10:03 [igt-dev] [PATCH i-g-t v5] lib/igt_fb: Added XYUV format support for testing Stanislav Lisovskiy
2018-09-10 16:29 ` [igt-dev] ✗ Fi.CI.BAT: failure for lib/igt_fb: Added XYUV format support for testing (rev5) Patchwork
2018-09-11  8:26 ` [igt-dev] [PATCH i-g-t v5] lib/igt_fb: Added XYUV format support for testing Lisovskiy, Stanislav
2018-09-11 12:50   ` Ville Syrjälä
2018-09-11 13:22     ` Lisovskiy, Stanislav
2018-09-11 15:47       ` Ville Syrjälä
2018-09-12  7:25         ` Lisovskiy, Stanislav

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.