Udostępnij przez


Omówienie podpisów głównych

Sygnatura główna jest konfigurowana przez aplikację i łączy listy poleceń z zasobami wymaganymi przez shadery. Lista poleceń graficznych ma zarówno grafikę, jak i podpis główny obliczeniowy. Lista poleceń obliczeniowych będzie mieć po prostu jeden podpis główny obliczeń. Te podpisy korzeniowe są niezależne od siebie.

Parametry i argumenty główne

sygnatura korzenia jest podobna do sygnatury funkcji API, określają typy danych, których powinny oczekiwać shadery, ale nie definiuje rzeczywistej pamięci ani danych. parametr główny jest jednym wpisem w podpisie głównym. Rzeczywiste wartości parametrów głównych ustawionych i zmienionych w czasie wykonywania są nazywane argumentami głównymi . Zmiana argumentów root zmienia dane odczytywane przez shaderów.

Stałe główne, deskryptory i tabele

Podpis główny może zawierać trzy typy parametrów: stałe bazowe (stałe wstawione w argumentach bazowych), deskryptory bazowe (deskryptory wbudowane w argumenty bazowe) i tabele deskryptorów (wskaźniki do zakresu deskryptorów w stercie deskryptorów).

Stałe główne są wbudowanymi wartościami 32-bitowymi, które są wyświetlane w cieniatorze jako stały bufor.

Wbudowane deskryptory główne powinny zawierać deskryptory, do których najczęściej uzyskuje się dostęp, jednak ogranicza się to do CBV oraz surowych lub strukturyzowanych bufory UAV lub SRV. Bardziej złożony typ, taki jak SRV tekstury 2D, nie może być używany jako deskryptor bazowy. Deskryptory główne nie zawierają limitu rozmiaru, więc nie można przeprowadzić sprawdzania wyjścia poza granice, w przeciwieństwie do deskryptorów w stosie deskryptorów, które zawierają rozmiar.

Wpisy tabeli deskryptora w sygnaturach głównych zawierają deskryptor, nazwę wiązania cieniowania HLSL i flagę widoczności. Aby uzyskać szczegółowe informacje o nazwach cieniowania, zobacz Shader Model 5.1. Na niektórych urządzeniach może wystąpić wzrost wydajności, jeśli deskryptory będą widoczne tylko na tych etapach shaderów, które ich potrzebują (zobacz D3D12_SHADER_VISIBILITY).

wpis w tabeli deskryptora głównego

Układ podpisu głównego jest dość elastyczny, z pewnymi ograniczeniami nałożonymi na mniej zdolny sprzęt. Niezależnie od poziomu sprzętu aplikacje powinny zawsze starać się utworzyć podpis główny tak mały, jak to konieczne w celu uzyskania maksymalnej wydajności. Aplikacje mogą dokonywać wyboru pomiędzy posiadaniem większej liczby tabel deskryptorów w sygnaturze głównej a mniejszą ilością miejsca dla stałych głównych, i odwrotnie.

Zawartość sygnatury głównej (tabele deskryptora, stałe główne i deskryptory główne), które aplikacja powiązała, automatycznie uzyskuje wersję przez sterownik D3D12 za każdym razem, gdy jakakolwiek część zawartości ulega zmianie pomiędzy wywołaniami rysowania (grafika)/wysyłania (obliczenia). W związku z tym każda operacja/komenda otrzymuje unikatowy pełny zestaw stanu sygnatury głównej.

W idealnym przypadku istnieją grupy obiektów stanu potoku (PSO), które współużytkują ten sam podpis główny. Po ustawieniu podpisu głównego w potoku wszystkie zdefiniowane przez niego powiązania (tabele deskryptorów, deskryptory, stałe) mogą być ustawiane indywidualnie lub zmieniane, w tym dziedziczenie w pakiety.

Aplikacja może dokonać własnego kompromisu między liczbą tabel deskryptorów, których chce, a deskryptorami wbudowanymi (które zajmują więcej miejsca, ale usuwają pośrednictwo) wobec stałych wbudowanych (które nie mają pośrednictwa) w sygnaturze głównej. Aplikacje powinny używać sygnatury głównej tak rzadko, jak to możliwe, korzystając z pamięci kontrolowanej przez aplikację, takiej jak sterty i sterty deskryptorów wskazujących na nie w celu reprezentowania danych zbiorczych.

Podpisy podstawowe