Delen via


Direct3D 11-functies

De programmeerhandleiding bevat informatie over het gebruik van de Direct3D 11 programmeerbare pijplijn voor het maken van realtime 3D-afbeeldingen voor games en voor wetenschappelijke en bureaubladtoepassingen.

Compute-shader

Een compute-shader is een programmeerbare shader die is ontworpen voor gegevensverwerking voor algemeen gebruik. Met andere woorden: met compute-shaders kan een GPU worden gebruikt als een parallelle processor voor algemeen gebruik. De compute-shader is vergelijkbaar met de andere programmeerbare pijplijn-shaders (zoals hoekpunt, pixel, geometrie) op de manier waarop deze toegang heeft tot invoer en uitvoer. De technologie van de compute-shader wordt ook wel de DirectCompute-technologie genoemd. Een compute-shader is geïntegreerd in Direct3D en is toegankelijk via een Direct3D-apparaat. Het kan geheugenresources rechtstreeks delen met graphics shaders met behulp van het Direct3D-apparaat. Het is echter niet rechtstreeks verbonden met andere shader-fasen.

Een compute-shader is ontworpen voor grootschalige toepassingen die berekeningen uitvoeren tegen interactieve tarieven, wanneer de kosten voor de overgang tussen de API (en de bijbehorende softwarestack) en een CPU te veel overhead verbruiken.

Een compute-shader heeft een eigen set statussen. Een compute-shader heeft niet noodzakelijkerwijs een geforceerde 1-1 toewijzing aan invoerrecords (zoals een hoekpunt-shader) of uitvoerrecords (zoals de pixel-shader wel). Sommige functies van de graphics-shader worden ondersteund, maar andere zijn verwijderd, zodat nieuwe functies voor compute-shader-specifieke functies kunnen worden toegevoegd.

Ter ondersteuning van de specifieke functies voor compute-shader zijn er nu verschillende nieuwe resourcetypen beschikbaar, zoals lees-/schrijfbuffers, patronen en gestructureerde buffers.

Zie Overzicht van Compute Shader voor meer informatie.

Dynamische shaderkoppeling

Renderingsystemen moeten veel complexiteit hebben bij het beheren van shaders, terwijl ze de mogelijkheid bieden om shader-code te optimaliseren. Dit wordt een nog grotere uitdaging omdat shaders verschillende materialen in een gerenderde scène moeten ondersteunen in verschillende hardwareconfiguraties. Om deze uitdaging aan te pakken, hebben shader-ontwikkelaars vaak een van de twee algemene benaderingen gebruikt. Ze hebben volledig aanbevolen grote, algemene shaders gemaakt die kunnen worden gebruikt door een breed scala aan scène-items, die enige prestaties voor flexibiliteit afruilen, of afzonderlijke shaders maken voor elke geometriestroom, materiaaltype of een combinatie van lichttypen die nodig zijn.

Deze grote shaders voor algemeen gebruik verwerken deze uitdaging door dezelfde shader opnieuw te compileren met verschillende preprocessordefinities, en de laatste methode maakt gebruik van brute-force ontwikkelaarskracht om hetzelfde resultaat te bereiken. De shader permutatie-explosie is vaak een probleem geweest voor ontwikkelaars die nu duizenden verschillende shader-permutaties binnen hun game- en assetpijplijn moeten beheren.

Direct3D 11 en shader model 5 introduceren objectgeoriënteerde taalconstructies en bieden runtime-ondersteuning voor shaderkoppelingen om ontwikkelaars te helpen shaders te programmeren.

Zie Dynamische koppeling voor meer informatie.

Multithreading

Veel grafische toepassingen zijn afhankelijk van CPU vanwege dure activiteiten, zoals traversal van scènegrafieken, objectsortering en fysicasimulaties. Omdat multicore-systemen steeds meer beschikbaar worden, heeft Direct3D 11 de ondersteuning voor multithreading verbeterd om efficiënte interactie mogelijk te maken tussen meerdere CPU-threads en de D3D11-grafische API's.

