Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Systemgenererade värden genereras av IA-fasen (baserat på användarindata semantik) för att möjliggöra vissa effektivitetsvinster vid shaderoperationer.
Genom att koppla data, till exempel ett instans-ID (synligt för VS), ett hörn-ID (synligt för VS) eller ett primitivt ID (synligt för GS/PS), kan en efterföljande skuggningsfas leta efter dessa systemvärden för att optimera bearbetningen i den fasen. VS-fasen kan till exempel leta efter instans-ID:t för att hämta ytterligare per-vertex data för skuggningen eller utföra andra åtgärder. GS- och PS-stegen kan använda det primitiva ID:t för att hämta perprimitiv data på samma sätt.
VertexID
Ett hörn-ID används av varje skuggningssteg för att identifiera varje hörn. Det är ett 32-bitars osignerat heltal vars standardvärde är 0. Det tilldelas till en nod när primitiven bearbetas av IA-fasen. Koppla hörn-id-semantiken till inmatningsdeklarationen för shader för att informera fasen IA om att generera ett id per hörn.
IA lägger till ett hörn-ID i varje hörn för användning av skuggningssteg. För varje anrop ökas vertex-ID:t med 1. I indexerade anrop återställs antalet till startvärdet. För ID3D11DeviceContext::DrawIndexed och ID3D11DeviceContext::DrawIndexedInstancedrepresenterar hörn-ID:t indexvärdet. Om hörn-ID:t svämmar över (överstiger 2³²– 1) omsluts det till 0.
För alla primitiva datatyper har varje hörn ett vertex-ID associerat med sig (oavsett grannskap).
PrimitiveID
Ett primitivt ID används av varje skuggningssteg för att identifiera varje primitiv. Det är ett 32-bitars osignerat heltal vars standardvärde är 0. Den tilldelas till en primitiv när primitiven bearbetas av IA-fasen. Om du vill informera IA-stadiet om att generera ett primitivt ID kopplar du primitive-id-semantiken till skuggningsindatadeklarationen.
IA-stadiet lägger till ett primitiv-ID till varje primitiv för användning av geometrishadern eller pixelshadersteget (beroende på vilken fas som är aktiv först efter IA-stadiet). För varje indexerat anrop ökas det primitiva ID:t med 1, men det primitiva ID:t återställs till 0 när en ny instans börjar. Alla andra ritningsanrop ändrar inte instans-ID:t:s värde. Om instans-ID:t överflödar (överstiger 2³²– 1) återställs det till 0.
Pixelskuggningssteget har inte någon separat indata för ett primitivt ID. Alla pixelskuggningsindata som anger ett primitivt ID använder dock ett konstant interpoleringsläge.
Det finns inget stöd för att automatiskt generera ett primitivt ID för angränsande primitiver. För primitiva typer med närliggande element, till exempel en triangelremsa med närliggande, underhålls ett primitivt ID endast för de inre primitiverna (de icke-närliggande primitiverna), precis som uppsättningen primitiver i en triangelremsa utan närliggande element.
InstanceID
Ett instans-ID används av varje skuggningssteg för att identifiera instansen av den geometri som bearbetas för närvarande. Det är ett 32-bitars osignerat heltal vars standardvärde är 0.
IA-fasen lägger till ett instans-ID i varje hörn om indatadeklarationen för hörnskuggning innehåller instans-ID-semantiken. För varje indexerat ritanrop ökas instans-ID med ett. Alla andra ritningsanrop ändrar inte värdet för instans-ID. Om instans-ID:t flödar över (överstiger 2³²– 1) återställs det till 0.
Exempel
Följande bild visar hur systemvärden kopplas till en instansad triangelremsa i IA-stadiet.
De här tabellerna visar systemvärdena som genereras för båda instanserna av samma triangelremsa. Den första instansen (instans U) visas i blått, den andra instansen (instans V) visas i grönt. De fasta linjerna förbinder hörnen i primitiverna, de streckade linjerna ansluter de intilliggande hörnen.
Följande tabeller visar systemgenererade värden för instansen U.
| Vertexdata | C,U | D,U | E,U | F,U | G,U | H,U | I,U | J,U | K,U | L,U |
|---|---|---|---|---|---|---|---|---|---|---|
| VertexID | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| InstanceID | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Värde | Värde | Värde | |
|---|---|---|---|
| PrimitiveID | 0 | 1 | 2 |
| InstanceID | 0 | 0 | 0 |
Följande tabeller visar systemgenererade värden för instansen V.
| Vertexdata | C,V | D,V | E,V | F,V | G,V | H,V | I,V | J,V | K,V | L,V |
|---|---|---|---|---|---|---|---|---|---|---|
| VertexID | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| InstanceID | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| Värde | Värde | Värde | |
|---|---|---|---|
| PrimitiveID | 0 | 1 | 2 |
| InstanceID | 1 | 1 | 1 |
Indatamonteraren genererar ID:er (vertex, primitiv och instans); observera också att varje instans ges ett unikt instans-ID. Datan avslutas med remssnittet, som separerar varje instans av triangelremsan.
Relaterade ämnen