Sdílet prostřednictvím


Migrace na Direct3D 11

Tato část obsahuje informace o migraci na Direct3D 11 ze starší verze Direct3D.

Direct3D 9 do Direct3D 11

Rozhraní API Direct3D 11 vychází z vylepšení infrastruktury v Direct3D 10 a 10.1. Přenos z Direct3D 9 na Direct3D 11 se podobá přechodu z Direct3D 9 na Direct3D 10. Toto jsou klíčové výzvy v tomto úsilí.

  • Odebrání veškerého použití kanálu s pevnou funkcí ve prospěch programovatelných shaderů vytvořených výhradně v HLSL (kompilováno prostřednictvím D3DCompiler místo D3DX9).
  • Správa stavu založená na neměnných objektech, nikoli na jednotlivých přepínačích stavu.
  • Aktualizace pro splnění přísných požadavků na propojení rozložení vstupního vyrovnávacího bufferu a podpisy shaderu.
  • Přidružení zobrazení prostředků shaderu ke všem prostředkům textury
  • Mapování veškerého obsahu obrázku na DXGI_FORMAT, včetně odebrání všech 24bitových barevných formátů (8/8/8) a striktního řazení barev RGB pro většinu scénářů.
  • Rozdělení globálního používání konstantního stavu do několika malých konstantních vyrovnávacích pamětí, které se efektivněji aktualizují.

Další informace o přechodu z Direct3D 9 na Direct3D 10 viz Podrobnosti o přechodu z Direct3D 9 na Direct3D 10.

Direct3D 10 do Direct3D 11

Převod programů napsaných pro použití rozhraní API Direct3D 10 nebo 10.1 je přímý proces, protože Direct3D 11 je rozšířením stávajícího rozhraní API. Pouze s jednou menší výjimkou (uvedeno níže – monochromatické filtrování textu) jsou všechny metody a funkce direct3D 10/10.1 dostupné v Direct3D 11. Následující osnova popisuje rozdíly mezi těmito dvěma rozhraními API, které vám pomůžou s aktualizací existujícího kódu. Mezi hlavní rozdíly zde patří:

  • Operace vykreslování (Kreslení, stav atd.) už nejsou součástí rozhraní zařízení, ale jsou součástí nového rozhraní DeviceContext spolu s metodami dotazů na prostředky Map/Unmap a zařízení.
  • Direct3D 11 zahrnuje všechna vylepšení a změny provedené mezi Direct3D 10.0 a 10.1

Výčty a definice

Direct3D 10 Direct3D 11
DXGI_FORMAT DXGI_FORMATbylo definováno několik nových formátů DXGI.
D3D10_CREATE_DEVICE_SWITCH_TO_REF D3D11_CREATE_DEVICE_SWITCH_TO_REFFunkce "switch-to-ref" není podporována Direct3D 11.
D3D10_DRIVER_TYPE D3D_DRIVER_TYPEVšimněte si, že identifikátory výčtu v D3D_DRIVER_TYPE byly předdefinovány z identifikátorů v D3D10_DRIVER_TYPE. Proto byste měli být jisti, že místo literálových čísel použijete identifikátory výčtu.
D3D_DRIVER_TYPE je definován v souboru D3Dcommon.h.
D3D10_RESOURCE_MISC_FLAG D3D11_RESOURCE_MISC_FLAGVšimněte si, že mnohé z těchto příznaků byly redefinovány, proto místo číselných literálů používejte identifikátory výčtu.
D3D10_FILTER D3D11_FILTERVšimněte si, že filtrování textu D3D10_FILTER_TEXT_1BIT bylo odebráno z Direct3D 11. Viz DirectWrite.
D3D10_COUNTER D3D11_COUNTERVšimněte si, že u Direct3D 11 byly odebrány čítače neutrálního dodavatele, protože byly zřídka podporovány.
D3D10_x D3D11_x mnoho výčtů a definice jsou stejné, mají větší limity nebo mají další hodnoty.

Struktury

