Inleiding
DirectX 10 heeft sinds de lancering van de eerste bètaversie exclusief op Windows Vista gewerkt. Velen menen dat Microsoft gamers op die manier wilde dwingen over te stappen naar Vista en dat was voor Beyond3d reden om een en ander onder de loep te nemen.
Een van de belangrijkste 'bewijzen' voor de theorie dat Microsoft met Direct3D 10 - het grafische gedeelte van DirectX 10 - de verkopen van Vista een zetje wilde geven, heeft een historische achtergrond. Microsoft heeft in het verleden regelmatig producten uitgebracht waarvan het bedrijf zei dat ze niet zouden werken op een bepaalde Windows-versie. Verschillende hackers hebben later deze claims onderuit weten te halen. Zo ook met DirectX: toen versie 5 van deze api uitkwam werd Windows NT 4.0 volgens Microsoft niet ondersteund. Verschillende mensen hebben echter geclaimd dat ze toch DirectX 5 werkend hebben gekregen op NT4. Hoewel bepaalde delen van de Direct3D-softwarebibliotheek aan de praat gekregen zijn, is het echter nooit iemand gelukt volledige hardwareversnelling met Direct3D op NT4 aan de praat te krijgen. De reden hiervoor is simpel: het drivermodel van NT4 heeft geen enkele ondersteuning voor 3d-technologie.
Microsoft wilde in de kernel van Windows 2000 volledige ondersteuning voor 3d integreren, maar de meeste spelfanaten gebruikten enkele jaren geleden Windows 95 of 98. DirectX 5 was daarom ook gericht op deze versies van Windows. Om niet het wiel volledig opnieuw te hoeven uitvinden heeft Microsoft grote delen van de Windows 9x-3d-driverarchitectuur hergebruikt voor Windows 2000. Deze beslissing werd ondersteund door fabrikanten van grafische kaarten, omdat zij hun drivers zo niet volledig hoefden te herschrijven. De beslissing had echter ook een belangrijk nadeel: het drivermodel van Windows 9x was ontworpen voor een besturingssysteem dat directe toegang tot hardwarecomponenten toestaat. De NT-lijn stond directe toegang tot de hardware vanwege de veiligheid niet toe. Er moest tussen de hardwareaansturing en de 3d-drivers dus een extra laag gecreëerd worden, die uiteraard voor meer overhead zorgt. Ook in XP is deze laag nog aanwezig, en dat levert spelontwikkelaars slapeloze nachten op. Dit gelaagde drivermodel kan de toename van brute gpu-kracht tegenwoordig echter niet meer bijbenen, en Microsoft werd bij de ontwikkeling van Vista dus gedwongen het hele drivermodel op de schop te nemen.
Het nieuwe drivermodel
Voor Vista heeft Microsoft een volledig nieuw drivermodel ontworpen. Schematisch ziet dat er als volgt uit:

Drivermodel van XP vs. Vista (klik voor grotere afbeelding)
Op het eerste gezicht lijkt het nieuwe model van Vista complexer. Hardwarefabrikanten moeten immers naast een kernelmodedriver ook een usermodedriver schrijven. De complexiteit valt echter wel mee, zo blijkt in de praktijk. De beschikbare functies in de driver worden over de twee drivers verdeeld, op een manier die vergelijkbaar is met de Installable Client Drivers van OpenGL. Het grootste voordeel van deze tweedelige opzet is de snelheidswinst: de usermodedriver beslist welke gegevens naar het kernelmode-gedeelte gestuurd worden, en doet dat op een manier die de gpu begrijpt. Onder Windows XP stuurt de Direct3D-runtime de gegevens via een eigen protocol naar de kernel. Dat betekent dat er overhead is, doordat de gegevens gedecodeerd moeten worden naar een formaat dat de gpu herkent. Het mag nu duidelijk zijn waarom de nieuwe Direct3D-runtime niet zonder meer onder XP zal werken: de kernelinfrastructuur is volledig anders opgebouwd.

