Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Prostředek je soubor dat, který používá 3D pipeline. Vytváření prostředků a definování jejich chování je prvním krokem k programování aplikace. Tato příručka popisuje základní témata pro výběr prostředků požadovaných vaší aplikací.
Identifikace fází kanálu, které potřebují prostředky
Prvním krokem je zvolit etapu (nebo etapy) grafického kanálu, která bude používat zdroj. To znamená, že identifikujte každou fázi, která bude číst data z prostředku, a také fáze, které budou zapisovat data do prostředku. Znalost fází potrubí, ve kterých budou prostředky použity, určuje rozhraní API, která budou volána k propojení prostředků s fází.
Tato tabulka uvádí typy prostředků, které je možné svázat s jednotlivými fázemi kanálu. Zahrnuje, jestli může být prostředek vázán jako vstup nebo výstup.
| Fáze potrubí | Vstup/Výstup | Zdroj | Typ prostředku |
|---|---|---|---|
| Vstupní assembler | V | Vertex buffer | Vyrovnávací paměť |
| Vstupní assembler | V | Indexový buffer | Vyrovnávací paměť |
| Stupně shaderu | V | Shader-ResourceView | Buffer, Textura1D, Textura2D, Textura3D |
| Stupně shaderu | V | vyrovnávací paměť Shader-Constant | Vyrovnávací paměť |
| Výstup streamu | Venku | Vyrovnávací paměť | Vyrovnávací paměť |
| Sloučení výstupů | Venku | Zobrazení vykreslovacího cíle | Buffer, Textura1D, Textura2D, Textura3D |
| Sloučení výstupů | Venku | Zobrazení hloubky nebo vzorníku | Texture1D, Texture2D |
Určení způsobu použití jednotlivých prostředků
Jakmile zvolíte fáze kanálu, které bude vaše aplikace používat (a proto prostředky, které každá fáze bude vyžadovat), dalším krokem je určit, jak se jednotlivé prostředky použijí, to znamená, jestli k prostředku může přistupovat procesor nebo GPU.
Hardware, na kterém běží vaše aplikace, bude mít minimálně jeden procesor a jeden GPU. Chcete-li vybrat hodnotu využití, zvažte, který typ procesoru potřebuje číst nebo zapisovat do prostředků z níže uvedených možností.
| Využití prostředků | Může být aktualizován | Frekvence aktualizace |
|---|---|---|
| Výchozí | Grafická procesorová jednotka (GPU) | zřídka |
| Dynamický | centrální procesorová jednotka (CPU) | často |
| Příprava | Grafická procesorová jednotka (GPU) | není k dispozici |
| Neměnný | Procesor (pouze při vytváření zdroje) | není k dispozici |
Výchozí režim by měl být použit pro prostředek, u kterého se očekává, že ho procesor bude aktualizovat zřídka (méně než jednou za snímek). V ideálním případě by procesor nikdy nezapisoval přímo do zdroje s výchozím využitím, aby se zabránilo možným ztrátám výkonu.
Dynamické využití by se mělo použít pro prostředek, který CPU aktualizuje relativně často (jednou nebo vícekrát za snímek). Typickým scénářem pro dynamický prostředek by bylo vytvořit dynamické vyrovnávací paměti vrcholů a indexů, které by se za běhu plnily daty o geometrii viditelné z pohledu uživatele pro každý snímek. Tyto vyrovnávací paměti by se použily k vykreslení pouze geometrie, která je viditelná uživateli v daném okamžiku.
Využití stagingu by se mělo použít ke kopírování dat do a z jiných zdrojů. Typickým scénářem je kopírování dat v prostředku s výchozím využitím (které procesor nemá přístup) k prostředku s přípravným využitím (ke kterému má procesor přístup).
Neměnné prostředky by se měly použít, když se data v prostředku nikdy nezmění.
Dalším způsobem, jak se podívat na stejnou myšlenku, je představit si, co aplikace dělá s prostředkem.
| Jak aplikace používá prostředek | Využití prostředků |
|---|---|
| Načíst jednou a nikdy neaktualizovat | Neměnné nebo výchozí |
| Aplikace opakovaně spotřebovává zdroje. | Dynamický |
| Vykreslení na texturu | Výchozí |
| Přístup procesoru k datům GPU | Příprava |
Pokud si nejste jistí, jaké využití zvolit, začněte výchozím použitím, protože se očekává, že se jedná o nejběžnější případ. Paměť Shader-Constant je ten druh prostředku, který by měl mít vždy výchozí využití.
Přidělování prostředků ke stupňům řetězce
Prostředek může být vázán na více než jednu fázi kanálu současně, pokud jsou splněna omezení zadaná při vytvoření prostředku. Tato omezení jsou určena jako příznaky použití, příznaky svázání nebo příznaky přístupu k procesoru. Konkrétně lze prostředek vázat jako vstup a výstup současně, pokud čtení a zápis části prostředku nemůže probíhat současně.
Při vazbě prostředku se zamyslete nad tím, jak GPU a CPU přistoupí k prostředku. Prostředky, které jsou navrženy pro jeden účel (nepoužívají více příznaků pro využití, vazbu a přístup k procesoru), pravděpodobně povedou k lepšímu výkonu.
Představte si například případ cíle vykreslení, který se používá vícekrát jako textura. Může být rychlejší mít dva prostředky: cíl vykreslení a texturu použitou jako prostředek shaderu. Každý prostředek by používal pouze jeden příznak vazby označující „cíl vykreslení“ nebo „zdroj shaderu“. Data by se zkopírovala z textury vykreslovacího cíle do textury shaderu.
Tato technika v tomto příkladu může zlepšit výkon oddělením zápisu do cílového objektu vykreslování od čtení textury shaderu. Jediným způsobem, jak si být jisti, je implementovat oba přístupy a měřit rozdíl výkonu ve vaší konkrétní aplikaci.
související témata