Dann ergibt es halt doch wenig sinn, dass DX10 bei gleichen Befehlen wie DX9 schneller ist. Oder halt DX12 zu 11.
Da muss dann ja auch schon Middleware mit drin sein, der MÖGLICHE zusätzliche Hardwarezugriff wars bei 9-> 10 ja nicht, oder?
Oder war da "noch" eine Abstraktionsschicht drüber, die bei DX10 entfernt wurde?
DX9 --> DX10 hatte eine Reihe von Veränderungen.
Die API ist letztendlich auch nur Software, welches Konstrukte und Konzepte definiert, mit der dazu passenden Shader-Sprache.
Je nachdem wie die API aufgebaut wird, wird mal mehr oder weniger abstrahiert und eine Abstraktion ist immer das verbergen von spezifischen Details und alles selber machen.
Aber die Sachen verschwinden nicht, dass erledigt dann jemand anderes.
Sei es der Treiber und da gibt es User-Mode-Drivers, Kernel-Driver, WDDM welches da irgendwo dazwischen alles steuert, übergreifend das Betriebssystem.
Und die API-Runtime selber.
Mit einer neuen Version kann man vieles updaten und etwas anders definieren.
DX10 hat z.B. das Treiber-Modell vollkommen geändert, Vista war die Geburtsstunde von WDDM.
http://www.beyond3d.com/images/articles/D3D10XP/D3D10onXP2-big.png
Toller Artikel:
Beyond3D - Will Direct3D 10 ever come to Windows XP?
Was DX10 mitunter auch effizienter macht, ist eine andere Abstraktionsform.
State-Objects wurden eingeführt, welche wenn ich das richtig verstehe, die Zustände bündeln und jedes mal wenn du etwas änderst, du insgesamt nur die objekte ändern musst, aber nicht jeden einzelnen Zustand.
Dann muss die CPU weniger ackern.
So eine Übersicht an Features und Veränderungen findest du bei MS selber:
https://msdn.microsoft.com/en-us/library/windows/desktop/bb172268(v=vs.85).aspx
Demnach war schon immer alles möglich, mit DX12 wirds halt dann "leichter" möglich. Ähnlich wie DX9 -> 10?
Kommt natürlich darauf an, was du mit "alles möglich" meinst, aber allgemein heißt die Antwort nein.
Wir haben mittlerweile moderne APUs, die sich Speicher teilen, dass Konzept von shared-memory kennt DX11 und früher gar nicht.
Wie du später selber sagst, dass ist natürlich ein sehr wichtiger Teil.
Das ist ein Teilgrund warum unser Traum von iGPUs einsetzen überhaupt ermöglicht wird.
Dieser ganze copy-overhead der früher definiert wurde, weil er musste es dank der Hardware auch, ist nun Vergangenheit.
Wobei natürlich nur theoretisch, irgendjemand muss es umsetzen und erst Kaveri und Haswell (Broadwell eher und Skylake erst recht) sind modern genug.
DX12 ist eine kleine Bibel an sich, da ändern sich viele Dinge, sehr krass.
Also da gibt es viele Sachen die nun deutlich effizienter laufen und erst dadurch Sinn machen.
Egal ob Rendering, ROVs, Conservative Rasterization, Tiled Resources for Volumes oder Computing, mit expliziter Speicherverwaltung, Multi-Engine für mehrere Befehlsschlangen auf einmal oder für die CPU mit echtem Multi-Threading Konzept.
WDDM2.0 gibt es auch noch, was den Overhead für vieles senkt.
Es soll halt dann auch überall laufen, sprich nicht proprietär sein. Der Grund warum in Spielephysik seit 10 Jahren quasi nix passiert, ist doch zum Großteil der proprietäre Ansatz eines PhysX und weil Havok nie deren GPGPU Ansatz "Havok FX" released haben (das ginge jetzt mit Compute Shader bzw Open CL ja aber doch und man wäre direkte Konkurrenz zu GPU PhysX).
Seit DX11 ginge vieles theoretisch auch.
Wird letztendlich auch gemacht.
HairWorks, DirectCompute, VGXI (Diese Globale Beleuchtung mit Voxeln) DirectCompute, GodRays, DirectCompute.
AMD hat TressFX, DirectCompute, sie haben so ein Partikel-Sample und Rauch Zeug, DirectCompute.
Und mit OpenCL könnte man da noch mehr machen, als mit DX11.
(Bei OCL 2.1 vs. DX12 Compute, ich glaube da ist OCL leider weiterhin vorne.)
Bloß das ist halt verdammt aufwendig, so eine Physik-Bibliothek zu erstellen. Außer Havok, PhysX und Bullet und so Kriechzeug kenne ich nicht viel.
Enlighten ist eine Middleware für Beleuchtung, setzt die Frostbite-Engine ein, ich glaube sogar auch die UE4.
Da sieht man einfach, dass Zeug haben wir nicht, weil es nicht möglich wäre, sondern weil es "niemand" macht, wegen Aufwand/Kosten oder sonstigem.
Oder eben middleware verwendet, soweit ich das nun verstehe
Oder das. Aus Browser-Sicht könnte man zu einer Middleware ja auch Plugin sagen.
Du steckst etwas rein, was du haben möchtest.
Das muss deppeneinfach und sicher werden, dass es in Zukunft jede Engine verwendet.
Deppeneinfach ist explizite Kontrolle sicher nicht.
Deswegen läuft DX11 und OpenGL weiter, weil DX12 und Vulkan nichts für "Amateure" sind.
Mal sehen, wie mutig und wie gut die Umsetzungen sein werden.
Ich will mehr Physik als Spielelement sehen (etwa im Half Life 2 Ansatz, nur halt... naja weiter) sowie mehr mögliche bzw einfacher zu implementierende KI.
Ich bin da ehrlich gesagt auch schockiert. Havok ist ja nicht weg vom Fenster und PhysX entwickelt sich auch immer weiter.
Mir fehlt aber das Gefühl, eine Mauer überwunden zu haben, wo man denkt, endlich kann ich wenigstens paar Mauern explodieren lassen oder endlich läuft die K.I. nicht in einer Routine.
Ich erinnere mich da nur an PS1/PS2 Spiele mit Red-Faction, wo man fast alles kaputt machen konnte oder Vigilante 8, wo der ganze Boden mit den Vertex-Meshes geformt wurde.
Das sehe ich in modernen Spielen nicht mehr, sogar Rückschritte auf gewissen Gebieten.
Aber hey, die Grafik ist besser geworden...
Btw andere Frage: ist es möglich OpenCL und DX gleichzeitig zu verwenden oder schließt es sich aus praktischen Gründen aus (wie OpenGL und gleichzetitig Direct 3D?
Möglich ist es, aber ich vermute es gibt dort Gründe, weswegen man es lieber vermeidet.
Es sind unterschiedliche APIs, entsprechend sieht auch beides unterschiedlich aus und generiert spezifische API-Objekte und Ressourcen.
Zusätzlich ist der Support ein Problem
*hust* Nvidia *hust*
Nvidia stellt aber natürlich auch ein Gegenbeispiel dar, CUDA für PhysX.
Aber da macht es Nvidia es einem natürlich einfacher, PhysX ist eine fertige Middleware, rein damit und das läuft dann irgendwie.
Nvidia hat sich darum gekümmert.
Außerhalb davon, haben wir aber ebenso CUDA fast nie für Spiele gesehen.
RAGE hat CUDA mal für GPU-Transcodierung benützt, Just Cause 2 glaube ich für Wasser und dann fällt mir nicht viel mehr ein. (Noch so ein Zweite Weltkrieg FlugzeugSpiel, was erst(?) kommt, auch glaub für Wasser)