Skuggning synlig beskrivning Heaps

Shader visible descriptor heaps, är descriptor heaps som kan refereras av skuggningar via deskriptortabeller.

Överblick

Beskrivningshögar som kan refereras av skuggningar via beskrivningstabeller finns i ett par varianter: En heaptyp, D3D12_SRV_UAV_CBV_DESCRIPTOR_HEAP, kan innehålla skuggningsresursvyer, osorterade åtkomstvyer och konstanta buffertvyer, alla blandade. Alla angivna platser i heapen kan vara någon av de listade typerna av deskriptorer. En annan heaptyp, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, lagrar bara provtagare, vilket återspeglar det faktum att provtagare för merparten av maskinvaran hanteras separat från SRV:er, UAV:er och CBV:er.

Descriptor-heaps av dessa typer kan begäras att vara skuggare synliga eller inte när heapen skapas (det senare – icke skuggning synligt – kan vara användbart för mellanlagring av beskrivningar på PROCESSORn). När de begärs vara skuggningsbara kan var och en av heaptyperna ovan ha en maskinvarustorleksgräns för varje enskild deskriptor-heapallokering.

Program kan skapa valfritt antal beskrivande heaps och icke skuggnings synliga beskrivande heaps är inte begränsade i storlek. Om en skuggningsbar beskrivnings heap som skapas av programmet är mindre än maskinvarustorleksgränsen, kan drivrutinen välja att underallokera deskriptor-heapen från en större underliggande deskriptor-heap så att flera API-beskrivande heaps passar inom en maskinvarubeskrivnings heap. Anledningen till att detta kan inträffa är att för viss maskinvara kräver växling mellan maskinvarubeskrivningshögar under körning en GPU-väntan på inaktivitet (för att säkerställa att GPU-referenser till den tidigare deskriptor-heapen är slutförda). Om alla de beskrivande heaps som ett program skapar passar in i den tillämpliga maskinvaruhuppens maximala kapaciteter, kommer inga sådana väntetider att inträffa när du växlar API-beskrivande heaps under renderingen. Program måste dock tillåta möjligheten att växla den aktuella beskrivande heapen kan medföra en väntan på inaktivitet.

För att undvika att påverkas av den här möjliga väntan på inaktivitet på heap-växeln kan program dra nytta av avbrott i renderingen som skulle göra att GPU:n är inaktiv av andra skäl eftersom tiden för att utföra deskriptor-heap-växlar, eftersom en väntan på inaktivitet ändå sker.

Mekanismen och semantiken för att identifiera deskriptor-heaps till skuggningar under kommandolistan/paketinspelningen beskrivs i API-referensen.

Ett exempel

Bilden nedan visar två beskrivande heaps som refererar till två separata 2D-texturer som lagras i två platser med en stor standardhög. Den beskrivande heap som är skuggnings synlig kan nås av grafikpipelinen (inklusive skuggningar), och därför är 2D-strukturen tillgänglig för pipelinen.

synliga och icke-synliga beskrivningshögar

Not

Det finns ofta en gräns för GPU-maskinvara för mängden GPU-lokalt minne som kan skrivas av processorn (kallas skriv kombinerat minne) för beskrivande heaps. Den här gränsen är vanligtvis cirka 96 MB för alla processer. En en miljon medlemsbeskrivnings heap, med 32byte beskrivningar, skulle till exempel använda upp 32 MB. Drivrutinen kommer att falla tillbaka på systemminnet om det behövs, även om det är bra att inte skapa ett stort antal stora deskriptorhögar.

 

Descriptor Heaps