Direct3D 11 biedt de volgende functionaliteit ter ondersteuning van multithreading:

  • Gelijktijdige objecten worden nu gemaakt in afzonderlijke threads: door invoerpuntfuncties te maken die objecten maken zonder threads, kunnen veel threads objecten tegelijk maken. Een toepassing kan bijvoorbeeld nu een shader compileren of een patroon op de ene thread laden terwijl deze op een andere thread wordt weergegeven.
  • Opdrachtlijsten kunnen worden gemaakt op meerdere threads: een opdrachtlijst is een opgenomen reeks grafische opdrachten. Met Direct3D 11 kunt u opdrachtlijsten maken op meerdere CPU-threads, waardoor parallelle doorkruising van de scènedatabase of fysicaverwerking op meerdere threads mogelijk is. Hierdoor wordt de belangrijkste renderingthread vrijgemaakt om opdrachtbuffers naar de hardware te verzenden.

Zie MultiThreading- voor meer informatie.

Mozaïekpatroon

Tessellation kan worden gebruikt om één model met verschillende detailniveaus weer te geven. Met deze benadering wordt een geometrisch nauwkeuriger model gegenereerd dat afhankelijk is van het detailniveau dat vereist is voor een scène. Gebruik tessellation in een scène waarbij het detailniveau een lager geometriemodel toestaat, waardoor de vraag naar geheugenbandbreedte tijdens rendering wordt verminderd.

In Direct3D wordt tessellation geïmplementeerd op de GPU om een vloeiender gebogen oppervlak te berekenen vanaf een grof (minder gedetailleerd) invoerpatch. Elk patchgezicht (quad of driehoek) is onderverdeeld in kleinere driehoekige gezichten die het gewenste oppervlak beter benaderen.

Zie Overzicht van tessellationvoor meer informatie over het implementeren van tessellation in de grafische pijplijn.

Volledige lijst met functies

