Direct3D 11-funktioner
Programmeringsguiden innehåller information om hur du använder den programmeringsbara Direct3D 11-pipelinen för att skapa 3D-grafik i realtid för spel och för vetenskapliga program och skrivbordsprogram.
- Compute Shader
- dynamisk skuggningslänkning
- multitrådning
- Tessellation
- fullständig lista över funktioner
- funktioner som lagts till i tidigare versioner
- Relaterade ämnen
Compute Shader
En beräkningsskuggning är en programmerbar skuggning som är utformad för generell dataparallell bearbetning. Med andra ord tillåter beräkningsskuggor att en GPU används som en generell parallell processor. Beräkningsskuggningen liknar de andra programmerbara pipelineskuggarna (till exempel hörn, pixel, geometri) på det sätt som den kommer åt indata och utdata. Beräkningsskuggningstekniken kallas även DirectCompute-teknik. En beräkningsskuggning är integrerad i Direct3D och är tillgänglig via en Direct3D-enhet. Den kan direkt dela minnesresurser med grafikskuggor med hjälp av Direct3D-enheten. Den är dock inte direkt ansluten till andra skuggningssteg.
En beräkningsskuggning är utformad för massmarknadsprogram som utför beräkningar till interaktiva priser, när kostnaden för övergången mellan API:et (och dess associerade programvarustack) och en PROCESSOR förbrukar för mycket omkostnader.
En beräkningsskuggare har en egen uppsättning tillstånd. En beräkningsskuggare har inte nödvändigtvis en tvingad 1-1-mappning till antingen indataposter (som en hörnskuggning gör) eller utdataposter (som pixelskuggningen gör). Vissa funktioner i grafikskuggningen stöds, men andra har tagits bort så att nya funktioner för beräkningsskuggning kan läggas till.
För att stödja beräkningsskuggningsspecifika funktioner är nu flera nya resurstyper tillgängliga, till exempel läs-/skrivbuffertar, texturer och strukturerade buffertar.
Mer information finns i översikten över Compute Shader.
Dynamisk skuggningslänkning
Renderingssystem måste hantera betydande komplexitet när de hanterar skuggningar, samtidigt som de ger möjlighet att optimera skuggningskoden. Detta blir en ännu större utmaning eftersom skuggare måste ha stöd för en mängd olika material i en renderad scen i olika maskinvarukonfigurationer. För att hantera den här utmaningen har skuggningsutvecklare ofta använt någon av två allmänna metoder. De har antingen skapat helt aktuella stora, allmänna skuggningar som kan användas av en mängd olika scenobjekt, som avväger viss prestanda för flexibilitet eller skapade enskilda skuggningar för varje geometriström, materialtyp eller ljustypkombination som behövs.
Dessa stora skuggningsprogram för generell användning hanterar den här utmaningen genom att omkompilera samma skuggning med olika preprocessordefinitioner, och den senare metoden använder brute-force-utvecklarkraft för att uppnå samma resultat. Skuggningspermutationsexplosionen har ofta varit ett problem för utvecklare som nu måste hantera tusentals olika skuggningspermutationer i sitt spel och sin tillgångspipeline.
Direct3D 11 och shader model 5 introducerar objektorienterade språkkonstruktioner och ger körningsstöd för skuggningslänkning för att hjälpa utvecklare att programmera skuggningar.
Mer information finns i Dynamic Linking.
Multitrådning
Många grafikprogram är CPU-bundna på grund av kostsamma aktiviteter, till exempel korsning av scendiagram, objektsortering och fysiksimuleringar. Eftersom flerkärnsystem blir allt mer tillgängliga har Direct3D 11 förbättrat sitt stöd för multitrådning för att möjliggöra effektiv interaktion mellan flera CPU-trådar och D3D11-grafik-API:er.
Med Direct3D 11 kan följande funktioner stödja multitrådning:
- Samtidiga objekt skapas nu i separata trådar – Om du skapar startpunktsfunktioner som skapar objekt utan tråd kan många trådar skapa objekt samtidigt. Ett program kan till exempel nu kompilera en skuggning eller läsa in en struktur på en tråd medan det återges på en annan.
- Kommandolistor kan skapas i flera trådar – en kommandolista är en inspelad sekvens med grafikkommandon. Med Direct3D 11 kan du skapa kommandolistor på flera CPU-trådar, vilket möjliggör parallell bläddering av scendatabasen eller fysikbearbetning på flera trådar. Detta frigör huvudåtergivningstråden för att skicka kommandobuffertar till maskinvaran.
Mer information finns i MultiThreading.
Tessellation
Tessellation kan användas för att återge en enskild modell med varierande detaljnivåer. Den här metoden genererar en mer geometriskt exakt modell som är beroende av den detaljnivå som krävs för en scen. Använd tessellation i en scen där detaljnivån tillåter en lägre geometrimodell, vilket minskar efterfrågan på minnesbandbredd som förbrukas under återgivningen.
I Direct3D implementeras tessellation på GPU:n för att beräkna en jämnare böjd yta från en grov (mindre detaljerad) indatakorrigering. Varje (quad eller triangel) patch ansikte är indelat i mindre triangulära ansikten som bättre approximera den yta som du vill.
Information om hur du implementerar tessellation i grafikpipelinen finns i Tessellation Overview.
Fullständig lista över funktioner
Det här är en fullständig lista över funktionerna i Direct3D 11.
Du kan köra Direct3D 11 på maskinvara på nednivå genom att ange en funktionsnivå när du skapar en enhet.
Du kan utföra tessellation (se Tessellation Overview) med hjälp av följande skuggningstyper:
- Hull Shader
- Domänskuggning
Direct3D 11 stöder multitrådning (se MultiThreading)
- Skapa flertrådsresurs/skuggning/objekt
- Skapa flertrådad visningslista
Direct3D 11 expanderar skuggningar med följande funktioner (se Shader Model 5)
Adresserbara resurser – texturer, konstanta buffertar och exempel
Ytterligare resurstyper, till exempel läs-/skrivbuffertar och strukturer (se Nya resurstyper).
Subrutiner
Compute Shader (se Compute Shader Overview) – En skuggning som påskyndar beräkningar genom att dela upp problemutrymmet mellan flera programvarutrådar eller grupper av trådar och dela data mellan skuggningsregister för att avsevärt minska mängden data som krävs för att mata in i en skuggning. Algoritmer som beräkningsskuggaren kan förbättra avsevärt är efterbearbetning, animering, fysik och artificiell intelligens.
Geometriskuggning (se Geometri Shader-funktioner)
- Instancing – Tillåter att geometriskuggaren matar ut högst 1 024 hörn, eller någon kombination av instanser och hörn upp till 1 024 (högst 32 instanser av 32 hörn vardera).
Pixelskuggning
Täckning som PS-indata
Programmerbar interpolering av indata – Pixelskuggningen kan utvärdera attribut inom pixeln, var som helst i rutnätet med flera exempel
Centroidsampling av attribut måste följa följande regler:
Om alla exempel i primitiven omfattas utvärderas attributet i pixelcentret oavsett om exempelmönstret har en exempelplats i pixelcentret.
I annat fall utvärderas attributet vid det första täckta exemplet, dvs. exemplet med det lägsta indexet bland alla exempelindex. I den här situationen bestäms exempeltäckningen efter att den logiska AND-åtgärden har tillämpats på täckningen och rastreringstillståndet sample-mask.
Om inga exempel omfattas (till exempel på hjälppixlar som körs utanför gränserna för en primitiv för att fylla i 2x2 pixelstämplar) utvärderas attributet på något av följande sätt:
- Om rastreringstillståndet sample-mask är en delmängd av exemplen i pixeln är det första exemplet som omfattas av rastreringstillståndet sample-mask som utvärderingspunkt.
- Annars är pixelcentret utvärderingspunkten i det fullständiga villkoret sample-mask.
Direct3D 11 expanderar texturer (se Översikt över texturer) med följande funktioner
Samla in4
- Stöd för texturer med flera komponenter – ange en kanal att läsa in från
- Stöd för programmerbara förskjutningar
Direktuppspelning
- Texturklämmor för att begränsa WDDM-förinläsning
16 000 texturgränser
Kräv 8 bitars subtexel- och underordnad mip-precision vid texturfiltrering
Nya texturkomprimeringsformat (1 nytt LDR-format och 1 nytt HDR-format)
Direct3D 11 stöder konservativ oDepth – Med den här algoritmen kan en pixelskuggare jämföra djupvärdet per pixel för pixelskuggningen med det i rastreringsverktyget. Resultatet möjliggör åtgärder för tidig djupslaktning samtidigt som möjligheten att mata ut oDepth från en pixelskuggning bibehålls.
Direct3D 11 stöder stort minne
- Tillåt för resurser > 4 GB
- Behåll resursindex 32 bitar, men resursen är större
Direct3D 11 har stöd för förbättringar av strömutdata
- Adresserbara Stream-utdata
- Öka antalet Stream-utdata till 4
- Ändra alla dataströmutdatabuffertar till flera element
Direct3D 11 stöder Shader Model 5 (se Shader Model 5)
- Dubblar med denorms
- Instruktion för antal bituppsättningar
- Hitta instruktion för första bituppsättningen
- Hantering av överföring/spill
- Instruktioner för bitåtervändning för FFT:ar
- Inbyggd villkorlig växling
- Återinformation om buffertar
- Reciprocal med reducerad precision
- Instruktioner för Shader-konvertering – fp16 till fp32 och vice versa
- Strukturerad buffert, som är en ny typ av buffert som innehåller strukturerade element.
Direct3D 11 stöder skrivskyddade djup- eller stencilvyer
- Inaktiverar skrivningar till den del som är skrivskyddad, tillåter användning av textur som indata och för djupslaktning
Direct3D 11 stöder draw indirect – Direct3D 10 implementerar DrawAuto, som tar innehåll (genererat av GPU:n) och renderar det (på GPU).) Direct3D 11 generaliserar DrawAuto så att det kan anropas av en Compute Shader med DrawInstanced och DrawIndexedInstanced.
Direct3D 11 stöder diverse funktioner
- Flyttalsvyportar
- Mipmap-klämning per resurs
- Djupförskjutning – Den här algoritmen uppdaterar beteendet för djupförskjutning med hjälp av rastreringstillstånd. Resultatet eliminerar scenarier där den beräknade biasen kan vara NaN.
- Resursgränser – Resursindex måste fortfarande vara <= 32 bitar, men resurserna kan vara större än 4 GB.
- Rastreringsprecision
- MSAA-krav
- Minskade räknare
- 1-bitarsformat och textfilter har tagits bort
Funktioner som lagts till i tidigare versioner
Listan över de funktioner som lagts till i tidigare versioner finns i följande avsnitt:
- Nyheter i Augusti 2009 Windows 7/Direct3D 11 SDK
- Nyheter i November 2008 Direct3D 11 Technical Preview
Relaterade ämnen