Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Direct Rendering Manager
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== History == In 1999, while developing [[Direct Rendering Infrastructure|DRI]] for [[XFree86]], Precision Insight created the first version of DRM for the [[3dfx]] video cards, as a [[Linux kernel]] [[Patch (computing)|patch]] included within the [[Mesa (computer graphics)|Mesa]] source code.{{r|Mesa 3dfx}} Later that year, the DRM code was mainlined in Linux kernel 2.3.18 under the <code>/drivers/char/drm/</code> directory for [[character device]]s.{{r|Linux 2.3.18pre1}} During the following years the number of supported video cards grew. When Linux 2.4.0 was released in January 2001 there was already support for Creative Labs GMX 2000, Intel i810, Matrox G200/G400 and ATI Rage 128, in addition to 3dfx Voodoo3 cards,{{r|Linux 2.4.0}} and that list expanded during the 2.4.x series, with drivers for [[ATI Radeon]] cards, some SiS video cards and Intel 830M and subsequent integrated GPUs. The split of DRM into two components, DRM core and DRM driver, called ''DRM core/personality split'' was done during the second half of 2004,{{r|Airlie redesign}}{{r|Airlie DRM split}} and merged into kernel version 2.6.11.{{r|Torvalds linux 2.6.11-rc1}} This split allowed multiple DRM drivers for multiple devices to work simultaneously, opening the way to multi-GPU support. The idea of putting all the video mode setting code in one place inside the kernel had been acknowledged for years,{{r|Gettys Packard 2004}}{{r|Smirl 2005}} but the graphics card manufacturers had argued that the only way to do the mode-setting was to use the routines provided by themselves and contained in the [[Video BIOS]] of each graphics card. Such code had to be executed using x86 [[real mode]], which prevented it from being invoked by a kernel running in [[protected mode]].{{r|Packard 2007}} The situation changed when Luc Verhaegen and other developers found a way to do the mode-setting natively instead of BIOS-based,{{r|Verhaegen 2006}}{{r|Packard 2007}} showing that it was possible to do it using normal kernel code and laying the groundwork for what would become ''Kernel Mode Setting''. In May 2007 Jesse Barnes ([[Intel]]) published the first proposal for a ''drm-modesetting'' API and a working native implementation of mode-setting for Intel GPUs within the i915 DRM driver.{{r|Barnes modesetting}} In December 2007 Jerome Glisse started to add the native mode-setting code for ATI cards to the radeon DRM driver.{{r|Glisse 2007}}{{r|Larabel 2008 KMS}} Work on both the API and drivers continued during 2008, but got delayed by the necessity of a memory manager also in kernel space to handle the framebuffers.{{r|Packard 2008 status}} In October 2008 the Linux kernel 2.6.27 brought a major [[source code]] reorganization, prior to some significant upcoming changes. The DRM source code tree was moved to its own source directory <code>/drivers/gpu/drm/</code> and the different drivers were moved into their own subdirectories. Headers were also moved into a new <code>/include/drm</code> directory.{{r|reorganization commit}} The increasing complexity of video memory management led to several approaches to solving this issue. The first attempt was the ''Translation Table Maps'' (TTM) memory manager, developed by Thomas Hellstrom ([[Tungsten Graphics]]) in collaboration with Emma Anholt (Intel) and Dave Airlie ([[Red Hat]]).{{r|Corbet 2007}} TTM was proposed for inclusion into mainline kernel 2.6.25 in November 2007,{{r|Corbet 2007}} and again in May 2008, but was ditched in favor of a new approach called ''Graphics Execution Manager'' (GEM).{{r|Corbet 2008}} GEM was first developed by Keith Packard and Emma Anholt from Intel as a simpler solution for memory management for their i915 driver.{{r|Packard Anholt 2008}} GEM was well received and merged into the Linux kernel version 2.6.28 released in December 2008.{{r|Kernelnewbies linux 2.6.28}} Meanwhile, TTM had to wait until September 2009 to be finally merged into Linux 2.6.31 as a requirement of the new Radeon KMS DRM driver.{{r|TTM commit}} With memory management in place to handle buffer objects, DRM developers could finally add to the kernel the already finished API and code to do [[mode setting]]. This expanded API is what is called ''Kernel Mode-setting'' (KMS) and the drivers which implement it are often referred to as ''KMS drivers''. In March 2009, KMS was merged into the Linux kernel version 2.6.29,{{r|Kernelnewbies linux 2.6.29}}{{r|KMS commit}} along with KMS support for the i915 driver.{{r|KMS i915 commit}} The KMS API has been exposed to user space programs since libdrm 2.4.3.{{r|libdrm 2.4.3}} The userspace [[X.Org Server|X.Org DDX]] driver for Intel graphics cards was also the first to use the new GEM and KMS APIs.{{r|xf86-video-intel 2.5.0}} KMS support for the radeon DRM driver was added to Linux 2.6.31 release of September 2009.{{r|Kernelnewbies linux 2.6.31}}{{r|Torvalds linux 2.6.31}}{{r|KMS radeon commit}} The new radeon KMS driver used the TTM memory manager but exposed GEM-compatible interfaces and ioctls instead of TTM ones.{{r|Larabel 2008 gem-ttm}} Since 2006 the [[nouveau (software)|nouveau project]] had been developing a [[free software]] DRM driver for [[NVIDIA]] GPUs outside of the official Linux kernel. In 2010 the nouveau source code was merged into Linux 2.6.33 as an experimental driver.{{r|Kernelnewbies nouveau}}{{r|nouveau merge}} At the time of merging, the driver had been already converted to KMS, and behind the GEM API it used TTM as its memory manager.{{r|nouveau 40}} The new KMS API—including the GEM API—was a big milestone in the development of DRM, but it didn't stop the API from being enhanced in the following years. KMS gained support for [[Page flipping|page flips]] in conjunction with asynchronous [[Vertical blanking interval|VBLANK]] notifications in Linux 2.6.33{{r|Kernelnewbies linux 2.6.33}}{{r|pageflip commit}}—only for the i915 driver, radeon and nouveau added it later during Linux 2.6.38 release.{{r|Kernelnewbies linux 2.6.38}} The new page flip interface was added to libdrm 2.4.17.{{r|libdrm 2.4.17}} In early 2011, during the Linux 2.6.39 release cycle, the so-called ''dumb buffers''—a hardware-independent non-accelerated way to handle simple buffers suitable for use as framebuffers—were added to the KMS API.{{r|dumb-buffers commit}}{{r|Kernelnewbies linux 2.6.39}} The goal was to reduce the complexity of applications such as [[Plymouth (software)|Plymouth]] that don't need to use special accelerated operations provided by driver-specific ioctls.{{r|drmbook-modesetting}} The feature was exposed by libdrm from version 2.4.25 onwards.{{r|libdrm 2.4.25}} Later that year it also gained a new main type of objects, called ''planes''. Planes were developed to represent hardware overlays supported by the scanout engine.{{r|Barnes 2011 overlays}}{{r|Barnes 2011 planes}} Plane support was merged into Linux 3.3.{{r|planes commit}} and libdrm 2.4.30. Another concept added to the API—during Linux 3.5{{r|properties commit}} and libdrm 2.4.36{{r|libdrm 2.4.36}} releases—were ''generic object properties'', a method to add generic values to any KMS object. Properties are specially useful to set special behaviour or features to objects such as CRTCs and planes. An early proof of concept to provide GPU offloading between DRM drivers was developed by Dave Airlie in 2010.{{r|Airlie 2010}}{{r|Larabel 2010 PRIME}} Since Airlie was trying to mimic the [[NVIDIA Optimus]] technology, he decided to name it "PRIME".{{r|Airlie 2010}} Airlie resumed his work on PRIME in late 2011, but based on the new [[DMA-BUF]] buffer sharing mechanism introduced by Linux kernel 3.3.{{r|Larabel 2012 PRIME}} The basic DMA-BUF PRIME infrastructure was finished in March 2012{{r|Airlie PRIME patch}} and merged into the Linux 3.4 release,{{r|Larabel 2012 PRIME 3.4}}{{r|PRIME commit}}{{r|Kernelnewbies linux 3.4}} as well as into libdrm 2.4.34.{{r|libdrm 2.4.34}} Later during the Linux 3.5 release, several DRM drivers implemented PRIME support, including i915 for Intel cards, radeon for AMD cards and nouveau for NVIDIA cards.{{r|Larabel 2012 PRIME 3.5}}{{r|Kernelnewbies linux 3.5}} In recent years, the DRM API has incrementally expanded with new and improved features. In 2013, as part of [[Google Summer of Code|GSoC]], David Herrmann developed the multiple ''render nodes'' feature.{{r|Herrmann 2013 rendernodes}} His code was added to the Linux kernel version 3.12 as an experimental feature{{r|Corbet linux 3.12}}{{r|rendernodes commit}} supported by i915,{{r|rendernodes i915}} radeon{{r|rendernodes radeon}} and nouveau{{r|rendernodes nouveau}} drivers, and enabled by default since Linux 3.17.{{r|Corbet linux 3.17}} In 2014 Matt Roper (Intel) developed the ''universal planes'' (or ''unified planes'') concept by which framebuffers (''primary planes''), overlays (''secondary planes'') and cursors (''cursor planes'') are all treated as a single type of object with an unified API.{{r|Roper 2014}} Universal planes support provides a more consistent DRM API with fewer, more generic [[ioctl]]s.{{r|Paalanen 2014}} In order to maintain the API [[backward compatibility|backwards compatible]], the feature is exposed by DRM core as an additional capability that a DRM driver can provide. Universal plane support debuted in Linux 3.15{{r|Larabel 2014 planes}} and libdrm 2.4.55.{{r|libdrm 2.4.55}} Several drivers, such as the Intel i915,{{r|Vetter linux 3.17}} have already implemented it. The most recent DRM API enhancement is the ''atomic mode-setting'' API, which brings [[Atomicity (programming)|atomicity]] to the mode-setting and page flipping operations on a DRM device. The idea of an atomic API for mode-setting was first proposed in early 2012.{{r|Barnes atomic}} Ville Syrjälä (Intel) took over the task of designing and implementing such atomic API.{{r|Syrjala 2012 atomic}} Based on his work, Rob Clark ([[Texas Instruments]]) took a similar approach aiming to implement atomic page flips.{{r|Clark 2012 atomic}} Later in 2013 both proposed features were reunited in a single one using a single ioctl for both tasks.{{r|Clark 2013 atomic}} Since it was a requirement, the feature had to wait for the support of universal planes to be merged in mid-2014.{{r|Vetter linux 3.17}} During the second half of 2014 the atomic code was greatly enhanced by Daniel Vetter (Intel) and other DRM developers{{r|Vetter 2016 atomic|p=18}} in order to facilitate the transition for the existing KMS drivers to the new atomic framework.{{r|Vetter 2014 atomic}} All of this work was finally merged into Linux 3.19{{r|Airlie linux 3.19}} and Linux 4.0{{r|Vetter 2015 atomic}}{{r|Airlie linux 4.0}}{{r|Kernelnewbies linux 4.0}} releases, and enabled by default since Linux 4.2.{{r|Kernelnewbies linux 4.2}} libdrm exposed the new atomic API since version 2.4.62.{{r|libdrm 2.4.62}} Multiple drivers have already been converted to the new atomic API.{{r|Vetter 2016 atomic update}} By 2018 ten new DRM drivers based on this new atomic model had been added to the Linux kernel.{{r|Stone 2018}}
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)