Naja, kisser sagt nur, dass man mit beiden APIs dasselbe Ergebnis erzielen kann, nicht, dass man sie
auf dieselbe Art und Weise erzielen kann. Das dürfte zumindest für die einfachsten Feature Level im Großen und Ganzen stimmen, siehe D3D 11.3.
Außer eben bei der Performance. D3D11 hat eben ein härteres Draw Call-Limit und man kann eben nicht jeden Draw Call vermeiden, zumal D3D11 wie gesagt auch kein Indirect Multidraw unterstützt und man damit zwangsläufig mehr Draw Calls braucht als in Vulkan, D3D12 oder - festhalten - OpenGL. Andere Gründe hab ich vor einigen Beiträgen genug aufgezählt. Dazu komt dann eben die Zustandsvalidierung bei jedem popeligen Zustandswechsel.
Was du da aufzählst, ist lediglich die Art und Weise,
wie Dx12 etwas erledigt. Da haben die alten APIs eben andere Entsprechungen für, die letztenendes aber genau das gleiche machen.
Command Buffer Recording, Command List und Command Queues
Gab es in den alten APIs nicht, letztenendes ist das aber funktional äquivalent zu einer Sequenz von Funktionsaufrufen.
Bei OpenGL 1.x gab es sowas übrigens schonmal, nannte sich Display List. Im Grunde witzig, dass ein ähnliches Feature nach so vielen Jahren wieder aufgetaucht ist.
Entspricht der State Machine in OpenGL. Keine Ahnung, wie genau das bei D3D11 aussieht, das arbeitet aber wohl auch irgendwie mit globalen Zuständen. Das wird einfach nur dezentralisiert, damit man mal sowas wie Multicore-Skalierung hinbekommt.
Descriptor Heap und Desciptor Tables
Descriptor Sets sind die Binding Points für Texturen, Buffer und Konsorten. Ebenfalls nichts neues, nur die Art und Weise, wie man sie anspricht, ist neu.
Sagt mir jetzt ehrlich gesagt nichts, zumal es den Begriff in der Vulkan- und OpenGL-Welt nicht gibt.
3D engine, compute engine, copy engine
Da weiß ich auch nicht, wofür Microsoft sich da jetzt wieder so unklare Namen ausgedacht hat, aber wahrscheinlich sind damit einfach nur die verschiedenen Queue-Familien gemeint. Die explizite Zuordnung war früher nicht nötig (=> Treiber), am Rendering-Prozess ändert sich dadurch aber nichts.
Was soll eigentlich die Streiterei um Async Compute? Lest euch doch mal die
Dokumentation zu dem Thema durch. Das "Feature", ist in erster Linie ein Nebeneffekt davon, dass man verschiedene Queues in D3D12 explizit ansprechen kann und muss. Letztenendes sind mehrere Execution Engines quasi eine Art SMT für Grafikkarten, und ein gewisser Hersteller kann dadurch eben Vorteile für sich verbuchen, und ein gewisser anderer Hersteller hat damit eben Probleme.