From: Thomas Zimmermann <tzimmermann@suse.de>
To: Andy Yan <andyshrk@163.com>
Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org,
airlied@gmail.com, simona@ffwll.ch,
dri-devel@lists.freedesktop.org,
linux-mediatek@lists.infradead.org,
freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org,
imx@lists.linux.dev, linux-samsung-soc@vger.kernel.org,
nouveau@lists.freedesktop.org, virtualization@lists.linux.dev,
spice-devel@lists.freedesktop.org,
linux-renesas-soc@vger.kernel.org,
linux-rockchip@lists.infradead.org, linux-tegra@vger.kernel.org,
intel-xe@lists.freedesktop.org, xen-devel@lists.xenproject.org
Subject: Re: [PATCH v2 02/25] drm/dumb-buffers: Provide helper to set pitch and size
Date: Mon, 13 Jan 2025 08:52:03 +0100 [thread overview]
Message-ID: <44f1170e-ad76-4dae-abae-986b5482dfc6@suse.de> (raw)
In-Reply-To: <443491d4.4087.1945dcc04e3.Coremail.andyshrk@163.com>
Hi
Am 13.01.25 um 04:53 schrieb Andy Yan:
[...]
>> Thanks for taking a look. That NV-related code at [0] is a 'somewhat
>> non-idiomatic use' of the UAPI. The dumb-buffer interface really just
>> supports a single plane. The fix would be a new ioctl that takes a DRM
>> 4cc constant and returns a buffer handle/pitch/size for each plane. But
>> that's separate series throughout the various components.
> So is there a standard way to create buffer for NV-related format now ?
I don't know, but it doesn't look like there is. As I outlined, a new
dumb-buffer interface seems required.
> With a quick search, I can see many user space use dumb-buffer for NV-releated
> buffer alloc:
>
> [0]https://github.com/tomba/kmsxx/blob/master/kms%2B%2B/src/pixelformats.cpp
> [1]https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/blob/master/lib/igt_fb.c?ref_type=heads
> [2]https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-plugins-bad/sys/kms/gstkmsutils.c?ref_type=heads#L116
>
>> There's also code XRGB16161616F. This is a viable format for the UAPI,
>> but seems not very useful in practice.
>>
>>> And there are also some AFBC based format with bpp can't be handled here, see:
>>> static __u32 drm_gem_afbc_get_bpp(struct drm_device *dev,
>>> const struct drm_mode_fb_cmd2 *mode_cmd)
>>> {
>>> const struct drm_format_info *info;
>>>
>>> info = drm_get_format_info(dev, mode_cmd);
>>>
>>> switch (info->format) {
>>> case DRM_FORMAT_YUV420_8BIT:
>>> return 12;
>>> case DRM_FORMAT_YUV420_10BIT:
>>> return 15;
>>> case DRM_FORMAT_VUY101010:
>>> return 30;
>>> default:
>>> return drm_format_info_bpp(info, 0);
>>> }
>>> }
>> Same problem here. These YUV formats are multi-planar and there should
>> be no dumb buffers for them.
> These afbc based format are one plane, see:
Apologies. I confused them with other YUV formats.
>
> /*
> * 1-plane YUV 4:2:0
> * In these formats, the component ordering is specified (Y, followed by U
> * then V), but the exact Linear layout is undefined.
> * These formats can only be used with a non-Linear modifier.
> */
> #define DRM_FORMAT_YUV420_8BIT fourcc_code('Y', 'U', '0', '8')
> #define DRM_FORMAT_YUV420_10BIT fourcc_code('Y', 'U', '1', '0')
>
>> As we still have to support these all use cases, I've modified the new
>> helper to fallback to computing the pitch from the given bpp value.
>> That's what drivers currently do. Could you please apply the attached
>> patch on top of the series and report back the result of the test? You
>> should see a kernel warning about the unknown color mode, but allocation
>> should succeed.
> Yes, the attached patch works for my test case.
Thanks for testing. I'll include the changes in the patch' next iteration.
Best regards
Thomas
>
>> Best regards
>> Thomas
>>
>>>
>>> [0]https://gitlab.freedesktop.org/mesa/drm/-/blob/main/tests/modetest/buffers.c?ref_type=heads#L159
>>>
>>> This introduce a modetest failure on rockchip platform:
>>> # modetest -M rockchip -s 70@68:1920x1080 -P 32@68:1920x1080@NV30
>>> setting mode 1920x1080-60.00Hz on connectors 70, crtc 68
>>> testing 1920x1080@NV30 overlay plane 32
>>> failed to create dumb buffer: Invalid argument
>>>
>>> I think other platform with bpp can't handler by drm_mode_legacy_fb_format will
>>> also see this kind of failure:
>>>
>>>
>>>
>>>> + if (fourcc == DRM_FORMAT_INVALID)
>>>> + return -EINVAL;
>>>> + info = drm_format_info(fourcc);
>>>> + if (!info)
>>>> + return -EINVAL;
>>>> + pitch = drm_format_info_min_pitch(info, 0, args->width);
>>>> + if (!pitch || pitch > U32_MAX)
>>>> + return -EINVAL;
>>>> +
>>>> + args->pitch = pitch;
>>>> +
>>>> + return drm_mode_align_dumb(args, pitch_align, size_align);
>>>> +}
>>>> +EXPORT_SYMBOL(drm_mode_size_dumb);
>>>> +
>>>> int drm_mode_create_dumb(struct drm_device *dev,
>>>> struct drm_mode_create_dumb *args,
>>>> struct drm_file *file_priv)
>>>> diff --git a/include/drm/drm_dumb_buffers.h b/include/drm/drm_dumb_buffers.h
>>>> new file mode 100644
>>>> index 000000000000..6fe36004b19d
>>>> --- /dev/null
>>>> +++ b/include/drm/drm_dumb_buffers.h
>>>> @@ -0,0 +1,14 @@
>>>> +/* SPDX-License-Identifier: MIT */
>>>> +
>>>> +#ifndef __DRM_DUMB_BUFFERS_H__
>>>> +#define __DRM_DUMB_BUFFERS_H__
>>>> +
>>>> +struct drm_device;
>>>> +struct drm_mode_create_dumb;
>>>> +
>>>> +int drm_mode_size_dumb(struct drm_device *dev,
>>>> + struct drm_mode_create_dumb *args,
>>>> + unsigned long pitch_align,
>>>> + unsigned long size_align);
>>>> +
>>>> +#endif
>>>> --
>>>> 2.47.1
>>>>
>>>>
>>>> _______________________________________________
>>>> Linux-rockchip mailing list
>>>> Linux-rockchip@lists.infradead.org
>>>> http://lists.infradead.org/mailman/listinfo/linux-rockchip
>> --
>> --
>> Thomas Zimmermann
>> Graphics Driver Developer
>> SUSE Software Solutions Germany GmbH
>> Frankenstrasse 146, 90461 Nuernberg, Germany
>> GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
>> HRB 36809 (AG Nuernberg)
--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)
next prev parent reply other threads:[~2025-01-13 7:52 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-09 14:56 [PATCH v2 00/25] drm/dumb-buffers: Fix and improve buffer-size calculation Thomas Zimmermann
2025-01-09 14:56 ` [PATCH v2 01/25] drm/dumb-buffers: Sanitize output on errors Thomas Zimmermann
2025-01-09 14:56 ` [PATCH v2 02/25] drm/dumb-buffers: Provide helper to set pitch and size Thomas Zimmermann
2025-01-10 1:49 ` Andy Yan
2025-01-10 13:23 ` [PATCH " Thomas Zimmermann
2025-01-13 3:53 ` Andy Yan
2025-01-13 7:52 ` Thomas Zimmermann [this message]
2025-01-09 14:56 ` [PATCH v2 03/25] drm/gem-dma: Compute dumb-buffer sizes with drm_mode_size_dumb() Thomas Zimmermann
2025-01-09 14:56 ` [PATCH v2 04/25] drm/gem-shmem: " Thomas Zimmermann
2025-01-09 14:56 ` [PATCH v2 05/25] drm/gem-vram: " Thomas Zimmermann
2025-01-09 14:57 ` [PATCH v2 06/25] drm/armada: " Thomas Zimmermann
2025-01-09 14:57 ` [PATCH v2 07/25] drm/exynos: " Thomas Zimmermann
2025-01-09 14:57 ` [PATCH v2 08/25] drm/gma500: " Thomas Zimmermann
2025-01-09 14:57 ` [PATCH v2 09/25] drm/hibmc: " Thomas Zimmermann
2025-01-09 14:57 ` [PATCH v2 10/25] drm/imx/ipuv3: " Thomas Zimmermann
2025-01-10 8:06 ` Philipp Zabel
2025-01-09 14:57 ` [PATCH v2 11/25] drm/loongson: " Thomas Zimmermann
2025-01-15 3:50 ` Sui Jingfeng
2025-01-09 14:57 ` [PATCH v2 12/25] drm/mediatek: " Thomas Zimmermann
2025-01-09 14:57 ` [PATCH v2 13/25] drm/msm: " Thomas Zimmermann
2025-01-13 8:25 ` Dmitry Baryshkov
2025-01-09 14:57 ` [PATCH v2 14/25] drm/nouveau: " Thomas Zimmermann
2025-01-09 14:57 ` [PATCH v2 15/25] drm/omapdrm: " Thomas Zimmermann
2025-01-14 14:04 ` Tomi Valkeinen
2025-01-09 14:57 ` [PATCH v2 16/25] drm/qxl: " Thomas Zimmermann
2025-01-09 14:57 ` [PATCH v2 17/25] drm/renesas/rcar-du: " Thomas Zimmermann
2025-01-09 14:57 ` [PATCH v2 18/25] drm/renesas/rz-du: " Thomas Zimmermann
2025-01-09 14:57 ` [PATCH v2 19/25] drm/rockchip: " Thomas Zimmermann
2025-01-09 22:59 ` Heiko Stübner
2025-01-09 14:57 ` [PATCH v2 20/25] drm/tegra: " Thomas Zimmermann
2025-01-09 14:57 ` [PATCH v2 21/25] drm/virtio: " Thomas Zimmermann
2025-02-20 16:10 ` Dmitry Osipenko
2025-01-09 14:57 ` [PATCH v2 22/25] drm/vmwgfx: " Thomas Zimmermann
2025-01-10 18:18 ` Zack Rusin
2025-01-09 14:57 ` [PATCH v2 23/25] drm/xe: " Thomas Zimmermann
2025-01-09 16:05 ` Matthew Auld
2025-01-09 16:26 ` Thomas Zimmermann
2025-01-09 17:15 ` Matthew Auld
2025-01-09 14:57 ` [PATCH v2 24/25] drm/xen: " Thomas Zimmermann
2025-01-09 14:57 ` [PATCH v2 25/25] drm/xlnx: " Thomas Zimmermann
2025-01-15 10:13 ` Tomi Valkeinen
2025-01-15 10:26 ` Thomas Zimmermann
2025-01-15 10:58 ` Tomi Valkeinen
2025-01-15 11:37 ` Thomas Zimmermann
2025-01-15 12:06 ` Tomi Valkeinen
2025-01-15 12:34 ` Thomas Zimmermann
2025-01-15 13:33 ` Tomi Valkeinen
2025-01-15 13:45 ` Thomas Zimmermann
2025-01-15 14:20 ` Tomi Valkeinen
2025-01-15 14:34 ` Daniel Stone
2025-01-16 8:43 ` Laurent Pinchart
2025-01-16 9:38 ` Laurent Pinchart
2025-01-16 10:07 ` Tomi Valkeinen
2025-01-19 17:08 ` Laurent Pinchart
2025-01-16 8:09 ` Thomas Zimmermann
2025-01-16 10:03 ` Tomi Valkeinen
2025-01-16 10:17 ` Geert Uytterhoeven
2025-01-16 10:26 ` Tomi Valkeinen
2025-01-16 10:35 ` Dmitry Baryshkov
2025-01-16 12:24 ` Daniel Stone
2025-01-19 11:29 ` Sui Jingfeng
2025-01-19 12:18 ` Tomi Valkeinen
2025-01-19 14:59 ` Sui Jingfeng
2025-01-19 15:22 ` Tomi Valkeinen
2025-01-19 16:26 ` Sui Jingfeng
2025-01-19 20:14 ` Laurent Pinchart
2025-01-20 7:04 ` Sui Jingfeng
2025-01-20 3:34 ` Sui Jingfeng
2025-01-20 7:49 ` Thomas Zimmermann
2025-01-20 8:51 ` Tomi Valkeinen
2025-01-20 8:57 ` Thomas Zimmermann
2025-01-20 7:54 ` Thomas Zimmermann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=44f1170e-ad76-4dae-abae-986b5482dfc6@suse.de \
--to=tzimmermann@suse.de \
--cc=airlied@gmail.com \
--cc=andyshrk@163.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=imx@lists.linux.dev \
--cc=intel-xe@lists.freedesktop.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=nouveau@lists.freedesktop.org \
--cc=simona@ffwll.ch \
--cc=spice-devel@lists.freedesktop.org \
--cc=virtualization@lists.linux.dev \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox