[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAOFGe94vHrKX6jSGCuesRNUJPXzYBASK4WvqYYFg=EHTFcs8MQ@mail.gmail.com>
Date: Fri, 22 Aug 2025 12:16:31 -0400
From: Faith Ekstrand <faith@...strand.net>
To: James Jones <jajones@...dia.com>
Cc: Danilo Krummrich <dakr@...nel.org>, Lyude Paul <lyude@...hat.com>,
Faith Ekstrand <faith.ekstrand@...labora.com>, nouveau@...ts.freedesktop.org,
dri-devel@...ts.freedesktop.org, linux-kernel@...r.kernel.org,
David Airlie <airlied@...il.com>, Simona Vetter <simona@...ll.ch>,
Joel Fernandes <joelagnelf@...dia.com>
Subject: Re: [PATCH 1/3] drm: define NVIDIA DRM format modifiers for GB20x
On Mon, Aug 11, 2025 at 5:57 PM James Jones <jajones@...dia.com> wrote:
>
> The layout of bits within the individual tiles
> (referred to as sectors in the
> DRM_FORMAT_MOD_NVIDIA_BLOCK_LINEAR_2D() macro)
> changed for 8 and 16-bit surfaces starting in
> Blackwell 2 GPUs (With the exception of GB10).
> To denote the difference, extend the sector field
> in the parametric format modifier definition used
> to generate modifier values for NVIDIA hardware.
>
> Without this change, it would be impossible to
> differentiate the two layouts based on modifiers,
> and as a result software could attempt to share
> surfaces directly between pre-GB20x and GB20x
> cards, resulting in corruption when the surface
> was accessed on one of the GPUs after being
> populated with content by the other.
>
> Of note: This change causes the
> DRM_FORMAT_MOD_NVIDIA_BLOCK_LINEAR_2D() macro to
> evaluate its "s" parameter twice, with the side
> effects that entails. I surveyed all usage of the
> modifier in the kernel and Mesa code, and that
> does not appear to be problematic in any current
> usage, but I thought it was worth calling out.
>
> Signed-off-by: James Jones <jajones@...dia.com>
Reviewed-by: Faith Ekstrand <faith.ekstrand@...labora.com>
>
> ---
> include/uapi/drm/drm_fourcc.h | 25 ++++++++++++++++---------
> 1 file changed, 16 insertions(+), 9 deletions(-)
>
> diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h
> index ea91aa8afde9..e527b24bd824 100644
> --- a/include/uapi/drm/drm_fourcc.h
> +++ b/include/uapi/drm/drm_fourcc.h
> @@ -979,14 +979,20 @@ extern "C" {
> * 2 = Gob Height 8, Turing+ Page Kind mapping
> * 3 = Reserved for future use.
> *
> - * 22:22 s Sector layout. On Tegra GPUs prior to Xavier, there is a further
> - * bit remapping step that occurs at an even lower level than the
> - * page kind and block linear swizzles. This causes the layout of
> - * surfaces mapped in those SOC's GPUs to be incompatible with the
> - * equivalent mapping on other GPUs in the same system.
> - *
> - * 0 = Tegra K1 - Tegra Parker/TX2 Layout.
> - * 1 = Desktop GPU and Tegra Xavier+ Layout
> + * 22:22 s Sector layout. There is a further bit remapping step that occurs
> + * 26:27 at an even lower level than the page kind and block linear
> + * swizzles. This causes the bit arrangement of surfaces in memory
> + * to differ subtly, and prevents direct sharing of surfaces between
> + * GPUs with different layouts.
> + *
> + * 0 = Tegra K1 - Tegra Parker/TX2 Layout
> + * 1 = Pre-GB20x, GB20x 32+ bpp, GB10, Tegra Xavier-Orin Layout
> + * 2 = GB20x(Blackwell 2)+ 8 bpp surface layout
> + * 3 = GB20x(Blackwell 2)+ 16 bpp surface layout
> + * 4 = Reserved for future use.
> + * 5 = Reserved for future use.
> + * 6 = Reserved for future use.
> + * 7 = Reserved for future use.
> *
> * 25:23 c Lossless Framebuffer Compression type.
> *
> @@ -1001,7 +1007,7 @@ extern "C" {
> * 6 = Reserved for future use
> * 7 = Reserved for future use
> *
> - * 55:25 - Reserved for future use. Must be zero.
> + * 55:28 - Reserved for future use. Must be zero.
> */
> #define DRM_FORMAT_MOD_NVIDIA_BLOCK_LINEAR_2D(c, s, g, k, h) \
> fourcc_mod_code(NVIDIA, (0x10 | \
> @@ -1009,6 +1015,7 @@ extern "C" {
> (((k) & 0xff) << 12) | \
> (((g) & 0x3) << 20) | \
> (((s) & 0x1) << 22) | \
> + (((s) & 0x6) << 25) | \
> (((c) & 0x7) << 23)))
>
> /* To grandfather in prior block linear format modifiers to the above layout,
> --
> 2.50.1
>
Powered by blists - more mailing lists