[wege]mini schrieb:
sehr guter punkt, die meisten heutigen dx12 games sind dx11.1 (was nvidia nicht konnte - daher nennt man es heute "dx12") und ob full feature dx12 wirklich jemals umgesetzt wird, werden wir sehen. es ging und geht immer nur um den cpu overhead.
mfg
DX12 Spiele sind DX12 Spiele, weil sie die DX12 API verwenden.
Es gibt seit DX10.1 Feature-Levels, welche einen gewissen Funktionsumfang definieren, aber speziell ab DX11.2 und DX12 nicht mehr alle Funktionen beinhalten und nicht die grundlegende Funktionsweise der API definieren.
DX11.1 hat z.B. FL11_1 eingeführt und das FL11_1 kann Nvidia bei Fermi-Maxwell v1 nicht unterstützen.
Die API DX11.1 selber aber schon, aber maximal mit dem Funktionsumfang FL11_0.
DX12 bietet FL11_0 auch an, aber wie gesagt beinhaltet ein FL nicht alle Funktionen und Bestandteile einer API.
DX12 ist immer eine explizite API, wo selber Command-Lists erstellt werden müssen und Funktionen wie Async Compute/Async Compute oder auch ExecuteIndirect immer zur Verfügung stehen, egal welches FL man unter DX12 verwendet, aber unter DX11 ist das alles nicht verfügbar oder funktioniert gänzlich anders.
Als Bild:
Wenn ein Spiel DX11 FL11_0 und DX12 FL11_0 verwendet, können sich beide API-Pfade dennoch grundlegend in mehreren Aspekten unterscheiden, auch wenn ein gewisser Funktionsumfang identisch ausfällt, aber wie gesagt ein gewisser Funktionsumfang, nicht der gesamte Funktionsumfang der gesamten API.
Nvidia unterstützt mit Fermi-Maxwell v1 kein FL11_1 und dieses Feature-Level ist effektiv identisch zwischen DX11 und DX12, dass heißt Fermi-Maxwell v1 unterstützen sowohl die DX11, als auch die DX12-API, aber beide mit maximal FL11_0.
Um es noch etwas komplexer zu machen, die Feature-Levels stellen ein definiertes Paket an Funktionen dar, welche ein Entwickler abfragen kann.
Das Feature-Level wurde aber von MS gemeinschaftlich mit anderen IHVs/ISVs definiert, beinhaltet aber Funktionen welche viele Spiele gar nicht verwenden bzw. verwenden müssen.
Entwickler haben auch die Freiheit viele Features welche sich in einem Feature-Level befinden oder noch gar nicht befinden, einzeln abzufragen.
Z.B. kann man DX12 verwenden, sagen die Hardware muss FL11_1 + Resource Binding Tier 2 + Conservative Rasterization Tier 2 unterstützen.
Jede Hardware, welche diese Konstellation erfüllt, kann das Spiel abspielen.
Hardware welche z.B. FL12_0 unterstützt, aber nicht Conservative Rasterization Tier 2 könnte das Spiel aber nicht unterstützen.
Die Feature-Levels sind primär deswegen definiert, um Entwicklern das Leben etwas einfacher zu machen.
Statt im Zweifel 1000 Features einzeln abzufragen, kann man sagen das hier ist das Mindestmaß + "X","Y" und fertig.
Es motiviert auch Hardwarehersteller konkrete Feature-Levels zu unterstützen, weil sie innerhalb der API die klarste Richtlinie darstellen.