Sdílet prostřednictvím


Funkce Direct3D 11

Průvodce programováním obsahuje informace o tom, jak používat programovatelný kanál Direct3D 11 k vytvoření 3D grafiky v reálném čase pro hry a pro vědecké a desktopové aplikace.

Výpočetní shader

Výpočetní shader je programovatelný shader navržený pro paralelní zpracování dat pro obecné účely. Jinými slovy, výpočetní shadery umožňují použití GPU jako univerzálního paralelního procesoru. Výpočetní shader je podobný ostatním programovatelným stínovačům kanálů (například vrchol, pixel, geometrie) způsobem, jakým přistupuje ke vstupům a výstupům. Technologie shaderu výpočetních prostředků se také označuje jako technologie DirectCompute. Výpočetní shader je integrovaný do Direct3D a je přístupný prostřednictvím zařízení Direct3D. Může přímo sdílet paměťové prostředky s grafickými shadery pomocí zařízení Direct3D. Není však přímo připojen k jiným fázím shaderu.

Výpočetní shader je navržený pro aplikace s hromadným trhem, které provádějí výpočty v interaktivních rychlostech, kdy náklady na přechod mezi rozhraním API (a přidruženým softwarovým zásobníkem) a procesorem spotřebovávají příliš velkou režii.

Výpočetní shader má svou vlastní sadu stavů. Výpočetní shader nemusí nutně mít vynucené mapování 1 až 1 na vstupní záznamy (například vrchol shader dělá) nebo výstupní záznamy (například pixel shader). Některé funkce grafického shaderu jsou podporované, ale jiné byly odebrány, aby bylo možné přidat nové funkce specifické pro výpočetní shader.

Pro podporu funkcí specifických pro výpočetní shader je nyní k dispozici několik nových typů prostředků, jako jsou vyrovnávací paměti pro čtení a zápis, textury a strukturované vyrovnávací paměti.

Další informace najdete v přehledu výpočetního shaderu.

Dynamické propojení shaderu

Vykreslovací systémy musí při správě shaderů řešit značné složitosti a zároveň poskytují možnost optimalizovat kód shaderu. To je ještě větší výzva, protože shadery musí podporovat různé materiály v vykreslené scéně v různých konfiguracích hardwaru. Aby se tento problém vyřešili, vývojáři shaderu se často uchýlili k jednomu ze dvou obecných přístupů. Vytvořili buď plně funkční velké, obecné shadery, které mohou být používány širokou škálou položek scény, které se liší od určitého výkonu pro flexibilitu, nebo vytvořily jednotlivé shadery pro každý geometrický proud, typ materiálu nebo požadovanou kombinaci světlého typu.

Tyto rozsáhlé shadery pro obecné účely tuto výzvu zpracovávají opětovným zkompilováním stejného shaderu s různými definicemi preprocesoru a druhá metoda používá výkon vývojáře hrubou silou k dosažení stejného výsledku. Exploze permutace shaderu je často problémem pro vývojáře, kteří teď musí spravovat tisíce různých permutací shaderu v rámci svého herního kanálu a kanálu prostředků.

Model Direct3D 11 a shader 5 představuje konstruktory jazyka orientované na objekty a poskytuje podporu běhu propojení shaderu, který vývojářům pomáhá programovat shadery.

Další informace najdete v tématu dynamického propojení.

Multithreading

Řada grafických aplikací je svázaná s procesorem kvůli nákladným aktivitám, jako jsou procházení grafů scény, řazení objektů a simulace fyziky. Vzhledem k tomu, že systémy s více jádry jsou stále častěji dostupné, technologie Direct3D 11 zlepšila podporu multithreadingu, aby bylo možné efektivně pracovat mezi více vlákny procesoru a grafickými rozhraními API D3D11.