Direct3D 10 Direct3D 11
D3D10_SO_DECLARATION_ENTRY D3D11_SO_DECLARATION_ENTRYpřidává stream.
D3D10_BLEND_DESC D3D11_BLEND_DESCVšimněte si, že tato struktura se výrazně změnila od verze 10 na 10.1, aby poskytovala stav míchání pro každý cíl renderování.
D3D10_BUFFER_DESC D3D11_BUFFER_DESCpřidá StructureByteStride pro použití s prostředky výpočetního shaderu
D3D10_SHADER_RESOURCE_VIEW_DESC D3D11_SHADER_RESOURCE_VIEW_DESCVšimněte si, že do této struktury byly přidány další členy unie pro verzi 10.1.
D3D10_DEPTH_STENCIL_VIEW_DESC D3D11_DEPTH_STENCIL_VIEW_DESCmá nový člen nazvaný Flags.
D3D10_QUERY_DATA_PIPELINE_STATISTICS D3D11_QUERY_DATA_PIPELINE_STATISTICSpřidá několik nových čítačů fáze shaderu.
D3D10_x D3D11_x mnoho struktur je mezi těmito dvěma rozhraními API stejné.

Rozhraní

Direct3D 10 Direct3D 11
ID3D10Device ID3D11Device a ID3D11DeviceContext
Rozhraní zařízení bylo rozděleno do těchto dvou částí. Pro rychlé přenosy můžete použít ID3D11Device::GetImmediateContext.
Metody ID3D10Device::GetTextFilterSize a SetTextFilerSize již neexistují. Viz DirectWrite.
Create*Shader přebírá další volitelný parametr pro ID3D11ClassLinkage.
*SetShader a *GetShader přijímají další volitelné parametry pro ID3D11ClassInstance(s).
CreateGeometryShaderWithStreamOutput přebírá pole a počet kroků ve více výstupních proudech.
Limit parametru NumEntries CreateGeometryShaderWithStreamOutput se zvýšil na D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT v Direct3D 11.
ID3D10Buffer ID3D11Buffer
ID3D10SwitchToRef ID3D11SwitchToRefFunkcionalita přepnutí na referenci není v Direct3D 11 podporovaná.
ID3D10Texture1D ID3D11Texture1D
ID3D10Texture2D ID3D11Texture2D
ID3D10Texture3D ID3D11Texture3Dmetody Map a Unmap byly přesunuty do ID3D11DeviceContexta všechny metody Map používají D3D11_MAPPED_SUBRESOURCE místo void**.
ID3D10Asynchronní ID3D11AsynchronousBegin, End a GetData byly přesunuty do ID3D11DeviceContext.
ID3D10x Rozhraní ID3D11x Many jsou stejná mezi těmito dvěma rozhraními API.
10/10.1 Řešení 11 Řešení
Kompilátor HLSL (D3D10Compile*, D3DX10Compile*) a rozhraní API reflexe shaderu D3DCompiler (viz D3DCompiler.h) Poznámka: pro aplikace pro Windows Store se rozhraní API D3DCompiler podporují jenom pro vývoj, nikoli pro nasazení.
Efekty 10 Effects 11 je k dispozici jako sdílený zdroj online. Poznámka: Toto řešení není vhodné pro aplikace pro Windows Store, protože vyžaduje rozhraní API D3DCompiler za běhu (nasazení).
Matematika D3DX9/D3DX10 DirectXMath
D3DX10 D3DX11 ve starší verzi sady DirectX SDK DirectXTex, DirectXTKa DirectXMesh nabízejí alternativy k mnoha technologiím ve starších knihovnách D3DX10 a D3DX11.
Direct2D a DirectWrite nabízejí vysoce kvalitní podporu vykreslování čar a písem.

Informace o starší verzi sady DirectX SDK najdete v tématu Kde je sada DirectX SDK?.

Direct3D 10.1 do Direct3D 11

Direct3D 10.1 je rozšíření rozhraní Direct3D 10 a všechny funkce Direct3D 10.1 jsou k dispozici v Direct3D 11. Většina přenosu z verze 10.1 na 11 již byla řešena výše, při přechodu z 10 na 11.

