System och arkitektur för grafik i Linux
Man har länge kunnat spela häftiga 3D spel i Linux, och haft häftiga 3D effekter på skrivbordsmiljön, etc.
Men systemet och arkitekturen för grafik i Linux har inte varit så bra.
Man har inte haft någon minneshanterare för grafikminne, vilket har betytt att vissa saker inte varit möjliga. Man har inte kunnat allokerat offscreen buffers (därmer inte pbuffers (pixel buffers), eller fbos).
Inte heller har man kunnat sammanföra 2D och 3D operationer vilket gjort att Direkt Rendering inte har varit möjlig. Då har man istället använt sig utav Accelererad Indirekt Rendering vilket är ett hack man använt sig utav i brist på grafikminneshanterare. Indirekt rendering är långsammare och sämre.
Nvidia har haft de bäst fungerande drivrutinerna. I Nvidias proprietära drivrutiner har Nvidia kringgått dessa begränsningar genom att integrera en egenutvecklad grafikminneshanterare i sin drivrutiner. Synd bara att drivrutinen inte är öppen, och att Nvidia inte delat med sig av sin grafikminneshanterare.
Så medan grafik i Linux ändå fungerat ganska bra (iaf med Nvidias proprietära drivrutin), så har det saknats system och arkitekturen har inte varit den bästa. Lyckligtvis håller ändring på att ske.
Tungsten Graphics utvecklade grafikminneshanteraren TTM (Translation Table Maps) som planerades att den skulle inkluderas i Linux kärnan. Detta hände inte, då man istället bestämde sig för att använda sig utav Intels grafikminneshanterare GEM (Graphics Execution Manager) som mergades (inkluderades) i Linux kärnan 2.6.28rc1, som är under utveckling.
GEM kommer att användas i Intels grafikkrets drivrutin (xf86-video-intel). Den kommer även att användas i ATI/AMDs öppna drivrutin. Samt i Nouveau, en öppen drivrutin för Nvidias grafikkort.
Tungsten Graphics håller på med Gallium3D.
Tungsten Graphics kommer även att implementera stöd för OpenGL 3.0 i Mesa.
I Linux kärnan 2.6.29 så planeras det att inkludera stöd för mode-setting i kärnan, vilket kommer att medföra att det kommer bli stabilare och snabbare att växla mellan virtuella terminaler, och X. Det kommer även att flimra mindre när man bootar, vilket kan komma att bli trevligt med Red Hats projekt Plymouth, vilket är en ny grafik boot-process. Drivrutinerna måste ha stöd för kernel-baserad mode-setting. Intels drivrutiner och ATIs kommer ha stöd för det, även Nouveau framöver.
ATI har släppt specifikationer och har även öppna drivrutiner. AMD sammarbetar med Novell för att ta fram en öppen drivrutin kallad RadeonHD. Vi får hoppas att Nvidia också börjar öppna upp nu framöver...
Xorg
När man forkade XFree86 och startade Xorg, så har mycket tid gått åt att fixa saker som var fel från XFree86 kodbasen. Tex så gjorde man kodbasen modulär (detta hände i Xorg 7.0). Vissa saker och moduler i Xorg behövs omskrivas och fixas till lite, visa APIs (Xlib? Xt?) är lite fula och så. DMX (Distributed Multi-head X) har skrivits om ganska mycket nyligen. Xinerama kan nog behövas fixas lite. Men X Window System (X11) har en bra arkitektur och är ganska häftigt, det är nätverkstransparent genom designen vilket är väldigt coolt.
Linux / Windows
En intressant grej är att det grafiska systemet i Linux har alltid körts i user-space.
I Windows så har det grafiska systemet körts i kernel-space (inte så bra, då detta har medfört att om det grafiska systemet kraschar då drar den hela kärnan och hela systemet med sig).
I Vista så har Microsoft flyttat ut delar ur det grafiska systemet från kernel-space till user-space (alltså mer likt Linux än förut), delar som mode-setting har de dock fortfarande kvar i kärnan.
Samtidigt så flyttar Linux in mode-setting till kernel-space (alltså mer likt Windows än förut). Så vi går båda mot samma mål och möts nu lite. Vi blir båda lite mer lika.
När
Om 2-3 månader kommer Linux kärnan 2.6.28 med GEM grafikminneshanteraren.
Om 5-6 månader kommer Linux kärnan 2.6.29 med kernel-based mode-setting.
Om 5 månader kommer Xorg 7.5 (med Xserver 1.6 eller 1.7). Den kommer med E-EDID stöd, MPX (Multi-pointer X), predictable pointer acceleration, Xinput 2/3, XKB 2, RandR 1.3, och förhoppningsvis DRI2 (Direct Rendering Infrastructure). Gamla bibliotek (cfb, afb, etc) och oanvända extensions försvinner (AppGroup, EVI, XTrap, etc).