Udostępnij przez


Limity podpisów głównych

Podpis główny jest prime nieruchomości, a istnieją ścisłe limity i koszty, które należy wziąć pod uwagę.

Limity pamięci i koszty

Maksymalny rozmiar podpisu głównego to 64 DWORDs.

Ten maksymalny rozmiar jest wybierany, aby zapobiec nadużyciu podpisu głównego jako sposobu przechowywania danych zbiorczych. Każdy wpis w podpisie głównym ma koszt w stosunku do tego limitu DWORD 64:

  • Tabele deskryptora kosztują 1 DWORD każdy.
  • Stałe główne kosztują 1 DWORD każdy, ponieważ są to wartości 32-bitowe.
  • Deskryptory główne (64-bitowe adresy wirtualne procesora GPU) kosztują 2 dyski DWORD.

Statyczne próbkatory nie mają żadnych kosztów w rozmiarze podpisu głównego.

Koszty wydajności

Koszty wydajności (pod względem poziomów pośredniego) są zerowe dla stałej głównej, 1 dla deskryptora głównego i 2 dla tabeli deskryptora. Jeśli podpis główny jest duży i przepełnia się z najszybszej pamięci do nieco wolniejszej pamięci (co może się zdarzyć na pewnym sprzęcie), dodaj 1 do kosztu wydajności dla przepełnionych elementów na końcu podpisu głównego.

Przepełnienie może wystąpić na sprzęcie, który może mieć na przykład stały rozmiar 16 DWORD dla przestrzeni argumentów głównych. Ten limit może być jeszcze bardziej zmniejszony o jeden, jeśli jest używany asembler wejściowy. W takim przypadku występuje przepełnienie w nieco wolniejszej pamięci, jeśli sygnatura główna jest zbyt duża dla pamięci natywnej DWORD 15 lub 16. W innym sprzęcie nie ma stałej natywnej pamięci argumentu głównego (więc sytuacja przepełnienia nigdy nie występuje).

W przypadku całego sprzętu, jeśli jakikolwiek argument główny ulegnie zmianie, sterownik musi zachować wersję wszystkich argumentów głównych (w przeciwieństwie do innych magazynów, takich jak stert deskryptora i zasoby buforu, które nie są wersjonowane przez sterownik). W przypadku sprzętu, w którym występuje sytuacja przepełnienia, należy użyć wersji tylko natywnego lub przepełnionego obszaru, w zależności od tego, gdzie nastąpiła zmiana. Ilość przechowywania wersji powinna być oczywiście zachowana do niezbędnego minimum.

Ogólnie rzecz biorąc, należy wziąć pod uwagę następujące wytyczne:

  • W razie potrzeby należy użyć jako małego podpisu głównego, równoważąc to z elastycznością większego podpisu głównego.
  • Rozmieść parametry w dużym podpisie głównym, tak aby parametry najprawdopodobniej się często zmieniły lub jeśli małe opóźnienie dostępu dla danego parametru jest ważne, najpierw występuje.
  • Jeśli jest to wygodne, użyj stałych głównych lub widoków buforu stałego katalogu głównego, aby umieścić widoki stałego buforu w stercie deskryptora.

Statyczne próbkatory

Statyczne próbkatory (próbkatory, w których stan jest w pełni zdefiniowany i niezmienny) są częścią podpisów głównych, ale nie są liczone do limitu DWORD 64. Jeśli próbkator można zdefiniować jako statyczny, nie ma potrzeby, aby próbkator był częścią sterta deskryptora.

Korzystanie ze statycznych przykładów nie wiąże się z kosztami wydajności, a sygnatura główna może zawierać kombinację statycznych przykładów (przechowywanych w podpisie głównym lub w przestrzeni zarezerwowanej na sprzęcie) i dynamicznych przykładowców (przechowywanych w stercie deskryptora próbkatora). Próbkatory w stercie deskryptora mogą być dynamicznie przypisywane i indeksowane, czego nie można zaindeksować statycznych przykładów.

Statyczne próbkatory można zapisywać jako część podpisu głównego w cieniowaniu HLSL (zobacz Określanie podpisów głównych wHLSL).

podpisów głównych