* [igt-dev] [PATCH i-g-t v6] lib/igt_fb: Added XYUV format support for testing
@ 2018-09-12 8:40 Stanislav Lisovskiy
2018-09-12 9:17 ` [igt-dev] ✓ Fi.CI.BAT: success for lib/igt_fb: Added XYUV format support for testing (rev6) Patchwork
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Stanislav Lisovskiy @ 2018-09-12 8:40 UTC (permalink / raw)
To: igt-dev
Cc: stanislav.lisovskiy, ville.syrjala, martin.peres,
juha-pekka.heikkila
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.
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..36a44613 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 = -1, .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] 4+ messages in thread
* [igt-dev] ✓ Fi.CI.BAT: success for lib/igt_fb: Added XYUV format support for testing (rev6)
2018-09-12 8:40 [igt-dev] [PATCH i-g-t v6] lib/igt_fb: Added XYUV format support for testing Stanislav Lisovskiy
@ 2018-09-12 9:17 ` Patchwork
2018-09-12 11:40 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2018-09-12 13:47 ` [igt-dev] [PATCH i-g-t v6] lib/igt_fb: Added XYUV format support for testing Ville Syrjälä
2 siblings, 0 replies; 4+ messages in thread
From: Patchwork @ 2018-09-12 9:17 UTC (permalink / raw)
To: Stanislav Lisovskiy; +Cc: igt-dev
== Series Details ==
Series: lib/igt_fb: Added XYUV format support for testing (rev6)
URL : https://patchwork.freedesktop.org/series/48789/
State : success
== Summary ==
= CI Bug Log - changes from CI_DRM_4807 -> IGTPW_1828 =
== Summary - SUCCESS ==
No regressions found.
External URL: https://patchwork.freedesktop.org/api/1.0/series/48789/revisions/6/mbox/
== Known issues ==
Here are the changes found in IGTPW_1828 that come from known issues:
=== IGT changes ===
==== Issues hit ====
igt@amdgpu/amd_basic@userptr:
fi-kbl-8809g: PASS -> INCOMPLETE (fdo#107402)
igt@gem_exec_suspend@basic-s3:
fi-kbl-soraka: NOTRUN -> INCOMPLETE (fdo#107774, fdo#107556)
igt@gem_mmap@basic-small-bo:
fi-glk-dsi: PASS -> INCOMPLETE (fdo#103359, k.org#198133)
igt@kms_pipe_crc_basic@hang-read-crc-pipe-b:
fi-byt-clapper: PASS -> FAIL (fdo#103191, fdo#107362)
igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
fi-ilk-650: PASS -> DMESG-WARN (fdo#106387)
igt@kms_psr@primary_mmap_gtt:
{fi-cnl-u}: NOTRUN -> FAIL (fdo#107383) +3
igt@kms_psr@sprite_plane_onoff:
fi-bdw-samus: NOTRUN -> FAIL (fdo#107360, fdo#107383)
igt@pm_rpm@module-reload:
fi-bdw-samus: NOTRUN -> DMESG-WARN (fdo#107603)
==== Possible fixes ====
igt@gem_exec_suspend@basic-s3:
fi-blb-e6850: INCOMPLETE (fdo#107718) -> PASS
igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a:
fi-cfl-8109u: INCOMPLETE (fdo#106070) -> PASS
igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
fi-byt-clapper: FAIL (fdo#103191, fdo#107362) -> PASS
igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c:
fi-bxt-dsi: INCOMPLETE (fdo#103927) -> PASS
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
fdo#103359 https://bugs.freedesktop.org/show_bug.cgi?id=103359
fdo#103927 https://bugs.freedesktop.org/show_bug.cgi?id=103927
fdo#106070 https://bugs.freedesktop.org/show_bug.cgi?id=106070
fdo#106387 https://bugs.freedesktop.org/show_bug.cgi?id=106387
fdo#107360 https://bugs.freedesktop.org/show_bug.cgi?id=107360
fdo#107362 https://bugs.freedesktop.org/show_bug.cgi?id=107362
fdo#107383 https://bugs.freedesktop.org/show_bug.cgi?id=107383
fdo#107402 https://bugs.freedesktop.org/show_bug.cgi?id=107402
fdo#107556 https://bugs.freedesktop.org/show_bug.cgi?id=107556
fdo#107603 https://bugs.freedesktop.org/show_bug.cgi?id=107603
fdo#107718 https://bugs.freedesktop.org/show_bug.cgi?id=107718
fdo#107774 https://bugs.freedesktop.org/show_bug.cgi?id=107774
k.org#198133 https://bugzilla.kernel.org/show_bug.cgi?id=198133
== Participating hosts (46 -> 45) ==
Additional (4): fi-kbl-soraka fi-cnl-u fi-icl-u fi-bdw-samus
Missing (5): fi-ctg-p8600 fi-ilk-m540 fi-byt-squawks fi-bsw-cyan fi-hsw-4200u
== Build changes ==
* IGT: IGT_4639 -> IGTPW_1828
CI_DRM_4807: 55b148b84b254f61adbfeb89c4f6674664f01c46 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_1828: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1828/
IGT_4639: c7fa2ea9fbce87206474748100b825558eebe08e @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1828/issues.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 4+ messages in thread
* [igt-dev] ✓ Fi.CI.IGT: success for lib/igt_fb: Added XYUV format support for testing (rev6)
2018-09-12 8:40 [igt-dev] [PATCH i-g-t v6] lib/igt_fb: Added XYUV format support for testing Stanislav Lisovskiy
2018-09-12 9:17 ` [igt-dev] ✓ Fi.CI.BAT: success for lib/igt_fb: Added XYUV format support for testing (rev6) Patchwork
@ 2018-09-12 11:40 ` Patchwork
2018-09-12 13:47 ` [igt-dev] [PATCH i-g-t v6] lib/igt_fb: Added XYUV format support for testing Ville Syrjälä
2 siblings, 0 replies; 4+ messages in thread
From: Patchwork @ 2018-09-12 11:40 UTC (permalink / raw)
To: Stanislav Lisovskiy; +Cc: igt-dev
== Series Details ==
Series: lib/igt_fb: Added XYUV format support for testing (rev6)
URL : https://patchwork.freedesktop.org/series/48789/
State : success
== Summary ==
= CI Bug Log - changes from IGT_4639_full -> IGTPW_1828_full =
== Summary - WARNING ==
Minor unknown changes coming with IGTPW_1828_full need to be verified
manually.
If you think the reported changes have nothing to do with the changes
introduced in IGTPW_1828_full, 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/6/mbox/
== Possible new issues ==
Here are the unknown changes that may have been introduced in IGTPW_1828_full:
=== IGT changes ===
==== Warnings ====
igt@pm_rc6_residency@rc6-accuracy:
shard-snb: PASS -> SKIP
== Known issues ==
Here are the changes found in IGTPW_1828_full that come from known issues:
=== IGT changes ===
==== Issues hit ====
igt@drv_suspend@shrink:
shard-snb: PASS -> FAIL (fdo#106886)
shard-glk: PASS -> FAIL (fdo#106886)
igt@gem_shrink@reclaim:
shard-snb: PASS -> INCOMPLETE (fdo#105411)
igt@kms_draw_crc@draw-method-rgb565-mmap-gtt-ytiled:
shard-glk: PASS -> FAIL (fdo#103184)
igt@kms_setmode@basic:
shard-glk: PASS -> FAIL (fdo#99912)
igt@kms_vblank@pipe-c-ts-continuation-idle-hang:
shard-apl: PASS -> DMESG-WARN (fdo#103558, fdo#105602) +29
igt@testdisplay:
shard-glk: PASS -> INCOMPLETE (fdo#107093, k.org#198133, fdo#103359)
==== Possible fixes ====
igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic:
shard-hsw: FAIL (fdo#105767) -> PASS
igt@kms_plane_multiple@atomic-pipe-a-tiling-x:
shard-snb: FAIL (fdo#103166) -> PASS
igt@kms_rotation_crc@sprite-rotation-180:
shard-snb: FAIL (fdo#103925) -> PASS
igt@kms_setmode@basic:
shard-apl: FAIL (fdo#99912) -> PASS
igt@perf_pmu@all-busy-check-all:
shard-snb: INCOMPLETE (fdo#105411) -> PASS
==== Warnings ====
igt@kms_ccs@pipe-b-crc-sprite-planes-basic:
shard-apl: FAIL (fdo#106510, fdo#105458) -> DMESG-WARN (fdo#103558, fdo#105602)
fdo#103166 https://bugs.freedesktop.org/show_bug.cgi?id=103166
fdo#103184 https://bugs.freedesktop.org/show_bug.cgi?id=103184
fdo#103359 https://bugs.freedesktop.org/show_bug.cgi?id=103359
fdo#103558 https://bugs.freedesktop.org/show_bug.cgi?id=103558
fdo#103925 https://bugs.freedesktop.org/show_bug.cgi?id=103925
fdo#105411 https://bugs.freedesktop.org/show_bug.cgi?id=105411
fdo#105458 https://bugs.freedesktop.org/show_bug.cgi?id=105458
fdo#105602 https://bugs.freedesktop.org/show_bug.cgi?id=105602
fdo#105767 https://bugs.freedesktop.org/show_bug.cgi?id=105767
fdo#106510 https://bugs.freedesktop.org/show_bug.cgi?id=106510
fdo#106886 https://bugs.freedesktop.org/show_bug.cgi?id=106886
fdo#107093 https://bugs.freedesktop.org/show_bug.cgi?id=107093
fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912
k.org#198133 https://bugzilla.kernel.org/show_bug.cgi?id=198133
== Participating hosts (5 -> 5) ==
No changes in participating hosts
== Build changes ==
* IGT: IGT_4639 -> IGTPW_1828
* Linux: CI_DRM_4806 -> CI_DRM_4807
CI_DRM_4806: feeccde66999c5e87be3550f2159e5d7eeb61c67 @ git://anongit.freedesktop.org/gfx-ci/linux
CI_DRM_4807: 55b148b84b254f61adbfeb89c4f6674664f01c46 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_1828: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1828/
IGT_4639: c7fa2ea9fbce87206474748100b825558eebe08e @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1828/shards.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [igt-dev] [PATCH i-g-t v6] lib/igt_fb: Added XYUV format support for testing
2018-09-12 8:40 [igt-dev] [PATCH i-g-t v6] lib/igt_fb: Added XYUV format support for testing Stanislav Lisovskiy
2018-09-12 9:17 ` [igt-dev] ✓ Fi.CI.BAT: success for lib/igt_fb: Added XYUV format support for testing (rev6) Patchwork
2018-09-12 11:40 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
@ 2018-09-12 13:47 ` Ville Syrjälä
2 siblings, 0 replies; 4+ messages in thread
From: Ville Syrjälä @ 2018-09-12 13:47 UTC (permalink / raw)
To: Stanislav Lisovskiy
Cc: igt-dev, ville.syrjala, martin.peres, juha-pekka.heikkila
On Wed, Sep 12, 2018 at 11:40:26AM +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.
>
> 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.
>
> 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..36a44613 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 = -1, .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,
Shouldn't that be 'full_range ? 0x8080 : 0x108080' ?
> + calculated_stride * height / sizeof(wchar_t));
And I just realized that I missed these when doing the 32bit
overflow fixes.
> + 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;
planar_stride is a bit of a poor name for something that's not planar.
yuv_stride/xyuv_stride/something like that would seem better. Same for
the other function.
Otherwise lgtm, so with thosse fixed
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> + 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
--
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] 4+ messages in thread
end of thread, other threads:[~2018-09-12 13:47 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-09-12 8:40 [igt-dev] [PATCH i-g-t v6] lib/igt_fb: Added XYUV format support for testing Stanislav Lisovskiy
2018-09-12 9:17 ` [igt-dev] ✓ Fi.CI.BAT: success for lib/igt_fb: Added XYUV format support for testing (rev6) Patchwork
2018-09-12 11:40 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2018-09-12 13:47 ` [igt-dev] [PATCH i-g-t v6] lib/igt_fb: Added XYUV format support for testing Ville Syrjälä
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).