Free and open-source graphics device driver: Difference between revisions

Content deleted Content added
GreenC bot (talk | contribs)
Rescued 1 archive link. Wayback Medic 2.5
MOS:FIRSTABBReviation define-clarify before parenthetic WP:ABBR. WP:LINKs: update-standardize, needless underscores > spaces. WP:SLASH > WP:DASH.
 
(30 intermediate revisions by 19 users not shown)
Line 1:
{{Multiple issues|
{{Technical|date=November 2017}}
{{selfSelf-published|date=July 2021}}
}}
{{shortShort description|Software that controls computer-graphics hardware}}
 
[[File:Linux kernel and OpenGL video games.svg|thumb|300px|alt=Flowchart with Tux, the Linux penguin|Data and instructions are sent to the [[Graphicsgraphics processing unit|GPU]] (GPU) for processing. The rendered results are stored in a [[framebuffer]], whosewhich content is scanned by the [[display controller]] and sent to the screen.]]
A '''free and open-source graphics device driver''' is a [[software stack]] which controls computer-[[Graphics hardware|computer-graphics hardware]] and supports [[Rendering (computer graphics)|graphics-rendering]] [[application programming interfaceinterfaces ([[API]]s (APIs) and is released under a [[free and open-source software]] license. Graphics [[device driver]]s are written for specific hardware to work within a specific [[Kernel (operating system)|operating system kernel]] and to support a range of APIs used by applications to access the graphics hardware. They may also control output to the display if the [[display driver]] is part of the graphics hardware. Most free and open-source graphics device drivers are developed by the [[Mesa (computer graphics)|Mesa]] project. The driver is made up of a [[compiler]], a [[List of rendering APIs|rendering API]], and software which manages access to the graphics hardware.
 
Drivers without freely (and legally) -available [[source code]] are commonly known as ''binary drivers''. Binary drivers used in the context of [[operating systemssystem]]s that are prone to ongoing development and change (such as Linux) create problems for end users and [[Package (package management system)manager|package]] maintainers. These problems, which affect system stability, security and performance, are the main reason for the independent development of free and open-source drivers. When no [[technical documentation]] is available, an understanding of the underlying hardware is often gained by [[clean room design|clean-room reverse engineering]]. Based on this understanding, device drivers may be written and legally published under any [[software license]].
 
In rare cases, a manufacturer's driver source code is available on the Internet without a [[free license]]. This means that the code can be studied and altered for personal use, but the altered (and usually the original) source code cannot be freely distributed. Solutions to bugs in the driver cannot be easily shared in the form of modified versions of the driver. Therefore, the utility of such drivers is significantly reduced in comparison to free and open-source drivers.
Line 18:
[[File:Linux Graphics Stack 2013.svg|thumb|right|500px|alt=Flowchart; see caption|Illustration of the Linux graphics stack]]
 
There are objections to binary-only drivers based on copyright, security, reliability and development concerns. As part of a wider campaign against [[binary blob]]s, [[OpenBSD]] lead developer [[Theo de Raadt]] said that with a binary driver there is "no way to fix it when it breaks (and it will break)"; when a product which relies on binary drivers is declared to be [[end-of-life (product)|end-of-life]] by the manufacturer, it is effectively "broken forever."<ref name=opencon-2006>{{cite web|authorlast1=Theo de Raadt |first1=Theo |authorauthor1-link=Theo de Raadt|date=2006-12-03 |title=Open Documentation for Hardware|work=Presentation slides from OpenCON 2006|url=http://www.openbsd.org/papers/opencon06-docs/index.html|access-date=2007-02-01 }}</ref> The project has also stated that binary drivers<ref>{{cite web|url=https://stackoverflow.com/questions/8804204/what-does-binary-means-in-device-driver|title=What does "binary" means in device driver?|access-date=November 14, 2017}}</ref> "hide bugs and workarounds for bugs",<ref>{{cite web|url = http://www.openbsd.org/lyrics.html#39|title = 3.9: "Blob!"|access-date = 2007-02-12|publisher=OpenBSD}}</ref> an observation which has been somewhat vindicated by flaws found in binary drivers (including an [[Exploit (computer security)|exploit]]able [[Software bug|bug]] in Nvidia's 3D drivers discovered in October 2006 by [[Rapid7]]). It is speculated that the bug has existed since 2004; Nvidia havehas denied this, asserting that the issue was only communicated to them in July 2006 and the 2004 bug was a bug in X.Org (not in Nvidia's driver).<ref>{{cite web|url=http://Nvidia.custhelp.com/cgi-bin/Nvidia.cfg/php/enduser/std_adp.php?p_faqid=1971|title=Linux - How does the Rapid7 Advisory R7-0025 affect the NVIDIA Unix driver?}}</ref>
 
Binary drivers often do not work with current versions of open-source software, and almost neverrarely support development snapshots of open-source software; it is usually not directly possible for a developer to use Nvidia's or ATI's proprietary drivers with a development snapshot of an X server or a development snapshot of the Linux kernel. Features like [[kernel mode-setting]] cannot be added to binary drivers by anyone but the vendors, which prevents their inclusion if the vendor lacks capacity or interest.
 
In the [[Linux kernel]] development community, [[Linus Torvalds]] has made strong statements on the issue of binary-only modules: "I ''refuse'' to even consider tying my hands over some binary-only module ... I want people to know that when they use binary-only modules, it's ''their'' problem".<ref>{{cite web|url=https://lwn.net/1999/0211/a/lt-binary.html|title=a/lt-binary}}</ref> Another kernel developer, [[Greg Kroah-Hartman]], has said that a binary-only kernel module does not comply with the kernel's license (the [[GNU General Public License]]); it "just violates the GPL due to fun things like derivative works and linking and other stuff."<ref>{{cite web|url=http://www.kroah.com/log/linux/ols_2006_keynote.html|title=Myths, Lies, and Truths about the Linux kernel|first=Greg|last=Kroah-Hartman|publisher=linux kernel monkey log}}</ref> Writer and computer scientist [[Peter Gutmann (computer scientist)|Peter Gutmann]] has expressed concern that the [[digital rights management]] scheme in Microsoft's [[Windows Vista]] operating system may limit the availability of the documentation required to write open drivers, since it "requires that the operational details of the device be kept confidential."<ref name=vista-cost>{{cite journal |authorlast1=Gutmann |first1=Peter Gutmann|date=2006-12-26 |title=A Cost Analysis of Windows Vista Content Protection|url=http://www.cs.auckland.ac.nz/~pgut001/pubs/vista_cost.html#oss|access-date=2007-01-28 |authorauthor1-link=Peter Gutmann (computer scientist) }}</ref>
 
In the case of binary drivers, there are objections due to [[free software]] philosophy, software quality and [[computer insecurity|security]] concerns.<ref>[https://lwn.net/Articles/195351/ Linux Weekly News, Aug 14, 2006: ''X.org, distributors, and proprietary modules'']</ref> In 2006, [[Greg Kroah-Hartman]] concluded that:
 
<blockquote>"{{Blockquote|Closed source Linux kernel modules are illegal. That's it, it is very simple. I've had the misfortune of talking to a lot of different IP lawyers over the years about this topic, and every one that I've talked to all agree that there is no way that anyone can create a Linux kernel module, today, that can be closed source. It just violates the [[GNU General Public License|GPL]] due to fun things like [[derivative works]] and [[Linker (computing)|linking]]."<ref>{{cite web|url=http://www.kroah.com/log/linux/ols_2006_keynote.html|last1=Kroah-Hartman |first1=Greg|author1-link=Greg Kroah-Hartman|year=2006 |publisher=[[Linux Symposium]]|title=Myths, Lies, and Truths about the Linux kernel}}</ref>}}
<ref>{{cite web|url=http://www.kroah.com/log/linux/ols_2006_keynote.html|author=Greg Kroah-Hartman|publisher=[[Linux Symposium]]|title=Myths, Lies, and Truths about the Linux kernel|year=2006}}</ref></blockquote>
 
The Linux kernel has never maintained a stable in-kernel [[application binary interface]].<ref>{{cite web|url=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/stable_api_nonsense.txt |title=The Linux Kernel Driver Interface |access-date=2014-03-04 |url-status=dead |archive-url=https://archive.today/20131104101751/https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/stable_api_nonsense.txt |archive-date=2013-11-04 }}</ref> There are also concerns that proprietary drivers may contain [[Backdoor (computing)|backdoor]]s, like the one found in [[Samsung Galaxy]]-series modem drivers.<ref>{{cite web|url=http://redmine.replicant.us/projects/replicant/wiki/SamsungGalaxyBackdoor|title=SamsungGalaxyBackdoor|date=2014-02-04}}</ref>
 
=== {{anchor|From a hardware developer's perspective}}Hardware developer's view ===
Line 38 ⟶ 37:
The [[desktop computer]] market was long dominated by PC hardware using the [[x86]]/[[x86-64]] instruction set and GPUs available for the PC. With three major competitors (Nvidia, AMD and Intel). The main competing factor was the price of hardware and raw performance in 3D computer games, which is greatly affected by the efficient translation of API calls into GPU opcodes. The display driver and the [[video decoder]] are inherent parts of the graphics card: hardware designed to assist in the calculations necessary for the decoding of video streams. As the market for PC hardware has dwindled, it seems unlikely that new competitors will enter this market and it is unclear how much more knowledge one company could gain by seeing the source code of other companies' drivers.
 
The mobile sector presents a different situation. The functional blocks (the [[application-specific integrated circuit]] display driver, 2-2D and 3D acceleration and video decoding and encoding) are separate [[semiconductor intellectual property]] (SIP) blocks on the chip, since hardware devices vary substantially; some [[portable media player]]s require a display driver that accelerates video decoding, but dodoes not require 3D acceleration. The development goal is not only raw 3D performance, but system integration, power consumption and 2D capabilities. There is also an approach which abandons the traditional method ([[Analog television|Vsync]]) of updating the display and makes better use of [[sample and hold]] technology to lower power consumption.
 
During the second quarter of 2013 79.3 percent% of [[smartphone]]s sold worldwide were running a version of [[Android (operating system)|Android]],<ref>{{cite web | url = https://techcrunch.com/2013/08/07/android-nears-80-market-share-in-global-smartphone-shipments-as-ios-and-blackberry-share-slides-per-idc/ | title = Android Nears 80% Market Share In Global Smartphone Shipments, As iOS And BlackBerry Share Slides, Per IDC| date=7 August 2013}}</ref> and the Linux kernel dominates smartphones. Hardware developers have an incentive to deliver Linux drivers for their hardware but, due to competition, no incentive to make these drivers free and open-source. Additional problems are the Android-specific augmentations to the Linux kernel which have not been accepted in [[BitTorrent (software)|mainline]], such as the [[Atomic Display Framework]] (ADF).<ref>{{cite web |url=https://lwn.net/Articles/565422/ |title=Atomic Display Framework}}</ref> ADF is a feature of 3.10 AOSP kernels which provides a [[Direct Rendering Manager#DMA Buffer Sharing and PRIME|dma-buf]]-centric framework between Android's hwcomposer [[HAL (software)|HAL]] and the kernel driver. ADF significantly overlaps with the [[Direct Rendering Manager|DRM]]-[[Mode setting|KMS]] framework. ADF has not been accepted into mainline, but a different set of solutions addressing the same problems (known as [[atomic mode setting]]) is under development. Projects such as [[Hybris (software)|libhybris]] harness Android device drivers to run on Linux platforms other than Android.
 
== {{anchor|Performance comparison}}Performance comparisons ==
[[Image:Xf86 glxgears.png|thumb|upright=0.50|alt=Three gears: red, blue and green|Glxgears is not well-suited for [[benchmarking]].<ref>{{cite web |url=http://www.free3d.org/faq |title=free3d.org FAQ |quote=Is glxgears an accurate measure of 3D performance? No, it sucks in multiple ways.}}</ref>]]
[[Phoronix]], which compares free drivers, is a source for real-world testing:
* 19 March 2011<ref>{{cite web|url=https://www.phoronix.com/scan.php?page=news_item&px=OTIzMg|title=On Low-End GPUs, Nouveau Speeds Past The NVIDIA Driver|access-date=15 November 2017}}</ref>
* 31 March 2013<ref>{{cite web|url=https://www.phoronix.com/scan.php?page=article&item=nouveau_2639_flip&num=1|title=Nouveau's OpenGL Performance Approaches The NVIDIA Driver|access-date=15 November 2017}}</ref>
* A 29 April 2013 comparison of FOSS and proprietary drivers<ref>{{cite web|url=https://www.phoronix.com/scan.php?page=article&item=amd_nvidia_15way&num=1|title=15-Way Open vs. Closed Source NVIDIA/AMD Linux GPU Comparison|access-date=15 November 2017}}</ref>
* A 27 October 2013 comparison of proprietary drivers on Windows 8.1 and Linux<ref>{{cite web|url=https://www.phoronix.com/scan.php?page=article&item=gpus_windows81_ubuntu&num=1|title=Ubuntu Linux Gaming Performance Mostly On Par With Windows 8.1|access-date=15 November 2017}}</ref>
* A 25 January 2014 comparison of FOSS drivers on Linux<ref>{{cite web|url=https://www.phoronix.com/scan.php?page=article&item=linux_2014_opengpu&num=1|title=25-Way Open-Source Linux Graphics Card Comparison|access-date=15 November 2017}}</ref>
* A 27 January 2014 comparison of proprietary drivers on Linux<ref>{{cite web|url=https://www.phoronix.com/scan.php?page=article&item=linux_gpus_2014start&num=1|title=24-Way AMD Radeon vs. NVIDIA GeForce Linux Graphics Card Comparison|access-date=15 November 2017}}</ref>
* A 19 March 2014 comparison of [[Ubuntu (operating system)|Ubuntu]] with the Free and open-source graphics device driver distributed as part of [[Mesa 3D]], which outperforms [[Mac OS X]] 10.9.2 when playing [[OpenGL]]-based [[Xonotic]] on a 2013 [[MacBook Air]].<ref>{{cite web |url=https://www.phoronix.com/scan.php?page=article&item=ubuntu_1404_mba2013gl&num=3 |title=Ubuntu 14.04 outperforms OS X 10.9 on 2013 MacBook Air |publisher=[[Phoronix]] |date=2014-03-19 |access-date=2014-03-19}}</ref>
* A January 2017 comparison indicated a difference in power between the Mesa Nouveau and NVidia driver and Kepler and Maxwell. Reclocking is needed for Maxwell in Nouveau to increase level to Kepler. A gap to Mesa exists by 30 to 50% in basic efficiency of driver against Nvidia in all chips.<ref>{{cite web|url=http://www.phoronix.com/scan.php?page=article&item=nouveau-maxwell-comp&num=1|title=Nouveau Maxwell: Mesa 17.0 + Linux 4.10 vs. NVIDIA's Linux Driver|access-date=15 November 2017}}</ref>
* A February 2017 comparison indicated that Mesa 17.1dev was equal to or better than the AMD GPU driver 16.60 in OpenGL and 20-30 percent lower in [[Vulkan (API)|Vulkan]].<ref>{{cite web|url=http://www.phoronix.com/scan.php?page=article&item=radv-mesa171-1year&num=1|title=RADV Mesa 17.1-dev vs. AMDGPU-PRO 16.60 Performance|access-date=15 November 2017}}</ref>
* A March 2017 comparison indicated improvements in Mesa for RadeonSI between versions 11.1 and 17.1.<ref>{{cite web|url=http://www.phoronix.com/scan.php?page=article&item=radeonsi-111-171&num=1|title=How The RadeonSI OpenGL Performance Has Evolved From Mesa 11.1 To Mesa 17.1 Git|access-date=15 November 2017}}</ref>
* A June 2017 Comparison Windows 10 Radeon Software vs. Ubuntu 17.04 + Linux 4.12 + Mesa 17.2-dev -> Result mesa radeonsi at same level <ref>{{cite web|url=https://www.phoronix.com/scan.php?page=article&item=radeonsi-win10-fury&num=1|title=Windows 10 Radeon Software vs. Ubuntu 17.04 + Linux 4.12 + Mesa 17.2-dev - Phoronix|website=www.phoronix.com}}</ref>
* A October 2017 Comparison RadeonSI/RADV Mesa 17.3 + AMDGPU DC vs. the proprietary NVIDIA 387.12 Linux Gaming Performance -> Result: Nvidia clear in lead <ref>{{cite web|url=https://www.phoronix.com/scan.php?page=article&item=mesa173-dc-nv&num=1|title=RadeonSI/RADV Mesa 17.3 + AMDGPU DC vs. NVIDIA 387.12 Linux Gaming Performance - Phoronix|website=www.phoronix.com}}</ref>
* 2018-02: Comparison Mesa 12 to 18 with AMD R580 and R9 Fury for OpenGL and Vulkan Tests <ref>{{cite web|url=https://www.phoronix.com/scan.php?page=article&item=mesa-120-180&num=1|title=Mesa 12.0 To Mesa 18.0 Benchmarks Show The OpenGL/Vulkan Radeon Evolution - Phoronix|website=www.phoronix.com}}</ref>
* 2018-06: Comparison Mesa 18.2 versus Nvidia Driver 396 with Nvidia GeForce Cards 680 and higher <ref>{{Cite web|url=https://www.phoronix.com/scan.php?page=article&item=nouveau-summer-2018&num=1|title = The NVIDIA vs. Open-Source Nouveau Linux Driver Benchmarks for Summer 2018}}</ref>
* 2018-07: Comparison Mesa RadeonSI 18.0, 18.1, 18.2 and RadV with Radeon RX Cards <ref>{{Cite web|url=https://www.phoronix.com/scan.php?page=article&item=mesa182-4-july&num=1|title=Mesa 18.0/18.1/18.2 RadeonSI + RADV Benchmark Comparison with Radeon RX 580 / R9 Fury / RX Vega 64}}</ref>
* 2018-10: Comparison AMD Closed Driver 18.40, AMDVLK and Mesa RadeonSI 18.2, 18.3 <ref>{{Cite web|url=https://www.phoronix.com/scan.php?page=article&item=radeon-software-1840&num=1|title=Radeon Software 18.40 vs. Mesa vs. AMDVLK Benchmarks with Radeon RX Vega}}</ref>
* 2018-11: Comparison 25 AMD and Nvidia Cards with Mesa 19.0dev and NVIDIA Driver 415 <ref>{{Cite web|url=https://www.phoronix.com/scan.php?page=article&item=gcn10-tww2-radv&num=1|title = AMDGPU+RADV Linux Gaming on GCN 1.0/1.1, 25-Way Warhammer II GPU Benchmarks}}</ref>
* 2019-01: Comparison Linux 5.0 + Mesa 19.0dev + AMD RX Cards and NVIDIA GeForce Driver 415 with Nvidia Cards <ref>{{Cite web|url=https://www.phoronix.com/scan.php?page=article&item=gaming-eojan-2019&num=1|title=NVIDIA vs. Radeon Linux 5.0 + Mesa 19.0 Drivers - 14-Way Gaming GPU Comparison}}</ref>
* 2019-01: Comparison Mesa 18.2, 18.3, 19.0dev RadeonSI/RADV with AMD RX Cards <ref>{{Cite web|url=https://www.phoronix.com/scan.php?page=article&item=mesa190-rad-jan&num=1|title = Mesa 18.2 vs. 18.3 vs. 19.0 January Benchmarks for RadeonSI/RADV Review}}</ref>
* 2019-05: Comparison Mesa 19.2 AMD Polaris, Vega to Nvidia <ref>{{Cite web|url=https://www.phoronix.com/scan.php?page=article&item=linux52-mesa192-high&num=1|title=Linux 5.2 + Mesa 19.2 Performance with Polaris/Vega/Vega20 vs. NVIDIA on Ubuntu 19.04}}</ref>
* 2019-12: Comparison Mesa 18.2.8 to 20.0dev for RadeonSI with Radeon RX 580 and RX Vega 64 <ref>{{Cite web|url=https://www.phoronix.com/scan.php?page=article&item=radv-radeonsi-19&num=1|title = The Performance Advancements of the Radeon Open-Source OpenGL/Vulkan Drivers over 2019}}</ref>
It is uncommon for [[List of video game magazines|video game magazines]] to report benchmark testing on Linux. Benchmarks on Phoronix are limited in scope, primarily testing games which are available on Linux and support automated benchmarking.<ref>{{cite web |url=http://phoronix.com/scan.php?page=news_item&px=Why-Test-Automation |title=The Importance Of Benchmark Automation & Why I Hate Running Linux Games Manually |publisher=[[Phoronix]] |date=2016-06-04 |access-date=2016-06-04}}</ref>
 
== Software architecture ==
[[File:Gallium3D vs DRI graphics driver model.svg|thumb|alt=Illustration of differences between Gallium3D and Direct Rendering Infrastructure models|Although Mesa ([[Direct Rendering Infrastructure|DRI]]) and [[Gallium3D]] have different driver models, but they share [[free and open-source software|free and open-source]] code.]]
[[File:Gallium3D example matrix.svg|thumb|alt=Driver example matrix|An example matrix of the Gallium3D driver model. With the introduction of the Gallium3D tracker and WinSys interfaces, 18 modules are required instead of 36. Each WinSys module can work with each Gallium3D device driver module and each State Tracker module.]]
Free and open-source drivers are primarily developed on and for [[Linux]] by Linux kernel developers, third-party programming enthusiasts and employees of companies such as [[Advanced Micro Devices]]. Each driver has five parts:
Line 75 ⟶ 48:
# A Linux kernel component [[KMS driver]] (the [[display controller]] driver)
# A libDRM user-space component (a wrapper library for DRM system calls, which should only be used by Mesa 3D)
# A [[Mesa 3D]] user-space component. This component is hardware-specific; it is executed on the CPU and translates OpenGL commands, for example, into machine code for the GPU. Because the device driver is split, [[Marshalling (computer science)|marshalling]] is possible. Mesa 3D is the only free and open-source implementation of [[OpenGL]], [[OpenGL ES]], [[OpenVG]], [[GLX]], [[EGL (API)|EGL]] and [[OpenCL]]. In July 2014, most of the components conformed to [[Gallium3D]] specifications. A fully functional State Tracker for [[Direct3D]] version 9 is written in [[C (programming language)|C]], and an unmaintained tracker for Direct3D versions 10 and 11 is written in [[C++]].<ref>{{cite web|url=http://lists.freedesktop.org/archives/mesa-dev/2013-July/041900.html|title=Direct3D 9 state tracker|date=16 July 2013 |access-date=15 November 2017|archive-url=https://web.archive.org/web/20130720011019/https://lists.freedesktop.org/archives/mesa-dev/2013-July/041900.html|archive-date=20 July 2013|url-status=live}}</ref> [[Wine (software)|Wine]] has Direct3D version 9. Another Wine component translates Direct3D calls into OpenGL calls, working with OpenGL.
# [[Device Dependent X]] (DDX), another 2D graphics device driver for [[X.Org Server]]
 
Line 95 ⟶ 68:
{{See also|List of AMD graphics processing units|List of AMD accelerated processing unit microprocessors}}
[[File:Linux AMD graphics stack.svg|thumb|alt=Diagram|Linux device drivers for AMD hardware in August 2016]]
[[File:Glxinfo with glxgears screenshot.png|thumb|Screenshot of <code>glxinfo</code> showing OpenGL information with <code>glxgears</code> running on a Linux system with [[AMDgpu (Linux kernel module)|AMDGPU]] kernel module]]
[[Advanced Micro Devices|AMD's]] proprietary driver, [[AMD Catalyst]] for their [[Radeon]], is available for Microsoft Windows and Linux (formerly fglrx). A current version can be downloaded from AMD's site, and some Linux distributions contain it in their repositories. It is in the process of being replaced with an AMDGPU-PRO hybrid driver combining the open-source kernel, X and Mesa multimedia drivers with closed-source OpenGL, OpenCL and Vulkan drivers derived from Catalyst.
 
Line 103 ⟶ 77:
*R200 supports the [[Radeon R200|R200]] series.
*R300g supports pre-[[unified shader model]] microarchitectures: [[Radeon R300|R300]], [[Radeon R400|R400]] and [[Radeon R500|R500]].
*R600g supports all [[TeraScale (microarchitecture)|TeraScale (VLIW5/4)]]-based GPUs: [[Radeon R600|R600]], [[Radeon R700|R700]], [[Radeon HD 5000 Seriesseries|HD 5000 (Evergreen)]] and [[Radeon HD 6000 Seriesseries|HD 6000 (Northern Islands)]].
*Radeonsi supports all [[Graphics Core Next]]-based GPUs: [[Radeon HD 7000 Seriesseries|HD 7000]], [[Radeon HD 8000 Seriesseries|HD 8000]] and [[AMD Radeon Rx 200 Seriesseries|Rx 200]] (Southern Islands, Sea Islands and Volcanic Islands).
 
An up-to-date feature matrix is available,<ref>{{cite web|url=http://xorg.freedesktop.org/wiki/RadeonFeature|title=Radeon Feature|access-date=15 November 2017}}</ref> and there is support for [[Video Coding Engine]]<ref name="VCE">{{cite web |url=http://lists.freedesktop.org/archives/mesa-dev/2014-February/053203.html |title=initial VCE support in Linux kernel and in the Mesa driver|date=4 February 2014}}</ref> and [[Unified Video Decoder]].<ref>{{cite web |url=http://lists.freedesktop.org/archives/dri-devel/2014-February/054159.html |title=drm-next-3.15 Feb 18|date=18 February 2014}}</ref><ref>{{cite web |url=http://lists.freedesktop.org/archives/dri-devel/2014-March/054999.html |title=drm-next-3.15 Mar 04|date=4 March 2014}}</ref> The free and open-source Radeon graphics device drivers are not reverse-engineered, but are based on documentation released by AMD without the requirement to sign a [[non-disclosure agreement]] (NDA).<ref>{{cite web |url=http://developer.amd.com/resources/documentation-articles/developer-guides-manuals/ |title=AMD Developer Guides |url-status=dead |archive-url=https://web.archive.org/web/20130716090237/http://developer.amd.com/resources/documentation-articles/developer-guides-manuals/ |archive-date=2013-07-16 }}</ref><ref>{{cite web |url=http://www.x.org/docs/AMD/ |title=Documentation provided by AMD}}</ref><ref>{{cite web |url=http://www.botchco.com/agd5f/?p=58 |title=AMD 3D Documentation list |url-status=dead |archive-url=https://web.archive.org/web/20131007021913/http://www.botchco.com/agd5f/?p=58 |archive-date=2013-10-07 }}</ref> Documentation began to be gradually released in 2007.<ref>{{cite web |url = https://lwn.net/Articles/248227/ | title = AMD to open up graphics specs |publisher=[[LWN.net]] |date=2007-09-05 |access-date=2014-07-15}}</ref><ref>{{cite web |url=https://www.phoronix.com/scan.php?page=news_item&px=NjA0Ng |title=AMD: GPU Specifications Without NDAs! |date=2007-09-10 |access-date=2014-07-15}}</ref><ref>{{cite web|url=http://airlied.livejournal.com/50613.html |title=AMD hand me specs on a CD |authorlast1=David Airlie |first1=David |date=2007-09-13 |access-date=2014-07-15 |url-status=dead |archive-url=https://web.archive.org/web/20121022064328/http://airlied.livejournal.com/50613.html |archive-date=2012-10-22 }}</ref>
 
In addition to providing the necessary documentation, AMD employees contribute code to support their hardware and features.<ref name="VCE" />
Line 118 ⟶ 92:
The release of the new AMDGPU kernel module and stack was announced on the dri-devel mailing list in April 2015.<ref>{{cite web|url=http://lists.freedesktop.org/archives/dri-devel/2015-April/081501.html |title=Initial AMDGPU driver release |date=2015-04-20 |access-date=2016-04-26}}</ref> Although AMDGPU only officially supports [[Graphics Core Next|''GCN'']] 1.2 and later graphics cards,<ref>{{cite web|title=AMD Moves Forward With Unified Linux Driver Strategy, New Kernel Driver|url=https://www.phoronix.com/scan.php?page=article&item=amd_bordeaux_strategy&num=1|website=Phoronix}}</ref> experimental support for GCN 1.0 and 1.1 graphics cards (which are only officially supported by the Radeon driver) may be enabled via a kernel parameter.<ref>{{cite web|title=AMDGPU driver documentation|url=https://dri.freedesktop.org/docs/drm/gpu/amdgpu.html|website=Freedesktop.org}}</ref><ref>{{cite web|title=AMD Unleashes Initial AMDGPU Driver Support For GCN 1.0 / Southern Islands GPUs|url=https://www.phoronix.com/scan.php?page=news_item&px=AMDGPU-SI-Experimental-Code|website=Phoronix}}</ref> A separate [[Direct Rendering Manager|libdrm]], libdrm-amdgpu, has been included since libdrm 2.4.63.<ref>{{cite web |url=https://lwn.net/Articles/654542/ |title=libdrm 2.4.63 |date=2015-08-14}}</ref>
 
The radeonsi 3D code mentioned in the previousprior Radeon paragraph is also used with amdgpu; the 3D driver has back ends for both radeon and amdgpu.
 
=== {{anchor|History of nouveau}}Nvidia ===
Line 125 ⟶ 99:
[[Nvidia]]'s proprietary driver, [[Nvidia GeForce driver]] for [[GeForce]], is available for [[Windows]] [[x86]]/[[x86-64]], [[Linux]] x86/x86-64/[[ARM architecture|ARM]], [[Mac OS X Leopard|OS X 10.5]] and later, [[Solaris (operating system)|Solaris]] x86/x86-64 and [[FreeBSD]] x86/x86-64. A current version can be downloaded from the Internet, and some Linux distributions contain it in their repositories. The 4 October 2013 [[Software release life cycle|beta]] Nvidia GeForce driver 331.13 supports the [[EGL (API)|EGL]] interface, enabling support for [[Wayland (display server protocol)|Wayland]] in conjunction with this driver.<ref>{{cite web|url=http://www.nvidia.com/object/linux-display-amd64-331.13-driver.html |title=Support for EGL on 32-bit platforms |date=2013-10-04 |access-date=2014-07-15}}</ref><ref>{{cite web |url=https://www.archlinux.org/packages/multilib/x86_64/lib32-nvidia-utils/files/ |title=lib32-nvidia-utils 340.24-1 File List |date=2014-07-15}}</ref>
 
Nvidia's free and open-source driver is named nv.<ref>{{cite web|url=http://xorg.freedesktop.org/wiki/nv|title=X.org nv driver page|date=2013-05-20}}</ref> It is limited (supporting only 2D acceleration), and [[Matthew Garrett]], [[Dirk Hohndel]] and others have called its source code confusing.<ref>{{cite web |url=http://cvsweb.xfree86.org/cvsweb/xc/programs/Xserver/hw/xfree86/vga256/drivers/nv/Attic/README.RIVATNT.diff?r1=1.1.2.2&r2=1.1.2.3&hideattic=0&only_with_tag=xf-3_3_3 |title=Patch by Dirk Hohndel |date=1998-11-18 |access-date=2014-07-15 |quote=... opposed to such obfuscated code. We do not regard this as free software according to our standards |url-status=dead |archive-url=https://web.archive.org/web/20140201173132/http://cvsweb.xfree86.org/cvsweb/xc/programs/Xserver/hw/xfree86/vga256/drivers/nv/Attic/README.RIVATNT.diff?r1=1.1.2.2&r2=1.1.2.3&hideattic=0&only_with_tag=xf-3_3_3 |archive-date=2014-02-01 }}</ref><ref>{{cite web |url=http://phd.mupuf.org/files/xdc2011_slides.pdf |title=Nouveau: The community & past, current and future developments |date=2011-09-13 |access-date=2014-07-15}}</ref><ref name=killing-kittens>{{cite conference |authorlast1=Airlie |first1=David M. Airlie |date=2006-07-19 |title=Open Source Graphic Drivers&mdash;: They Don't Kill Kittens |book-title=Proceedings of the Linux Symposium Volume One |___location=[[Ottawa]], Ontario, Canada |url=http://www.linuxsymposium.org/2006/linuxsymposium_procv1.pdf |access-date=2007-01-28 |url-status=dead |archive-url=https://web.archive.org/web/20070208084233/http://www.linuxsymposium.org/2006/linuxsymposium_procv1.pdf |archive-date=2007-02-08 }}</ref> Nvidia decided to deprecate nv, not adding support for [[GeForce 400 Seriesseries|Fermi]] or later GPUs and [[DisplayPort]], in March 2010.<ref>{{cite web |url=https://www.phoronix.com/scan.php?page=article&item=nvidia_kills_nv&num=1 |title=Nvidia deprecates "NV" |publisher=[[Phoronix]] |date=2010-03-26}}</ref>
 
In December 2009, Nvidia announced they would not support free graphics initiatives.<ref name="NvidiaNouveau">{{cite web |url=https://www.phoronix.com/scan.php?page=news_item&px=NzgwNQ |title=Nvidia's Response To Recent Nouveau Work |publisher=[[Phoronix]] |date=2009-12-14}}</ref> On 23 September 2013, Thethe company announced that they would release some documentation of their GPUs.<ref>{{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}}</ref>
 
Nouveau is based almost entirely on information gained through [[reverse engineering]]. This project aims to produce 3D acceleration for X.Org/[[Wayland (display server protocol)|Wayland]] using [[Gallium3D]].<ref>{{cite web |url=http://nouveau.freedesktop.org/wiki/ |title=Nouveau: Accelerated Open Source driver for nVidia cards |access-date=2006-08-10 |archive-date=2014-07-23 |archive-url=https://web.archive.org/web/20140723185723/http://nouveau.freedesktop.org/wiki/ |url-status=dead }}</ref> On March 26, 2012, Nouveau's [[Direct Rendering Manager|DRM]] component was marked stable and promoted from the staging area of the Linux kernel.<ref>{{cite web | url=https://lwn.net/Articles/488338/ |title=The Nouveau driver graduates from staging |publisher=[[LWN.net]] |date=2012-03-23}}</ref> Nouveau supports [[Tesla (microarchitecture)|Tesla]]- (and earlier), [[Fermi (microarchitecture)|Fermi]]-, [[Kepler (microarchitecture)|Kepler]]- and [[Maxwell (microarchitecture)|Maxwell]]-based GPUs.<ref>{{cite web |url=http://nouveau.freedesktop.org/wiki/CodeNames/ |title=Engineering names for Nvidia}}</ref> On 31 January 2014, Nvidia employee Alexandre Courbot committed an extensive patch set which adds initial support for the GK20A ([[Tegra K1]]) to Nouveau.<ref>{{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}}</ref> In June 2014, Codethink reportedly ran a [[Wayland (display server protocol)|Wayland]]-based [[Weston (software)|Weston]] [[display server#Wayland|compositor]] with [[Linux kernel]] 3.15, using [[EGL (API)|EGL]] and a "100% open-source graphics driver stack" on a [[Tegra K1]].<ref>{{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]]}}</ref> A feature matrix is available.<ref>{{cite web|url=http://nouveau.freedesktop.org/wiki/FeatureMatrix|title=Nouveau Driver Feature Matrix|access-date=16 November 2017}}</ref> In July 2014, Nouveau was unable to outperform the Nvidia GeForce driver due to missing re-clocking support. Tegra-re is a project which is working to reverse-engineer nVidia's [[Very long instruction word|VLIW]]-based [[Tegra]] series of GPUs that predate Tegra K1.<ref>{{cite web|url=https://github.com/kusma/tegra-re|title=Tegra-re|website=[[GitHub]]|access-date=16 November 2017}}</ref>
 
Nvidia distributes proprietary device drivers for Tegra through OEMs and as part of its Linux for Tegra (formerly L4T) development kit.<ref>{{cite web|url=https://developer.nvidia.com/linux-tegra|title=Linux For Tegra Archive|date=30 January 2014|access-date=16 November 2017}}</ref> Nvidia and a partner, [[Avionic Design]], were working on submitting Grate (free and open-source drivers for Tegra) upstream of the mainline Linux kernel in April 2012.<ref>{{cite mailing list
|url=http://lists.freedesktop.org/archives/dri-devel/2012-April/021833.html
|title=[RFC 0/4] Add NVIDIA Tegra DRM support
|date=2012-04-20 |access-date=2012-08-21
|mailing-list=dri-devel
|last=Mayo |first=Jon }}</ref><ref>{{cite web
|url=https://www.phoronix.com/scan.php?page=news_item&px=MTA4NjA
|title=A NVIDIA Tegra 2 DRM/KMS Driver Tips Up
|authorlast1=Larabel, |first1=Michael |author1-link=Michael Larabel |date=2012-04-11
|publisher=Phoronix Media |access-date=2012-08-21}}</ref>
The company's co-founder and CEO laid out the Tegra processor roadmap with Ubuntu Unity at the 2013 [[GPU Technology Conference]].<ref>{{cite web|url=https://www.youtube.com/watch?v=8kIQWWJs_po&t=9m35s |archive-url=https://ghostarchive.org/varchive/youtube/20211221/8kIQWWJs_po |archive-date=2021-12-21 |url-status=live|title=GTC 2013: NVIDIA's Tegra Roadmap (6 of 11) |date=19 March 2013 |publisher=YouTube |access-date=2013-07-10}}{{cbignore}}</ref>
 
Nvidia's Unified Memory driver (nvidia-uvm.ko), which implements memory management for Pascal and Volta GPUs on Linux, is MIT licensed. The source code is available in the Nvidia Linux driver downloads on systems that support nvidia-uvm.ko.
 
In May 2022, Nvidia Announcedannounced a new initiative and policy to open source its [[GPU]] [[Loadable Kernel Module]]s with dual [[GPL]]/[[MIT licenseLicense]], but only new models at [[Software_release_life_cycleSoftware release life cycle#Alpha|alpha]] quality. But said "These changes are for the kernel modules, while the user-mode components are untouched. The user-mode remains closed source and is published with prebuilt binaries in the driver and the CUDA toolkit."<ref>{{cite web |url=https://developer.nvidia.com/blog/nvidia-releases-open-source-gpu-kernel-modules/|title=NVIDIA Releases Open-Source GPU Kernel Modules |date=2022-05-19 |access-date=2022-06-07}}</ref> The open source driver has since been upgraded to production status and is now officially recommended for the [[GeForce RTX 20 series|RTX 20]] series and later GPUs.<ref>{{Cite web |title=NVIDIA 560 Linux Driver Beta Released - Defaults To Open GPU Kernel Modules |url=https://www.phoronix.com/news/NVIDIA-560.28.03-Beta-Linux |access-date=2025-04-04 |website=www.phoronix.com |language=en}}</ref><ref>{{Cite web |title=NVIDIA Promotes Their Open-Source GPU Kernel Driver Support |url=https://www.phoronix.com/news/NVIDIA-Transitions-OSS-KMD |access-date=2025-04-04 |website=www.phoronix.com |language=en}}</ref> [[Blackwell (microarchitecture)|Blackwell]] ([[GeForce RTX 50 series|RTX 50]] generation) and later NVIDIA GPU architectures are only supported by the open driver.<ref>{{Cite web |title=Chapter 44. Open Linux Kernel Modules |url=https://download.nvidia.com/XFree86/Linux-x86_64/565.77/README/kernel_open.html |access-date=2025-05-10 |website=download.nvidia.com}}</ref>
 
=== Intel ===
{{See also|List of Intel graphics processing units|Intel GMA#Linux|Intel HDGraphics and Iris GraphicsTechnology}}
[[Intel]] has a history of producing (or commissioning) open-source drivers for its graphics chips, with the exception of their [[Intel GMA#PowerVR GPU based|PowerVR-based]] chips.<ref name="ubuntugamer">[https://web.archive.org/web/20110113115606/http://www.ubuntugamer.com/2011/01/ubuntu-graphics-driver-overview/ An overview of graphic card manufacturers and how well they work with Ubuntu] Ubuntu Gamer, January 10, 2011 (Article by Luke Benstead); ([http://xtrabuntu.blogspot.com/2011/02/overview-of-graphic-card-manufacturers.html copy of the article])</ref> Their 2D X.Org driver is called xf86-video-intel. The kernel mode-setting driver in the Linux kernel does not use the [[Videovideo BIOS]] for switching [[display resolution|video modes]]; since some BIOSes have a limited range of modes, this provides more reliable access to those supported by Intel video adapters.
 
[[Intel]] has a history of producing (or commissioning) open-source drivers for its graphics chips, with the exception of their [[Intel GMA#PowerVR GPU based|PowerVR-based]] chips.<ref name="ubuntugamer">[https://web.archive.org/web/20110113115606/http://www.ubuntugamer.com/2011/01/ubuntu-graphics-driver-overview/ An overview of graphic card manufacturers and how well they work with Ubuntu] Ubuntu Gamer, January 10, 2011 (Article by Luke Benstead); ([http://xtrabuntu.blogspot.com/2011/02/overview-of-graphic-card-manufacturers.html copy of the article])</ref> Their 2D X.Org driver is called xf86-video-intel. The kernel mode-setting driver in the Linux kernel does not use the [[Video BIOS]] for switching [[display resolution|video modes]]; since some BIOSes have a limited range of modes, this provides more reliable access to those supported by Intel video adapters.
 
The company worked on optimizing their free [[Linux]] drivers for performance approaching their [[Microsoft Windows|Windows]] counterparts, especially on [[Sandy Bridge]] and newer hardware where performance optimizations have allowed the Intel driver to outperform their proprietary Windows drivers in certain tasks, in 2011.<ref>{{cite web
|url = https://www.phoronix.com/scan.php?page=news_item&px=OTIzNQ
|title = More Performance Comes Out Of Intel Linux SNB
|publisher = [[Phoronix]]
|date = 2011-03-22
|access-date = 2011-03-23
}}</ref><ref>{{cite web
|url = https://www.phoronix.com/scan.php?page=article&item=intel_llc_caching&num=1
|title = Intel Sandy Bridge Performance Goes Up Again
|publisher = [[Phoronix]]
|date = 2011-03-31
|access-date = 2011-03-31
}}</ref><ref>{{cite web
|url = https://www.phoronix.com/scan.php?page=article&item=intel_snbsds_compare&num=1
|title = Intel SNB Linux Driver Can Out Run Windows Driver
|publisher = [[Phoronix]]
|date = 2011-05-23
|access-date = 2011-05-23
}}</ref> Some of the performance enhancements may also benefit users of older hardware.<ref>{{cite web
|url = https://www.phoronix.com/vr.php?view=16049
|title = A Historical Look At Intel Ironlake Graphics Performance
|publisher = [[Phoronix]]
|date = 2011-05-25
|access-date = 2011-05-25
}}</ref>
 
Support for Intel's LLC (Last Level Cache, L4-Cache, [[Crystalwell]] and Iris Pro) was added in Linux kernel 3.12,.<ref>{{cite web |title=drm/i915: Use eLLC/LLC by default when available |url=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4d15c145a6234d999c0452eec0d275c1fbf0688c}}</ref><ref>{{cite web |title=drm/i915: Use Write-Through cacheing for the display plane on Iris |url=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=651d794fae9b79237aae1c97f8a9d9f3817bd31d}}</ref> andIn 2013, the company hashad 20 to 30 full-time Linux graphics developers.<ref>{{cite web |url=https://www.phoronix.com/scan.php?page=news_item&px=MTI5MTI |title=Intel Has 20~30 Full-Time Linux Graphics Developers |date=2013-02-02}}</ref>
 
=== Matrox ===
Line 186 ⟶ 159:
[[S3 Graphics]] develops the [[S3 Trio]], [[S3 ViRGE|ViRGE]], [[S3 Savage|Savage]] and [[S3 Chrome|Chrome]], supported by OpenChrome.<ref>{{cite web|url=https://www.freedesktop.org/wiki/Openchrome/|title=OpenChrome|access-date=16 November 2017}}</ref>
 
=== {{anchor|ARM|Arm}}Arm HoldingsLtd ===
[[Arm Holdings(company)|Arm Ltd]] is a [[Semiconductorsemiconductor fabrication plant|fab]]less semiconductor company which licenses [[semiconductor intellectual property core]]s. Although they are known for the licensing the [[ARM architecture family|ARM instruction set]] and [[List of ARM microprocessor cores|CPUs]] based on it, they also develop and license the [[Mali (GPU)|Mali series]] of GPUs, and more recently Imortalis GPUs that support ray-tracing. On January 21, 2012, [[Phoronix]] reported that [[Luc Verhaegen]] was driving a reverse-engineering attempt aimed at the Arm Holdings Mali series of GPUs (specifically, the Mali-200 and Mali-400 versions). The reverse-engineering project, known as Lima, was presented at [[FOSDEM]] on February 4, 2012.<ref>{{cite web|url=https://www.youtube.com/watch?v=MvRJ_8K8baI |archive-url=https://ghostarchive.org/varchive/youtube/20211221/MvRJ_8K8baI |archive-date=2021-12-21 |url-status=live|title=Phoronix.com - FOSDEM 2012 - Open-Source ARM Mali|last=phoronix|date=6 February 2012|via=YouTube}}{{cbignore}}</ref><ref>[https://www.phoronix.com/scan.php?page=article&item=arm_mali_reverse Phoronix, Jan 21 2012: ''An Open-Source, Reverse-Engineered Mali GPU Driver'']</ref> On February 2, 2013, Verhaegen demonstrated [[Quake III Arena]] in timedemo mode, running on top of the Lima driver.<ref>{{cite web|url=http://libv.livejournal.com/23886.html |title=Quake 3 Arena timedemo on top of the lima driver! |url-status=dead |archive-url=https://web.archive.org/web/20130209235426/http://libv.livejournal.com/23886.html |archive-date=2013-02-09 }}</ref> In May 2018, a Lima developer posted the driver for inclusion in the Linux kernel.<ref>{{cite web|url=https://lwn.net/Articles/755084/|title=Lima DRM driver [LWN.net]|website=lwn.net}}</ref> As of May 2019, the Lima driver is part of the mainline Linux kernel.<ref>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/gpu/drm/lima?id=a1d2a6339961efc078208dc3b2f006e9e9a8e119 drm/lima: driver for ARM Mali4xx GPUs}]</ref>
 
Panfrost is a reverse-engineered driver effort for Mali Txxx (Midgard) and Gxx (Bifrost) GPUs. [https://xdc2018.x.org/slides/Panfrost-XDC_2018.pdf Introducing Panfrost] talk was presented at X.Org Developer's Conference 2018. As of May 2019, the Panfrost driver is part of the mainline Linux kernel.<ref>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/gpu/drm/panfrost?id=f3ba91228e8e917e5bd6c4b72bfe846933d17370 drm/panfrost: Add initial panfrost driver]</ref>
 
ARM has indicated no intention of providing support for their graphics acceleration hardware licensed under a free and open-source license. However, ARM employees sent patches for the Linux kernel to support their ARM HDLCD [[display controller]] and Mali DP500, DP550 and DP650 SIP blocks in December 2015 and April 2016.<ref>{{cite web |url=https://lwn.net/Articles/667575/ |title=drm: Add support for the ARM HDLCD display controller |publisher=[[Linux kernel mailing list]] |date=2015-12-11}}</ref><ref>{{cite web |url=http://lkml.iu.edu/hypermail/linux/kernel/1604.0/00503.html |title=Initial support for ARM Mali Display Controller |publisher=[[Linux kernel mailing list]] |date=2016-04-01}}</ref>
 
=== Imagination Technologies ===
[[Imagination Technologies]] is a fabless semiconductor company which develops and licenses [[semiconductor intellectual property core]]s, among which are the [[PowerVR]] GPUs. Intel has manufactured a number of [[Comparison of Intel graphics processing units#PowerVR based|PowerVR-based]] GPUs. PowerVR GPUs are widely used in mobile [[Systemsystem on a chip|SoCs]] (SoC) devices. Due to its wide use in embedded devices, the [[Free Software Foundation]] has put reverse-engineering of the PowerVR driver on its high-priority project list.<ref>[http://www.fsf.org/campaigns/priority-projects/#powervr Free Software Foundation, Apr 25, 2005: ''High Priority Free Software Projects'']</ref> As of March 2022, Imagination has [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15243 provided a FOSS driver] for its [https://blog.imaginationtech.com/new-powervr-series6xt-gpus-go-rogue-ces-2014/ Rogue architecture-based PowerVR GX6250 from 2014], and its more recent A-Series architecture-based AXE-1-16M and [https://blog.imaginationtech.com/img-b-series-multi-core-revolution/ BXS-4-64 GPUs].<ref>{{Cite web |title=Imagination Tech Publishes Open-Source PowerVR Vulkan Driver For Mesa |url=https://www.phoronix.com/scan.php?page=news_item&px=Open-Source-PowerVR-Vulkan |access-date=2022-04-19 |website=www.phoronix.com |language=en}}</ref>
 
=== Vivante ===
Line 206 ⟶ 179:
[[Qualcomm]] develops the [[Adreno]] (formerly ATI [[Imageon]]) mobile GPU series, and includes it as part of their [[Snapdragon (system on chip)|Snapdragon mobile SoC series]]. [[Phoronix]] and [[Slashdot]] reported in 2012 that Rob Clark, inspired by the Lima driver, was working on reverse-engineering drivers for the Adreno GPU series.<ref>{{cite web
|url=https://www.phoronix.com/scan.php?page=article&item=qualcomm_freedreno
|title=An Open-Source Graphics Driver Forfor Snapdragon
|authorlast1=Larabel |first1=Michael |author1-link=Michael Larabel
|date=14 April 2012
|publisher=Phoronix
Line 213 ⟶ 186:
|url=http://linux.slashdot.org/story/12/04/14/219230/open-source-qualcomm-gpu-driver-published
|title=Open-Source Qualcomm GPU Driver Published
|authorauthor1=Soulskill
|date=14 April 2012
|publisher=Slashdot
Line 219 ⟶ 192:
|url=http://bloggingthemonkey.blogspot.se/2012/04/fighting-back-against-binary-blobs.html
|title=Fighting back against binary blobs!
|authorlast1=Rob Clark |first1=Rob
|date=14 April 2012
|publisher=Linaro
|access-date=15 April 2012}}</ref> The driver code was published on [[Gitorious]] "freedreno",<ref>[https://gitorious.org/freedreno/ Freedreno, 15 April 2012] {{webarchive|url=https://web.archive.org/web/20121024233408/https://gitorious.org/freedreno/ |date=24 October 2012 }}</ref>
and has been moved to Mesa.<ref>{{cite web|url=https://www.phoronix.com/scan.php?page=news_item&px=MTMyNTE|title=Mesa/Gallium3D Gets Its First ARM SoC GPU Driver - Phoronix}}</ref><ref>{{cite web |url=http://lists.freedesktop.org/archives/mesa-commit/2013-March/042190.html |title = Mesa (master): r600g: add Richland APU pci ids| date=15 March 2013}}</ref> In 2012, a working shader assembler was completed;<ref>{{cite web
| url=http://bloggingthemonkey.blogspot.se/2012/07/freedreno-update-first-renders-shader.html
| title=freedreno update: first renders shader assembler!
|last1=Clark author|first1=Rob Clark
| date=29 July 2012
| access-date=16 August 2012}}</ref>
demonstration versions were developed for [[texture mapping]]<ref>{{cite web
| url=http://bloggingthemonkey.blogspot.se/2012/08/textured-cube-fullscreen.html
| title=textured cube (fullscreen!)
|last1=Clark author|first1=Rob Clark
| date=5 August 2012
| access-date=16 August 2012}}</ref> and [[phong shading]],<ref>{{cite web
| url=http://bloggingthemonkey.blogspot.se/2012/08/open-source-lolscat.html
| title=Open Source lolscat!
|last1=Clark author|first1=Rob Clark
| date=15 August 2012
| access-date=16 August 2012}}</ref> using the reverse-engineered shader compiler.
Clark demonstrated Freedreno running desktop compositing, the [[XBMC]] media player and [[Quake III Arena]] at [[FOSDEM]] on February 2, 2013.<ref>{{cite web |url=https://archive.fosdem.org/2013/schedule/event/operating_systems_open_arm_gpu/ |title=Open ARM GPU drivers – Freedreno |publisher=[[FOSDEM]] |date=2013-02-02 |access-date=2014-07-15}}</ref>
 
In August 2013, the kernel component of freedreno (MSM driver) was accepted into mainline and is available in Linux kernel 3.12 and later.<ref>{{cite web | url=http://cgit.freedesktop.org/~airlied/linux/commit/?id=e906d7bdd3b63ffac8b91f2f05c450775de95ef6 | title=Merge the MSM driver from Rob Clark | work=[[kernel.org]] | date=2013-08-28 | access-date=2014-06-04}}</ref> The [[Device Dependent X|DDX driver]] gained support for server-managed [[file descriptor]]s requiring [[X.Org Server]] version 1.16 and above in July 2014.<ref>{{cite web |url=http://lists.freedesktop.org/archives/xorg/2014-July/056748.html |title=xf86-video-freedreno 1.2.0 |publisher=[[freedesktop.org]] |date=2014-07-14}}</ref> In January 2016, the Mesa Gallium3D-style driver gained support for Adreno 430;<ref>{{cite web |url=http://cgit.freedesktop.org/mesa/mesa/commit/?id=13b87e02b979b86872e1872b8cb325d376d05cc5 |title=Add support for adreno 430|access-date=15 November 2017}}</ref> in November of that year, the driver added support for the Adreno 500 series.<ref>{{cite web |url=https://cgit.freedesktop.org/mesa/mesa/commit/?id=946cf4eb6846767306a221eec7d0f82d20dfb6b5 |title=Index Mesa-Mesa|access-date=15 November 2017}}</ref> Freedreno can be used on devices such as [[96Boards|96Boards Dragonboard 410c]] and [[Nexus 7 (2013)]] in traditional Linux distributions (like [[Debian]] and [[Fedora (operating system)|Fedora]]) and on [[Android (operating system)|Android]].
 
=== Broadcom ===
{{See also|VideoCore}}
[[File:Mesa_layers_of_crap_2016.svg|thumb|alt=Software diagram|The Mesa driver for VideoCore4, VC4, was written from scratch by Broadcom's Eric Anholt.<ref>{{cite web|url=http://anholt.livejournal.com/44239.html?nojs=1 |title=New Job at Broadcom |authorlast1=Anholt, |first1=Eric |date=2014-06-17 |url-status=dead |archive-url=https://web.archive.org/web/20150407031941/http://anholt.livejournal.com/44239.html?nojs=1 |archive-date=2015-04-07 }}</ref>]]
 
[[Broadcom]] develops and designs the [[VideoCore]] GPU series as part of their [[System on a chip|SoCs]]. Since it is used by the [[Raspberry Pi]], there has been considerable interest in a FOSS driver for VideoCore.<ref>{{cite web|url=https://www.phoronix.com/scan.php?page=news_item&px=MTA1MTc|title=Phoronix on the Raspberry Pi GPU}}</ref> The Raspberry Pi Foundation, in co-operation with Broadcom, announced on October 24, 2012, that they open-sourced "all the ARM (CPU) code that drives the GPU".{{citation needed|date=November 2017}} However, the announcement was misleading; according to the author of the reverse-engineered Lima driver, the newly open-sourced components only allowed message-passing between the ARM CPU and VideoCore but offered little insight into Videocore and little additional programability.<ref>{{cite web|url=https://www.raspberrypi.org/blog/open-source-arm-userspace/#comment-34981|title=Open Source ARM userland - Raspberry Pi|date=24 October 2012}}</ref> The Videocore GPU runs an [[Real-time operating system|RTOS]] which handles the processing; video acceleration is done with RTOS firmware coded for its proprietary GPU, and the firmware was not open-sourced on that date.<ref>{{cite web|url=http://www.raspberrypi.org/archives/2221|title=Open Source ARM userland - Raspberry Pi|date=24 October 2012|access-date=1 November 2012|archive-date=30 October 2012|archive-url=https://web.archive.org/web/20121030180058/http://www.raspberrypi.org/archives/2221|url-status=dead}}</ref> Since there was neither a [[toolchain]] targeting the proprietary GPU nor a documented [[instruction set]], no advantage could be taken if the firmware source code became available. The Videocoreiv project<ref>{{cite web|url=https://github.com/hermanhermitage/videocoreiv/wiki/VideoCore-IV---BCM2835-Overview|title=hermanhermitage/videocoreiv|website=[[GitHub]]}}</ref> attempted to document the VideoCore GPUs.
 
On February 28, 2014 (the Raspberry Pi's second anniversary), Broadcom and the Raspberry Pi Foundation announced the release of full documentation for the VideoCore IV graphics core and a complete source release of the graphics stack under a [[3-clause BSD license]].<ref name=2thbirthday>{{cite web|url=https://arstechnica.com/information-technology/2014/02/raspberry-pi-marks-2nd-birthday-with-plan-for-open-source-graphics-driver/|title=Raspberry Pi marks 2nd birthday with plan for open source graphics driver|date=28 February 2014}}</ref><ref name="openvideocore">{{cite web|url=https://www.raspberrypi.org/blog/a-birthday-present-from-broadcom/|title=A birthday present from Broadcom - Raspberry Pi|date=28 February 2014|publisher=Raspberry Pi Foundation|first=Eben|last=Upton|access-date=8 July 2019}}</ref> The free-license 3D graphics code was committed to Mesa on 29 August 2014,<ref>{{cite web |url=http://cgit.freedesktop.org/mesa/mesa/commit/?id=1850d0a1cbf044dc4d29b7a9ede2c634f667d853 |title=vc4: Initial skeleton driver import |publisher=The Mesa 3D Graphics Library |date=2014-08-09}}</ref> and first appeared on Mesa's 10.3 release.
 
=== Other vendors ===
Although [[Silicon Integrated Systems]] and [[VIA Technologies]] have expressed limited interest in open-source drivers, both have released source code which has been integrated into [[X.Org Server|X.Org]] by FOSS developers.<ref name=killing-kittens/> In July 2008, VIA opened documentation of their products to improve its image in the Linux and open-source communities.<ref>{{cite web | url = https://www.phoronix.com/scan.php?page=news_item&px=NjYyMg | title = VIA Publishes Three Programming Guides | author last1=Larabel |first1=Michael Larabel | authorauthor1-link = Michael Larabel | work = Phoronix | date = 2008-07-26 | access-date = 2008-08-04}}</ref> The company has failed to work with the open-source community to provide documentation and a working [[Direct Rendering Manager|DRM]] driver, leaving expectations of Linux support unfulfilled.<ref>{{cite web | url = https://www.phoronix.com/scan.php?page=article&item=via_2010_roadmap&num=1 | title = VIA's Linux TODO List... Maybe Look Forward To 2011? |last1=Larabel author |first1= Michael Larabel | authorauthor1-link = Michael Larabel | work = Phoronix | date = 2009-11-21 | access-date = 2009-12-30}}</ref> On January 6, 2011, it was announced that VIA was no longer interested in supporting free graphics initiatives.<ref>[https://www.phoronix.com/scan.php?page=news_item&px=ODk4Nw VIA's Open Linux Graphics Driver Has Been Defenestrated] [[Phoronix]], January 06, 2011 (Articlearticle by [[Michael Larabel]])</ref>
 
[[DisplayLink]] announced an open-source project, Libdlo,<ref>{{cite web|url=https://libdlo.freedesktop.org/wiki/|title=Libdlo|access-date=16 November 2017}}</ref> with the goal of bringing support for their [[USB graphics]] technology to [[Linux]] and other platforms. Its code is available under the [[GNU Lesser General Public License|LGPL]] license,<ref>{{cite press release |title=DisplayLink Releases Linux Source Code for its USB Graphics Processors |url=http://www.displaylink.com/news/news150509.htm |publisher=DisplayLink |date=2009-05-15 |access-date=2009-05-15}}</ref> but it has not been integrated into an [[X.Org Server|X.Org]] driver. DisplayLink graphics support is available through the kernel udlfb driver (with fbdev) in mainline and udl/drm driver, which in March 2012 was only available in the drm-next tree.
 
Non-hardware-related vendors may also assist free graphics initiatives. [[Red Hat]] has two full-time employees (David Airlie and Jérôme Glisse) working on Radeon software,<ref>[https://www.phoronix.com/scan.php?page=news_item&px=ODg5Nw AMD's Hiring Another Open-Source Driver Developer] [[Phoronix]], December 11, 2010 (Articlearticle by [[Michael Larabel]])</ref> and the [[Fedora Project]] sponsors a Fedora Graphics Test Week event before the launch of their new [[Fedora (operating system)|Linux distribution]] versions to test free graphics drivers.<ref>[https://www.phoronix.com/scan.php?page=news_item&px=OTEyMQ It's Fedora Graphics Test Week] [[Phoronix]], February 22, 2011 (Articlearticle by [[Michael Larabel]])</ref> Other companies which have provided development or support include [[Novell]] and [[VMware]].
 
== Open hardware projects ==
Line 268 ⟶ 241:
The Nyuzi,<ref>{{cite web|url=https://github.com/jbush001/NyuziProcessor/|title=Nyuzi is an experimental GPGPU processor|website=[[GitHub]]|date=June 2021}}</ref> an experimental GPGPU processor, includes a synthesizable hardware design written in [[System Verilog]], an instruction set emulator, an [[LLVM]]-based C-C++ compiler, software libraries and tests and explores parallel software and hardware. It can run on a Terasic DE2-115 [[field-programmable gate array]] board.<ref>{{cite web|url=https://github.com/jbush001/NyuziProcessor/wiki/SOC-Test-Environment|title=SOC Test Environment|website=[[GitHub]]}}</ref><ref>{{cite web|url=https://github.com/jbush001/NyuziProcessor/tree/master/hardware/fpga/de2-115|title=Running on Terasic DE2-115 FPGA board|website=[[GitHub]]}}</ref>
 
If a project uses FPGAs, it generally has a partially (or completely) closed-source toolchain. There are currently a couple of open-source toolchains available, however, for Lattice-based FPGAs (notably for iCE40 and ECP5 boards) which utilize Project IceStorm,<ref>{{cite web|url=http://www.clifford.at/icestorm/|title=Project IceStorm Homepage|date=21 January 2022}}</ref> and Trellis,<ref>{{cite web|url=https://github.com/SymbiFlow/prjtrellis|title=Project Trellis Repository|website=[[GitHub]]|date=30 May 2021}}</ref> respectively. There is also a larger, ongoing effort to create the "GCC of FPGAs" called SymbiFlow<ref>{{cite web|url=https://symbiflow.github.io/|title=SymbiFlow Homepage}}</ref> which includes the aforementioned FPGA toolchains as well as an early-stage open-source toolchain for Xilinx-based FPGAs.
 
== See also ==
{{Portal|Free and open-source software}}
* [[3D computer graphics]]
* [[Cell (microprocessorprocessor)]]
* [[Direct Rendering Infrastructure]] (DRI)
* [[Intel GMA]]
Line 279 ⟶ 252:
 
== References ==
{{Reflist|30em}}
 
== External links ==
{{Wikibooks|Open Source}}
* [http://www.intellinuxgraphics.com/ Linux graphics drivers from Intel]
* [http://howtouselinux.net/best-graphics-card-for-linux/ Best Graphics Card For Linux] {{Webarchive|url=https://web.archive.org/web/20170325043742/http://howtouselinux.net/best-graphics-card-for-linux/ |date=2017-03-25}}
* [http://www.nvidia.com/object/unix.html NVIDIA's Unix drivers portal page]
* [http://wacco.mveas.com/ Project VGA]
* [http://lists.freedesktop.org/archives/mesa-dev/2013-July/041900.html Direct3D 9 state tracker on Gallium3D]
* [http://cgit.freedesktop.org/mesa/mesa/commit/?id=92617aeac109481258f0c3863d09c1b8903d438b d3d1x: add new Direct3D 10/11 COM state tracker for Gallium]
* {{GitHub|freedreno}}
* [https://github.com/freedreno/freedreno/wiki Freedreno homepage]
* [https://archive.fosdem.org/2013/schedule/event/freedreno/ Freedreno/Gallium update]
* [http://www.phoronix-test-suite.com/ Phoronix Test Suite]
Line 298 ⟶ 271:
{{DEFAULTSORT:Graphics Hardware And Foss}}
[[Category:Direct Rendering Infrastructure]]
[[Category:Free and open-source software]]
[[Category:Graphics hardware]]
[[Category:Linux drivers]]