Migrieren zu Direct3D 11

Dieser Abschnitt enthält Informationen zum Migrieren von einer früheren Version von Direct3D zu Direct3D 11.

Direct3D 9 zu Direct3D 11

Die Direct3D 11-API baut auf den Infrastrukturverbesserungen in Direct3D 10 und 10.1 auf. Das Portieren von Direct3D 9 auf Direct3D 11 ähnelt dem Wechsel von Direct3D 9 zu Direct3D 10. Im Folgenden finden Sie die wichtigsten Herausforderungen bei diesem Versuch.

  • Entfernung aller Festen Funktionspipelines zugunsten von programmierbaren Shadern, die ausschließlich in HLSL erstellt wurden (kompiliert über D3DCompiler anstelle von D3DX9).
  • Die Zustandsverwaltung basiert auf unveränderlichen Objekten und nicht auf einzelnen Zustandsschaltern.
  • Aktualisierung, um die strengen Verknüpfungsanforderungen von Vertexpuffereingabelayouts und Shadersignaturen zu erfüllen.
  • Zuordnen von Shaderressourcenansichten zu allen Texturressourcen.
  • Zuordnen aller Bildinhalte zu einem DXGI-FORMAT, einschließlich entfernen aller _ 16-Bit-Farbformate (5/5/5/1, 5/6/5, 4/4/4/4), Entfernen aller 24-Bit-Farbformate (8/8/8) und strikte RGB-Farb reihenfolge.
  • Aufbrechen der globalen konstanten Zustandsverwendung in mehrere kleine, effizienter aktualisierte konstanten Puffer.

Weitere Informationen zum Wechsel von Direct3D 9 zu Direct3D 10 finden Sie unter Überlegungen zu Direct3D 9 zu Direct3D 10.

Direct3D 10 zu Direct3D 11

Das Konvertieren von Programmen, die für die Verwendung der Direct3D 10- oder 10.1-API geschrieben wurden, ist ein direkter Prozess, da Direct3D 11 eine Erweiterung der vorhandenen API ist. Mit nur einer geringfügigen Ausnahme (siehe unten : monotone Textfilterung), sind alle Methoden und Funktionen in Direct3D 10/10.1 in Direct3D 11 verfügbar. In der folgenden Gliederung werden die Unterschiede zwischen den beiden APIs beschrieben, um die Aktualisierung von vorhandenem Code zu helfen. Die wichtigsten Unterschiede sind hier:

  • Renderingvorgänge (Zeichnen, Zustand usw.) sind nicht mehr Teil der Geräteschnittstelle, sondern Teil der neuen DeviceContext-Schnittstelle zusammen mit Ressourcenzuordnungs-/Zuordnungs- und Geräteabfragemethoden.
  • Direct3D 11 enthält alle Verbesserungen und Änderungen, die zwischen Direct3D 10.0 und 10.1 vorgenommen wurden.

Enumerationen und Definitionen

Direct3D 10 Direct3D 11
_DXGI-FORMAT DXGI _ FORMATMehrere neue DXGI-Formate wurden definiert.
D3D10 _ – _ GERÄTEWECHSEL ZU REF _ _ _ ERSTELLEN D3D11 _ CREATE _ DEVICE SWITCH TO _ _ _ REFDie Switch-to-Ref-Funktionalität wird von Direct3D 11 nicht unterstützt.
_D3D10-TREIBERTYP _ D3D _ _TREIBERTYPBeachten Sie, dass die Enumerationsbezeichner in D3D _ DRIVER _ TYPE von den Bezeichnern in D3D10 _ DRIVER TYPE neu definiert _ wurden. Daher sollten Sie sicherstellen, dass Sie die Enumerationsbezeichner anstelle von Literalzahlen verwenden.
D3D _ DRIVER _ TYPE ist in D3Dcommon.h definiert.
D3D10 _ RESOURCE _ MISC _ FLAG D3D11 _ RESOURCE _ MISC _ FLAGBeachten Sie, dass viele dieser Flags neu definiert wurden. Achten Sie daher darauf, Enumerationsbezeichner anstelle von Literalzahlen zu verwenden.
D3D10 _ FILTER D3D11 _ FILTERBeachten Sie, dass die Textfilterung D3D10 _ FILTER TEXT _ _ 1BIT aus Direct3D 11 entfernt wurde. Siehe DirectWrite.
D3D10 _ COUNTER D3D11 _ COUNTERBeachten Sie, dass die anbieterneutralen Leistungsindikatoren für Direct3D 11 entfernt wurden, da sie nur selten unterstützt wurden.
D3D10 _ x D3D11 x Viele Enumerationen und Definitionen sind identisch, haben größere Grenzwerte _ oder zusätzliche Werte.

