Nouveau (software)

{{short description|Open source software driver for Nvidia GPU}}

{{about|a software project|the wine|Nouveau}}

{{lowercase title}}

{{Infobox software

| name = nouveau

| title = nouveau

| logo =

| logo caption =

| screenshot =

| caption =

| collapsible =

| author =

| developer =

| released = 1.0 / {{Start date and age|2012|06|18|df=yes}}{{cite web

| url = http://www.h-online.com/open/news/item/Free-NVIDIA-graphics-driver-reaches-version-1-0-1620188.html

| title = Free NVIDIA graphics driver reaches version 1.0

| last = von Eitzen

| first = Chris

| date = 18 June 2012

| work = The H - Open

| publisher = Heinz Heise

| access-date = 13 June 2013}}

| discontinued =

| latest release version = {{wikidata|property|preferred|references|edit|P348|P548=Q2804309}}

| latest release date = {{Start date and age|{{wikidata|qualifier|preferred|single|P348|P548=Q2804309|P577}}|df=yes}}

| latest preview version =

| latest preview date =

| repo =

| programming language = C

| operating system = Linux, NetBSD

| platform = x86, x86-64, ARM, PowerPC

| size =

| genre = Device driver

| license = MIT License

| website = {{URL|https://nouveau.freedesktop.org}}

}}

File:The Linux Graphics Stack and glamor.svg & KMS driver, libDRM and Mesa 3D. Right side: Proprietary drivers: Kernel BLOB and User-space components.]]

nouveau ({{IPAc-en|n|u:|ˈ|v|oʊ}}) is a free and open-source graphics device driver for Nvidia video cards and the Tegra family of SoCs written by independent software engineers, with minor help from Nvidia employees.

The project's goal is to create an open source driver by reverse engineering Nvidia's proprietary Linux drivers. It is managed by the X.Org Foundation, hosted by freedesktop.org, and is distributed as part of Mesa 3D. The project was initially based on the 2D-only free and open-source "nv" driver, which Red Hat developer Matthew Garrett and others claim had been obfuscated.{{cite web

| url = http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=383465

| title = Debian bug tracker

| date = 17 August 2006

| access-date = 7 April 2013}} nouveau is licensed under the MIT License.

The name of the project comes from the French word nouveau, meaning new.{{cite web

| url = https://nouveau.freedesktop.org/wiki/

| title = nouveau Wiki

| date = 7 July 2009

| access-date = 23 September 2009}} It was suggested by the original author, Stéphane Marchesin, after his IRC client's French-language autocorrect system offered the word "nouveau" as a correction for the letters "nv".{{cite web

| url = https://lwn.net/Articles/269558/

| title = The state of Nouveau, part I

| work = LWN.net

| date = 15 February 2008

| access-date = 24 November 2009}}

Software architecture

File:Gallium3D example matrix.svg-style graphics device driver.]]

nouveau is a Gallium3D-style device driver and works on top of the Direct Rendering Infrastructure (DRI). It is composed of the two Kernel-components DRM & KMS driver, and the user-space components libDRM, and Mesa 3D.

nouveau intends to support all Nvidia microarchitectures: Tesla, Fermi, Kepler, Maxwell, in Version 1.0.13 support of Pascal and in Version 1.0.15 support of Volta. Version 1.0.16 adds support for Turing.

=Re-clocking=

For technical reasons Nvidia GPUs all boot with a low frequency (called "clock"). The device driver has to set a higher frequency after booting. Due to lack of documentation of GPU, nouveau lacked this capability from the beginning on. The result was/is a major loss in performance, as proven by benchmarks which compared the performance of Nvidia proprietary device driver with nouveau's.{{cite web |url=https://www.phoronix.com/scan.php?page=article&item=nouveau_nvidia_win81&num=1 |title=Nouveau vs. NVIDIA proprietary Linux vs. NVIDIA Windows 8.1 |date=2013-10-31 |work=Phoronix}} In June 2014, a breakthrough was finally achieved and initial re-clocking support was added to nouveau.{{cite web |url=https://www.phoronix.com/scan.php?page=news_item&px=MTY5Mjg |title=Nouveau Re-Clocking Details Discussed Further |date=2014-05-17 |work=Phoronix}}{{cite web |url=https://www.phoronix.com/scan.php?page=article&item=linux316_nouveau_clocks&num=1 |title=Nouveau Re-Clocking Is Way Faster |date=2014-06-20 |work=Phoronix}}{{cite web |url=https://nouveau.freedesktop.org/wiki/PowerManagement/ |title=Nouveau PowerManagement documentation |work=freedesktop.org}} With Version 1.0.14 Pascal support is at the level of Maxwell 2.{{cite web|url=https://cgit.freedesktop.org/nouveau/xf86-video-nouveau/commit/?id=e472b47d15634a864c8c981ed588d882aceaf26b |title=nouveau/xf86-video-nouveau - Nouveau Xorg driver for NVIDIA chips |publisher=cgit.freedesktop.org |access-date=2017-05-06}} With version 1.0.15 there is a patch for GTX 970 with 4GB and accelerations of Pascal to Maxwell 2 Level.