Datastromen in XP en Vista (klik voor grotere afbeelding)
Porten of interpreteren?
Nu het duidelijk is dat Direct3D 10 in zijn huidige vorm niet geschikt is voor andere besturingssystemen dan Vista, is het tijd om naar mogelijke oplossingen te kijken. Direct3D 10 is immers 'slechts' software die ontworpen is om bepaalde hardware aan te sturen. Het moet dus in theorie mogelijk zijn om een implementatie voor andere besturingssystemen te schrijven. De vraag is uiteraard wie die taak op zich zal nemen.
Het porten van Direct3D 10 naar Windows 2000 en XP
Omdat Microsoft zowel Windows 2000 en XP als Vista heeft ontwikkeld, zijn veel mensen van mening dat het voor het bedrijf uit Redmond triviaal moet zijn om Direct3D 10 te porten naar XP. Vroegere versies van DirectX zijn ook in een later stadium wel beschikbaar gesteld voor oudere besturingssystemen. Voor DirectX 9 en ouder was dit ook relatief eenvoudig: het onderliggende drivermodel bleef steeds gelijk. We hebben inmiddels gezien dat dit niet opgaat voor het drivermodel van versie 10. Een simpele update voor XP behoort dan ook niet tot de mogelijkheden. Microsoft zou een patch uit moeten brengen die een groot gedeelte van de kernel aanpast. Naast een zeer grote hoeveelheid werk voor de programmeurs van Microsoft brengt dit nogal wat risico's met zich mee. Het updaten van de kernel van een vijf jaar oud besturingssysteem zou grote gevolgen voor bestaande applicaties kunnen hebben, iets waar gebruikers van XP natuurlijk niet op zitten te wachten. Hoewel het geschikt maken van Direct3D 10 voor XP technisch gezien mogelijk is, is het dus zeer kostbaar en risicovol.
Direct3D 10 commando's toevoegen aan Windows 2000/XP
Het volledig porten van Direct3D 10 naar Windows 2000 of XP blijkt dus niet zo eenvoudig te zijn. Is het dan niet mogelijk D3D 10-commando's toe te voegen aan XP zonder de kernel te updaten? Het pre-'versie 10'-model maakte het mogelijk dat verschillende Direct3D-versies met eenzelfde driver konden werken: een driver die geschikt is voor versie 9 kan ook overweg met commando's van oudere versies. Zou er geen gebruik gemaakt kunnen worden van deze flexibiliteit om zo een aparte Direct3D-versie voor Windows XP uit te brengen?

Windows XP met Direct3D 10 uitbreiding (klik voor grotere versie)
Technisch gezien zijn er mogelijkheden, maar deze optie vergt forse aanpassingen van verschillende partijen. Microsoft moet de huidige Direct3D-runtime updaten en fabrikanten van grafische kaarten moeten al hun huidige XP-drivers bijwerken. Gezien het oude drivermodel van Windows XP zal 'XP D3D 10' net iets anders werken dan de Vista-versie. Het schrijven van een driver voor deze versie zal ook aanzienlijk complexer zijn omdat verschillende onderdelen - zoals de virtual video memory manager - niet beschikbaar zijn in XP. Deze functionaliteit zal dus in de driver zelf opgenomen moeten worden. De extra overhead die dit met zich meebrengt zal de performance van Direct3D 10 onder XP niet ten goede komen.
OpenGL gebruiken
Alle NT-versies van Windows bieden standaard ondersteuning voor OpenGL. De clientdrivers draaiden altijd al in usermode, net als de D3D 10-drivers in Vista. De communicatie tussen usermode en kernelmode is niet gebaseerd op een protocol van Microsoft, dus het moet mogelijk zijn om een OpenGL-driver extra functionaliteit te laten ondersteunen. Met andere woorden: een OpenGL-driver kan Direct3D 10-specifieke functionaliteit van een grafische kaart onder XP ondersteunen. De Direct3D 10-runtime zou zonder grote aanpassingen in staat moeten zijn om met een XP-usermodedriver te communiceren. De driver zou functioneel gelijk zijn aan de Vista-variant maar de communicatie met de kernelmodedrivers zou via OpenGL-kanalen verlopen, in plaats van langs de nieuwe Vista-route. Helaas heeft deze oplossing hetzelfde grote nadeel als de vorige: de fabrikanten zullen alle functionaliteit van het Vista-graphics kernel subsystem in hun eigen drivers moeten implementeren.

