Freigeben über


Migrieren zu Direct3D 11

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

Direct3D 9 zu Direct3D 11

Die Direct3D 11-API baut auf den infrastrukturellen Verbesserungen in Direct3D 10 und 10.1 auf. Das Portieren von Direct3D 9 zu Direct3D 11 ähnelt dem Wechsel von Direct3D 9 zu Direct3D 10. Im Folgenden sind die wichtigsten Herausforderungen dieser Bemühungen aufgeführt.

  • Entfernung aller festen Funktionspipelines zu Gunsten programmierbarer Shader, die ausschließlich in HLSL erstellt wurden (kompiliert über D3DCompiler anstelle von D3DX9).
  • Die Zustandsverwaltung basiert auf unveränderlichen Objekten und nicht auf individuellen Zustandswechseln.
  • Aktualisierung, um die strengen Verknüpfungsanforderungen für Vertexpuffereingabelayouts und Shadersignaturen zu erfüllen.
  • Zuordnen von Shaderressourcensichten zu allen Texturressourcen.
  • Zuordnen aller Bildinhalte zu einem DXGI_FORMAT, einschließlich des Entfernens aller 16-Bit-Farbformate (5/5/5/5/1, 5/6/5, 4/4/4/4), Entfernen aller 24-Bit-Farbformate (8/8/8) und strikte RGB-Farbreihenfolge.
  • Aufteilen der globalen Konstantenzustandsnutzung in mehrere kleine, effizienter aktualisierte Konstantenpuffer.

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: monochrome Textfilterung) sind alle Methoden und Funktionen in Direct3D 10/10.1 in Direct3D 11 verfügbar. In der folgenden Übersicht werden die Unterschiede zwischen den beiden APIs beschrieben, die beim Aktualisieren des vorhandenen Codes helfen. Die wichtigsten Unterschiede sind dabei:

  • Renderingvorgänge (Zeichnen, Zustand usw.) sind nicht mehr Teil der Device-Schnittstelle, sondern teil der neuen DeviceContext-Schnittstelle zusammen mit ressourcenzuordnungs-/unmap- und Geräteabfragemethoden.
  • Direct3D 11 enthält alle Verbesserungen und Änderungen zwischen Direct3D 10.0 und 10.1

Enumerationen und Definierten

Direct3D 10 Direct3D 11
DXGI_FORMAT DXGI_FORMATMehrere neue DXGI-Formate wurden definiert.
D3D10_CREATE_DEVICE_SWITCH_TO_REF D3D11_CREATE_DEVICE_SWITCH_TO_REFDie Switch-to-Ref-Funktionalität wird von Direct3D 11 nicht unterstützt.
D3D10_DRIVER_TYPE D3D_DRIVER_TYPEBeachten Sie, dass die Enumerationsbezeichner in D3D_DRIVER_TYPE aus den Bezeichnern in D3D10_DRIVER_TYPE neu definiert wurden. Daher sollten Sie unbedingt 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. Verwenden Sie daher unbedingt Enumerationsbezeichner anstelle von Literalzahlen.
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 Indikatoren für Direct3D 11 entfernt wurden, da sie selten unterstützt wurden.
D3D10_x D3D11_x Viele Enumerationen und Definierten sind identisch, weisen größere Grenzwerte auf oder weisen zusätzliche Werte auf.

Strukturen