Strukturen

Direct3D 10 Direct3D 11
D3D10– _ _ DEKLARATIONSEINTRAG _ D3D11 _ SO _ DECLARATION _ ENTRY FügtStream hinzu.
D3D10 _ BLEND _ DESC D3D11 _ BLEND _ DESC BeachtenSie, dass sich diese Struktur erheblich von 10 in 10,1 geändert hat, um den Blendzustand pro Renderziel zu ermöglichen.
D3D10 _ BUFFER _ DESC D3D11 _ BUFFER _ DESC Fügtein StructureByteStride für die Verwendung mit Compute-Shaderressourcen hinzu.
D3D10 _ SHADER _ RESOURCE _ VIEW _ DESC D3D11 _ SHADER _ RESOURCE _ VIEW _ DESC BeachtenSie, dass für diese Struktur zusätzliche Union-Member für 10.1 hinzugefügt wurden.
D3D10 _ _ TIEFEN-SCHABLONENANSICHT _ _ DESC D3D11 _ DEPTH _ STENCIL _ VIEW _ DESCVerfügt über ein neues Flags-Member.
D3D10 _ QUERY _ DATA _ PIPELINE _ STATISTICS D3D11 _ QUERY _ DATA _ PIPELINE _ STATISTICSFügt mehrere neue Shaderstufenindikatoren hinzu.
D3D10 _ x D3D11 _ x Viele Strukturen sind zwischen den beiden APIs identisch.

Schnittstellen

Direct3D 10 Direct3D 11
ID3D10Device ID3D11Device und ID3D11DeviceContext
Die Geräteschnittstelle wurde in diese beiden Teile aufgeteilt. Für schnelles Portieren können Sie ID3D11Device::GetImmediateContext verwenden.
Die Methoden "ID3D10Device::GetTextFilterSize" und "SetTextFilerSize" sind nicht mehr vorhanden. Siehe DirectWrite.
Zum * Erstellen eines Shaders wird ein zusätzlicher optionaler Parameter für ID3D11ClassLinkage verwendet.
*SetShader und * GetShader verwenden zusätzliche optionale Parameter für ID3D11ClassInstance(s).
CreateGeometryShaderWithStreamOutput verwendet ein Array und eine Anzahl für mehrere Ausgabestreamschritte.
Der Grenzwert für den NumEntries-Parameter von CreateGeometryShaderWithStreamOutput wurde auf D3D11 _ SO STREAM COUNT _ _ * D3D11 _ SO OUTPUT COMPONENT COUNT in _ _ _ Direct3D 11 erhöht.
ID3D10Buffer ID3D11Buffer
ID3D10SwitchToRef ID3D11SwitchToRef Switch-to-Ref-Funktionen werden in Direct3D 11 nicht unterstützt.
ID3D10Texture1D ID3D11Texture1D
ID3D10Texture2D ID3D11Texture2D
ID3D10Texture3D ID3D11Texture3D Die Map- und Unmap-Methoden wurden in ID3D11DeviceContextverschoben, und alle Map-Methoden verwenden D3D11 _ MAPPED _ SUBRESOURCE anstelle eines * * void-Objekts.
ID3D10Asynchronous ID3D11Asynchronous Begin, End und GetData wurden in ID3D11DeviceContext verschoben.
ID3D10x ID3D11x Viele Schnittstellen sind zwischen den beiden APIs identisch.
10/10.1-Lösung 11 Lösung
HLSL-Konformer (D3D10Compile,D3DX10Compile) und Shaderreflektions-APIs D3DCompiler (siehe D3DCompiler.h)
[!Note]
Für Windows Store-Apps werden die D3DCompiler-APIs nur für die Entwicklung und nicht für die Bereitstellung unterstützt.

Effekte 10 Effekte 11 ist als freigegebene Quelle online verfügbar.
[!Note]
Diese Lösung eignet sich nicht für Windows Store Apps, da sie die D3DCompiler-APIs zur Laufzeit (Bereitstellung) erfordert.

D3DX9/D3DX10 Math DirectXMath
D3DX10 D3DX11 im älteren DirectX SDK DirectXTex, DirectXTKund DirectXMesh bieten Alternativen zu vielen Technologien in den Legacybibliotheken D3DX10 und D3DX11.
Direct2D und DirectWrite bieten qualitativ hochwertige Unterstützung für das Rendern von formatierten Linien und Schriftarten.

Informationen zum älteren DirectX SDK finden Sie unter Wo befindet sich das DirectX SDK?.

Direct3D 10.1 zu Direct3D 11

