Limieten voor basishandtekening
De basishandtekening is prime vastgoed en er zijn strikte limieten en kosten om rekening mee te houden.
Geheugenlimieten en -kosten
De maximale grootte van een basishandtekening is 64 DWORDs.
Deze maximale grootte wordt gekozen om misbruik van de basishandtekening te voorkomen als een manier om bulkgegevens op te slaan. Elke vermelding in de basishandtekening heeft een kosten voor deze limiet van 64 DWORD:
- Descriptortabellen kosten elk 1 DWORD.
- Hoofdconstanten kosten elk 1 DWORD, omdat ze 32-bits waarden zijn.
- Hoofddescriptors (64 bits gpu virtuele adressen) kosten elk 2 DWORDs.
Statische samplers hebben geen kosten in de grootte van de hoofdhandtekening.
Prestatiekosten
De prestatiekosten (in termen van indirecte niveaus) zijn nul voor een hoofdconstante, 1 voor een hoofddescriptor en 2 voor een descriptortabel. Als een hoofdhandtekening groot is en overloopt van het snelste geheugen naar iets trager geheugen (wat op sommige hardware kan gebeuren), voegt u 1 toe aan de prestatiekosten voor de overlopende items aan het einde van de hoofdhandtekening.
Er kan een overloop optreden op hardware met bijvoorbeeld een vaste grootte van 16 DWORD's voor de hoofdargumentruimte. Deze limiet kan nog verder worden verlaagd als de invoerassembly wordt gebruikt. In dit geval is er sprake van overloop naar iets langzamer geheugen als de hoofdhandtekening te groot is voor het systeemeigen geheugen van 15 of 16 DWORD. In andere hardware is er geen vast systeemeigen hoofdargumentgeheugen (zodat de overloopsituatie nooit optreedt).
Als voor alle hardware een hoofdargument wordt gewijzigd, moet het stuurprogramma een versie van alle hoofdargumenten onderhouden (in tegenstelling tot andere opslag, zoals descriptor-heaps en bufferbronnen, die niet worden geversied door het stuurprogramma). In hardware die een overloopsituatie optreedt, hoeft alleen het systeemeigen of overloopgebied versiebeheer te worden uitgevoerd, afhankelijk van waar de wijziging is opgetreden. De hoeveelheid versiebeheer moet uiteraard tot het noodzakelijke minimum worden beperkt.
Over het algemeen moet u rekening houden met de volgende richtlijnen:
- Gebruik indien nodig een kleine basishandtekening, maar houd dit in balans met de flexibiliteit van een grotere basishandtekening.
- Rangschik parameters in een grote basishandtekening, zodat de parameters waarschijnlijk vaak worden gewijzigd, of als lage toegangslatentie voor een bepaalde parameter belangrijk is, moet u eerst plaatsvinden.
- Als dit handig is, gebruikt u hoofdconstanten of hoofdconstante bufferweergaven over het plaatsen van constante bufferweergaven in een heap voor descriptor.
Statische samplers
Statische samplers (samplers waarbij de status volledig is gedefinieerd en onveranderbaar) maken deel uit van basishandtekeningen, maar tellen niet mee voor de limiet van 64 DWORD. Als een sampler kan worden gedefinieerd als statisch, is het niet nodig dat de sampler deel uitmaakt van een heap van een descriptor.
Er zijn geen prestatiekosten voor het gebruik van statische samplers en een basishandtekening kan een combinatie van statische samplers bevatten (opgeslagen in de hoofdhandtekening of in gereserveerde ruimte op sommige hardware) en dynamische samplers (opgeslagen in een sampler descriptor heap). Samplers in een heap voor descriptor kunnen dynamisch worden toegewezen en geïndexeerd, wat statische samplers niet kunnen.
Statische samplers kunnen worden geschreven als onderdeel van de hoofdhandtekening in HLSL-shaders (raadpleeg Root Signatures opgeven in HLSL).
Verwante onderwerpen