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.
Målet med att möjliggöra återanvändning av renderingsarbete och skalning med flera trådar kräver grundläggande ändringar i hur Direct3D-appar skickar återgivning till GPU:n. I Direct3D 12 skiljer sig processen för att skicka renderingsarbete från tidigare versioner på tre viktiga sätt:
- Eliminering av den omedelbara kontexten. Detta möjliggör multitrådning.
- Appar äger nu hur återgivningsanrop grupperas i GPU-arbetsobjekt (grafikprocessor). Detta möjliggör återanvändning.
- Appar styr nu uttryckligen när arbete skickas till GPU:n. Detta aktiverar objekt 1 och 2.
- Borttagning av den omedelbara kontexten
- Gruppering av GPU-arbetsobjekt
- GPU-arbetsinlämning
- Relaterade ämnen
Borttagning av den omedelbara kontexten
Den största ändringen från Microsoft Direct3D 11 till Microsoft Direct3D 12 är att det inte längre finns en enda, omedelbar kontext som är associerad med en enhet. För att rendera skapar appar i stället kommandolistor där traditionella renderings-API:er kan anropas. En kommandolista liknar återgivningsmetoden för en Direct3D 11-app som använde den omedelbara kontexten i och med att den innehåller anrop som ritar primitiver eller ändrar återgivningstillståndet. Precis som omedelbara kontexter är varje kommandolista inte fritrådad. Flera kommandolistor kan dock registreras samtidigt, vilket drar nytta av moderna processorer med flera kärnor.
Kommandolistor körs vanligtvis en gång. En kommandolista kan dock köras flera gånger om programmet ser till att de tidigare körningarna är slutförda innan nya körningar skickas. Mer information om synkronisering av kommandolistor finns i Köra och synkronisera kommandolistor.
Gruppering av GPU-arbetsobjekt
Förutom kommandolistor drar Direct3D 12 nytta av funktioner som finns i all maskinvara idag genom att lägga till en andra nivå av kommandolistor, som kallas paket. För att hjälpa till att särskilja dessa två typer kan kommandolistorna på första nivån kallas direktkommandolistor. Syftet med paket är att tillåta att appar grupperar ett litet antal API-kommandon för senare, upprepad körning inifrån direktkommandolistor. När du skapar ett paket utför drivrutinen så mycket förbearbetning som möjligt för att göra senare körning effektiv. Paket kan sedan köras inifrån flera kommandolistor och flera gånger i samma kommandolista.
Återanvändning av buntar är en stor drivkraft för förbättrad effektivitet med enkla CPU-trådar. Eftersom paket förbearbetas och kan skickas flera gånger finns det vissa begränsningar för vilka åtgärder som kan utföras i ett paket. Mer information finns i Skapa och spela in kommandolistor och paket.
GPU-arbetsinlämning
Om du vill köra arbete på GPU:n måste en app uttryckligen skicka en kommandolista till en kommandokö som är associerad med Direct3D-enheten. En direkt kommandolista kan skickas för körning flera gånger, men appen ansvarar för att säkerställa att direktkommandolistan har körts på GPU:n innan den skickas igen. Paket har inga begränsningar för samtidig användning och kan köras flera gånger i flera kommandolistor, men paket kan inte skickas direkt till en kommandokö för körning.
Alla trådar kan när som helst skicka en kommandolista till valfri kommandokö, och körningsmiljön kommer automatiskt att serialisera insändandet av kommandolistan i kommandokön med bevarad ordning.