Direct3D 10.1 ist eine Erweiterung der Direct3D 10-Schnittstelle, und alle Features von Direct3D 10.1 sind in Direct3D 11 verfügbar. Der Großteil der Portierung von 10.1 zu 11 wurde bereits oben von 10 zu 11 adressiert.

Enumerationen und Definitionen

Direct3D 10.1 Direct3D 11
D3D10 _ FEATURE _ LEVEL1 D3D _ FEATURE _ LEVELIdentisch, aber in D3DCommon.h definiert sowie das Hinzufügen von D3D _ FEATURE LEVEL _ _ 11 _ 0 für 11-Klassenhardware zusammen mit D3D _ FEATURE LEVEL _ _ 9 _ 1, D3D _ FEATURE LEVEL _ _ 9 _ 2 und D3D _ FEATURE LEVEL _ _ 9 _ 3 für 10level9
(D3D10 _ FEATURE _ LEVEL _ 9 _ 1, D3D10 _ FEATURE LEVEL _ _ 9 _ 2 und D3D10 _ FEATURE LEVEL _ _ 9 _ 3 wurden ebenfalls für 10.1 zu d3d10 _ 1.h hinzugefügt.

Strukturen

Direct3D 10.1 Direct3D 11
D3D10 _ BLEND _ DESC1 D3D11 _ BLEND _ DESCDie Version 11 ist identisch mit 10.1.
D3D10 _ _ SHADER-RESSOURCENANSICHT _ _ DESC1 D3D11 _ SHADER _ RESOURCE _ VIEW _ DESCDie Version 11 ist mit 10.1 identisch.

Schnittstellen

Direct3D 10.1 Direct3D 11
ID3D10Device1 ID3D11Device und ID3D11DeviceContext
Die Geräteschnittstelle wurde in diese beiden Teile aufgeteilt. Zum schnellen Portieren können Sie ID3D11Device::GetImmediateContextverwenden.
Die Methoden "ID3D10Device::GetTextFilterSize" und "SetTextFileerSize" sind nicht mehr vorhanden. Weitere Informationen finden Sie unter DirectWrite.
Shader erstellen * verwendet einen zusätzlichen optionalen Parameter für ID3D11ClassLinkage.
*SetShader und * GetShader verwenden zusätzliche optionale Parameter für ID3D11ClassInstance(s).
CreateGeometryShaderWithStreamOutput verwendet ein Array und die Anzahl für mehrere Ausgabestreamschritte.
Der Grenzwert für den NumEntries-Parameter von CreateGeometryShaderWithStreamOutput wurde auf D3D11 _ SO STREAM COUNT _ _ * D3D11 _ SO OUTPUT COMPONENT COUNT in _ _ _ Direct3D 11 erhöht.
ID3D10BlendState1 ID3D11BlendState
ID3D10ShaderResourceView1 ID3D11ShaderResourceView

Neue Features für Direct3D 11

Sobald Ihr Code für die Verwendung der Direct3D 11-API aktualisiert wurde, sind zahlreiche neue Features zu berücksichtigen.

  • Multithreadrendering über Befehlslisten und mehrere Kontexte
  • Implementieren erweiterter Algorithmen mithilfe des Compute-Shaders (mithilfe von Shaderprofilen 4.0, 4.1 oder 5.0)
  • Neue Hardwarefeatures der 11-Klasse:
    • HLSL-Shadermodell 5.0
    • Dynamische Shaderbindung
    • Mosaik durch Hüllen- und Domänen-Shader
    • Neue Blockkomprimierungsformate: BC6H für HDR-Images, BC7 für Standardimages mit höherer Genauigkeit
  • Verwendung der 10level9-Technologie für das Rendern auf vielen Shader-Geräten vom Typ "Model 2.0" und "Shader Model 3.0" über die DIrect3D 11-API zur Unterstützung von Lower-End-Videohardware auf Windows Vista und Windows 7.
  • Nutzen des WARP-Softwarerenderinggeräts.

Neue Features für DirectX 11.1

Windows 8 enthält weitere DirectX-Grafikverbesserungen, die sie berücksichtigen sollten, wenn Sie Ihren DirectX-Grafikcode implementieren, z.B. Direct3D 11.1, DXGI 1.2, Windows Display Driver Model (WDDM) 1.2,Hardware auf Featureebene 11.1, Direct2D-Gerätekontexte und andere Verbesserungen.

Teilunterstützung für Direct3D 11.1 ist auch auf Windows 7 verfügbar, und zwar über das Plattformupdate für Windows 7,das über das Plattformupdate für Windows 7verfügbar ist.

Neue Features für DirectX 11.2

Die Windows 8.1 umfasst Direct3D 11.2, DXGI 1.3und andere Verbesserungen.

Programmieranleitung für Direct3D 11

Effekte (Direct3D 11)