drivers/gpu/drm/vkms/vkms_formats.c | 6 ++++++ 1 file changed, 6 insertions(+)
Add support for the following planar YUV formats:
- DRM_FORMAT_YUV410
- DRM_FORMAT_YUV411
- DRM_FORMAT_YVU410
- DRM_FORMAT_YVU411
These formats are handled by the existing planar_yuv_read_line()
function, which correctly handles the subsampling defined in each
format's drm_format_info.
The YVU variants (YVU410, YVU411) are also added to
get_conversion_matrix_to_argb_u16() to ensure the U and V columns
are swapped correctly in the conversion matrix.
Signed-off-by: Renjun Wang <renjunw0@foxmail.com>
---
drivers/gpu/drm/vkms/vkms_formats.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/gpu/drm/vkms/vkms_formats.c b/drivers/gpu/drm/vkms/vkms_formats.c
index dfb8e13cba87..5ef5d49a44ef 100644
--- a/drivers/gpu/drm/vkms/vkms_formats.c
+++ b/drivers/gpu/drm/vkms/vkms_formats.c
@@ -730,9 +730,13 @@ pixel_read_line_t get_pixel_read_line_function(u32 format)
case DRM_FORMAT_P012:
case DRM_FORMAT_P016:
return &YUV161616_semiplanar_read_line;
+ case DRM_FORMAT_YUV410:
+ case DRM_FORMAT_YUV411:
case DRM_FORMAT_YUV420:
case DRM_FORMAT_YUV422:
case DRM_FORMAT_YUV444:
+ case DRM_FORMAT_YVU410:
+ case DRM_FORMAT_YVU411:
case DRM_FORMAT_YVU420:
case DRM_FORMAT_YVU422:
case DRM_FORMAT_YVU444:
@@ -921,6 +925,8 @@ void get_conversion_matrix_to_argb_u16(u32 format,
memcpy(matrix, matrix_to_copy, sizeof(*matrix_to_copy));
switch (format) {
+ case DRM_FORMAT_YVU410:
+ case DRM_FORMAT_YVU411:
case DRM_FORMAT_YVU420:
case DRM_FORMAT_YVU422:
case DRM_FORMAT_YVU444:
--
2.47.3
On 2/1/26 15:02, Renjun Wang wrote:
> Add support for the following planar YUV formats:
> - DRM_FORMAT_YUV410
> - DRM_FORMAT_YUV411
> - DRM_FORMAT_YVU410
> - DRM_FORMAT_YVU411
>
> These formats are handled by the existing planar_yuv_read_line()
> function, which correctly handles the subsampling defined in each
> format's drm_format_info.
>
> The YVU variants (YVU410, YVU411) are also added to
> get_conversion_matrix_to_argb_u16() to ensure the U and V columns
> are swapped correctly in the conversion matrix.
>
> Signed-off-by: Renjun Wang <renjunw0@foxmail.com>
This patch seems correct, so you can add my:
Acked-by: Louis Chauvet <louis.chauvet@bootlin.com>
But how did you test it? I don't see the support in IGT. You have an
other application / use-case?
Thanks,
Louis Chauvet
> ---
> drivers/gpu/drm/vkms/vkms_formats.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/drivers/gpu/drm/vkms/vkms_formats.c b/drivers/gpu/drm/vkms/vkms_formats.c
> index dfb8e13cba87..5ef5d49a44ef 100644
> --- a/drivers/gpu/drm/vkms/vkms_formats.c
> +++ b/drivers/gpu/drm/vkms/vkms_formats.c
> @@ -730,9 +730,13 @@ pixel_read_line_t get_pixel_read_line_function(u32 format)
> case DRM_FORMAT_P012:
> case DRM_FORMAT_P016:
> return &YUV161616_semiplanar_read_line;
> + case DRM_FORMAT_YUV410:
> + case DRM_FORMAT_YUV411:
> case DRM_FORMAT_YUV420:
> case DRM_FORMAT_YUV422:
> case DRM_FORMAT_YUV444:
> + case DRM_FORMAT_YVU410:
> + case DRM_FORMAT_YVU411:
> case DRM_FORMAT_YVU420:
> case DRM_FORMAT_YVU422:
> case DRM_FORMAT_YVU444:
> @@ -921,6 +925,8 @@ void get_conversion_matrix_to_argb_u16(u32 format,
> memcpy(matrix, matrix_to_copy, sizeof(*matrix_to_copy));
>
> switch (format) {
> + case DRM_FORMAT_YVU410:
> + case DRM_FORMAT_YVU411:
> case DRM_FORMAT_YVU420:
> case DRM_FORMAT_YVU422:
> case DRM_FORMAT_YVU444:
On 2/2/26 13:14, Louis Chauvet wrote:
>
>
> On 2/1/26 15:02, Renjun Wang wrote:
>> Add support for the following planar YUV formats:
>> - DRM_FORMAT_YUV410
>> - DRM_FORMAT_YUV411
>> - DRM_FORMAT_YVU410
>> - DRM_FORMAT_YVU411
>>
>> These formats are handled by the existing planar_yuv_read_line()
>> function, which correctly handles the subsampling defined in each
>> format's drm_format_info.
>>
>> The YVU variants (YVU410, YVU411) are also added to
>> get_conversion_matrix_to_argb_u16() to ensure the U and V columns
>> are swapped correctly in the conversion matrix.
>>
>> Signed-off-by: Renjun Wang <renjunw0@foxmail.com>
>
> This patch seems correct, so you can add my:
>
> Acked-by: Louis Chauvet <louis.chauvet@bootlin.com>
>
> But how did you test it? I don't see the support in IGT. You have an
> other application / use-case?
I revert my Acked-by for this patch. It looks like the list in
vkms_config.c wasn’t updated, which means the format won’t be usable by
userspace.
Could you also add support in IGT so that kms_plane can test it? From
what I recall, this shouldn’t be much more complex than the VKMS
implementation—just a few switches to handle the proper conversions.
Thanks,
Louis Chauvet
> Thanks,
> Louis Chauvet
>
>> ---
>> drivers/gpu/drm/vkms/vkms_formats.c | 6 ++++++
>> 1 file changed, 6 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/vkms/vkms_formats.c b/drivers/gpu/drm/
>> vkms/vkms_formats.c
>> index dfb8e13cba87..5ef5d49a44ef 100644
>> --- a/drivers/gpu/drm/vkms/vkms_formats.c
>> +++ b/drivers/gpu/drm/vkms/vkms_formats.c
>> @@ -730,9 +730,13 @@ pixel_read_line_t
>> get_pixel_read_line_function(u32 format)
>> case DRM_FORMAT_P012:
>> case DRM_FORMAT_P016:
>> return &YUV161616_semiplanar_read_line;
>> + case DRM_FORMAT_YUV410:
>> + case DRM_FORMAT_YUV411:
>> case DRM_FORMAT_YUV420:
>> case DRM_FORMAT_YUV422:
>> case DRM_FORMAT_YUV444:
>> + case DRM_FORMAT_YVU410:
>> + case DRM_FORMAT_YVU411:
>> case DRM_FORMAT_YVU420:
>> case DRM_FORMAT_YVU422:
>> case DRM_FORMAT_YVU444:
>> @@ -921,6 +925,8 @@ void get_conversion_matrix_to_argb_u16(u32 format,
>> memcpy(matrix, matrix_to_copy, sizeof(*matrix_to_copy));
>> switch (format) {
>> + case DRM_FORMAT_YVU410:
>> + case DRM_FORMAT_YVU411:
>> case DRM_FORMAT_YVU420:
>> case DRM_FORMAT_YVU422:
>> case DRM_FORMAT_YVU444:
>
On Mon, 2026-02-02 at 13:46 +0100, Louis Chauvet wrote:
>
>
> On 2/2/26 13:14, Louis Chauvet wrote:
> >
> >
> > On 2/1/26 15:02, Renjun Wang wrote:
> > > Add support for the following planar YUV formats:
> > > - DRM_FORMAT_YUV410
> > > - DRM_FORMAT_YUV411
> > > - DRM_FORMAT_YVU410
> > > - DRM_FORMAT_YVU411
> > >
> > > These formats are handled by the existing planar_yuv_read_line()
> > > function, which correctly handles the subsampling defined in each
> > > format's drm_format_info.
> > >
> > > The YVU variants (YVU410, YVU411) are also added to
> > > get_conversion_matrix_to_argb_u16() to ensure the U and V columns
> > > are swapped correctly in the conversion matrix.
> > >
> > > Signed-off-by: Renjun Wang <renjunw0@foxmail.com>
> >
> > This patch seems correct, so you can add my:
> >
> > Acked-by: Louis Chauvet <louis.chauvet@bootlin.com>
> >
> > But how did you test it? I don't see the support in IGT. You have
> > an
> > other application / use-case?
>
> I revert my Acked-by for this patch. It looks like the list in
> vkms_config.c wasn’t updated, which means the format won’t be usable
> by
> userspace.
>
> Could you also add support in IGT so that kms_plane can test it? From
> what I recall, this shouldn’t be much more complex than the VKMS
> implementation—just a few switches to handle the proper conversions.
>
> Thanks,
> Louis Chauvet
>
> > Thanks,
> > Louis Chauvet
> >
> > > ---
> > > drivers/gpu/drm/vkms/vkms_formats.c | 6 ++++++
> > > 1 file changed, 6 insertions(+)
> > >
> > > diff --git a/drivers/gpu/drm/vkms/vkms_formats.c
> > > b/drivers/gpu/drm/
> > > vkms/vkms_formats.c
> > > index dfb8e13cba87..5ef5d49a44ef 100644
> > > --- a/drivers/gpu/drm/vkms/vkms_formats.c
> > > +++ b/drivers/gpu/drm/vkms/vkms_formats.c
> > > @@ -730,9 +730,13 @@ pixel_read_line_t
> > > get_pixel_read_line_function(u32 format)
> > > case DRM_FORMAT_P012:
> > > case DRM_FORMAT_P016:
> > > return &YUV161616_semiplanar_read_line;
> > > + case DRM_FORMAT_YUV410:
> > > + case DRM_FORMAT_YUV411:
> > > case DRM_FORMAT_YUV420:
> > > case DRM_FORMAT_YUV422:
> > > case DRM_FORMAT_YUV444:
> > > + case DRM_FORMAT_YVU410:
> > > + case DRM_FORMAT_YVU411:
> > > case DRM_FORMAT_YVU420:
> > > case DRM_FORMAT_YVU422:
> > > case DRM_FORMAT_YVU444:
> > > @@ -921,6 +925,8 @@ void get_conversion_matrix_to_argb_u16(u32
> > > format,
> > > memcpy(matrix, matrix_to_copy, sizeof(*matrix_to_copy));
> > > switch (format) {
> > > + case DRM_FORMAT_YVU410:
> > > + case DRM_FORMAT_YVU411:
> > > case DRM_FORMAT_YVU420:
> > > case DRM_FORMAT_YVU422:
> > > case DRM_FORMAT_YVU444:
> >
Hi Louis,
Sorry for missing vkms_formats[] update for YUV410, YUV411, YVU410 and
YVU411 foramts, I will fix it in version 2 patch.
I sent one igt-gpu-tool patch to igt-dev@lists.freedesktop.org for
supporting YUV410, YUV411, YVU410 and YVU411 formats about one day ago.
But the patch did not appeared in the https://lore.kernel.org/igt-dev/.
I have no idea why, maybe I will check it later. With this patch, I
tested VKMS YUV410, YUV411, YVU410 and YVU411 formats supporting using
kms_plane pixel-format subtest. There is the output on my local
machine:
renjun@vm:~/code_step/igt-gpu-tools/build/tests$ sudo
IGT_FORCE_DRIVER=vkms ./kms_plane --run-subtest pixel-format
IGT-Version: 2.3-ge7c61ef99 (x86_64) (Linux: 6.17.13+deb13-amd64
x86_64)
Using IGT_SRANDOM=1770042302 for randomisation
Opened device: /dev/dri/card1
Starting subtest: pixel-format
Using (pipe A + Virtual-2) to run the subtest.
Starting dynamic subtest: pipe-A-plane-0
...
Testing format YUV9(0x39565559) / modifier linear(0x0) (ITU-R BT.601
YCbCr, YCbCr limited range) on A.0
Testing format YUV9(0x39565559) / modifier linear(0x0) (ITU-R BT.601
YCbCr, YCbCr full range) on A.0
Testing format YUV9(0x39565559) / modifier linear(0x0) (ITU-R BT.709
YCbCr, YCbCr limited range) on A.0
Testing format YUV9(0x39565559) / modifier linear(0x0) (ITU-R BT.709
YCbCr, YCbCr full range) on A.0
Testing format YUV9(0x39565559) / modifier linear(0x0) (ITU-R BT.2020
YCbCr, YCbCr limited range) on A.0
Testing format YUV9(0x39565559) / modifier linear(0x0) (ITU-R BT.2020
YCbCr, YCbCr full range) on A.0
Testing format YU11(0x31315559) / modifier linear(0x0) (ITU-R BT.601
YCbCr, YCbCr limited range) on A.0
Testing format YU11(0x31315559) / modifier linear(0x0) (ITU-R BT.601
YCbCr, YCbCr full range) on A.0
Testing format YU11(0x31315559) / modifier linear(0x0) (ITU-R BT.709
YCbCr, YCbCr limited range) on A.0
Testing format YU11(0x31315559) / modifier linear(0x0) (ITU-R BT.709
YCbCr, YCbCr full range) on A.0
Testing format YU11(0x31315559) / modifier linear(0x0) (ITU-R BT.2020
YCbCr, YCbCr limited range) on A.0
Testing format YU11(0x31315559) / modifier linear(0x0) (ITU-R BT.2020
YCbCr, YCbCr full range) on A.0
...
Testing format YVU9(0x39555659) / modifier linear(0x0) (ITU-R BT.601
YCbCr, YCbCr limited range) on A.0
Testing format YVU9(0x39555659) / modifier linear(0x0) (ITU-R BT.601
YCbCr, YCbCr full range) on A.0
Testing format YVU9(0x39555659) / modifier linear(0x0) (ITU-R BT.709
YCbCr, YCbCr limited range) on A.0
Testing format YVU9(0x39555659) / modifier linear(0x0) (ITU-R BT.709
YCbCr, YCbCr full range) on A.0
Testing format YVU9(0x39555659) / modifier linear(0x0) (ITU-R BT.2020
YCbCr, YCbCr limited range) on A.0
Testing format YVU9(0x39555659) / modifier linear(0x0) (ITU-R BT.2020
YCbCr, YCbCr full range) on A.0
Testing format YV11(0x31315659) / modifier linear(0x0) (ITU-R BT.601
YCbCr, YCbCr limited range) on A.0
Testing format YV11(0x31315659) / modifier linear(0x0) (ITU-R BT.601
YCbCr, YCbCr full range) on A.0
Testing format YV11(0x31315659) / modifier linear(0x0) (ITU-R BT.709
YCbCr, YCbCr limited range) on A.0
Testing format YV11(0x31315659) / modifier linear(0x0) (ITU-R BT.709
YCbCr, YCbCr full range) on A.0
Testing format YV11(0x31315659) / modifier linear(0x0) (ITU-R BT.2020
YCbCr, YCbCr limited range) on A.0
Testing format YV11(0x31315659) / modifier linear(0x0) (ITU-R BT.2020
YCbCr, YCbCr full range) on A.0
...
Dynamic subtest pipe-A-plane-0: SUCCESS (53.322s)
Hi Louis,
Here is the igt-gpu-tool patch[1] i sent for VKMS YUV410/411 and
YVU410/YVU411 format test.
[1] https://patchwork.freedesktop.org/patch/702665/?series=161063&rev=1
Best Regards,
On Mon, 2026-02-02 at 22:50 +0800, Renjun Wang wrote:
> On Mon, 2026-02-02 at 13:46 +0100, Louis Chauvet wrote:
> >
> >
> > On 2/2/26 13:14, Louis Chauvet wrote:
> > >
> > >
> > > On 2/1/26 15:02, Renjun Wang wrote:
> > > > Add support for the following planar YUV formats:
> > > > - DRM_FORMAT_YUV410
> > > > - DRM_FORMAT_YUV411
> > > > - DRM_FORMAT_YVU410
> > > > - DRM_FORMAT_YVU411
> > > >
> > > > These formats are handled by the existing
> > > > planar_yuv_read_line()
> > > > function, which correctly handles the subsampling defined in
> > > > each
> > > > format's drm_format_info.
> > > >
> > > > The YVU variants (YVU410, YVU411) are also added to
> > > > get_conversion_matrix_to_argb_u16() to ensure the U and V
> > > > columns
> > > > are swapped correctly in the conversion matrix.
> > > >
> > > > Signed-off-by: Renjun Wang <renjunw0@foxmail.com>
> > >
> > > This patch seems correct, so you can add my:
> > >
> > > Acked-by: Louis Chauvet <louis.chauvet@bootlin.com>
> > >
> > > But how did you test it? I don't see the support in IGT. You have
> > > an
> > > other application / use-case?
> >
> > I revert my Acked-by for this patch. It looks like the list in
> > vkms_config.c wasn’t updated, which means the format won’t be
> > usable
> > by
> > userspace.
> >
> > Could you also add support in IGT so that kms_plane can test it?
> > From
> > what I recall, this shouldn’t be much more complex than the VKMS
> > implementation—just a few switches to handle the proper
> > conversions.
> >
> > Thanks,
> > Louis Chauvet
> >
> > > Thanks,
> > > Louis Chauvet
> > >
> > > > ---
> > > > drivers/gpu/drm/vkms/vkms_formats.c | 6 ++++++
> > > > 1 file changed, 6 insertions(+)
> > > >
> > > > diff --git a/drivers/gpu/drm/vkms/vkms_formats.c
> > > > b/drivers/gpu/drm/
> > > > vkms/vkms_formats.c
> > > > index dfb8e13cba87..5ef5d49a44ef 100644
> > > > --- a/drivers/gpu/drm/vkms/vkms_formats.c
> > > > +++ b/drivers/gpu/drm/vkms/vkms_formats.c
> > > > @@ -730,9 +730,13 @@ pixel_read_line_t
> > > > get_pixel_read_line_function(u32 format)
> > > > case DRM_FORMAT_P012:
> > > > case DRM_FORMAT_P016:
> > > > return &YUV161616_semiplanar_read_line;
> > > > + case DRM_FORMAT_YUV410:
> > > > + case DRM_FORMAT_YUV411:
> > > > case DRM_FORMAT_YUV420:
> > > > case DRM_FORMAT_YUV422:
> > > > case DRM_FORMAT_YUV444:
> > > > + case DRM_FORMAT_YVU410:
> > > > + case DRM_FORMAT_YVU411:
> > > > case DRM_FORMAT_YVU420:
> > > > case DRM_FORMAT_YVU422:
> > > > case DRM_FORMAT_YVU444:
> > > > @@ -921,6 +925,8 @@ void get_conversion_matrix_to_argb_u16(u32
> > > > format,
> > > > memcpy(matrix, matrix_to_copy, sizeof(*matrix_to_copy));
> > > > switch (format) {
> > > > + case DRM_FORMAT_YVU410:
> > > > + case DRM_FORMAT_YVU411:
> > > > case DRM_FORMAT_YVU420:
> > > > case DRM_FORMAT_YVU422:
> > > > case DRM_FORMAT_YVU444:
> > >
>
> Hi Louis,
>
> Sorry for missing vkms_formats[] update for YUV410, YUV411, YVU410
> and
> YVU411 foramts, I will fix it in version 2 patch.
>
> I sent one igt-gpu-tool patch to igt-dev@lists.freedesktop.org for
> supporting YUV410, YUV411, YVU410 and YVU411 formats about one day
> ago.
> But the patch did not appeared in the
> https://lore.kernel.org/igt-dev/.
> I have no idea why, maybe I will check it later. With this patch, I
> tested VKMS YUV410, YUV411, YVU410 and YVU411 formats supporting
> using
> kms_plane pixel-format subtest. There is the output on my local
> machine:
>
> renjun@vm:~/code_step/igt-gpu-tools/build/tests$ sudo
> IGT_FORCE_DRIVER=vkms ./kms_plane --run-subtest pixel-format
> IGT-Version: 2.3-ge7c61ef99 (x86_64) (Linux: 6.17.13+deb13-amd64
> x86_64)
> Using IGT_SRANDOM=1770042302 for randomisation
> Opened device: /dev/dri/card1
> Starting subtest: pixel-format
> Using (pipe A + Virtual-2) to run the subtest.
> Starting dynamic subtest: pipe-A-plane-0
> ...
> Testing format YUV9(0x39565559) / modifier linear(0x0) (ITU-R BT.601
> YCbCr, YCbCr limited range) on A.0
> Testing format YUV9(0x39565559) / modifier linear(0x0) (ITU-R BT.601
> YCbCr, YCbCr full range) on A.0
> Testing format YUV9(0x39565559) / modifier linear(0x0) (ITU-R BT.709
> YCbCr, YCbCr limited range) on A.0
> Testing format YUV9(0x39565559) / modifier linear(0x0) (ITU-R BT.709
> YCbCr, YCbCr full range) on A.0
> Testing format YUV9(0x39565559) / modifier linear(0x0) (ITU-R BT.2020
> YCbCr, YCbCr limited range) on A.0
> Testing format YUV9(0x39565559) / modifier linear(0x0) (ITU-R BT.2020
> YCbCr, YCbCr full range) on A.0
> Testing format YU11(0x31315559) / modifier linear(0x0) (ITU-R BT.601
> YCbCr, YCbCr limited range) on A.0
> Testing format YU11(0x31315559) / modifier linear(0x0) (ITU-R BT.601
> YCbCr, YCbCr full range) on A.0
> Testing format YU11(0x31315559) / modifier linear(0x0) (ITU-R BT.709
> YCbCr, YCbCr limited range) on A.0
> Testing format YU11(0x31315559) / modifier linear(0x0) (ITU-R BT.709
> YCbCr, YCbCr full range) on A.0
> Testing format YU11(0x31315559) / modifier linear(0x0) (ITU-R BT.2020
> YCbCr, YCbCr limited range) on A.0
> Testing format YU11(0x31315559) / modifier linear(0x0) (ITU-R BT.2020
> YCbCr, YCbCr full range) on A.0
> ...
> Testing format YVU9(0x39555659) / modifier linear(0x0) (ITU-R BT.601
> YCbCr, YCbCr limited range) on A.0
> Testing format YVU9(0x39555659) / modifier linear(0x0) (ITU-R BT.601
> YCbCr, YCbCr full range) on A.0
> Testing format YVU9(0x39555659) / modifier linear(0x0) (ITU-R BT.709
> YCbCr, YCbCr limited range) on A.0
> Testing format YVU9(0x39555659) / modifier linear(0x0) (ITU-R BT.709
> YCbCr, YCbCr full range) on A.0
> Testing format YVU9(0x39555659) / modifier linear(0x0) (ITU-R BT.2020
> YCbCr, YCbCr limited range) on A.0
> Testing format YVU9(0x39555659) / modifier linear(0x0) (ITU-R BT.2020
> YCbCr, YCbCr full range) on A.0
> Testing format YV11(0x31315659) / modifier linear(0x0) (ITU-R BT.601
> YCbCr, YCbCr limited range) on A.0
> Testing format YV11(0x31315659) / modifier linear(0x0) (ITU-R BT.601
> YCbCr, YCbCr full range) on A.0
> Testing format YV11(0x31315659) / modifier linear(0x0) (ITU-R BT.709
> YCbCr, YCbCr limited range) on A.0
> Testing format YV11(0x31315659) / modifier linear(0x0) (ITU-R BT.709
> YCbCr, YCbCr full range) on A.0
> Testing format YV11(0x31315659) / modifier linear(0x0) (ITU-R BT.2020
> YCbCr, YCbCr limited range) on A.0
> Testing format YV11(0x31315659) / modifier linear(0x0) (ITU-R BT.2020
> YCbCr, YCbCr full range) on A.0
> ...
> Dynamic subtest pipe-A-plane-0: SUCCESS (53.322s)
© 2016 - 2026 Red Hat, Inc.