Ich habe mich die Tage nun über DirectX etwas schlau gelesen, ein paar kleine DX Applikationen im Quelltext durchgeforstet usw.
So, nun mal zur Funktionsweise die ich mal ganz grob beschreibe.
Da gibts einmal die DX-Applikation, DirectX selbst, den HAL (Hardware Abstraction Layer) der zu DX gehört und letztendlich die GPU.
Schlussendlich die Zeit in Nanosekunden (ns) um die es geht.
Zu DirectX < 10 Zeiten sah das Ganze so aus:
DX-Applikation: "Hey DX, ich will ein Rechteck. Das soll so ... groß sein."
DX: "Geht klar. So, mal sehen was für eine GPU da rumturnt (ns vertreichen..). Aha GPU xy. Hat die GPU schon soetwas vielleicht gleich drin?" Hey GPU, kannst du ein Rehteck zeichnen mit größe ... ?! (ns vertsreichen ...)"
--- zwei Möglichkeiten ---
--- I ---
GPU: "Nö"
DX: "Okay, muss das nun irgendwie umdödeln, dass die GPU das versteht. (ns verstreichen ...)"
DX rechnet ...
DX: "Okay GPU, hier hast du es so, dass du es verstehst!"
GPU: "Danke. Ich zeichne."
--- II ---
GPU: "Jupp."
DX: "Hey HAL. Wie muss der konkrete Befehl für die GPU aussehen."
HAL: "Ich mach mal kurz einen auf GPU xy, dann siehst du's. (ns vertsreichen ...)"
DX: "Danke ich sehs. GPU, hier dein Befehl."
GPU: "Danke, ich zeichne."
Ab DX10 sieht das Ganze so aus:
DX-Applikation: "Ich will ein Rechteck."
DX: "Geht klar. Hey GPU, du verstehst nun absofort meinen Dialekt, also bekommst du gleich den Befehl. Zeichne das und das und das ... (wenige ns vergehen ...)"
GPU: "Danke, ich zeichne."
So, nach diesem groben Beispiel kann man sich denke warum DX10 (rein theoretisch) schneller ist. Einige Abstraktionsebenen wurden einfach gestrichen, da DX10 von der GPU quasi nun verlangt den eigenen Dialekt zu verstehen. Hier können Objekte direkt an die GPU durchgepipet werden.
Ähnliches wurde beim OpenGL Standard mittels DRI realisiert, dass unter unixoiden Systemen, also auch Linux zum Einsatz kommt. Da OpenGL ein Standard ist, dessen Dialekt auf so ziemlich jeder GPU umgesetzt wird, können definierte Objekte direkt ohne Umweg auf das Bild gebracht werden. Daher DRI (Direct Rendering Infrastructure). Der Treiber muss die Befehle einfach nur noch weiterleiten.
Falls kein DRI möglich war, mussten Bibliotheken wie MESA, das Ganze emulieren. Man kann sich denken, dass das ordentlich auf Kosten der Performance ging. Dabei war Software-MESA ein weitaus größerer Brocken als der HAL von DX. Daher war DX<10 im Vergleich zu Software-MESA imme rnoch ein gutes Stück schneller.
Jedoch kann man beides unter Linux (von anderen Unixoiden weiß ichs nicht genau) nutzen. Entweder werden die Objekte direkt über DRI, oder eben über Software-MESA gepipet. Aus diesem Aspekt wäre es theorethisch sehr wohl möglich DX 10 auf ein anderes System zu portieren.
ABER:
Linux hat den Vorteil der Modularität. Als Beispiel seien nur die vershiedenen Möglichkeiten erwähnt wie man OpenGL Objekte in ein X-Window embedden kann. Hier arbeiten X11 aka xorg bzw. xfree komplett anders als der - ich nenns mal - "Windowmanager" von Windows.
Hier liegt nun auch der Kanckpunkt der Portabilität von DX10 auf Windows XP. Ich habe nicht die ganze Funktionsweise der Oberfläche von WinXP durchstudiert, versuche es aber möglichst gut nach eigener Erkenntnis begriflich zu machen. Fallls WinXP die Arbeitsweise besitzt, sämtlich Objekte die für eine GPU gedacht sind über gewisse Abstraktionsschichten zu jagen ist eine Umstellung zur Arbeitsweise wie bei DX10 schier unmöglich. Sämtliche Komponeneten die nur irgendetwas mit der darstellung auf dem Bildschirm zu tun hätten müssten umgeschrieben werden.
Man muss sich vortsllen man hat ein Kartenhaus dass meherer zig Meter hoch ist und nun muss man alle Karten umstellen, damit eine Karte in der untersten Ebene entfernt werden kann. So ein vorhaben ist zum Scheitern verurteilt.
DX 10 ist ein konsequente Weiterentwicklung. Nicht nur in technischer Hinsicht sondern auch hinsichtlich der Nutzung der großen Verbreitung. Hier wurde nun der Ball der "Interpretation" an die Grafikkartenhersteller geschoben, die sich exakt an diesen Dialekt halten müssen. Quasi kann Microsoft damit sogar viel bei der Herstellung der GPU's steuern.
Man könnte wiederrum versuchen auf WindowsXP DX10 Befehle über einen Layer durchzujagen, dass dann wiederrum an DX9 geben und dann das Objekt zeichnen ... aber es kann sich jeder vermutlich denken, dass selbst wenn Microsoft es darum ginge soetwas puschen zu wollen, sich soetwas nicht freiwillig antut...
Man kann DX10 verglichen mit OpenGL nun so sehen:
OpenGL ist ein Dialekt den alle GPU's korrekt interpretieren müssen und dieser ist offen und liegt standardisiert unter der Feder der ARM der Allgemeinheit offen.
DirectX10 ist im Prinzip das Analog dazu, nur dass die Schnittstellen nicht durchgängig offen sind und der Besitz bei Microsoft liegt.
Ich hoffe, dass hiermit einige Unklarheiten geklärt sind.
BTW: Das Ganze ist ohne Gewähr... ich habe mich nur auf die Schnelle schlau gemacht. Wer Fehler findet kann sie ja einfach nennen.