Direct3D 11 umožňuje následující funkce podporovat multithreading:

  • Souběžné objekty se teď vytvářejí v samostatných vláknech – vytváření funkcí vstupních bodů, které vytvářejí objekty bez vláken, umožňuje mnoha vláknům vytvářet objekty současně. Aplikace teď může například zkompilovat shader nebo načíst texturu na jedno vlákno při vykreslování na jiném.
  • Seznamy příkazů lze vytvořit na více vláknech – seznam příkazů je zaznamenána posloupnost grafických příkazů. S Direct3D 11 můžete vytvářet seznamy příkazů na více vláknech procesoru, což umožňuje paralelní procházení databáze scény nebo fyzikální zpracování na více vláknech. Tím se uvolní hlavní vykreslovací vlákno pro odesílání vyrovnávacích pamětí příkazů do hardwaru.

Další informace najdete v MultiThreading.

Tvorba mozaiky

Tessellation lze použít k vykreslení jednoho modelu s různými úrovněmi podrobností. Tento přístup generuje geometričtější model, který závisí na úrovni podrobností vyžadovaných pro scénu. Použití tessellation ve scéně, kde úroveň podrobností umožňuje nižší geometrický model, který snižuje poptávku po šířce pásma paměti spotřebované během vykreslování.

V Direct3D se tessellation implementuje na GPU za účelem výpočtu plynulejší zakřivené plochy z hrubé (méně podrobné) vstupní opravy. Každá (čtyřúhelníček) patch face je rozdělena na menší trojúhelníkové tváře, které lépe přibližují požadovanou plochu.

Informace o implementaci tessellation v grafickém kanálu naleznete v tématu Tessellation Přehled.

Úplný seznam funkcí

