Predykacja
Predykacja to funkcja, która umożliwia procesorowi GPU, a nie procesorowi CPU określenie, aby nie rysować, kopiować ani wysyłać obiektu.
Przegląd
Typowym zastosowaniem predykacji jest oklusion; jeśli pole ograniczenia jest rysowane i jest okludne, oczywiście nie ma sensu rysowania samego obiektu. W takiej sytuacji rysunek obiektu może być "poprzedzony", co umożliwia jego usunięcie z rzeczywistego renderowania przez procesor GPU.
Na początku może się to wydawać nadmiarowe w przypadku standardowego testu głębokości oraz wczesnego przebiegu głębokości. Jednak predykacja może usunąć obciążenie samego stanu polecenia rysowania, a także rasteryzację. Chociaż wczesny przepust głębi usuwa niepotrzebne piksele, nadal może wykonywać wierzchołki, kadłub, domenę i cieniowania geometrii oraz wywoływać asemblera wejściowego funkcji stałej, tesselatora i rasterizatora. Rysując proste pole ograniczenia lub podobny wolumin ograniczenia — który jest prostszy do przetwarzania i rasteryzowania niż rzeczywisty model — unikasz niepotrzebnego rasteryzacji i przetwarzania.
W przeciwieństwie do direct3D 11 predykacja jest oddzielona od zapytań i jest rozszerzana w trybie Direct3D 12, aby umożliwić aplikacji predykatowanie obiektów na podstawie jakiegokolwiek rozumowania, na podstawie którego deweloper aplikacji może zdecydować (nie tylko okluzji).
SetPredication
Predykacja może być ustawiana na podstawie wartości 64-bitowej w buforze (zobacz D3D12_PREDICATION_OP).
Gdy procesor GPU wykonuje SetPredication polecenie przyciąga wartość w buforze. Przyszłe zmiany danych w buforze nie wpływają wstecznie na stan predykacji.
Jeśli parametr wejściowy Buffer ma wartość NULL, predykacja jest wyłączona.
Wskazówki predykacji nie są obecne w interfejsie API Direct3D 12; i predykacja jest dozwolona na listach poleceń bezpośrednich, obliczeniowych i kopiowania. Bufor źródłowy może znajdować się w dowolnym typie stert (ustawienie domyślne, przekazywanie, odczyt zwrotny, niestandardowe).
Podstawowe środowisko uruchomieniowe zweryfikuje następujące elementy:
- AlignedBufferOffset jest wielokrotnością 8 bajtów
- Zasób jest buforem
- Operacja jest prawidłowym elementem członkowskim wyliczenia
- SetPredication nie można wywołać z pakietu
- Typ listy poleceń obsługuje predykację
- Przesunięcie nie przekracza rozmiaru buforu
W warstwie debugowania zostanie wyświetlony błąd, jeśli bufor źródłowy nie znajduje się w D3D12_RESOURCE_STATE_PREDICATION (który jest taki sam jak D3D12_RESOURCE_STATE_INDIRECT_ARGUMENTi po prostu alias).
Zestaw operacji, które można wstępnie wskazać, to:
- DrawInstanced
- DrawIndexedInstanced
- Dispatch
- CopyTextureRegion
- CopyBufferRegion
- CopyResource
- CopyTiles
- ResolveSubresource
- clearDepthStencilView
- ClearRenderTargetView
- ClearUnorderedAccessViewUint
- ClearUnorderedAccessViewFloat
- ExecuteIndirect
ExecuteBundle nie jest wstępnie wskazana. Zamiast tego poszczególne operacje z powyższej listy, które znajdują się po stronie pakietu, są wstępnie wskazane.
Metody ID3D12GraphicsCommandList ResolveQueryData, BeginQuery i EndQuery nie są wstępnie wskazane.
Tematy pokrewne