Direct3D 10 Direct3D 11
D3D10_SO_DECLARATION_ENTRY D3D11_SO_DECLARATION_ENTRYFügt Stream hinzu.
D3D10_BLEND_DESC D3D11_BLEND_DESCBeachten Sie, dass sich diese Struktur erheblich von 10 auf 10,1 geändert hat, um pro Renderziel-Blendzustand bereitzustellen.
D3D10_BUFFER_DESC D3D11_BUFFER_DESCFügt eine StructureByteStride für die Verwendung mit Compute-Shaderressourcen hinzu.
D3D10_SHADER_RESOURCE_VIEW_DESC D3D11_SHADER_RESOURCE_VIEW_DESCBeachten Sie, dass für diese Struktur zusätzliche Gewerkschaftsmitglieder für 10.1 hinzugefügt wurden.
D3D10_DEPTH_STENCIL_VIEW_DESC D3D11_DEPTH_STENCIL_VIEW_DESCVerfügt über ein neues Flags-Element.
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
ID3D10Geräte ID3D11Device und ID3D11DeviceContext
Die Geräteschnittstelle wurde in diese beiden Teile unterteilt. Für eine schnelle Portierung können Sie ID3D11Device::GetImmediateContext verwenden.
Die Methoden "ID3D10Device::GetTextFilterSize" und "SetTextFilerSize" sind nicht mehr vorhanden. Siehe DirectWrite.
Create*Shader 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.
ID3D10Buffer ID3D11Buffer
ID3D10SwitchToRef ID3D11SwitchToRefDie Switch-to-Ref-Funktionalität wird in Direct3D 11 nicht unterstützt.
ID3D10Texture1D ID3D11Texture1D
ID3D10Texture2D ID3D11Texture2D
ID3D10Texture3D ID3D11Texture3DDie Methoden Map und Unmap wurden zu ID3D11DeviceContext verschoben, und alle Map-Methoden verwenden D3D11_MAPPED_SUBRESOURCE anstelle von void**.
ID3D10Asynchron ID3D11AsynchronBegin, End und GetData wurden zu 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) Hinweis: Für Windows Store-Apps werden die D3DCompiler-APIs nur für die Entwicklung und nicht für die Bereitstellung unterstützt.
Effekte 10 Effects 11 ist online als freigegebene Quelle verfügbar. Hinweis: Diese Lösung eignet sich nicht für Windows Store-Apps, da sie die D3DCompiler-APIs zur Laufzeit (Bereitstellung) erfordert.
D3DX9/D3DX10 Mathe DirectXMath
D3DX10 D3DX11 im Legacy-DirectX SDK DirectXTex, DirectXTK und DirectXMesh bieten Alternativen zu vielen Technologien in den Legacybibliotheken D3DX10 und D3DX11.
Direct2D und DirectWrite bieten hochwertige Unterstützung für das Rendern von formatierten Linien und Schriftarten.

Informationen zum Legacy-DirectX SDK finden Sie unter Wo befindet sich das DirectX SDK?.

Direct3D 10.1 bis 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 auf 11 wurde bereits behandelt, um von 10 auf 11 zu wechseln.

Enumerationen und Definieren

Direct3D 10.1 Direct3D 11
D3D10_FEATURE_LEVEL1 D3D_FEATURE_LEVELIdentisch, aber in D3DCommon.h definiert, plus dem 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 auch 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 mit Version 10.1 identisch.
D3D10_SHADER_RESOURCE_VIEW_DESC1 D3D11_SHADER_RESOURCE_VIEW_DESCDie Version 11 ist mit Version 10.1 identisch.

Schnittstellen

Direct3D 10.1 Direct3D 11
ID3D10Device1 ID3D11Device und ID3D11DeviceContext
Die Geräteschnittstelle wurde in diese beiden Teile aufgeteilt. Für eine schnelle Portierung können Sie ID3D11Device::GetImmediateContext verwenden.
Die Methoden "ID3D10Device::GetTextFilterSize" und "SetTextFilerSize" sind nicht mehr vorhanden. Weitere Informationen finden Sie unter DirectWrite.
Create*Shader 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

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

  • Multithread-Rendering über Befehlslisten und mehrere Kontexte
  • Implementieren erweiterter Algorithmen mit Compute-Shader (mithilfe von Shaderprofilen 4.0, 4.1 oder 5.0)
  • Neue Hardwarefeatures der 11-Klasse:
    • HLSL-Shadermodell 5.0
    • Dynamische Shaderverknüpfung
    • Tessellation durch Hull- und Domain-Shader
    • Neue Blockkomprimierungsformate: BC6H für HDR-Bilder, BC7 für Standardbilder mit höherer Genauigkeit
  • Verwendung der 10level9-Technologie für das Rendern auf vielen Shader Model 2.0- und Shader Model 3.0-Geräten über die DIrect3D 11-API für die Unterstützung von Videohardware unter Windows Vista und Windows 7.
  • Verwenden des WARP-Softwarerenderinggeräts.

Neue Features für DirectX 11.1

Windows 8 enthält weitere DirectX-Grafikverbesserungen, die Sie bei der Implementierung Ihres DirectX-Grafikcodes berücksichtigen sollten, darunter Direct3D 11.1, DXGI 1.2, Windows Display Driver Model (WDDM) 1.2, Featureebene 11.1-Hardware, Direct2D-Gerätekontexte und andere Verbesserungen.

Teilweise Unterstützung für Direct3D 11.1 ist unter Windows 7 sowie über das Plattformupdate für Windows 7 verfügbar, das über das Plattformupdate für Windows 7 verfügbar ist.

Neue Features für DirectX 11.2

Die Windows 8.1 enthält Direct3D 11.2, DXGI 1.3 und andere Verbesserungen.

Programmieranleitung für Direct3D 11

Effekte (Direct3D 11)