Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dane wyjściowe strumienia to zdolność procesora GPU do zapisywania wierzchołków w buforze. Liczniki wyjściowe strumienia monitorują postęp.
Różnice w licznikach strumienia z Direct3D 11 do Direct3D 12
W ramach procesu wyjściowego strumienia procesor GPU musi znać bieżącą lokalizację w buforze, do którego zapisuje. W trybie Direct3D 11 pamięć do przechowywania tej lokalizacji jest przydzielana przez sterownik, a jedynym sposobem manipulowania tą wartością przez aplikacje jest użycie metody soSetTargets . W wersji Direct3D 12 aplikacje przydzielają pamięć do przechowywania tej bieżącej lokalizacji. Nie ma specjalnych sposobów manipulowania tą wartością, a aplikacje mogą odczytywać/zapisywać wartość za pomocą procesora CPU lub procesora GPU.
BufferFilledSize
Aplikacja jest odpowiedzialna za przydzielanie magazynu dla 32-bitowej ilości o nazwie BufferFilledSize. Zawiera on liczbę bajtów danych w buforze strumienia wyjściowego. Ten magazyn można umieścić w tym samym lub innym zasobie, który zawiera dane wyjściowe strumienia. Ta wartość jest uzyskiwana przez procesor GPU na etapie strumienia wyjściowego, aby określić, gdzie dołączyć nowe dane wierzchołka w buforze. Ponadto ta wartość jest uzyskiwana przez procesor GPU, aby określić, kiedy wystąpił przepełnienie.
Zapoznaj się ze strukturą D3D12_STREAM_OUTPUT_DESC.
Warstwa debugowania zweryfikuje następujące elementy w ID3D12GraphicsCommandList::SOSetTargets:
- BufferFilledSize mieści się w zakresie sugerowanym przez {OffsetInBytes, SizeInBytes}, jeśli określono zasób inny niż NULL.
- BufferFilledSizeOffsetInBytes jest wielokrotność 4.
- BufferFilledSizeOffsetInBytes mieści się w zakresie zawierającego zasobu.
- Określony zasób jest buforem.
Środowisko uruchomieniowe nie zweryfikuje typu sterta skojarzonego z buforem wyjściowym strumienia, ponieważ dane wyjściowe strumienia są obsługiwane we wszystkich typach stert.
Podpisy główne muszą określać, czy będą używane dane wyjściowe strumienia przy użyciu flag D3D12_ROOT_SIGNATURE_FLAGS.
D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT można określić dla podpisów głównych utworzonych w języku HLSL w sposób podobny do sposobu określenia innych flag.
CreateGraphicsPipelineState zakończy się niepowodzeniem, jeśli cieniator geometrii zawiera strumień wyjściowy, ale sygnatura główna nie ma ustawionej flagi D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT.
Gdy zasób jest używany jako element docelowy strumienia, używane zasoby muszą znajdować się w stanie D3D12_RESOURCE_STATE_STREAM_OUT. Dotyczy to zarówno danych wierzchołków, jak i BufferFilledSize (które mogą znajdować się w tych samych lub oddzielnych zasobach).
Nie ma specjalnych interfejsów API do ustawiania przesunięć buforu wyjściowego strumienia, ponieważ aplikacje mogą zapisywać w BufferFilledSize za pomocą procesora CPU lub procesora GPU bezpośrednio.
Tematy pokrewne