Výpočetní shadery na nižší úrovni hardwaru
Direct3D 11 poskytuje možnost používat výpočetní shadery, které pracují na většině hardwaru Direct3D 10.x s určitými omezeními pro provoz. Technologie výpočetního shaderu se také označuje jako technologie DirectCompute. Toto téma popisuje, jak používat výpočetní shadery v aplikaci Direct3D 11 na hardwaru Direct3D 10.
Podpora výpočetních shaderů na nižší úrovni hardwaru je pouze pro zařízení kompatibilní s Direct3D 10.x. Výpočetní shadery nelze použít na hardwaru Direct3D 9.x.
Pokud chcete zkontrolovat, jestli hardware Direct3D 10.x podporuje výpočetní shadery, zavolejte ID3D11Device::CheckFeatureSupport. Ve volání CheckFeatureSupport předejte hodnotu D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS do parametru Feature, ukazatel na strukturu D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS do parametru pFeatureSupportData a velikost struktury D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS do parametru FeatureSupportDataSize. CheckFeatureSupport vrátí TRUE v ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x členu D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS, pokud hardware Direct3D 10.x podporuje výpočetní shadery.
Oddíl 10Level9 Reference uvádí rozdíly mezi tím, jak se různé metody ID3D11Device a ID3D11DeviceContext chovají na různých úrovních funkcí 10Level9.
- neuspořádaná zobrazení přístupu (UAVs)
- zobrazení prostředků shaderu (SRV)
- skupiny vláken
- dimenze skupiny vláken
- Two-Dimensional Indexy vláken
- Sdílená paměť skupiny vláken (TGSM)
- D3DCompile s D3DCOMPILE_SKIP_OPTIMIZATION
- související témata
Neuspořádané zobrazení přístupu (UAVs)
Raw (RWByteAddressBuffer) a Structured (RWStructuredBuffer) Neřazená zobrazení přístupu jsou podporována na nižší úrovni hardwaru s následujícími omezeními:
- Pouze jeden UAV může být vázán na pipeline najednou prostřednictvím ID3D11DeviceContext::CSSetUnorderedAccessViews.
- Základní posun pro raw UAV musí být zarovnán na hranici 256 bajtů (na rozdíl od 16bajtového zarovnání vyžadovaného hardwarem Direct3D 11).
Typy UAV nejsou podporovány na hardwaru nižší úrovně. Patří sem Texture1D, Texture2Da Texture3D UAV.
Pixel Shadery na nižší úrovni hardwaru nepodporují neuspořádaný přístup.
Zobrazení prostředků shaderu (SRVs)
Nezpracované a strukturované vyrovnávací paměti jako zobrazení prostředků shaderu jsou podporovány na nižší úrovni hardwaru pro přístup jen pro čtení, protože jsou na hardwaru Direct3D 11. Tyto typy prostředků jsou podporovány pro vrcholové shadery, geometrické shadery, pixelové shadery a výpočetní shadery.
Skupiny vláken
Výpočetní shader se může paralelně spouštět na mnoha vláknech v rámci skupiny vláken.
Skupiny vláken jsou podporovány na nižší úrovni hardwaru s následujícími omezeními:
Dimenze skupiny vláken
Skupiny vláken definované pro hardware nižší úrovně jsou omezené na rozměry X a Y 768. Jedná se o méně než maximální hodnoty 1024 pro hardware Direct3D 11. Maximální rozměr Z 64 se nezmění.
Celkový počet vláken ve skupině (X × Y × Z) je omezen na 768. Jedná se o méně než limit 1024 pro hardware Direct3D 11.
Pokud se tato čísla překročí, kompilace shaderu selže.
indexy vláken Two-Dimensional
Konkrétní vlákno ve skupině vláken je indexováno pomocí 3D vektoru poskytnutého (x,y,z).
U výpočetních shaderů pracujících na hardwaru nižší úrovně podporují skupiny vláken pouze dvě dimenze. To znamená, že hodnota Z v 3D vektoru musí být vždy 1.
Toto omezení platí konkrétně pro následující:
- ID3D11DeviceContext::Dispatch– argument ThreadGroupCountZ musí být 1.
- ID3D11DeviceContext::DispatchIndirect– Tato funkce není podporována na hardwaru nižší třídy.
- numthreads– hodnota Z musí být 1.
Sdílená paměť skupiny vláken (TGSM)
Sdílená paměť skupiny vláken je omezena na 16 kB na nižší úrovni hardwaru. Jedná se o méně než 32 kB, který je k dispozici pro hardware Direct3D 11.
Vlákno výpočetního shaderu může zapisovat pouze do své vlastní oblasti TGSM. Tato oblast jen pro zápis má maximální velikost 256 bajtů nebo méně, přičemž maximální velikost se snižuje s rostoucím počtem vláken deklarovaných pro skupinu.
Následující tabulka definuje maximální velikost oblasti TGSM pro počet vláken ve skupině:
Počet vláken ve skupině | Maximální velikost TGSM na vlákno |
---|---|
0-64 | 256 |
65-68 | 240 |
69-72 | 224 |
73-76 | 208 |
77-84 | 192 |
85-92 | 176 |
93-100 | 160 |
101-112 | 144 |
113-128 | 128 |
129-144 | 112 |
145-168 | 96 |
169-204 | 80 |
205-256 | 64 |
257-340 | 48 |
341-512 | 32 |
513-768 | 16 |
Vlákno výpočetního shaderu může číst TGSM z libovolného umístění.
D3DCompile s D3DCOMPILE_SKIP_OPTIMIZATION
D3DCompile vrátí E_NOTIMPL, když předáte cs_4_0 jako cíl shaderu spolu s možností kompilace D3DCOMPILE_SKIP_OPTIMIZATION. Cíl shaderu cs_5_0 funguje s D3DCOMPILE_SKIP_OPTIMIZATION.
Související témata