Udostępnij przez


Migrowanie do wersji Direct3D 11

Ta sekcja zawiera informacje dotyczące migracji do wersji Direct3D 11 ze starszej wersji direct3D.

Direct3D 9 do Direct3D 11

Interfejs API Direct3D 11 opiera się na ulepszeniach infrastrukturalnych wprowadzonych w wersji Direct3D 10 i 10.1. Przenoszenie z direct3D 9 do Direct3D 11 jest podobne do przenoszenia z Direct3D 9 do Direct3D 10. Poniżej przedstawiono kluczowe wyzwania w tym wysiłku.

  • Usunięcie wszystkich stałych potoków funkcji na rzecz programowalnych shaderów utworzonych wyłącznie w HLSL (skompilowane za pomocą D3DCompiler zamiast D3DX9).
  • Zarządzanie stanem na podstawie niezmiennych obiektów, a nie pojedynczych przełączeń stanu.
  • Aktualizacja w celu zachowania zgodności z rygorystycznymi wymaganiami dotyczącymi powiązań układów wejściowych buforu wierzchołków i sygnatur shaderów.
  • Kojarzenie widoków zasobów cieniowania ze wszystkimi zasobami tekstury.
  • Mapowanie całej zawartości obrazu na DXGI_FORMAT, w tym usunięcie wszystkich formatów kolorów 24-bitowych (8/8/8) i ścisłe porządkowanie kolorów RGB w większości scenariuszy.
  • Podzielenie globalnego użycia stanu stałego na kilka małych, wydajniej zaktualizowanych buforów stałych.

Aby uzyskać więcej informacji na temat przenoszenia z Direct3D 9 do Direct3D 10, zobacz Direct3D 9 to Direct3D 10 Considerations.

Direct3D 10 do Direct3D 11

Konwertowanie programów napisanych w celu korzystania z interfejsu API Direct3D 10 lub 10.1 jest procesem prostym, ponieważ direct3D 11 jest rozszerzeniem istniejącego interfejsu API. Z tylko jednym drobnym wyjątkiem (zanotowanym poniżej — filtrowanie tekstu monochromatycznego), wszystkie metody i funkcje w trybie Direct3D 10/10.1 są dostępne w trybie Direct3D 11. W poniższym konspekcie opisano różnice między dwoma interfejsami API, które ułatwiają aktualizowanie istniejącego kodu. Najważniejsze różnice w tym miejscu obejmują:

  • Operacje renderowania (Rysowanie, stan itp.) nie są już częścią interfejsu urządzenia, lecz są częścią nowego interfejsu DeviceContext wraz z metodami mapowania/odmapowania zasobów i zapytań urządzenia.
  • Direct3D 11 obejmuje wszystkie ulepszenia i zmiany wprowadzone między direct3D 10.0 i 10.1

Wyliczenia i definicje

Direct3D 10 Direct3D 11
DXGI_FORMAT DXGI_FORMATZdefiniowano kilka nowych formatów DXGI.
D3D10_CREATE_DEVICE_SWITCH_TO_REF D3D11_CREATE_DEVICE_SWITCH_TO_REFFunkcja przełączania na tryb referencyjny nie jest obsługiwana przez Direct3D 11.
D3D10_DRIVER_TYPE D3D_DRIVER_TYPENależy pamiętać, że identyfikatory wyliczenia w D3D_DRIVER_TYPE zostały ponownie zdefiniowane z identyfikatorów w D3D10_DRIVER_TYPE. Dlatego należy użyć identyfikatorów wyliczenia zamiast liczb literałów.
D3D_DRIVER_TYPE jest zdefiniowany w pliku D3Dcommon.h.
D3D10_RESOURCE_MISC_FLAG D3D11_RESOURCE_MISC_FLAGNależy pamiętać, że wiele z tych flag zostało ponownie zdefiniowanych, dlatego zaleca się użycie identyfikatorów wyliczeniowych zamiast wartości liczbowych.
D3D10_FILTER D3D11_FILTERZwróć uwagę, że filtrowanie tekstu D3D10_FILTER_TEXT_1BIT zostało usunięte z usługi Direct3D 11. Zobacz DirectWrite.
D3D10_COUNTER D3D11_COUNTERNależy pamiętać, że liczniki neutralne od dostawcy zostały usunięte dla direct3D 11, ponieważ były rzadko obsługiwane.
D3D10_x D3D11_x Wiele wyliczenia i definicje są takie same, mają większe limity lub mają dodatkowe wartości.