Fabrikanten brengen hun eigen implementatie uit
Iedere oplossing die we tot nu toe bekeken hebben zal extra werk van Microsoft vragen. Hoewel dat niet onmogelijk is, lijkt de kans dat dat gaat gebeuren niet erg groot. Wie zou er nog meer in staat zijn om D3D 10 naar XP te brengen? De fabrikanten van gpu's hebben reeds de beschikking over de code van de drivers. Ze hebben echter geen toegang tot de broncode van de kernel- en de usermoderuntime. Het usermode-gedeelte zouden ze, zoals gezegd, in de driver kunnen implementeren, maar de kernelzijde moet ook geschikt gemaakt worden. De fabrikanten kunnen ervoor kiezen om rechtstreeks de betreffende dll-bestanden te patchen. Dat is echter zowel technisch als juridisch geen eenvoudige optie. Ook omdat dit enorm veel tijd zal kosten - en er gedurende de ontwikkeling waarschijnlijk steeds meer Vista-systemen zullen komen - zullen de fabrikanten terughoudend zijn met investeringen in een eigen Direct3D-implementatie voor Windows XP.

Windows XP met Direct3D 10 via leverancier hardware(klik voor groter)
De toekomst
Een wrapper
De mogelijke oplossingen waarbij werk van Microsoft of de fabrikanten van gpu's nodig is, lijken nog ver weg. Er is echter nog een andere mogelijkheid, die realistischer is: een wrapper. Voor XP-ondersteuning moet hiervoor Direct3D 9 of OpenGL gebruikt worden. Omdat Direct3D 9 nogal wat features mist ten opzichte van versie 10 zou het gebruik van versie 9 onzinnig zijn. De uitbreidingsmogelijkheden van OpenGL bieden wel mogelijkheden.

Er zijn op dit moment twee teams aan het werk met Direct3D 10. Als eerste het Wine-team, dat er een Google-Summer-of-code-project van heeft gemaakt. Wine is echter bedoeld voor Linux, dus de focus van het team zal niet op D3D 10-ondersteuning voor XP liggen. Een ander initiatief, van het bedrijf FallingLeaf, heeft wel XP als prioriteit. Een eerste alphaversie van de Alky Compatiblity Libraries for Windows XP is inmiddels beschikbaar. Volgens het bedrijf moet het met deze libraries mogelijk zijn de Direct3D 10-voorbeelden uit de sdk te draaien. Helaas is de software verre van af. Zelfs voorbeelden met slechts een enkele polygoon op het scherm geven al een foutieve output. De weg naar volledige ondersteuning met de Alky-software lijkt dus nog heel lang.

Verschillen tussen de Vista- en 'Alky'-versies van D3D 10
Conclusie
Verschillende mogelijkheden voor de ondersteuning van Direct3D 10 op Windows XP zijn de revue gepasseerd. Een conclusie is al snel te trekken: zonder hulp van Microsoft en de fabrikanten van grafische kaarten zal volledige ondersteuning heel moeilijk worden. Het bouwen van een wrapper is vanuit technisch oogpunt een mooie oplossing, maar zal voor de massa waarschijnlijk geen afdoende oplossing bieden. In de tijd die nodig is om een volledig werkende wrapper te ontwikkelen zullen bovendien steeds meer mensen de overstap naar Vista maken, waardoor de noodzaak voor een wrapper steeds kleiner wordt. Toch zal de geïnvesteerde tijd waarschijnlijk vruchten afwerpen: de opgedane ervaring kan bijvoorbeeld goed helpen bij het porten van Direct3D 10 naar Linux.