Sdílet prostřednictvím


Výběr prostředku (Direct3D 10)

Prostředek je kolekce dat, která se používá v 3D procesu. 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 fázi potrubí (nebo fáze), která bude prostředek používat. 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, zda může být prostředek vázán jako vstup nebo výstup, a také API pro vazbu.

Fáze potrubí Vstup/Výstup Zdroj Typ prostředku Propojení API
Vstupní assembler V Vertex buffer Vyrovnávací paměť IASetVertexBuffers
Vstupní assembler V Vyrovnávací paměť indexu Vyrovnávací paměť IASetIndexBuffer
Fáze shaderu V Shader-ResourceView Buffer, Textura1D, Textura2D, Textura3D VSSetShaderResources, GSSetShaderResources, PSSetShaderResources
Shaderové fáze V vyrovnávací paměť Shader-Constant Vyrovnávací paměť VSSetConstantBuffers, GSSetConstantBuffers, PSSetConstantBuffers
Výstup streamu Venku Vyrovnávací paměť Vyrovnávací paměť SOSetTargets
Sloučení výstupů Ven Zobrazení cíle vykreslení Puffer, Textura1D, Textura2D, Textura3D OMSetRenderTargets
Fúze výstupu Ven Zobrazení hloubky nebo vzorníku Texture1D, Texture2D OMSetRenderTargets

 

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. Pokud chcete vybrat hodnotu využití, zvažte, jaký typ procesoru musí číst nebo zapisovat do prostředku z následujících možností (viz D3D10_USAGE).

Využití prostředků Může být aktualizován Frekvence aktualizace
Výchozí GPU zřídka
Dynamický CPU (procesor) často
Příprava GPU není k dispozici
Neměnný Procesor (pouze při vytváření zdroje) není k dispozici

 

Výchozí využití by se mělo použít pro prostředek, u kterého se očekává, že bude procesorem aktualizován zřídka (méně než jednou za snímek). V ideálním případě by procesor nikdy nezapisoval přímo do prostředku s výchozím využitím, aby se zabránilo potenciálním pokutám za výkon.

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ě čerpá zdroj. 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. Pro vyrovnávací paměť typu Shader-Constant by mělo vždy platit výchozí použití.

Vazba prostředků na fáze kanálu

Prostředek může být vázán na více než jednu fázi zpracování současně, pokud jsou splněna omezení stanovená při vytvoření prostředku (příznaky použití, příznaky vazby, příznaky přístupu k CPU). 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 (D3D10_BIND_RENDER_TARGET nebo D3D10_BIND_SHADER_RESOURCE). Data by se zkopírovala z textury určené pro vykreslování do textury využívané shaderem pomocí CopyResource nebo CopySubresourceRegion. To může zlepšit výkon izolováním zápisu cíle vykreslování ze čtení textury shaderu. Samozřejmě, jediný způsob, jak si být jisti, je implementovat oba přístupy a měřit rozdíl výkonu ve vaší konkrétní aplikaci.

Zdroje (Direct3D 10)