Struktur

Direct3D 10 Direct3D 11
D3D10_SO_DECLARATION_ENTRY D3D11_SO_DECLARATION_ENTRYdodaje strumień.
D3D10_BLEND_DESC D3D11_BLEND_DESCZwróć uwagę, że ta struktura znacznie zmieniła się z 10 do 10.1, aby zapewnić stan mieszania dla docelowego renderowania
D3D10_BUFFER_DESC D3D11_BUFFER_DESCdodaje element StructureByteStride do użycia z zasobami cieniowania obliczeniowego
D3D10_SHADER_RESOURCE_VIEW_DESC D3D11_SHADER_RESOURCE_VIEW_DESCNależy pamiętać, że ta struktura zawiera dodatkowe elementy członkowskie unii dodane do wersji 10.1
D3D10_DEPTH_STENCIL_VIEW_DESC D3D11_DEPTH_STENCIL_VIEW_DESCposiada teraz nowy element członkowski Flags.
D3D10_QUERY_DATA_PIPELINE_STATISTICS D3D11_QUERY_DATA_PIPELINE_STATISTICSDodaje kilka nowych liczników etapów cieniowania.
D3D10_x D3D11_x Wiele struktur jest identycznych między dwoma interfejsami API.

Interfejsy

Direct3D 10 Direct3D 11
ID3D10Device ID3D11Urządzenia i ID3D11DeviceContext
Interfejs urządzenia został podzielony na te dwie części. Aby szybko portować, można użyć ID3D11Device::GetImmediateContext.
Metody "ID3D10Device::GetTextFilterSize" i "SetTextFilerSize" już nie istnieją. Zobacz DirectWrite.
Create*Shader przyjmuje dodatkowy opcjonalny parametr dla ID3D11ClassLinkage.
*UstawShader i *PobierzShader przyjmują dodatkowe opcjonalne parametry dla ID3D11ClassInstance(s).
createGeometryShaderWithStreamOutput przyjmuje tablicę i liczbę dla wielu kroków strumienia wyjściowego.
Limit parametru NumEntries CreateGeometryShaderWithStreamOutput wzrosła do D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT w trybie Direct3D 11.
ID3D10Buffer ID3D11Buffer
ID3D10SwitchToRef ID3D11SwitchToReffunkcja przełączania do ref nie jest obsługiwana w Direct3D 11.
ID3D10Texture1D ID3D11Texture1D
ID3D10Texture2D ID3D11Texture2D
ID3D10Texture3D ID3D11Texture3DMetody Map i Unmap zostały przeniesione do ID3D11DeviceContext, a wszystkie metody Map używają D3D11_MAPPED_SUBRESOURCE zamiast void**.
ID3D10Asynchronous ID3D11AsynchronousBegin, End i GetData zostały przeniesione do ID3D11DeviceContext.
ID3D10x ID3D11x Wiele interfejsów jest identycznych między dwoma interfejsami API.
Rozwiązanie 10/10.1 11 Rozwiązanie
Kompilator HLSL (D3D10Compile*, D3DX10Compile*) i API refleksji shaderów D3DCompiler (zobacz D3DCompiler.h) Uwaga: w przypadku aplikacji ze Sklepu Windows, API D3DCompiler są obsługiwane tylko podczas opracowywania, a nie wdrażania.
Efekty 10 Efekty 11 są dostępne jako udostępnione źródło online. Uwaga: To rozwiązanie nie jest odpowiednie dla aplikacji ze Sklepu Windows, ponieważ wymaga interfejsów API D3DCompiler w czasie wykonywania (wdrożenie).
D3DX9/D3DX10 Matematyka DirectXMath
D3DX10 D3DX11 w starszej wersji zestawu Sdk DirectX DirectXTex, DirectXTKi DirectXMesh oferują alternatywy dla wielu technologii w starszych bibliotekach D3DX10 i D3DX11.
Direct2D i DirectWrite oferują wysokiej jakości obsługę renderowania stylizowanych linii i czcionek.

Aby uzyskać informacje na temat starszego zestawu SDK DirectX, zobacz Gdzie jest zestaw SDK DirectX?.

Direct3D 10.1 do Direct3D 11

