Direct Rendering Manager

pienoiskuva|oikea|DRM-arkkitehtuuri (sisältäen KMS- ja GEM-komponentit).
Direct Rendering Manager (DRM) on Linux-ytimen ohjelmointirajapinta, joka on tarkoitettu tukemaan monimutkaisia grafiikkalaitteita, yleensä 3D-grafiikan kiihdytykseen grafiikkasuorittimella (GPU).

Varhainen grafiikkarajapinta Linuxissa oli vastaavanlainen kuin FreeBSD:ssä, joka muuttui kun DRM liitettiin Linuxin ytimeen. X Window Systemiä käyttävät sovellukset voivat käyttää DRM:ää Direct Rendering Infrastructuren (DRI) kautta.

Aiemmin ytimessä oli FBDEV kuvapuskurirajapinta, joka vain välitti kuvia näytönohjaimelle, mutta monimutkaisemmat grafiikkasuorittimet tarvitsivat lisätukea.
FBDEV ei tukenut useita tarvittuja ominaisuuksia, kuten päällyskerrokset (overlay) ja laitteistokursorit. Video For Linux 2 (V4L2) -rajapinta oli soveltuva videokuvan kaappaamiseen ja yksinkertaiseen videokuvan esitykseen mutta ei monimutkaisemmille laitteille.

Kernel Mode Setting (KMS) on osa DRM-rajapintaa, jolla näyttötoiminnot kuten näytön kuvatarkkuus ja värisyvyys konfiguroidaan. Graphics Execution Manager (GEM) on näyttömuistia hallitseva komponentti. Sulautetuissa järjestelmissä ei ole yleensä lainkaan erillistä näyttömuistia (VRAM), kun taas henkilökohtaisissa tietokoneissa on erillistä muistia NUMA-arkkitehtuurin kaltaisesti. GEM korvaa aiemman Translation Table Maps (TTM) muistihallinnan.

Wayland-järjestelmä käyttää DRM-rajapintaa sekä KMS-rajapintaa näyttölaitteiden tunnistamiseen. KMSCON on DRM:ää käyttävä toteutus Linuxin virtuaalipäätteille.
DRM/KMS grafiikkapino sisältää ytimen ja käyttäjäavaruuden rajapinnan (libdrm/libkms kirjastot).

Androidilla käytetty ydinversio käytti aluksi Atomic Display Framework (ADF) -grafiikkapinoa, joka myöhemmin muokattiin käyttämään DRM:ää johtaen yksinkertaisempaan ajurien kirjoittamiseen.

 Katso myös 
 Mesa 3D
 Wayland

 Lähteet 

 Aiheesta muualla 
 kernel.org: Linux GPU Driver Developer's Guide 
 mupuf.org: A deeper look into GPUs and the Linux Graphics Stack (PDF) 

Luokka:Linux-ydin
Luokka:Ohjelmointirajapinnat