Čítače výstupu streamu
Výstup streamu je schopnost GPU zapisovat vrcholy do vyrovnávací paměti. Čítače výstupu streamu monitorují průběh.
Rozdíly v čítačích streamů z Direct3D 11 na Direct3D 12
V rámci procesu výstupu datového proudu musí GPU znát aktuální umístění ve vyrovnávací paměti, do které se zapisuje. V Direct3D 11 je paměť pro uložení tohoto umístění přidělena ovladačem a jediný způsob, jak aplikace manipulovat s touto hodnotou, je prostřednictvím SOSetTargets metoda. V Direct3D 12 aplikace přidělují paměť pro ukládání tohoto aktuálního umístění. Neexistují žádné speciální způsoby manipulace s touto hodnotou a aplikace mohou tuto hodnotu číst a zapisovat pomocí procesoru nebo GPU.
BufferFilledSize
Aplikace zodpovídá za přidělování úložiště za 32bitové množství označované jako BufferFilledSize. Obsahuje počet bajtů dat v vyrovnávací paměti výstupu datového proudu. Toto úložiště je možné umístit do stejného nebo jiného prostředku, který obsahuje výstupní data datového proudu. K této hodnotě přistupuje GPU ve fázi výstupu datového proudu a určí, kam se mají do vyrovnávací paměti připojit nová data vrcholů. Kromě toho k této hodnotě přistupuje GPU, aby bylo možné určit, kdy došlo k přetečení.
Podívejte se na strukturu D3D12_STREAM_OUTPUT_DESC.
Vrstva ladění ověří v ID3D12GraphicsCommandList::SOSetTargets:
- BufferFilledSize spadá do rozsahu předpokládaného {OffsetInBytes, SizeInBytes}, pokud je zadán prostředek bez hodnoty NULL.
- BufferFilledSizeOffsetInBytes je násobkem 4.
- BufferFilledSizeOffsetInBytes je v rozsahu obsahujícího prostředku.
- Zadaný prostředek je vyrovnávací paměť.
Modul runtime neověří typ haldy přidružené k výstupní vyrovnávací paměti streamu, protože výstup streamu je podporován ve všech typech haldy.
Kořenové podpisy musí určovat, jestli se použije výstup datového proudu pomocí příznaků D3D12_ROOT_SIGNATURE_FLAGS.
D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT lze zadat pro kořenové podpisy vytvořené v HLSL způsobem podobným způsobem jako ostatní příznaky.
CreateGraphicsPipelineState selže, pokud geometrický shader obsahuje stream-output, ale kořenový podpis nemá nastavenou D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT příznak.
Pokud se prostředek používá jako cíl výstupu datového proudu, musí být použité prostředky ve stavu D3D12_RESOURCE_STATE_STREAM_OUT. To platí jak pro data vrcholů, tak pro BufferFilledSize (které můžou být ve stejných nebo samostatných prostředcích).
Neexistují žádná speciální rozhraní API pro nastavení posunů vyrovnávací paměti pro výstup streamu, protože aplikace mohou zapisovat do BufferFilledSize s procesorem nebo GPU přímo.
Související témata
-
Čítače a dotazy