Direct3D 10.1 jest rozszerzeniem interfejsu Direct3D 10, a wszystkie funkcje Direct3D 10.1 są dostępne w direct3D 11. Większość zmian w oprogramowaniu z wersji 10.1 do 11 została już uwzględniona przy przechodzeniu z wersji 10 do 11.

Wyliczenia i definicje

Direct3D 10.1 Direct3D 11
D3D10_FEATURE_LEVEL1 D3D_FEATURE_LEVELidentyczne, ale zdefiniowane w D3DCommon.h oraz dodanie D3D_FEATURE_LEVEL_11_0 dla sprzętu klasy 11 wraz z D3D_FEATURE_LEVEL_9_1, D3D_FEATURE_LEVEL_9_2 i D3D_FEATURE_LEVEL_9_3 dla 10level9
(D3D10_FEATURE_LEVEL_9_1, D3D10_FEATURE_LEVEL_9_2 i D3D10_FEATURE_LEVEL_9_3 zostały również dodane dla 10,1 do d3d10_1.h)

Struktur

Direct3D 10.1 Direct3D 11
D3D10_BLEND_DESC1 D3D11_BLEND_DESCWersja 11 jest identyczna z wersją 10.1.
D3D10_SHADER_RESOURCE_VIEW_DESC1 D3D11_SHADER_RESOURCE_VIEW_DESCWersja 11 jest identyczna z wersją 10.1.

Interfejsy

Direct3D 10.1 Direct3D 11
ID3D10Device1 ID3D11Urządzenia i ID3D11DeviceContext
Interfejs urządzenia został podzielony na te dwie części. W celu szybkiego portowania można użyć ID3D11Device::GetImmediateContext.
Metody "ID3D10Device::GetTextFilterSize" i "SetTextFilerSize" już nie istnieją. Zobacz DirectWrite.
Create*Shader przyjmuje dodatkowy opcjonalny parametr dla ID3D11ClassLinkage.
*SetShader i *GetShader przyjmują dodatkowe opcjonalne parametry dla ID3D11ClassInstance(s).
createGeometryShaderWithStreamOutput przyjmuje tablicę i liczbę dla wielu kroków strumienia wyjściowego.
Limit parametru NumEntries CreateGeometryShaderWithStreamOutput wzrósł do D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT w Direct3D 11.
ID3D10BlendState1 ID3D11BlendState
ID3D10ShaderResourceView1 ID3D11ShaderResourceView

Nowe funkcje dla direct3D 11

Po zaktualizowaniu kodu do korzystania z interfejsu API Direct3D 11 istnieje wiele nowych funkcji do rozważenia.

  • Renderowanie wielowątkowe za pomocą list poleceń i wielu kontekstów
  • Implementowanie zaawansowanych algorytmów przy użyciu cieniowania obliczeniowego (przy użyciu profilów cieniowania w wersji 4.0, 4.1 lub 5.0)
  • Nowe funkcje sprzętowe klasy 11:
    • Model cieniowania HLSL 5.0
    • Dynamiczne powiązanie shaderów
    • Tessellacja za pomocą shaderów typu Hull i Domain
    • Nowe formaty kompresji bloków: BC6H dla obrazów HDR, BC7 dla obrazów o wyższej wierności
  • Wykorzystanie technologii 10level9 do renderowania na wielu urządzeniach Shader Model 2.0 i Shader Model 3.0 za pośrednictwem interfejsu API DIrect3D 11 na potrzeby obsługi sprzętu wideo niższego poziomu w systemach Windows Vista i Windows 7.
  • Korzystanie z urządzenia do renderowania oprogramowania WARP.

Nowe funkcje dla programu DirectX 11.1

System Windows 8 zawiera dodatkowe ulepszenia grafiki DirectX, które należy wziąć pod uwagę podczas implementowania kodu graficznego DirectX, które obejmują Direct3D 11.1, DXGI 1.2, Windows Display Driver Model (WDDM) 1.2, poziomu funkcji 11.1 sprzęt, konteksty urządzeń Direct2D i inne ulepszenia.

Częściowa obsługa Direct3D 11.1 jest dostępna w systemie Windows 7, a także za pośrednictwem aktualizacji platformy dla systemu Windows 7, która jest dostępna za pośrednictwem aktualizacji platformy dla systemu Windows 7.

Nowe funkcje dla programu DirectX 11.2

System Windows 8.1 zawiera Direct3D 11.2, DXGI 1.3i inne ulepszenia.

Przewodnik programowania dla Direct3D 11

Efekty (Direct3D 11)