Výčty a definice

Direct3D 10.1 Direct3D 11
D3D10_FEATURE_LEVEL1 D3D_FEATURE_LEVELIdentické, ale definované v D3DCommon.h plus přidání D3D_FEATURE_LEVEL_11_0 pro hardware třídy 11 spolu s D3D_FEATURE_LEVEL_9_1, D3D_FEATURE_LEVEL_9_2 a D3D_FEATURE_LEVEL_9_3 pro 10level9
(D3D10_FEATURE_LEVEL_9_1, D3D10_FEATURE_LEVEL_9_2 a D3D10_FEATURE_LEVEL_9_3 byly přidány také pro verzi 10.1 do d3d10_1.h)

Struktury

Direct3D 10.1 Direct3D 11
D3D10_BLEND_DESC1 D3D11_BLEND_DESCVerze 11 je shodná s verzí 10.1.
D3D10_SHADER_RESOURCE_VIEW_DESC1 D3D11_SHADER_RESOURCE_VIEW_DESCVerze 11 je shodná s verzí 10.1.

Rozhraní

Direct3D 10.1 Direct3D 11
ID3D10Device1 ID3D11Device a ID3D11DeviceContext
Rozhraní zařízení bylo rozděleno do těchto dvou částí. Pro rychlé přenosy můžete použít ID3D11Device::GetImmediateContext.
" ID3D10Device::GetTextFilterSize" a "SetTextFilerSize" metody již neexistují. Viz DirectWrite.
Create*Shader přebírá další volitelný parametr pro ID3D11ClassLinkage.
*SetShader a *GetShader mají další volitelné parametry pro ID3D11ClassInstance(s).
CreateGeometryShaderWithStreamOutput přebírá pole a počet kroků ve více výstupních proudech.
Limit parametru NumEntries CreateGeometryShaderWithStreamOutput se zvýšil na D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT v Direct3D 11.
ID3D10BlendState1 ID3D11BlendState
ID3D10ShaderResourceView1 ID3D11ShaderResourceView

Nové funkce pro Direct3D 11

Po aktualizaci kódu tak, aby používal rozhraní API Direct3D 11, existuje mnoho nových funkcí, které zvážit.

  • Vícevláknové vykreslování prostřednictvím seznamů příkazů a více kontextů
  • Implementace pokročilých algoritmů pomocí výpočetního shaderu (pomocí profilů shaderu 4.0, 4.1 nebo 5.0)
  • Nové hardwarové funkce třídy 11:
    • HLSL Shader Model 5.0
    • Dynamické propojení shaderu
    • Tessellation prostřednictvím Hull a Domain shaderů
    • Nové formáty komprese bloků: BC6H pro obrázky HDR, BC7 pro standardní obrázky s vyšší věrností
  • Použití technologie 10level9 pro vykreslování na mnoha zařízeních Model shaderu 2.0 a Shader Model 3.0 prostřednictvím rozhraní API DIrect3D 11 pro podporu hardwaru s nižším koncem videa v systémech Windows Vista a Windows 7.
  • Využití softwarového vykreslovacího zařízení WARP

Nové funkce pro DirectX 11.1

Systém Windows 8 obsahuje další vylepšení grafiky DirectX, která je potřeba zvážit při implementaci grafického kódu DirectX, který zahrnuje Direct3D 11.1, DXGI 1.2, Model ovladače zobrazení systému Windows (WDDM) 1.2, úroveň funkcí 11.1 hardware, kontexty zařízení Direct2D a další vylepšení.

Částečná podpora Direct3D 11.1 je dostupná i ve Windows 7 prostřednictvím Platform Update pro Windows 7, která je dostupná prostřednictvím Platform Update pro Windows 7.

Nové funkce pro DirectX 11.2

Windows 8.1 obsahuje Direct3D 11.2, DXGI 1.3a další vylepšení.

Průvodce programováním pro direct3D 11

Efekty (Direct3D 11)