On Tue, Nov 03, 2026 at 04:37:43PM -0500, Harry Wentland wrote:
> Loading a DRM_COLOROP_3D_LUT on AMD HW takes a long time because the
> driver has to load the entire 3D LUT via register writes.
> 
> Starting with DCN 4 the HW has the ability to load a 3D LUT via DMA,
> which only requires an address update for programming the 3D LUT.
> 
> I propose exposing a new DRM_COLOROP_3D_LUT_DMA type to support this DMA
> 3D LUT loading mechanism. Users of the DRM_COLOROP_3D_LUT_DMA will parse
> the supported formats via the LUT_3D_FORMATS blob property, select the
> desired format via LUT_3D_FORMAT property, and pass the 3D LUT buffer as
> a drm_framebuffer via FB_ID on the colorop.

A framebuffer? That sounds like a very weird thing to use
for non-pixel data.

Why don't you just copy the LUT from the blob into a BO in the kernel
and DMA it from there? That's kinda how everything now works on Intel
hardware. Sure, it's not 100% optimal because of the extra copy, but
at least it avoids userspace having to care about it so much.

> 
> For details see the patches and/or posted branches.
> 
> In addition to the patches posted here the 3d-fl-fixes kernel branch
> contains a number of fixes that will be merged via the usual amdgpu
> display process. It also contains a patch to enable support on Navi 4
> (DCN 4.0.1), which won't be upstreamed since that generation requires a
> userspace workaround. The 3d-fl-workaround IGT branch exists solely for
> that purpose. Nonetheless, Navi 4 can serve as an enablement vehicle for
> anyone who wants to see the new interface working.
> 
> The kwin branch makes use of a pipeline with DRM_COLOROP_3D_LUT_DMA if
> such a pipeline is discovered before a pipeline with a
> DRM_COLOROP_3D_LUT.
> 
> ### Branches
> 
> kernel: https://gitlab.freedesktop.org/hwentland/linux/-/commits/3d-fl
> kernel w/ fixes: 
> https://gitlab.freedesktop.org/hwentland/linux/-/commits/3d-fl-fixes
> IGT: https://gitlab.freedesktop.org/hwentland/igt-gpu-tools/-/tree/3d-fl
> IGT Navi 4 w/a: 
> https://gitlab.freedesktop.org/hwentland/igt-gpu-tools/-/tree/3d-fl-workaround
> kwin: https://invent.kde.org/hwentlan/kwin/-/commits/3d-fl
> 
> Cc: Melissa Wen <[email protected]>
> Cc: Autumn Ashton <[email protected]>
> Cc: Xaver Hugl <[email protected]>
> 
> Harry Wentland (13):
>   drm/colorop: Add DRM_COLOROP_3D_LUT_DMA
>   drm/colorop: add DRM_COLOROP_3D_LUT_DMA object and state
>   drm/atomic: wire up DMA 3D LUT colorop properties
>   drm/atomic: validate DMA 3D LUT colorop framebuffer
>   drm/atomic: add colorop prepare_fb and cleanup_fb helper hooks
>   drm/tests: test colorop prepare_fb and cleanup_fb helpers
>   drm/amd/display: advertise a DMA 3D LUT color pipeline
>   drm/amd/display: pin the DMA 3D LUT framebuffer
>   drm/amd/display: program the DMA 3D LUT colorop
>   drm/amd/display: add 3D LUT DMA pitch alignment cap
>   drm/amd/display: derive the DMA 3D LUT pitch from DC caps
>   drm/amd/display: reject direct 3D LUT loading mode changes
>   drm/amd/display: add KUnit tests for the DMA 3D LUT colorop
> 
>  drivers/gpu/drm/amd/display/Kconfig           |  13 +
>  .../amd/display/amdgpu_dm/amdgpu_dm_color.c   |  68 ++-
>  .../amd/display/amdgpu_dm/amdgpu_dm_colorop.c | 131 +++++-
>  .../amd/display/amdgpu_dm/amdgpu_dm_colorop.h |   8 +-
>  .../amd/display/amdgpu_dm/amdgpu_dm_plane.c   |  71 +++-
>  .../amdgpu_dm/tests/amdgpu_dm_colorop_test.c  | 286 ++++++++++++-
>  .../amdgpu_dm/tests/amdgpu_dm_plane_test.c    |  65 +++
>  drivers/gpu/drm/amd/display/dc/dc.h           |   2 +
>  .../dc/resource/dcn42/dcn42_resource.c        |   2 +
>  .../dc/resource/dcn42b/dcn42b_resource.c      |   2 +
>  drivers/gpu/drm/drm_atomic.c                  |  66 +++
>  drivers/gpu/drm/drm_atomic_helper.c           |  93 ++++
>  drivers/gpu/drm/drm_atomic_uapi.c             |  28 ++
>  drivers/gpu/drm/drm_colorop.c                 |  96 +++++
>  drivers/gpu/drm/drm_framebuffer.c             |  45 +-
>  drivers/gpu/drm/drm_gem_atomic_helper.c       |  81 ++++
>  drivers/gpu/drm/tests/Makefile                |   1 +
>  .../gpu/drm/tests/drm_colorop_helper_test.c   | 397 ++++++++++++++++++
>  include/drm/drm_atomic.h                      |  20 +
>  include/drm/drm_colorop.h                     |  71 ++++
>  include/drm/drm_gem_atomic_helper.h           |  11 +
>  include/drm/drm_modeset_helper_vtables.h      |  62 +++
>  include/uapi/drm/drm.h                        |   7 +-
>  include/uapi/drm/drm_mode.h                   |  79 ++++
>  24 files changed, 1672 insertions(+), 33 deletions(-)
>  create mode 100644 drivers/gpu/drm/tests/drm_colorop_helper_test.c
> 
> --
> 2.56.0

-- 
Ville Syrjälä
Intel

Reply via email to