# Infraestructura de renderització directa

La Direct Rendering Infrastructure (DRI) és el marc que inclou la moderna pila de gràfics de Linux que permet als programes d'espai d'usuari sense privilegis emetre ordres al maquinari gràfic sense entrar en conflicte amb altres programes. L'ús principal de DRI és proporcionar acceleració de maquinari per a la implementació de Mesa d'OpenGL. DRI també s'ha adaptat per proporcionar acceleració OpenGL en una consola framebuffer sense un servidor de visualització en funcionament.
La implementació de DRI està dispersa a través del servidor X i les biblioteques de clients associades, Mesa 3D i el subsistema del nucli Direct Rendering Manager. Tot el seu codi font és programari lliure.

## Visió general

En l'arquitectura clàssica del sistema X Window, l'X Server és l'únic procés amb accés exclusiu al maquinari gràfic i, per tant, el que fa la representació real al framebuffer. Tot el que fan els clients X és comunicar-se amb el servidor X per enviar ordres de representació. Aquestes ordres són independents del maquinari, el que significa que el protocol X11 proporciona una API que abstraeix el dispositiu gràfic perquè els clients X no hagin de saber ni preocupar-se per les característiques específiques del maquinari subjacent. Qualsevol codi específic de maquinari viu dins de Device Dependent X, la part de l'X Server que gestiona cada tipus de targeta de vídeo o adaptador de gràfics i que sovint s'anomena controlador de vídeo o gràfic.
L'auge de la renderització 3D ha mostrat els límits d'aquesta arquitectura. Les aplicacions de gràfics en 3D solen produir grans quantitats d'ordres i dades, totes elles s'han d'enviar al servidor X per a la representació. A mesura que augmentava la quantitat de comunicació entre processos (IPC) entre el client X i el servidor X, el rendiment de la representació 3D es va ressentir fins al punt que els desenvolupadors de controladors X van concloure que per aprofitar les capacitats de maquinari 3D de les últimes targetes gràfiques Es necessitava una arquitectura sense IPC. Els clients X haurien de tenir accés directe al maquinari gràfic en lloc de confiar en un procés de tercers per fer-ho, estalviant tota la sobrecàrrega IPC. Aquest enfocament s'anomena "renderització directa" en oposició a la "renderització indirecta" proporcionada per l'arquitectura X clàssica. La infraestructura de renderització directa es va desenvolupar inicialment per permetre a qualsevol client X realitzar una representació 3D mitjançant aquest enfocament de "renderització directa".
Res impedeix que DRI s'utilitzi per implementar una representació directa 2D accelerada dins d'un client X. Simplement ningú ha tingut la necessitat de fer-ho perquè el rendiment de la representació indirecta en 2D era prou bo.anglès

## Arquitectura del programari

L'arquitectura bàsica de la infraestructura de renderització directa inclou tres components principals:
* el client DRI — per exemple, un client X que realitza "renderització directa" — necessita un "controlador" específic de maquinari capaç de gestionar la targeta de vídeo o l'adaptador de gràfics actuals per tal de representar-hi. Aquests controladors DRI es proporcionen normalment com a biblioteques compartides a les quals el client està enllaçat dinàmicament. Atès que DRI es va concebre per aprofitar el maquinari de gràfics 3D, les biblioteques normalment es presenten als clients com a implementacions accelerades per maquinari d'una API 3D com OpenGL, proporcionada pel propi proveïdor de maquinari 3D o un tercer com el programari lliure Mesa 3D.
* el servidor X proporciona una extensió de protocol X11 — l'extensió DRI — que els clients DRI utilitzen per coordinar-se tant amb el sistema de finestres com amb el controlador DDX. Com a part del controlador DDX, és força comú que el procés del servidor X també s'enllaçi dinàmicament amb el mateix controlador DRI que els clients DRI, però per proporcionar renderització 3D accelerada per maquinari als clients X mitjançant l'extensió GLX per a la representació indirecta (per exemple, remota). Clients X que no poden utilitzar la representació directa). Per a la representació 2D, el controlador DDX també ha de tenir en compte els clients DRI que utilitzen el mateix dispositiu gràfic.
* l'accés a la targeta de vídeo o l'adaptador gràfic està regulat per un component del nucli anomenat Direct Rendering Manager (DRM). Tant el controlador DDX del servidor X com el controlador DRI de cada client X han d'utilitzar DRM per accedir al maquinari gràfic. DRM proporciona sincronització amb els recursos compartits del maquinari gràfic — recursos com ara la cua d'ordres, els registres de la targeta, la memòria de vídeo, els motors DMA,... — assegurant que l'accés simultània de tots aquests processos d'espai d'usuari en competència no interfereixin entre si. DRM també serveix d'executor de seguretat bàsic que no permet que cap client X accedeixi al maquinari més enllà del que necessita per realitzar la representació 3D.

## Història

El projecte va ser iniciat per Jens Owen i Kevin E. Martin de Precision Insight (finançat per Silicon Graphics i Red Hat). Primer es va fer àmpliament disponible com a part de XFree86 4.0 i ara forma part del servidor X.Org. Actualment el manté la comunitat de programari lliure.
* Controladors 2D dins del servidor X
* Representació indirecta sobre GLX, utilitzant Utah GLX; separar: fbdev
* DRI primerenc:la configuració del modeencara s'està realitzant pel servidor de pantalla X, que obliga a executar-lo com a arrel
* Finalment, tot l'accés passa pel Gestor de representació directa
* Al nucli de Linux 3.12 es van introduirnodes de renderització; DRMi el controlador KMSes van dividir. Waylandimplementa la representació directa sobre EGL

## Referències

* ↑ «Mesa 3D and Direct Rendering Infrastructure wiki» (en anglès). [Consulta: 15 juliol 2014].
* ↑ «DRI for Framebuffer Consoles» (en anglès). [Consulta: 4 gener 2019].
* ↑ «Mesa 3D and Direct Rendering Infrastructure wiki» (en anglès). [Consulta: 15 juliol 2014].
* ↑ Martin, Kevin E. «Direct Rendering Infrastructure, Low-Level Design Document» (en anglès), 11-05-1999. [Consulta: 18 maig 2016].
* ↑ Owen, Jens. «A Multipipe Direct Rendering Architecture for 3D» (en anglès), 15-09-1998. Arxivat de l'original el 3 de març 2016. [Consulta: 16 abril 2016].
* ↑ «Release Notes for XFree86 4.0» (en anglès). XFree86 Project, 07-03-2000. [Consulta: 16 abril 2016].