* [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 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.