[igt-dev] [PATCH i-g-t] lib: Introduce the igt_nouveau library
Petri Latvala
petri.latvala at intel.com
Thu Mar 18 09:17:38 UTC 2021
On Wed, Mar 17, 2021 at 06:38:27PM -0400, Lyude wrote:
> From: Lyude Paul <lyude at redhat.com>
>
> This introduces the igt_nouveau library, which enables support for tiling
> formats on nouveau, along with accelerated clears for allocated bos in VRAM
> using the dma-copy engine present on Nvidia hardware since Tesla. Typically
> the latter would be handled by the kernel automatically, which is the
> long-term plan for nouveau, but since the kernel doesn't yet support that
> we implement this in igt in order to fulfill the expectation that most of
> igt has in which newly allocated fbs are expected to be zero-filled by
> default.
>
> The dma-copy engine is capable of fast blitting, and is also able to
> perform tiling/untiling at the same time. This is worth mentioning because
> unlike many of the other drivers supported in igt, we go out of our way to
> avoid using mmap() in order to perform CPU rendering wherever possible.
> Instead of mmap()ing an fb that we want to draw to on the CPU (whether it
> be for converting formats, or just normal rendering), we instead use
> dma-copy to blit linear/tiled fbs over to linear system memory which we
> mmap() instead. This is primarily because while mmap() is typically
> painfully slow for vram, it's even slower on nouveau due to the current
> lack of dynamic reclocking in our driver. Furthermore, using the dma-copy
> engine for copying things over to system ram is also dramatically faster
> than using igt's memcpy wc helpers even when no tiling is involved. Such
> speed improvements are both quite nice, but also very necessary for certain
> tests like kms_plane that are rather sensitive when it comes to slow
> rendering with drivers.
>
> This doesn't mean we won't want to provide a way of using mmap() for
> rendering in the future however, as at least basic testing of mmap() is
> certainly something we eventually want for nouveau. However, I think the
> best way for us to do this in the future will be to adapt the igt_draw API
> to work with nouveau so we can explicitly request using mmap() in tests
> which need it.
>
> Finally, this code also adds a hard dependency on libdrm support for
> nouveau tests. The main reason for this is currently there are no real
> applications that use nouveau's ioctls directly (mesa for instance, uses
> libdrm as well) and also that nouveau's ioctls are currently a bit
> complicated to use by hand. This will likely be temporary however, as Ben
> Skeggs is planning on revamping a lot of nouveau's APIs to simplify them
> and make libdrm support for nouveau obsolete in the future. Note that we
> take care to make sure that users can still disable libdrm support for
> nouveau if needed, with the only caveat being that any tests using
> igt_nouveau will be disabled, along with any tiling support for
> nvidia-specific tiling formats.
>
> This should enable igt tests which test tiling formats to run on nouveau,
> and fix some seemingly random test failures as a result of not having
> zero-filled buffers in a few other tests like kms_cursor_crc.
>
> Signed-off-by: Lyude Paul <lyude at redhat.com>
> Cc: Martin Peres <martin.peres at free.fr>
> Cc: Ben Skeggs <bskeggs at redhat.com>
> Cc: Jeremy Cline <jcline at redhat.com>
> ---
> .gitlab-ci.yml | 7 +
> include/drm-uapi/drm_fourcc.h | 2 +-
> lib/drmtest.c | 5 +
> lib/igt_fb.c | 98 +++++++--
> lib/igt_fb.h | 2 +
> lib/igt_nouveau.c | 281 ++++++++++++++++++++++++++
> lib/igt_nouveau.h | 65 ++++++
> lib/meson.build | 8 +
> lib/nouveau/cea0b5.c | 252 +++++++++++++++++++++++
> lib/nouveau/nvhw/class/cl906f.h | 103 ++++++++++
> lib/nouveau/nvhw/class/cla0b5.h | 250 +++++++++++++++++++++++
> lib/nouveau/nvhw/drf.h | 209 +++++++++++++++++++
> lib/nouveau/nvif/push.h | 345 ++++++++++++++++++++++++++++++++
> lib/nouveau/nvif/push906f.h | 70 +++++++
> lib/nouveau/priv.h | 57 ++++++
> meson.build | 3 +
> tests/meson.build | 2 +-
> 17 files changed, 1745 insertions(+), 14 deletions(-)
> create mode 100644 lib/igt_nouveau.c
> create mode 100644 lib/igt_nouveau.h
> create mode 100644 lib/nouveau/cea0b5.c
> create mode 100644 lib/nouveau/nvhw/class/cl906f.h
> create mode 100644 lib/nouveau/nvhw/class/cla0b5.h
> create mode 100644 lib/nouveau/nvhw/drf.h
> create mode 100644 lib/nouveau/nvif/push.h
> create mode 100644 lib/nouveau/nvif/push906f.h
> create mode 100644 lib/nouveau/priv.h
Do you want to support autotools?
--
Petri Latvala
More information about the igt-dev
mailing list