=Tools=

File:Renouveau-screenshot-on-debian-with-kde.png of REnouveau in action (REnouveau is the blue window in the top left corner)]]

Unlike AMD, Nvidia provides no documentation about their GPUs. The developers of nouveau have been forced to use clean-room reverse engineering to obtain the necessary data to enable them to write nouveau. The project uses several custom-made programs for its reverse engineering, such as MmioTrace (Memory Mapped I/O Trace),{{cite web

| url = https://nouveau.freedesktop.org/wiki/MmioTrace

| title = MmioTrace (Memory Mapped I/O Trace)

| publisher = nouveau Wiki}} REnouveau and Valgrind MMT.{{cite web

| url = https://nouveau.freedesktop.org/wiki/Valgrind-mmt

| title = Valgrind-mmt

| publisher = nouveau Wiki}}

==REnouveau==

REnouveau (Reverse Engineering for nouveau){{cite web

| url = https://nouveau.freedesktop.org/wiki/REnouveau

| title = REnouveau (Reverse Engineering for nouveau)

| publisher = nouveau Wiki}} is a program licensed under the GNU GPL (using SDL) that collects data for most of nouveau's reverse engineering work. Users with the proprietary Nvidia drivers can help the development of nouveau by providing information about the hardware of their Nvidia cards through REnouveau. REnouveau works by copying the current graphics card MMIO register space, drawing some graphics and taking another copy of the MMIO, and outputting the difference to a text file. It runs about six dozen different tests which the user of the computer then makes a tar.bz2 archive of and submits by e-mail, after which it is automatically transferred to the project's FTP servers for the developers to analyze.

Currently REnouveau has been mostly superseded by Valgrind-MMT.{{cn|date=May 2022}}

Supported interfaces

Only the kernel has direct access to the hardware, including the graphics card. End-user software accesses it through various interfaces, that are specific to the task. nouveau is being written as a Gallium3D-type of device driver, which means that it shares large amounts of code with other Gallium3D drivers. Most of this shared core is being mainlined in Mesa 3D and then distributed as such by the various Linux distributions.

=Rendering APIs=

Mesa 3D and the drivers it includes, supports multiple rendering interfaces, all designed to give user-space programs, such as e.g. video games or CAD software, access to the correspondent SIP blocks.

==Direct3D==

A free and open-source implementation of Direct3D version 9 has been mainlined into Mesa 3D. It can be used with nouveau;{{citation needed|date=June 2014}} however, since any software that is using Direct3D is programmed for Windows this software can only be used together with Wine on Linux.

== OpenGL ==

File:Linux kernel and OpenGL video games.svg for processing. The rendered results are not sent back to main memory. Instead they are stored in a framebuffer. The content of the framebuffer is subsequently sent to the display controller.]]

The rendering interface OpenGL is being developed by the Khronos Group. Implementations of this API are part of Nvidia's drivers and AMD's proprietary "Catalyst". Another implementation is being written by free software enthusiasts, such as Brian Paul or Intel and coordinated in Mesa 3D. Being a Gallium3D-type of driver, nouveau needs only minor adaptations to work with this implementation.

== Vulkan ==