Toto je úplný seznam funkcí Direct3D 11.

  • Direct3D 11 můžete spustit na nižších hardwarových tím, že při vytváření zařízení specifikujete úroveň funkce.

  • Pomocí následujících typů shaderu můžete provádět tessellation (viz přehled Tessellation – přehled):

    • Shader trupu
    • Shader domény
  • Direct3D 11 podporuje multithreading (viz MultiThreading)

    • Prostředek s více vlákny, shader/ vytvoření objektu
    • Vytvoření seznamu s více vlákny
  • Direct3D 11 rozšiřuje shadery s následujícími funkcemi (viz Model shaderu 5)

    • Adresovatelné prostředky – textury, konstantní vyrovnávací paměti a vzorkovníky

    • Další typy prostředků, jako jsou vyrovnávací paměti pro čtení a zápis a textury (viz Nové typy prostředků).

    • Podprogramy

    • Výpočetní shader (viz Přehled výpočetního shaderu) – shader, který urychlí výpočty rozdělením problémového prostoru mezi několik softwarových vláken nebo skupin vláken a sdílením dat mezi shaderem se výrazně sníží množství dat potřebných pro vstup do shaderu. Algoritmy, které výpočetní shader může výrazně zlepšit, zahrnují následné zpracování, animaci, fyziku a umělou inteligenci.

    • Shader geometrie (viz Funkce shaderu geometrie)

      • Vytváření instancí – Umožňuje geometrii shaderu výstupu maximálně 1024 vrcholů nebo jakékoli kombinace instancí a vrcholů až do 1024 (maximálně 32 instancí 32 vrcholů).
    • Pixel shader

      • Pokrytí jako vstup PS

      • Programovatelná interpolace vstupů – shader pixelů může vyhodnotit atributy v pixelu, kdekoli v mřížce s více razítky.

      • Centroid vzorkování atributů musí dodržovat následující pravidla:

        • Pokud jsou všechny vzorky v primitivu pokryté, atribut se vyhodnocuje ve středu pixelů bez ohledu na to, jestli vzor vzorku obsahuje umístění vzorku ve středu pixelu.

        • V opačném případě se atribut vyhodnotí v první zahrnuté ukázce, tj. vzorek s nejnižším indexem ze všech indexů vzorku. V této situaci je pokrytí vzorku určeno po použití logické operace AND na pokrytí a stav rasterizátoru masky vzorku.

        • Pokud nejsou pokryty žádné vzorky (například na pomocných pixelech, které jsou spouštěny mimo hranice primitivního vyplnění 2x2 pixelů razítka), atribut se vyhodnotí jedním z následujících způsobů:

          • Pokud je stav rasterizátoru masky vzorku podmnožinou vzorků v pixelu, první vzorek, na který se vztahuje stav rastrového rastrového maskování vzorku, je vyhodnocovací bod.
          • V opačném případě je v plné podmínce masky vzorku středem pixelu bod vyhodnocení.
  • Direct3D 11 rozšiřuje textury (viz přehled textur ) s následujícími funkcemi

    • Shromáždit 4

      • Podpora textur s více komponentami – určení kanálu, ze které se má načíst
      • Podpora programovatelných posunů
    • Proudem

      • Texturové svorky pro omezení předinstalovaného WDDM
    • Omezení textury 16 tisíc

    • Vyžadovat 8 bitů přesnosti subtexelu a submisu při filtrování textury

    • Nové formáty komprese textury (1 nový formát LDR a 1 nový formát HDR)

  • Direct3D 11 podporuje konzervativní oDepth – tento algoritmus umožňuje shaderu pixelů porovnat hloubkovou hodnotu pixelového shaderu s hodnotou pixelového shaderu s rastrovačem. Výsledek umožňuje operace počátečního odpočítání hloubky při zachování schopnosti výstupu oDepth z pixelového shaderu.

  • Direct3D 11 podporuje velkou paměť

    • Povolit prostředky > 4 GB
    • Udržujte indexy prostředků 32bit, ale prostředky větší
  • Direct3D 11 podporuje vylepšení výstupu streamu.

    • Výstup adresovatelného streamu
    • Zvýšení počtu výstupů streamu na 4
    • Změna všech výstupních vyrovnávacích pamětí streamu na více prvků
  • Direct3D 11 podporuje shader Model 5 (viz Shader Model 5)

    • Doubles with denorms
    • Instruktážní nastavení počtu bitů
    • Vyhledání instrukce první sady bitů
    • Manipulace s přenosem a přetečením
    • Pokyny k vrácení bitů pro FFT
    • Vnitřní funkce podmíněného prohození
    • Pryskyřicefo na vyrovnávacích pamětích
    • Reciproční hodnota s nižší přesností
    • Pokyny pro převod shaderu - fp16 na fp32 a naopak
    • Strukturovaná vyrovnávací paměť, což je nový typ vyrovnávací paměti obsahující strukturované prvky.
  • Direct3D 11 podporuje hloubku jen pro čtení nebo zobrazení vzorníků.

    • Zakáže zápisy do části, která je určená jen pro čtení, umožňuje používat texturu jako vstup a hloubkové odpisování.
  • Direct3D 11 podporuje nepřímé kreslení – Direct3D 10 implementuje DrawAuto, který přebírá obsah (vygenerovaný GPU) a vykresluje ho (na GPU). Direct3D 11 generalizuje DrawAuto, aby jej mohl volat výpočetní shader pomocí DrawInstanced a DrawIndexedInstanced.

  • Direct3D 11 podporuje různé funkce

    • Oblasti zobrazení s plovoucí desetinou čárkou
    • Uchycení mipmapy pro jednotlivé prostředky
    • Hloubková odchylka – Tento algoritmus aktualizuje chování hloubkové předsudky pomocí rasterizačního stavu. Výsledek eliminuje scénáře, ve kterých by počítaná odchylka mohla být NaN.
    • Omezení prostředků – Indexy prostředků musí být stále <= 32 bitů, ale prostředky můžou být větší než 4 GB.
    • Přesnost rasterizátoru
    • Požadavky MSAA
    • Čítače se snížily
    • Odebrání 1bitového formátu a filtru textu

Funkce přidané v předchozích verzích

Seznam funkcí přidaných v předchozích verzích najdete v následujících tématech:

Novinky v direct3D 11