Dit is een volledige lijst met de functies in Direct3D 11.

  • U kunt Direct3D 11 uitvoeren op downlevel hardware door een functieniveau op te specificeren wanneer u een apparaat maakt.

  • U kunt tessellation uitvoeren (zie Tessellation Overview) met behulp van de volgende shadertypen:

    • Romp arcering
    • Domain Shader
  • Direct3D 11 ondersteunt multithreading (zie MultiThreading)

    • Multithread-resource/shader/object maken
    • Lijst met meerdere leesleesweergaven maken
  • Direct3D 11 breidt shaders uit met de volgende functies (zie Shader Model 5)

    • Adresseerbare resources- patronen, constante buffers en samplers

    • Aanvullende resourcetypen, zoals lees-/schrijfbuffers en patronen (zie Nieuwe resourcetypen).

    • Subroutines

    • Compute-shader (zie Overzicht van Compute Shader) - Een shader die berekeningen versnelt door de probleemruimte tussen verschillende softwarethreads of groepen threads te verdelen en gegevens te delen tussen shader-registers om de hoeveelheid gegevens die nodig is voor invoer in een shader aanzienlijk te verminderen. Algoritmen die de compute-shader aanzienlijk kan verbeteren, zijn postverwerking, animatie, natuurkunde en kunstmatige intelligentie.

    • Geometrie-shader (zie Geometrie arceringsfuncties)

      • Instancing : hiermee kan de geometrie-shader maximaal 1024 hoekpunten of een combinatie van exemplaren en hoekpunten tot 1024 uitvoeren (maximaal 32 exemplaren van elk 32 hoekpunten).
    • Pixel-shader

      • Dekking als PS-invoer

      • Programmeerbare interpolatie van invoer - De pixel-shader kan kenmerken binnen de pixel evalueren, overal in het raster met meerdere kolommen

      • Zwaartepuntsampling van kenmerken moet voldoen aan de volgende regels:

        • Als alle steekproeven in de primitieve worden behandeld, wordt het kenmerk geëvalueerd in het pixelcentrum, ongeacht of het voorbeeldpatroon een voorbeeldlocatie in het pixelcentrum heeft.

        • Anders wordt het kenmerk geëvalueerd in het eerste gedekte voorbeeld, dat wil gezegd, het voorbeeld met de laagste index onder alle voorbeeldindexen. In deze situatie wordt de voorbeelddekking bepaald na het toepassen van de logische AND-bewerking op de dekking en de rasterizerstatus van het voorbeeldmasker.

        • Als er geen voorbeelden worden behandeld (zoals bij helper pixels die worden uitgevoerd buiten de grenzen van een primitieve om 2x2 pixel stempels in te vullen), wordt het kenmerk op een van de volgende manieren geëvalueerd:

          • Als de rasterizerstatus sample-mask een subset is van de steekproeven in de pixel, is het eerste voorbeeld dat wordt gedekt door de rasterizerstatus samplemasker het evaluatiepunt.
          • Anders is het pixelcentrum in de volledige voorwaarde van het voorbeeldmasker het evaluatiepunt.
  • Direct3D 11 breidt patronen uit (zie Textures Overview) met de volgende functies

    • Gather4

      • Ondersteuning voor patronen met meerdere onderdelen- geef een kanaal op waaruit moet worden geladen
      • Ondersteuning voor programmeerbare offsets
    • Streaming

      • Patroonklemmen om WDDM-preload te beperken
    • 16.000 patronenlimieten

    • 8 bits subtexel en sub-mip precisie vereisen bij het filteren van patronen

    • Nieuwe bitmapcompressie-indelingen (1 nieuwe LDR-indeling en 1 nieuwe HDR-indeling)

  • Direct3D 11 ondersteunt conservatieve oDepth: met dit algoritme kan een pixel-shader de dieptewaarde van de pixelschaduw vergelijken met die in de rasterizer. Het resultaat maakt vroege diepteafruimingsbewerkingen mogelijk, terwijl de mogelijkheid om oDepth uit te voeren vanaf een pixel-shader behouden blijft.

  • Direct3D 11 ondersteunt groot geheugen

    • Toestaan voor resources > 4 GB
    • Indexen van resources 32 bits behouden, maar resource groter
  • Direct3D 11 ondersteunt verbeteringen in stroomuitvoer

    • Uitvoer van adresseerbare stream
    • Aantal Stream-uitvoer verhogen naar 4
    • Alle stroomuitvoerbuffers wijzigen in multi-element
  • Direct3D 11 ondersteunt Shader Model 5 (zie Shader Model 5)

    • Doubles with denorms
    • Instructies voor aantal bitsset
    • Instructies voor eerste bitset zoeken
    • Transport/Overflow-verwerking
    • Bit-omkeringsinstructies voor FFT's
    • Intrinsiek voorwaardelijk wisselen
    • Harsfo op buffers
    • Wederzijdse precisie met verminderde precisie
    • Conversie-instructies voor shader - fp16 naar fp32 en vice versa
    • Gestructureerde buffer, een nieuw type buffer met gestructureerde elementen.
  • Direct3D 11 ondersteunt alleen-lezendiepte- of stencilweergaven

    • Schakelt schrijfbewerkingen uit naar het onderdeel dat alleen-lezen is, maakt het gebruik van textuur mogelijk als invoer en voor diepte-afruiming
  • Direct3D 11 ondersteunt teken indirect - Direct3D 10 implementeert DrawAuto, dat inhoud accepteert (gegenereerd door de GPU) en weergeeft (op de GPU). Direct3D 11 generaliseert DrawAuto zodat deze kan worden aangeroepen door een Compute Shader met behulp van DrawInstanced en DrawIndexedInstanced.

  • Direct3D 11 ondersteunt diverse functies

    • Drijvende-komma-viewports
    • Mipmap-klem per resource
    • Diepte-Bias: dit algoritme werkt het gedrag van diepte-bias bij met behulp van rasterizerstatus. Het resultaat elimineert de scenario's waarin de berekende bias NaN kan zijn.
    • Resourcelimieten: resourceindexen moeten nog steeds worden <= 32 bits, maar resources kunnen groter zijn dan 4 GB.
    • Rasterizerprecisie
    • MSAA-vereisten
    • Meteritems verminderd
    • 1-bits opmaak en tekstfilter verwijderd

Functies toegevoegd in vorige releases

Zie de volgende onderwerpen voor de lijst met de functies die in eerdere versies zijn toegevoegd:

Wat is er nieuw in Direct3D 11