{{As of|2023|12}}, Nouveau has some Vulkan API support through the experimental NVK driver.{{cite web|title=Collabora - NVK has landed|url=https://www.collabora.com/news-and-blog/news-and-events/nvk-has-landed.html}}

=Video acceleration=

Mesa 3D supports multiple interfaces, all designed to give user-space programs, such as e.g. GStreamer or HandBrake, access to the correspondent SIP blocks. It is also possible to use the IC designed for rendering calculations for this purpose, though this approach consumes much more electrical power compared to utilizing the PureVideo SIP block.

nouveau supports PureVideo and provides access to it through VDPAU and partly through XvMC.{{cite web |url=https://nouveau.freedesktop.org/wiki/VideoAcceleration/ |title=Nouveau Video Acceleration |work=freedesktop.org}}

nouveau does not support Nvidia NVENC.

=Computing APIs=

==OpenCL==

In Mesa GalliumCompute is also the main project for Nvidia, but only AMD part is near beta for OpenCL 1.0, 1.1, and 1.2.{{cite web|url=https://dri.freedesktop.org/wiki/GalliumCompute/ |title=GalliumCompute |publisher=Dri.freedesktop.org |access-date=2017-05-06}}

==CUDA==

nouveau does not support CUDA.

With the project Coriander, conversion of CUDA Code in OpenCL 1.2 is possible.{{Cite web|url=https://github.com/hughperkins/coriander|title = Coriander|website = GitHub|date = 15 November 2021}}

= GPU System processor =

==Nvidia FALCON==

Around the year 2006 Nvidia introduced FALCON (FAst Logic CONtroller) to their GPUs.

== NV-RISCV ==

At the 4th RISC-V Workshop in July 2016 Nvidia employees introduced their plans to replace FALCON with a new proprietary custom design based on the RISC-V instruction set.{{cite web |url=https://riscv.org/wp-content/uploads/2016/07/Tue1100_Nvidia_RISCV_Story_V2.pdf |title=Nvidia RISC-V story |date=July 2016}}

History

File:Gallium3D vs DRI graphics driver model.svg-style graphics device driver. Both types share a lot of free and open-source code.]]

nouveau was started in 2005 by Stéphane Marchesin as a series of patches upon the "nv" driver,{{cite web|last1=Peres|first1=Martin|last2=Stach|first2=Lucas|title=Nouveau Recap, on-going and future work|url=http://phd.mupuf.org/files/fosdem2012_slides.pdf|access-date=1 September 2014}} and officially announced in February 2006 at a FOSDEM event.{{cite web|url=https://lwn.net/Articles/269558/|title=The state of Nouveau, part I|publisher=LWN.net|access-date=1 September 2014}} The first live demo of nouveau was at Linux.conf.au 2007. In 2010 nouveau was accepted in the 2.6.33 version of Linux kernel as an experimental driver.{{cite web|url=https://www.phoronix.com/scan.php?page=news_item&px=Nzc5NQ|title=Nouveau To Go Into Linux 2.6.33 Kernel!|publisher=Phoronix|date=11 December 2009}} On 26 March 2012, the nouveau driver was marked as stable and promoted from the staging area of Linux 3.4.{{cite web|url=https://lwn.net/Articles/488338/|title=The Nouveau driver graduates from staging|author=Jonathan Corbet|work=LWN.net|date=23 March 2012|author-link=Jonathan Corbet}}{{cite web|last1=Peres|first1=Martin|title=Nouveau XDC 2013 slides|url=http://www.x.org/wiki/Events/XDC2013/XDC2013MartinPeresNouveauUpdate/slides.pdf|website=X.Org|access-date=1 September 2014}} nouveau gained a major internal architecture overhaul in Linux 3.7.

nouveau originally used the Direct Rendering Infrastructure (DRI) of Mesa 3D for rendering 3D computer graphics, which allows to accelerate 3D drawing using the graphics processing unit (GPU) directly from the 3D application; but in February 2008 the work on DRI support ceased and moved on to the new Gallium3D.{{cite web

| url = https://lwn.net/Articles/270830/

| title = The state of Nouveau, part 2

| publisher = LWN.net

| date = 26 February 2008

| access-date = 7 March 2008}}{{cite web

| url = http://nouveau.freedesktop.org/wiki/Nouveau_Companion_36

| title = Nouveau Companion 36 - The irregular Nouveau-Development companion

| date = 7 March 2008

| access-date = 7 March 2008

| url-status = dead

| archive-url = https://web.archive.org/web/20120208005436/http://nouveau.freedesktop.org/wiki/Nouveau_Companion_36

| archive-date = 8 February 2012}}

On 23 September 2013,{{cite web |url=http://lists.freedesktop.org/archives/nouveau/2013-September/014480.html |title=Nvidia offers to release public documentation on certain aspects of their GPUs |date=2013-09-23 |access-date=2013-09-24}} Nvidia publicly announced that they would release some documentation about their GPUs with the intent to address areas that impact the out-of-the-box usability of Nvidia GPUs with nouveau.

As of 31 January 2014, Nvidia's Alexandre Courbot committed an extensive patch set which add initial support for the GK20A (Tegra K1) to nouveau.{{cite web |url=http://lists.freedesktop.org/archives/dri-devel/2014-January/053028.html |title=drm/nouveau: initial support for GK20A (Tegra K1) |date=2014-01-31}}

As of 9 July 2016, Red Hat employee Ben Skeggs committed a patch which adds support for the Pascal-based GP104 chip found on GeForce GTX 1070 and GeForce GTX 1080-branded graphics cards to the Linux kernel.{{cite web |url=https://github.com/skeggsb/nouveau/commit/a6443fc35556a740b29fde0d641261b2684c89dc |title=drm/nouveau: initial support for GP104 (Pascal) |website=GitHub |date=2016-07-09}}

Status of 2016 and Future work were introduced in XDC2016.{{cite web|url=https://www.x.org/wiki/Events/XDC2016/Program/nouveau_update.pdf |title=Status Report |publisher=x.org |date=September 2016 |access-date=2017-05-06}} Status of new efforts in OpenCL are shown on FOSDEM.{{cite web|url=https://archive.fosdem.org/2016/schedule/event/nv_compute/attachments/slides/1145/export/events/attachments/nv_compute/slides/1145/FOSDEM_2016__nv_graphics.pdf |title=Compute Support for Nouveau, Creating a LLVM to TGSI and a SPIR-V to NV50 IR backend |date=2016 |access-date=2017-05-06}}

In 2019 Nvidia made some documentation about their Kepler, Maxwell, Pascal and Volta chipsets available.https://github.com/nvidia/open-gpu-doc NVIDIA open-gpu-doc repositoryhttps://nvidia.github.io/open-gpu-doc/ NVidia open-gpu-doc Webpage In 2024, lead engineer Ben Skeggs is hired by Nvidia, to continue working on the open source driver.{{Cite web |title=Former Nouveau Lead Developer Joins NVIDIA, Continues Working On Open-Source Driver |url=https://www.phoronix.com/news/Ben-Skeggs-Joins-NVIDIA |access-date=2024-09-16 |website=www.phoronix.com |language=en}}

Adoption

File:Linux Graphics Stack 2013.svg graphics stack: DRM, KMS driver, & libDRM, Mesa 3D. Display servers are a component of the windowing system and not required for playing video games.]]

The nouveau driver and its 3D counterpart in Mesa have been used as the default open-source driver for Nvidia cards in many Linux distributions, including Fedora 11,{{cite web

| url = https://www.phoronix.com/scan.php?page=news_item&px=NzE3OA

| title = Testing Out The Nouveau Driver On Fedora 11

| author = Michael Larabel

| date = 29 March 2009

| publisher = Phoronix

| author-link = Michael Larabel}}{{cite web |url=https://apps.fedoraproject.org/packages/mesa/overview/ |title=Package mesa |publisher=Apps.fedoraproject.org |access-date=2017-05-06 |archive-date=2020-02-27 |archive-url=https://web.archive.org/web/20200227074234/https://apps.fedoraproject.org/packages/mesa/overview |url-status=dead }} openSUSE 11.3,{{cite web

| url = http://en.opensuse.org/Product_highlights#Base_System

| title = Product highlights for openSUSE 11.3 version

| publisher = openSUSE

| access-date = 29 December 2010}} Ubuntu 10.04,{{cite web

| title = Bug #454821: Bugs: "xserver-xorg-video-nv" package: Ubuntu}}{{cite web|url=http://packages.ubuntu.com/search?suite=default§ion=all&arch=any&keywords=libgl1-mesa-dri&searchon=names |title=Search results for "libgl1-mesa-dri" |publisher=Ubuntu Packages |access-date=2017-05-06}} and Debian.{{cite web

| url = http://packages.debian.org/search?keywords=nouveau&searchon=names&suite=stable§ion=all

| title = Nouveau nVidia drivers now available in Debian experimental

| author = Debian

| date = 11 February 2011

| author-link = Debian}}

Compiz recommended in 2010 nouveau over the Nvidia proprietary driver.{{cite web

| url = http://smspillaz.wordpress.com/2010/05/21/beware-the-benchmarks/

| title = Beware the benchmarks.

| author = Sam Spilsbury, head maintainer of Compiz

| date = 21 May 2010

| quote = Our recommendation: Use nouveau.}}

In June 2014, Codethink reported to run Wayland-based Weston compositor with Linux kernel 3.15, making use of EGL and a "100% open-source graphics driver stack" on a Tegra K1.{{cite web |url=https://www.phoronix.com/scan.php?page=news_item&px=MTcxODc |title=Codethink Gets The NVIDIA Jetson TK1 Running With Linux 3.15, Wayland |date=2014-06-12 |work=Phoronix}}

In October 2016, NetBSD added experimental nouveau support in NetBSD 7.{{cite web |url=https://nouveau.freedesktop.org/wiki/NetBSD |title=nouveau/NetBSD |publisher=freedesktop.org |date=17 October 2016 |access-date=30 January 2016}}

See also

References

{{Reflist|30em}}