Direct3D - Direct3D

Direct3D
Dezvoltatori Microsoft
Eliberarea inițială 2 iunie 1996 ; Acum 25 de ani ( 02-06 1996 )
Versiune stabila
12/29 iulie 2015 ; acum 6 ani ( 29.07.2015 )
Sistem de operare Windows
Platformă x86 , ARM
Tip API grafică 3D
Licență Proprietate
Site-ul web msdn .microsoft .com / en-us / library / windows / desktop / hh309466

Direct3D este o interfață de programare a aplicațiilor grafice (API) pentru Microsoft Windows . Parte din DirectX , Direct3D este utilizat pentru a reda grafică tridimensională în aplicații în care performanța este importantă, cum ar fi jocurile. Direct3D utilizează accelerarea hardware dacă este disponibilă pe placa grafică , permițând accelerarea hardware a întregii conducte de redare 3D sau chiar doar accelerarea parțială. Direct3D expune capacitățile grafice avansate de hardware grafica 3D, inclusiv Z-buffering , W-tampon, tampon matrita , anti-aliasing , alfa amestecare , amestecare culoare, mipmapping , textura de amestecare, tăiere , sacrificare , efectele atmosferice,-perspectivă corectă textură cartografiere , programabile HLSL shadere și efecte. Integrarea cu alte tehnologii DirectX permite Direct3D să ofere caracteristici precum maparea video, redarea hardware 3D în planuri de suprapunere 2D și chiar sprite , oferind utilizarea graficii 2D și 3D în legăturile media interactive.

Direct3D conține multe comenzi pentru redarea grafică 3D pe computer ; totuși, de la versiunea 8, Direct3D a înlocuit cadrul DirectDraw și și-a asumat responsabilitatea pentru redarea graficelor 2D . Microsoft se străduiește să actualizeze continuu Direct3D pentru a sprijini cea mai recentă tehnologie disponibilă pe plăcile grafice 3D. Direct3D oferă o emulare completă a software-ului vertex, dar nu are emulare software pixel pentru caracteristicile care nu sunt disponibile în hardware. De exemplu, dacă software-ul programat folosind Direct3D necesită pixel shaders și placa video de pe computerul utilizatorului nu acceptă această caracteristică, Direct3D nu o va emula, deși va calcula și reda poligoanele și texturile modelelor 3D, deși la calitate și performanță degradate în comparație cu echivalentul hardware. API-ul include un Reference Rasterizer (sau dispozitiv REF), care emulează o placă grafică generică în software, deși este prea lent pentru majoritatea aplicațiilor 3D în timp real și este de obicei utilizat numai pentru depanare. Un nou rasterizator software în timp real, WARP , conceput pentru a emula un set complet de caracteristici Direct3D 10.1, este inclus în Windows 7 și Windows Vista Service Pack 2 cu Platform Update; se spune că performanța sa este la egalitate cu cardurile 3D de ultimă generație de pe procesoarele multi-core.

Ca parte a DirectX , Direct3D este disponibil pentru Windows 95 și versiuni ulterioare și este baza pentru API-ul grafică vectorială pe diferitele versiuni ale sistemelor de consolă Xbox . Stratul de compatibilitate Wine , o reimplementare software gratuită a mai multor API-uri Windows, include o implementare a Direct3D.

Principalul concurent al Direct3D este OpenGL al lui Khronos și Vulkan . Fahrenheit a fost o încercare a Microsoft și SGI de a unifica OpenGL și Direct3D în anii 1990, dar a fost în cele din urmă anulată.

Prezentare generală

  • Direct3D 6.0 - Multitexturizare
  • Direct3D 7.0 - Transformare, decupare și iluminare hardware (TCL / T & L)
  • Direct3D 8.0 - Pixel Shader 1.0 și Vertex Shader 1.0
  • Direct3D 8.0a - Pixel Shader 1.1, Pixel Shader 1.2, Pixel Shader 1.3
  • Direct3D 8.1 - Pixel Shader 1.4 și Vertex Shader 1.1
  • Direct3D 9.0 - Shader Model 2.0 (Pixel Shader 2.0 și Vertex Shader 2.0)
  • Direct3D 9.0b - Pixel Shader 2.0b
  • Direct3D 9.0c - Shader Model 3.0 (Pixel Shader 3.0 & Vertex Shader 3.0), GPGPU
  • Direct3D 9.0L - numai Windows Vista , Direct3D 9.0c, Shader Model 3.0, Windows Graphics Foundation 1.0, DXVA 1.0, GPGPU
  • Direct3D 10.0 - Windows Vista / Windows 7, Shader Model 4.0 , Windows Graphics Foundation 2.0, DXVA 2.0, GPGPU
  • Direct3D 10.1 - Windows Vista SP1 / Windows 7, Shader Model 4.1, Windows Graphics Foundation 2.1, DXVA 2.1, GPGPU
  • Direct3D 11.0 - Windows Vista SP2 / Windows 7 , Shader Model 5.0, Tessellation, redare cu mai multe fire, Computer shaders, implementat de hardware și software care rulează Direct3D 9/10 / 10.1, GPGPU
  • Direct3D 11.1 - Windows 7 SP1 / Windows 8 , redare 3D stereoscopică, GPGPU
  • Direct3D 11.2 - Windows 8.1 , Resurse cu gresie, GPGPU
  • Direct3D 11.3 - Windows 10 , Shader Model 5.1, GPGPU
  • Direct3D 12.0 - Windows 10 , API de redare la nivel scăzut , Shader Model 6.0, GPGPU

Direct3D 2.0 și 3.0

În 1992, Servan Keondjian și Doug Rabson au fondat o companie numită RenderMorphics, care a dezvoltat un API grafic 3D numit Reality Lab , care a fost utilizat în imagistica medicală și software CAD. Au fost lansate două versiuni ale acestui API. Microsoft a cumpărat RenderMorphics în februarie 1995, aducându-l pe Keondjian la bord pentru a implementa un motor grafic 3D pentru Windows 95 . Prima versiune a Direct3D a fost livrată în DirectX 2.0 (2 iunie 1996) și DirectX 3.0 (26 septembrie 1996).

Direct3D a implementat inițial atât API-urile 3D „ modul reținut ”, cât și „ modul imediat ”. La fel ca alte API-uri DirectX, cum ar fi DirectDraw , ambele au fost bazate pe COM . Modul reținut a fost un API grafic de scenă care a obținut puțină adopție. Dezvoltatorii de jocuri au cerut un control mai direct al activităților hardware decât ar putea oferi modul reținut Direct3D. Doar două jocuri care au vândut un volum semnificativ, Lego Island și Lego Rock Raiders , se bazau pe modul păstrat Direct3D, deci Microsoft nu a actualizat modul păstrat după DirectX 3.0.

Pentru DirectX 2.0 și 3.0, modul imediat Direct3D a folosit un model de programare „execută buffer” pe care Microsoft spera că furnizorii de hardware îl vor suporta direct. Tampoanele de executare au fost destinate a fi alocate în memoria hardware și analizate de hardware pentru a efectua redarea 3D. Au fost considerate extrem de incomode de programat la acea vreme, totuși, împiedicând adoptarea noului API și determinând solicitarea ca Microsoft să adopte OpenGL ca API oficial de redare 3D pentru jocuri, precum și aplicații pentru stații de lucru. (vezi OpenGL vs. Direct3D )

Mai degrabă decât să adopte OpenGL ca API - ul de jocuri de noroc, Microsoft a ales să continue îmbunătățirea Direct3D, nu numai pentru a fi competitiv cu OpenGL, dar pentru a concura mai eficient cu alte API - uri proprietare , cum ar fi 3dfx lui Glide .

De la început, modul imediat , de asemenea , sprijinit Talisman lui gresie de redare cu metodele BeginScene / EndScene ale interfeței IDirect3DDevice.

Direct3D 4.0

Nu au fost planificate modificări substanțiale ale Direct3D pentru DirectX 4.0 , care a fost programat să fie livrat la sfârșitul anului 1996 și apoi anulat.

Direct3D 5.0

În decembrie 1996, o echipă din Redmond a preluat dezvoltarea modului Direct3D Immediate, în timp ce echipa RenderMorphics din Londra a continuat să lucreze la modul reținut. Echipa Redmond a adăugat API-ul DrawPrimitive care a eliminat necesitatea aplicațiilor de a construi buffere de executare, făcând Direct3D să semene mai mult cu alte API-uri de redare a modului imediat, cum ar fi Glide și OpenGL . Prima versiune beta a DrawPrimitive a fost livrată în februarie 1997, iar versiunea finală a fost livrată cu DirectX 5.0 în august 1997.

Pe lângă introducerea unui API de mod imediat mai ușor de utilizat, DirectX 5.0 a adăugat metoda SetRenderTarget care a permis dispozitivelor Direct3D să își scrie ieșirea grafică pe o varietate de suprafețe DirectDraw.

Direct3D 6.0

DirectX 6.0 (lansat în august 1998) a introdus numeroase caracteristici pentru acoperirea hardware-ului contemporan (cum ar fi tampoane multitexture și șablon ), precum și conducte geometrice optimizate pentru x87 , SSE și 3DNow! și gestionarea opțională a texturii pentru a simplifica programarea. Direct3D 6.0 a inclus, de asemenea, suport pentru caracteristici care fuseseră licențiate de Microsoft de la furnizori de hardware specifici pentru includerea în API, în schimbul avantajului în timp pentru piață pentru furnizorul de licențiere. Suportul de compresie a texturii S3 a fost una dintre aceste caracteristici, redenumită drept DXTC în scopul includerii în API. O alta a fost tehnica de cartografiere proprietara TriTech . Microsoft a inclus aceste caracteristici în DirectX, apoi le-a adăugat la cerințele necesare pentru ca driverele să obțină o siglă Windows pentru a încuraja adoptarea pe scară largă a caracteristicilor în hardware-ul altor furnizori.

O actualizare minoră a DirectX 6.0 a venit în februarie 1999 DirectX 6.1 actualizare. Pe lângă adăugarea de suport DirectMusic pentru prima dată, această versiune a îmbunătățit suportul pentru extensiile 3D Intel Pentium III .

O notă confidențială trimisă în 1997 arată că Microsoft intenționează să anunțe suport complet pentru Talisman în DirectX 6.0, dar API-ul a ajuns să fie anulat (a se vedea pagina Microsoft Talisman pentru detalii).

Direct3D 7.0

DirectX 7.0 (lansat în septembrie 1999) a introdus formatul de text .dds și suport pentru transformarea și iluminarea accelerării hardware (disponibil pentru prima dată pe hardware-ul PC-ului cu GeForce 256 de la Nvidia ), precum și capacitatea de a aloca buffere vertex în memoria hardware. Tampoanele hardware vertex reprezintă prima îmbunătățire substanțială față de OpenGL din istoria DirectX. Direct3D 7.0 a mărit, de asemenea, suportul DirectX pentru hardware-ul multitexturării și reprezintă apogeul caracteristicilor conductelor multitexture cu funcție fixă: deși puternic, a fost atât de complicat programarea încât a fost necesar un nou model de programare pentru a expune capacitățile de umbrire ale hardware-ului grafic.

Direct3D 8.0

DirectX 8.0 , lansat in noiembrie 2000, a introdus programabilitate sub formă de vertex și pixel shader , care permite dezvoltatorilor să scrie cod , fără griji cu privire la starea de hardware de prisos. Complexitatea programelor shader depindea de complexitatea sarcinii, iar driverul de afișare a compilat acele umbrere la instrucțiuni care ar putea fi înțelese de hardware. Direct3D 8.0 și capacitățile sale de umbrire programabile au fost prima abatere majoră de la o arhitectură cu funcție fixă ​​în stil OpenGL, unde desenul este controlat de o mașină de stare complicată. Direct3D 8.0 a eliminat, de asemenea, DirectDraw ca un API separat. Direct3D a inclus toate apelurile API DirectDraw rămase încă necesare pentru dezvoltarea aplicațiilor, cum ar fi Present (), funcția utilizată pentru a afișa rezultatele redării.

Direct3D nu a fost considerat ușor de utilizat, dar începând cu versiunea 8.1 a DirectX, au fost rezolvate multe probleme de utilizare. Direct3D 8 conținea multe funcții grafice 3D puternice, cum ar fi umbrere de vârf , umbrere de pixeli , ceață , mapare cu bump și mapare cu texturi .

Direct3D 9

Direct3D 9.0 , lansat în decembrie 2002, a adăugat o nouă versiune a suportului High Level Shader Language pentru formate de textură în virgulă mobilă, Multiple Render Targets (MRT), Multiple-Element Textures, căutări de texturi în vertex shader și tehnici tampon șablon.

Direct3D 9Ex [1]

O extensie disponibilă numai în Windows Vista și versiunile mai noi (7, 8, 8.1 și 10), numită Direct3D 9Ex (versiunea precedentă de 9.0L (L - numele de cod Windows Longhorn)), permite utilizarea avantajelor oferite de Windows Vista Windows Display Driver Model (WDDM) și este utilizat pentru Windows Aero . Direct3D 9Ex, împreună cu driverele WDDM din clasa DirectX 9 permite virtualizarea memoriei grafice și paginarea în memoria sistemului, permite întreruperea și programarea operațiunilor grafice și permite partajarea suprafețelor DirectX între procese. Direct3D 9Ex a fost cunoscut anterior ca versiunea 1.0 a Windows Graphics Foundation (WGF).

Direct3D 10

Windows Vista include o actualizare majoră a API-ului Direct3D. Numit inițial WGF 2.0 (Windows Graphics Foundation 2.0), apoi DirectX 10 și DirectX Next. Direct3D 10 prezintă un model actualizat de shader 4.0 și întrerupere opțională pentru programele de shader. În acest model, umbrele constau încă din etape fixe ca la versiunile anterioare, dar toate etapele acceptă o interfață aproape unificată, precum și o paradigmă de acces unificat pentru resurse precum texturi și constante de umbrire. Limbajul în sine a fost extins pentru a fi mai expresiv, incluzând operații întregi, un număr de instrucțiuni mult crescut și mai multe construcții de limbaj de tip C. În plus față de etapele de vârf și de umbrire a pixelilor disponibile anterior , API include o etapă de umbrire a geometriei care rupe vechiul model al unui vârf în / un vârf în afară, pentru a permite geometria să fie generată efectiv din interiorul unui umbră, permițând geometrie complexă pentru să fie generate în întregime pe hardware-ul grafic.

Windows XP nu este acceptat de DirectX 10.0 și versiuni ulterioare.

Spre deosebire de versiunile anterioare ale API-ului, Direct3D 10 nu mai folosește „biți de capacitate” (sau „majuscule”) pentru a indica ce caracteristici sunt acceptate pe un anumit dispozitiv grafic. În schimb, definește un standard minim de capabilități hardware care trebuie acceptate pentru ca un sistem de afișare să fie „compatibil Direct3D 10”. Aceasta este o plecare semnificativă, cu scopul de a simplifica codul aplicației prin eliminarea codului de verificare a capacității și a cazurilor speciale pe baza prezenței sau absenței unor capacități specifice.

Deoarece hardware-ul Direct3D 10 a fost relativ rar după lansarea inițială a Windows Vista și datorită bazei masive instalate de plăci grafice non-Direct3D 10 compatibile, primele jocuri compatibile Direct3D 10 oferă încă căi de redare Direct3D 9. Exemple de astfel de titluri sunt jocurile scrise inițial pentru Direct3D 9 și portate pe Direct3D 10 după lansare, precum Company of Heroes , sau jocurile dezvoltate inițial pentru Direct3D 9 cu o cale Direct3D 10 modernizată ulterior în dezvoltare, precum Hellgate: London sau Crysis . DirectX 10 SDK a devenit disponibil în februarie 2007.

Direct3D 10.0

Hardware-ul nivelului Direct3D 10.0 trebuie să accepte următoarele caracteristici: Capacitatea de a procesa primitive întregi în noua etapă de geometrie-shader, capacitatea de a transmite date de vârf generate de conducte în memorie utilizând etapa de ieșire a fluxului, suport multisamplat alfa-la-acoperire, reluarea unei suprafețe de adâncime / șablon sau a unei resurse multisamplate, odată ce nu mai este legată ca o țintă de redare, integrare completă HLSL - toate umbrele Direct3D 10 sunt scrise în HLSL și implementate cu operațiunile de bază ale shader-ului comun, întreg și shaker bit, organizare a stării conductei în 5 obiecte de stare imuabile, organizarea constantelor de shader în buffere constante, număr crescut de ținte de redare, texturi și eșantioane, fără limită de lungime a shader-ului, noi tipuri de resurse și formate de resurse, runtime stratificate / straturi API, opțiune de realizat pe - schimbarea și configurarea materialelor primitive folosind un shader de geometrie, generalizarea sporită a accesului la resurse utilizând o vizualizare, eliminarea biților (capac) hardware vechi.

  • Conductele fixe se elimină în favoarea conductelor complet programabile (adesea denumite arhitectură unificată a conductelor), care pot fi programate pentru a le imita.
  • Obiect de stare nou pentru a permite (în mare parte) procesorului să schimbe stările în mod eficient.
  • Modelul Shader 4.0 îmbunătățește programabilitatea conductei grafice . Se adaugă instrucțiuni pentru calcule întregi și în biți.
  • Nucleul shader comun oferă un set complet de operațiuni întregi pe 32 de biți și pe biți, conforme cu IEEE. Aceste operații permit o nouă clasă de algoritmi în hardware-ul grafic - exemplele includ tehnici de compresie și ambalare, FFT-uri și controlul fluxului de programe de câmp de biți.
  • Umbrele geometrice , care funcționează pe triunghiuri adiacente care formează o plasă .
  • Textură matrice permit schimbarea de texturi în GPU , fără intervenția CPU.
  • Redarea predicată permite ignorarea apelurilor desenate pe baza unor alte condiții. Aceasta permite tăierea rapidă a ocluziei , care împiedică redarea obiectelor dacă nu este vizibilă sau prea departe pentru a fi vizibilă.
  • Suportul Instancing 2.0 , permițând instanțelor multiple de ochiuri similare, cum ar fi armatele, iarba sau copacii, să fie redate într-un singur apel de extragere, reducând timpul de procesare necesar pentru mai multe obiecte similare cu cel al unuia.

Direct3D 10.1

Direct3D 10.1 a fost anunțat de Microsoft la scurt timp după lansarea Direct3D 10 ca o actualizare minoră. Specificația a fost finalizată odată cu lansarea din noiembrie 2007 DirectX SDK și timpul de rulare a fost livrat cu Windows Vista SP1 , care este disponibil de la mijlocul lunii martie 2008.

Direct3D 10.1 stabilește încă câteva standarde de calitate a imaginilor pentru furnizorii de grafică și oferă dezvoltatorilor mai mult control asupra calității imaginii. Funcțiile includ un control mai fin asupra anti-aliasing (atât multi-eșantionare, cât și supra-eșantionare cu umbrire pe eșantion și control al aplicației asupra poziției eșantionului) și mai multe flexibilități față de unele dintre caracteristicile existente (matrice de hărți cub și moduri de amestecare independente). Hardware-ul de nivel Direct3D 10.1 trebuie să accepte următoarele caracteristici: Multisampling-ul a fost îmbunătățit pentru a generaliza transparența bazată pe acoperire și pentru a face multi-sample-ul să funcționeze mai eficient cu redare multi-pass, comportament mai bun de tăiere - fețele din zona zero sunt tăiate automat; acest lucru afectează numai redarea wireframe-ului, modurile de amestecare independente pentru fiecare țintă de redare, execuția nouă a pixel shader-frecvenței eșantionului cu rasterizare primitivă, lățimea de bandă crescută a etapei conductelor, atât suprafețele de culoare, cât și adâncimea / șablonul MSAA pot fi folosite acum cu CopyResource fie ca sursă, fie ca destinație, MultisampleEnable afectează numai rasterizarea liniei (punctele și triunghiurile nu sunt afectate) și este utilizat pentru a alege un algoritm de desenare a liniilor. Aceasta înseamnă că unele rasterizări multisample din Direct3D 10 nu mai sunt acceptate, eșantionarea texturii - instrucțiunile sample_c și sample_c_lz sunt definite pentru a funcționa atât cu Texture2DArrays, cât și cu TextureCubeArrays utilizează membrul Location (componenta alfa) pentru a specifica un index de matrice, suport pentru TextureCubeArrays.

  • Filtrare obligatorie în virgulă mobilă pe 32 de biți .
  • Reguli în virgulă mobilă - Folosește aceleași reguli IEEE-754 pentru virgulă în virgulă EXCEPȚIE Operațiunile în virgulă mobilă pe 32 de biți au fost înăsprite pentru a produce un rezultat la 0,5 unitate ultimul loc (0,5 ULP) din rezultatul infinit de precis. Acest lucru se aplică adunării, scăderilor și multiplicării. (precizie la 0,5 ULP pentru multiplicare, 1,0 ULP pentru reciprocitate).
  • Formate - Precizia amestecului float16 a crescut la 0,5 ULP. Amestecarea este necesară și pentru formatele UNORM16 / SNORM16 / SNORM8.
  • Conversia formatului în timp ce copiați între anumite resurse preconstruite de 32/64/128 biți, tipizate și reprezentări comprimate de aceleași lățimi de biți.
  • Suport obligatoriu pentru 4x MSAA pentru toate țintele de redare, cu excepția R32G32B32A32 și R32G32B32.
  • Modelul Shader 4.1

Spre deosebire de Direct3D 10 care necesita strict interfețe hardware și driver din clasa Direct3D 10, rularea Direct3D 10.1 poate rula pe hardware Direct3D 10.0 folosind un concept de „ niveluri de caracteristici ”, dar noile caracteristici sunt acceptate exclusiv de hardware nou care expune nivelul de caracteristică 10_1.

Singurul hardware Direct3D 10.1 disponibil din iunie 2008 a fost seria Radeon HD 3000 și seria Radeon HD 4000 de la ATI ; în 2009, li s-au alăturat GPU-urile Chrome 430 / 440GT de la S3 Graphics și selectează modele inferioare din seria GeForce 200 de la Nvidia . În 2011, chipset-urile Intel au început să accepte Direct3D 10.1 odată cu introducerea Intel HD Graphics 2000 (GMA HD).

Direct3D 11

Direct3D 11 a fost lansat ca parte a Windows 7. A fost prezentat la Gamefest 2008 pe 22 iulie 2008 și demonstrat la conferința tehnică Nvision 08 din 26 august 2008. Previzualizarea tehnică Direct3D 11 a fost inclusă în versiunea din noiembrie 2008 a DirectX SDK . AMD a previzualizat hardware-ul DirectX11 funcțional la Computex pe 3 iunie 2009, rulând câteva mostre SDK DirectX 11.

Runtime-ul Direct3D 11 este capabil să ruleze pe hardware și drivere din clasa Direct3D 9 și 10.x utilizând conceptul de „niveluri de caracteristici” , extinzând funcționalitatea introdusă pentru prima dată în runtime-ul Direct3D 10.1. Nivelurile de caracteristici permit dezvoltatorilor să unifice conducta de redare sub Direct3D 11 API și să utilizeze îmbunătățiri API, cum ar fi o mai bună gestionare a resurselor și multithreading chiar și pe cardurile de nivel entry, deși caracteristicile avansate, cum ar fi noile modele de shader și etapele de redare, vor fi expuse doar în sus -hardware de nivel. Există trei profiluri "10 Nivel 9" care încapsulează diferite capabilități ale cardurilor populare DirectX 9.0a, iar Direct3D 10, 10.1 și 11 au fiecare un nivel de caracteristică separat; fiecare nivel superior este un superset strict al unui nivel inferior.

Teselarea a fost luată în considerare anterior pentru Direct3D 10, dar ulterior a fost abandonată. GPU-uri precum Radeon R600 dispun de un motor de teselare care poate fi utilizat cu Direct3D 9/10 / 10.1 și OpenGL, dar nu este compatibil cu Direct3D 11 (conform Microsoft). Hardware-ul grafic mai vechi, cum ar fi Radeon 8xxx, GeForce 3/4, avea suport pentru o altă formă de teselare (patch-uri RT, N patch-uri), dar aceste tehnologii nu au văzut niciodată o utilizare substanțială. Ca atare, suportul lor a fost renunțat la hardware mai nou.

Microsoft a sugerat, de asemenea, alte caracteristici, cum ar fi transparența independentă a comenzii , care nu a fost niciodată expusă de API-ul Direct3D, dar acceptată aproape transparent de hardware-ul Direct3D timpuriu, cum ar fi linia de chips-uri PowerVR de la Videologic .

Direct3D 11.0

Caracteristicile Direct3D 11.0 includ: Suport pentru modelul Shader 5.0, legătura dinamică a shader-ului, resurse adresabile, tipuri de resurse suplimentare, subrutine, instanțarea geometriei, acoperire ca intrare pixel shader, interpolare programabilă a intrărilor, noi formate de compresie a texturii (1 format LDR nou și 1 nou Format HDR), cleme de textură pentru a limita preîncărcarea WDDM, necesită precizie de 8 biți de subtexel și sub-mip la filtrarea texturii, limite de textură de 16 K, Gather4 (suport pentru texturi multi-componente, suport pentru offseturi programabile), DrawIndirect, profunzime conservatoare, Bias de adâncime, ieșire a fluxului adresabil, fixare mipmap pe resursă, ferestre de vizualizare în virgulă mobilă, instrucțiuni de conversie a shader-urilor, multithreading îmbunătățit.

  • Modelul Shader 5
  • Suport pentru Tessellation și Tessellation Shaders pentru a crește la rulare numărul de poligoane vizibile dintr-un model poligonal cu detalii reduse
  • Redare cu mai multe fire - pentru a reda la același obiect de dispozitiv Direct3D din fire diferite pentru procesoare multi core
  • Computer shaders - care expune conducta shader pentru sarcini non-grafice, cum ar fi procesarea fluxului și accelerarea fizică, similară în spirit cu ceea ce realizează OpenCL , Nvidia CUDA , ATI Stream și HLSL Shader Model 5, printre altele.
  • Suport obligatoriu pentru 4x MSAA pentru toate țintele de randare și 8x MSAA pentru toate formatele țintă de redare, cu excepția formatelor R32G32B32A32.

Alte caracteristici notabile sunt adăugarea a doi noi algoritmi de compresie a texturii pentru o împachetare mai eficientă a texturilor de înaltă calitate și HDR / alfa și o memorie cache de text crescută .

Văzut pentru prima dată în versiunea Release Candidate , Windows 7 integrează primul suport Direct3D 11 lansat. Platforma Actualizare pentru Windows Vista include caracteristici complete Direct3D 11 și execuție DXGI 1.1 actualizare, precum și alte componente conexe de la Windows 7 ca WARP , Direct2D , DirectWrite și WIC .

Direct3D 11.1

Direct3D 11.1 este o actualizare a API-ului livrat cu Windows 8 . Runtime-ul Direct3D din Windows 8 are DXGI 1.2 și necesită noi drivere de dispozitiv WDDM 1.2 . Versiunea preliminară a Windows SDK pentru Windows 8 Developer Preview a fost lansată pe 13 septembrie 2011.

Noul API oferă urmărirea shader-ului și îmbunătățiri ale compilatorului HLSL, suport pentru tipuri de date scalare HLSL de precizie minimă, UAV-uri (Vezi acces neordonat) la fiecare etapă a conductei, rasterizare independentă de țintă (TIR), opțiune de cartografiere a SRV-urilor din buffere dinamice cu NO_OVERWRITE, shader procesarea resurselor video, opțiunea de utilizare a operațiilor logice într-o țintă de redare, opțiunea de a lega un subinterval al unui buffer constant la un shader și de a-l recupera, opțiunea de a crea buffere constante mai mari decât poate accesa un shader, opțiunea de a arunca resursele și vizualizările resurselor , opțiunea de a schimba subresursele cu opțiuni noi de copiere, opțiunea de a forța numărul de eșantioane pentru a crea o stare rasterizator, opțiunea de a șterge total sau parțial o vizualizare a resurselor, opțiunea de a utiliza Direct3D în procesele sesiunii 0, opțiunea de a specifica planurile de clipuri de utilizator în HLSL la nivelul de caracteristică 9 și mai mare, suport pentru bufferul de umbră la nivelul de caracteristică 9, suport pentru redarea video, suport extins pentru resurse Texture2D partajate și schimbarea instantanee între Dire ct3D 10 și 11 contexte și niveluri de caracteristici. Direct3D 11.1 include un nou nivel de caracteristică 11_1, care aduce actualizări minore la limbajul shader, cum ar fi tampoane constante mai mari și instrucțiuni opționale de precizie dublă, precum și moduri de amestecare îmbunătățite și suport obligatoriu pentru formate de culoare pe 16 biți pentru a îmbunătăți performanța de intrare - GPU-uri la nivel, precum Intel HD Graphics . WARP a fost actualizat pentru a accepta caracteristica nivel 11_1.

Platforma Actualizare pentru Windows 7 include un set limitat de caracteristici de la Direct3D 11.1, deși componentele care depind de WDDM 1.2 - cum ar fi nivelul de caracteristică 11_1 și API - urile aferente, sau quad tampon pentru stereoscopică redare - nu sunt prezente.

Direct3D 11.2

Direct3D 11.2 a fost livrat cu Windows 8.1 . Noile caracteristici hardware necesită DXGI 1.3 cu drivere WDDM 1.3 și includ modificarea și legarea shader-ului runtime, graficul de legare a funcției (FLG), compilator HLSL inbox , opțiune pentru adnotarea comenzilor grafice. Nivelurile de caracteristici 11_0 și 11_1 introduc asistență opțională pentru resurse cu gresie, cu un nivel de umbrire al clemei de detaliu (Tier2). Această din urmă caracteristică oferă în mod eficient controlul asupra tabelelor de pagini hardware prezente în multe GPU-uri actuale. WARP a fost actualizat pentru a susține pe deplin noile caracteristici. Cu toate acestea, nu există nivel de caracteristică 11_2; noile caracteristici sunt dispersate pe nivelurile de caracteristici existente. Cei care sunt dependenți de hardware pot fi verificați individual prin CheckFeatureSupport. Unele dintre funcțiile „noi” din Direct3D 11.2 expun de fapt unele caracteristici hardware vechi într-un mod mai granular; de exemplu, D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORTexpune suport parțial pentru instanțarea pe hardware-ul de nivel 9_1 și 9_2 de caracteristici, altfel complet acceptat de la nivelul de caracteristică 9_3 în continuare.

Direct3D 11.X

Direct3D 11.X este un superset de DirectX 11.2 care rulează pe Xbox One . Include unele caracteristici, cum ar fi pachete de extragere, care au fost anunțate ulterior ca parte a DirectX 12.

Direct3D 11.3

Direct3D 11.3 a fost livrat în iulie 2015 cu Windows 10; include caracteristici minore de redare de la Direct3D 12, păstrând în același timp structura generală a API-ului Direct3D 11.x. Direct3D 11.3 introduce Shader Model 5.1, valoare de referință a șablonului specificat pentru Shader opțional, încărcări de vizualizare a accesului neordonat tipizat, vizualizări ordonate Rasterizer (ROV), Swizzle standard opțional, mapare textură implicită opțională, rasterizare conservativă (din trei niveluri), acces opțional de memorie opțional ( Suport UMA) și resurse Tiled suplimentare (nivelul 2) (Resurse tiled volumice).

Direct3D 11.4

  • Direct3D 11.4 versiunea 1511 - Direct3D 11.4 inițial a fost introdus cu actualizarea Windows 10 Threshold 2 (versiunea 1511), îmbunătățind suportul adaptoarelor grafice externe și DXGI 1.5.
  • Direct3D 11.4 versiunea 1607 - Actualizat Direct3D 11.4 cu Windows 10 Anniversary Update (versiunea 1607) include suport WDDM 2.1 și pentru format UHDTV HDR10 ( ST 2084 ) și rate variabile de reîmprospătare pentru aplicații UWP.

Direct3D 12

Direct3D 12 permite un nivel mai redus de abstracție hardware decât versiunile anterioare, permițând jocurilor viitoare să îmbunătățească semnificativ scalarea multithread și să scadă utilizarea procesorului. Acest lucru se realizează prin potrivirea mai bună a stratului de abstracție Direct3D cu hardware-ul de bază, prin intermediul unor caracteristici noi, cum ar fi Desen indirect, tabele descriptoare, obiecte concise de stare a conductelor și desenarea pachetelor de apeluri. Reducerea cheltuielilor generale a șoferului este de fapt principala atracție a Direct3D 12, în mod similar cu Mantle AMD ; în cuvintele dezvoltatorului său principal, Max McMullen, obiectivul principal al Direct3D 12 este de a atinge o „eficiență la nivel de consolă” și un paralelism îmbunătățit al procesorului.

Deși Nvidia a anunțat un sprijin larg pentru Direct3D 12, aceștia erau, de asemenea, oarecum rezervați cu privire la atracția universală a noului API, menționând că, în timp ce dezvoltatorii de motoare de jocuri ar putea fi entuziasmați de gestionarea directă a resurselor GPU din codul aplicației lor, "o mulțime de [altele] oamenii nu ar fi „fericiți să facă asta.

Unele caracteristici hardware noi sunt, de asemenea, în Direct3D 12, incluzând Shader Model 5.1, Volume Tiled Resources (Tier 2), Shader Specified Stencil Reference Value, Load UAV Typed, Conservative Rasterization (Tier 1), mai bună coliziune și reducere cu Conservator Rasterization, Rasterizer Ordered Vizualizări (ROV), swizzle standard, mapare textură implicită, swap lanțuri, resurse swizzled și resurse comprimate , moduri de amestecare suplimentare , amestec programabil și transparență eficientă independentă de comandă (OIT) cu pixel comandat UAV.

Obiectele stării conductelor au evoluat din Direct3D 11, iar noile stări concise ale conductelor înseamnă că procesul a fost simplificat. DirectX 11 a oferit flexibilitate în modul în care stările sale ar putea fi modificate, în detrimentul performanței. Simplificarea procesului și unificarea conductelor (de exemplu, stările pixel shader) conduc la un proces mai raționalizat, reducând semnificativ cheltuielile generale și permițând plăcii grafice să atragă mai multe apeluri pentru fiecare cadru.

Direct3D 12 a învățat, de asemenea, de la AMD Mantle în listele de comenzi și pachete, cu scopul de a asigura procesorul și GPU-ul să lucreze împreună într-un mod mai echilibrat.

În Direct3D 11, comenzile sunt trimise de la CPU către GPU una câte una, iar GPU funcționează prin aceste comenzi secvențial. Aceasta înseamnă că comenzile sunt blocate de viteza cu care CPU ar putea trimite aceste comenzi într-un mod liniar. În DirectX 12 aceste comenzi sunt trimise ca liste de comenzi, conținând toate informațiile necesare într-un singur pachet. GPU este apoi capabil să calculeze și să execute această comandă într-un singur proces, fără a fi nevoie să aștepte informații suplimentare de la CPU.

În aceste liste de comenzi se află pachete. Acolo unde comenzile anterioare au fost luate, utilizate și apoi uitate de GPU, pachetele pot fi refolosite. Acest lucru scade volumul de lucru al GPU-ului și înseamnă că activele repetate pot fi utilizate mult mai repede.

În timp ce legarea resurselor este destul de convenabilă în Direct3D 11 pentru dezvoltatori în acest moment, ineficiența sa înseamnă că mai multe capabilități hardware moderne sunt subutilizate drastic. Când un motor de joc avea nevoie de resurse în DX11, trebuia să deseneze de fiecare dată datele de la zero, ceea ce înseamnă procesele repetate și utilizările inutile. În Direct3D 12, descriptorul de grămezi și tabele înseamnă că resursele cele mai des utilizate pot fi alocate de dezvoltatori în tabele, pe care GPU le poate accesa rapid și ușor. Acest lucru poate contribui la o performanță mai bună decât Direct3D 11 pe hardware echivalent, dar implică și mai multă muncă pentru dezvoltator.

Dynamic Heaps sunt, de asemenea, o caracteristică a Direct3D 12.

Direct3D 12 oferă suport explicit pentru multi-adaptoare, permițând controlul explicit al mai multor sisteme de configurare GPU. Astfel de configurații pot fi construite împreună cu adaptorul grafic al aceluiași furnizor de hardware, precum și al unui furnizor de hardware diferit.

  • Direct3D 12 versiunea 1607 - Odată cu actualizarea aniversară Windows 10 (versiunea 1607), lansată la 2 august 2016, runtime-ul Direct3D 12 a fost actualizat pentru a sprijini construcțiile pentru comunicare explicită multithreading și inter-proces, permițând dezvoltatorilor să profite de masiv modern GPU-uri paralele. Alte caracteristici includ semnăturile rădăcină actualizate versiunea 1.1, precum și suport pentru format HDR10 și rate de reîmprospătare variabile .
  • Direct3D 12 versiunea 1703 - Cu Windows 10 Creators Update (versiunea 1703), lansată la 11 aprilie 2017, rularea Direct3D 12 a fost actualizată pentru a suporta Shader Model 6.0 și DXIL . și Shader Model 6.0 necesită Windows 10 Anniversary Update (versiunea 1607), WDDM 2.1. Noile caracteristici grafice sunt testarea adâncimilor și MSAA programabil.
  • Direct3D 12 versiunea 1709 - Direct3D în Windows 10 Fall Creators Update (versiunea 1709), lansat pe 17 octombrie 2017, include depanare îmbunătățită.
  • Direct3D 12 versiunea 1809 - Actualizarea Windows 10 octombrie 2018 (versiunea 1809) oferă suport pentru DirectX Raytracing, astfel încât GPU-urile să poată beneficia de API-ul său.
  • Direct3D 12 versiunea 1903 - Actualizarea Windows 10 mai 2019 (versiunea 1903) oferă suport pentru DirectML .
  • Versiunea Direct3D 12 2004 - Actualizarea Windows 10 mai 2020 (versiunea 2004) oferă suport pentru Mesh & Amplification Shaders, Sampler Feedback, precum și DirectX Raytracing Tier 1.1 și îmbunătățiri de alocare a memoriei.

Arhitectură

Strat abstract

Direct3D este o componentă a subsistemului Microsoft DirectX API. Scopul Direct3D este de a abstra comunicarea dintre o aplicație grafică și driverele hardware grafice. Este prezentat ca un strat abstract subțire la un nivel comparabil cu GDI (vezi diagrama atașată). Direct3D conține numeroase caracteristici care îi lipsesc GDI.

Direct3D este un API grafic în modul Imediat . Oferă o interfață de nivel scăzut pentru fiecare funcție 3D a plăcii video ( transformări, decupare, iluminare , materiale , texturi , tampon de adâncime și așa mai departe). Acesta a avut o dată un nivel mai înalt mod Păstrate componente, acum întrerupt în mod oficial.

Modul direct Direct3D prezintă trei abstracții principale: dispozitive , resurse și lanțuri de schimb (vezi diagrama atașată). Dispozitivele sunt responsabile pentru redarea scenei 3D. Acestea oferă o interfață cu diferite capacități de redare. De exemplu, dispozitivul mono oferă redare albă și neagră, în timp ce dispozitivul RGB redă în culori. Există patru tipuri de dispozitive:

Dispozitiv
  • Dispozitiv de referință : Simulează funcții noi care nu sunt încă disponibile în hardware. Este necesar să instalați Direct3D SDK pentru a utiliza acest tip de dispozitiv.
  • Dispozitiv de referință nul : nu face nimic. Acest dispozitiv este utilizat atunci când SDK-ul nu este instalat și este solicitat un dispozitiv de referință.
  • Dispozitiv software conectabil : efectuează redarea software-ului. Acest dispozitiv a fost introdus cu DirectX 9.0 .

Fiecare dispozitiv conține cel puțin un lanț swap . Un lanț swap este format din una sau mai multe suprafețe tampon spate . Redarea are loc în memoria tampon din spate .

Mai mult, dispozitivele conțin o colecție de resurse ; date specifice utilizate în timpul redării. Fiecare resursă are patru atribute:

  • Tip : Determină tipul de resursă: suprafață, volum, textură, textură cub, textură volum, textură suprafață, tampon index sau tampon vertex.
  • Pool : descrie modul în care resursa este gestionată de runtime și unde este stocată. În grupul implicit , resursa va exista numai în memoria dispozitivului. Resursele din grupul gestionat vor fi stocate în memoria de sistem și vor fi trimise la dispozitiv atunci când este necesar. Resursele dinpiscina de memorie de sistem vor exista numai în memoria de sistem. În cele din urmă,pool-ul de zgârieturi este practic același cu pool-ul de memorie al sistemului, dar resursele nu sunt obligate de restricții hardware.
  • Format : descrie aspectul datelor resurselor în memorie. De exemplu, valoarea formatului D3DFMT_R8G8B8 înseamnă o adâncime de culoare de 24 de biți (8 biți pentru roșu, 8 biți pentru verde și 8 biți pentru albastru).
  • Utilizare : descrie, cu o colecție de biți de semnalizare , modul în care resursa va fi utilizată de aplicație. Aceste semnalizatoare dictează ce resurse sunt utilizate în modele de acces dinamic sau static. Valorile statice ale resurselor nu se modifică după încărcare, în timp ce valorile dinamice ale resurselor pot fi modificate.

Direct3D implementează două moduri de afișare:

  • Mod ecran complet: Aplicația Direct3D generează toate ieșirile grafice pentru un dispozitiv de afișare. În acest mod Direct3D captează automat Alt-Tab și setează / restabilește rezoluția ecranului și formatul pixelilor fără intervenția programatorului. Acest lucru oferă, de asemenea, o mulțime de probleme pentru depanare datorită „modului cooperativ exclusiv”.
  • Mod Windowed: Rezultatul este afișat în interiorul zonei unei ferestre. Direct3D comunică cu GDI pentru a genera ieșirea grafică pe afișaj. Modul Windowed poate avea același nivel de performanță ca pe ecran complet, în funcție de suportul pentru șofer.

Conductă

Procesul de conducte grafice

API-ul Microsoft Direct3D 11 definește un proces de conversie a unui grup de vârfuri, texturi, tampoane și stare într-o imagine pe ecran. Acest proces este descris ca o conductă de redare cu mai multe etape distincte. Diferitele etape ale conductei Direct3D 11 sunt:

  1. Input Assembler : Citește datele de vârf dintr-un buffer de vârf furnizat de aplicație și le alimentează pe conductă.
  2. Vertex Shader : Efectuează operații pe un singur vârf la un moment dat, cum ar fi transformări, jupuire sau iluminare.
  3. Hull Shader : Efectuează operațiuni pe seturi de puncte de control al patch-urilor și generează date suplimentare cunoscute sub numele de constante de patch-uri.
  4. Etapa de teselare : subdivizează geometria pentru a crea reprezentări de ordin superior ale corpului.
  5. Domain Shader : Efectuează operații pe vârfurile de ieșire din stadiul de teselare, în același mod ca un umbră de vârf.
  6. Geometry Shader : procesează primitive întregi, cum ar fi triunghiuri, puncte sau linii. Dat fiind o primitivă, această etapă o elimină sau generează una sau mai multe primitive noi.
  7. Ieșire flux : Poate scrie în memorie rezultatele etapei anterioare. Acest lucru este util pentru recircularea datelor înapoi în conductă.
  8. Rasterizer : convertește primitivele în pixeli, alimentând acești pixeli în pixel shader. Rasterizer poate, de asemenea, să efectueze alte sarcini, cum ar fi tăierea a ceea ce nu este vizibil sau interpolarea datelor de vârf în date per pixel.
  9. Pixel Shader : Determină culoarea finală a pixelilor care urmează să fie scrisă în ținta de redare și poate calcula, de asemenea, o valoare a adâncimii care trebuie scrisă în memoria tampon de adâncime.
  10. Fuziune de ieșire : combină diferite tipuri de date de ieșire ( valori ale pixel shader , amestec alfa, adâncime / șablon ...) pentru a construi rezultatul final.

Etapele conductelor ilustrate cu o cutie rotundă sunt complet programabile. Aplicația oferă un program de umbrire care descrie operațiunile exacte care trebuie finalizate pentru etapa respectivă. Multe etape sunt opționale și pot fi dezactivate complet.

Niveluri de caracteristici

În Direct3D 5-9, când noile versiuni ale API-ului au introdus suport pentru noile capabilități hardware, cele mai multe dintre ele erau opționale - fiecare furnizor de grafică și-a menținut propriul set de caracteristici acceptate în plus față de funcționalitatea de bază necesară. Suportul pentru caracteristici individuale a trebuit să fie determinat folosind „biți de capacitate” sau „majuscule”, făcând din programarea grafică între furnizori o sarcină complexă.

Direct3D 10 a introdus un set mult simplificat de cerințe hardware obligatorii bazate pe cele mai populare capabilități Direct3D 9 la care toate plăcile grafice suportate trebuiau să adere, cu doar câteva capabilități opționale pentru formate și operații de texturi acceptate.

Direct3D 10.1 a adăugat câteva noi cerințe hardware obligatorii și, pentru a rămâne compatibile cu hardware și drivere 10.0, aceste caracteristici au fost încapsulate în două seturi numite „niveluri de caracteristici”, nivelul 10.1 formând un superset de nivel 10.0. Deoarece Direct3D 11.0, 11.1 și 12 au adăugat suport pentru hardware nou, noile capabilități obligatorii au fost grupate în continuare la nivelurile superioare ale caracteristicilor.

Direct3D 11 a introdus, de asemenea, „10level9”, un subset al API-ului Direct3D 10 cu trei niveluri de caracteristici care încapsulează diverse carduri Direct3D 9 cu drivere WDDM , iar Direct3D 11.1 a reintrodus câteva caracteristici opționale pentru toate nivelurile, care au fost extinse în Direct3D 11.2 și ulterior versiuni.

Această abordare permite dezvoltatorilor să unifice conducta de redare și să utilizeze o versiune unică a API-ului atât pe hardware mai nou, cât și pe hardware mai vechi, profitând de îmbunătățirile de performanță și de utilizare în timpul de rulare mai nou.

Noile niveluri de caracteristici sunt introduse cu versiuni actualizate ale API și încapsulează de obicei:

  • caracteristici obligatorii majore - (Direct3D 11.0, 12),
  • câteva caracteristici minore (Direct3D 10.1, 11.1) sau
  • un set comun de caracteristici opționale anterior (Direct3D 11.0 "10 nivel 9").

Fiecare nivel superior este un superset strict al unui nivel inferior, cu doar câteva caracteristici noi sau anterior opționale care trec la funcționalitatea de bază de la un nivel superior. Funcții mai avansate într-o revizuire majoră a API-ului Direct3D, cum ar fi noile modele de shader și etapele de redare, sunt expuse doar pe hardware de nivel superior.

Există capacități separate pentru a indica suportul pentru operațiuni specifice de textură și formate de resurse; acestea sunt specificate pentru fiecare format de textură utilizând o combinație de indicatori de capacitate.

Nivelurile de caracteristici utilizează subliniere ca delimitator (adică „12_1”), în timp ce versiunile API / runtime folosesc punct (adică „Direct3D 11.4”).

Direct3D 11 niveluri

În Direct3D 11.4 pentru Windows 10, există nouă niveluri de caracteristici furnizate de D3D_FEATURE_LEVELstructură; nivelurile 9_1, 9_2 și 9_3 (cunoscute sub numele de Direct3D 10 Level 9 ) reîncapsulează diverse caracteristici ale cărților populare Direct3D 9, nivelurile 10_0, 10_1 se referă la versiunile vechi ale Direct3D 10, 11_0 și 11_1 reflectă caracteristica introdusă cu Direct3D 11 și API-urile și runtimes-urile Direct3D 11.1, în timp ce nivelurile 12_0 și 12_1 corespund noilor niveluri de caracteristici introduse cu API-ul Direct3D 12.

Niveluri de caracteristici în Direct3D 11.4
Nivelul caracteristicii Caracteristici hardware obligatorii Caracteristici opționale
9_1 Shader Model 2.0 ( vs_2_0/ ps_2_0), texturi 2K, texturi de volum, interogări de evenimente, BC1-3 (alias DXTn), alte câteva capacități specifice. N / A
9_2 Interogări de ocluzie, formate în virgulă mobilă (fără amestecare), majuscule extinse, toate caracteristicile 9_1.
9_3 vs_2_a/ ps_2_xcu instancere și capace de umbrire suplimentare, texturi 4K, ținte de redare multiple (4 MRT), amestec în virgulă mobilă (limitat), toate cele 9_2 caracteristici.
10_0 Shader Model 4.0, geometrie shader, stream out, alfa-la-acoperire, texturi 8K, texturi MSAA, șablon față-verso, vizualizare generală a țintei de redare, matrice de texturi, BC4 / BC5, suport pentru format complet în virgulă mobilă, toate caracteristicile 9_3. Operații de amestecare logică, DirectCompute (CS 4.0 / 4.1), formate extinse de pixeli.
10_1 Shader Model 4.1, matrici cubemap, MSAA extins, toate caracteristicile 10_0.
11_0 Modelul Shader 5.0 / 5.1, umbrele pentru corpuri și domenii, DirectCompute (CS 5.0 / 5.1), texturi 16K, BC6H / BC7, formate de pixeli extinse, toate caracteristicile 10_1. Redare UAV numai cu număr de eșantioane de forță, compensare constantă a tamponului și actualizări parțiale, operații cu virgulă mobilă de precizie dublă (64 de biți), precizie minimă în virgulă mobilă (10 sau 16 biți ), filtrare min / maximă.
11_1 Operațiuni de amestecare logică, rasterizare independentă de țintă, UAV-uri la fiecare etapă de conducte cu număr crescut de sloturi, redare UAV numai cu număr de eșantioane de forță, compensare constantă a tamponului și actualizări parțiale, toate caracteristicile 11_0. Resurse cu gresie (patru niveluri), rasterizare conservativă (trei niveluri), valoare de referință a șablonului de la Pixel Shader, vizualizări comandate de rasterizator, încărcări UAV tastate pentru formate suplimentare.
12_0 Tiled Resources Tier 2 (Texture2D), încărcări UAV tipizate (formate suplimentare).
12_1 Conservator Rasterizare Tier 1, Rasterizer Vezi comandate.

Direct3D 12 nivele

Direct3D 12 pentru Windows 10 necesită hardware grafic conform nivelurilor de caracteristici 11_0 și 11_1 care acceptă traducerea adresei de memorie virtuală și necesită drivere WDDM 2.0. Există două niveluri de funcții noi, 12_0 și 12_1, care includ câteva caracteristici noi expuse de Direct3D 12 care sunt opționale la nivelurile 11_0 și 11_1. Unele caracteristici opționale anterioare sunt realiniate ca linie de bază la nivelurile 11_0 și 11_1. Shader Model 6.0 a fost lansat cu Windows 10 Creators Update și necesită drivere Windows 10 Anniversary Update, WDDM 2.1.

Niveluri de caracteristici Direct3D 12
Nivel Caracteristici obligatorii Caracteristici opționale
11_0 Toate caracteristicile obligatorii 11_0 de la Direct3D 11, Shader Model 5.1, Resource binding Tier 1. Operații de amestecare logică, operații cu virgulă mobilă de precizie dublă (64 de biți), precizie minimă în virgulă mobilă (10 sau 16 biți).

Legarea resurselor (trei niveluri), resursele cu gresie (patru niveluri), rasterizarea conservatoare (trei niveluri), valoarea de referință a șablonului de la Pixel Shader, vizualizările ordonate de rasterizator, încărcările UAV tastate pentru formate suplimentare, instanțarea vizualizărilor.

Model Shader 6.0-6.6

Metacomandele, rata de umbrire variabilă, raytracing, mesh shaders, feedback-ul eșantionatorului.

Alte caracteristici opționale.

UAV-uri la fiecare etapă a conductei, redare UAV numai cu număr de eșantioane de forță, compensare constantă a tamponului și actualizări parțiale.
11_1 Operații de amestecare logică, rasterizare independentă de țintă, număr crescut de sloturi UAV.
12_0 Resurse Binding Tier 2, Tiled Resources Tier 2 (Texture2D), Sarcini UAV tipizate (formate suplimentare), Model Shader 6.0.
12_1 Conservator Rasterizare Tier 1, Rasterizer Vezi comandate.
12_2 DirectX 12 Ultimate : Shader Model 6.5, Raytracing Tier 1.1, Mesh Shaders, Variable Rate Shading, Sampler Feedback, Resource Binding Tier 3, Tiled Resources Tier 3 (Texture3D), Conservative Rasterization Tier 3, 40-bit space address virtual.

Direct3D 12 introduce un model de legare a resurselor renovat care permite controlul explicit al memoriei. Obiectele abstracte „vizualizare resursă” sunt acum reprezentate cu descriptori de resurse, care sunt alocați folosind teancuri de memorie și tabele. Nivelurile de legare a resurselor definesc numărul maxim de resurse care pot fi adresate utilizând CBV (vizualizare tampon constantă), SRV (vizualizare resurse shader) și UAV (vizualizare acces neordonat), precum și unități de prelevare de probe. Hardware-ul Tier 3 permite resurse complet fără legătură restricționate doar de dimensiunea heap-ului descriptorului, în timp ce hardware-ul Tier 1 și Tier 2 impune anumite limite numărului de descriptori („vizualizări”) care pot fi utilizate simultan.

Niveluri de legare a resurselor
Limite de resurse Nivelul 1 Nivelul 2 Nivelul 3
Descriptori în heap CBV / SRV / UAV 1M 1M > 1M
CBV-uri pe etapa de umbrire 14 14 grămadă plină
SRV-uri pe etapa de umbrire 128 grămadă plină
UAV-uri pe toate etapele 8, 64 64 grămadă plină
Eșantioane pe etapă de umbrire 16 grămadă plină
64 de sloturi pe hardware-ul nivelului de caracteristică 11_1

Multithreading

Modelul de driver WDDM în Windows Vista și versiunile superioare acceptă un număr arbitrar de contexte de execuție (sau fire) în hardware sau software. Windows XP acceptă doar accesul multitask la Direct3D, unde aplicații separate puteau executa în ferestre diferite și putea fi accelerate hardware, iar sistemul de operare avea un control limitat despre ceea ce putea face GPU, iar driverul putea schimba firele de execuție în mod arbitrar.

Capacitatea de a executa runtime-ul într-un mod multi-thread a fost introdusă cu runtime-ul Direct3D 11. Fiecare context de execuție este prezentat cu o vizualizare a resurselor GPU. Contextele de execuție sunt protejate unele de altele, cu toate acestea, o aplicație falsă sau scrisă prost poate prelua controlul execuției în driverul în modul utilizator și ar putea accesa date dintr-un alt proces din memoria GPU, trimițând comenzi modificate. Deși este protejată împotriva accesului de către o altă aplicație, o aplicație bine scrisă trebuie totuși să se protejeze împotriva eșecurilor și pierderii dispozitivului cauzate de alte aplicații.

Sistemul de operare gestionează firele de la sine, permițând hardware-ului să treacă de la un fir la altul atunci când este cazul, și gestionează, de asemenea, gestionarea memoriei și paginarea (către memoria de sistem și pe disc) prin gestionarea integrată a memoriei OS-kernel.

Comutarea contextuală mai fină, adică posibilitatea de a comuta două fire de execuție la nivelul instrucțiunilor shader în locul nivelului de comandă unică sau chiar a lotului de comenzi, a fost introdusă în WDDM / DXGI 1.2 care a fost livrat cu Windows 8. Acest lucru depășește un potențial problemă de programare atunci când aplicația ar avea o execuție foarte lungă a unei singure comenzi / lot de comenzi și va trebui să fie terminată de cronometrul de supraveghere al sistemului de operare.

WDDM 2.0 și DirectX 12 au fost reproiectate pentru a permite apeluri de extragere complet multithread. Acest lucru a fost realizat făcând toate resursele imuabile (adică numai în citire), serializând stările de redare și folosind pachete de apeluri de extragere. Acest lucru evită gestionarea complexă a resurselor în driverul în modul kernel, făcând posibile apeluri reentrante multiple către driverul în modul utilizator prin contexte de execuții simultane furnizate de fire de redare separate în aceeași aplicație.

Direct3D Mobile

Direct3D Mobile este derivat din Direct3D, dar are o amprentă de memorie mai mică . Windows CE oferă suport Direct3D Mobile.

Implementări alternative

Următoarele implementări alternative ale Direct3D API există. Acestea sunt utile pentru platformele care nu sunt Windows și pentru hardware fără unele versiuni de suport DX:

  • WineD3D - Proiectul open source Wine are implementări funcționale ale API-urilor Direct3D prin traducere în OpenGL . Implementarea Wine poate fi rulată și pe Windows în anumite condiții.
  • vkd3d - vkd3d este o bibliotecă grafică 3D open source construită deasupra Vulkan, care permite să ruleze aplicații Direct3D 12 deasupra Vulkan . Este folosit în principal de proiectul Wine și este acum inclus în proiectul Proton al lui Valve la pachet cu abur pe Linux.
  • DXVK - Un strat de traducere open source bazat pe Vulkan pentru Direct3D 9/10/11 care permite rularea aplicațiilor 3D pe Linux folosind Wine. Este folosit de Proton / Steam pentru Linux. DXVK este capabil să ruleze un număr mare de jocuri Windows moderne sub Linux.
    • D9VK - O furcă a DXVK pentru adăugarea suportului Direct3D 9, inclus cu Steam / Proton pe Linux. Pe 16 decembrie 2019, D9VK a fost fuzionat în DXVK.
  • Gallium Nine - Gallium Nine face posibilă rularea nativă a aplicațiilor Direct3D 9 pe Linux, adică fără nicio traducere a apelurilor care să permită o viteză aproape nativă. Necesită cooperarea Wine și Mesa .

Instrumente conexe

D3DX

Direct3D vine cu D3DX, o bibliotecă de instrumente concepute pentru a efectua calcule matematice obișnuite pe vectori , matrici și culori, calculând matrici de vizionare și proiecție , interpolare spline și mai multe sarcini mai complicate, cum ar fi compilarea sau asamblarea umbrelor utilizate pentru programarea grafică 3D , stocarea animației scheletice comprimate și stive de matrice. Există mai multe funcții care oferă operațiuni complexe peste ochiuri 3D, cum ar fi calculul spațiului tangent, simplificarea ochiurilor de plasă, transferul de strălucire precomputat , optimizarea pentru amabilitatea și stripificarea cache-ului vertexului și generatoare pentru ochiurile de text 3D. Funcțiile 2D includ clase pentru desenarea liniilor de spațiu pe ecran, sisteme de particule bazate pe text și sprite . Funcțiile spațiale includ diferite rutine de intersecție, conversia de la / în coordonate barentrice și generatoare de casete / sfere. D3DX este furnizat ca o bibliotecă de legături dinamice (DLL). D3DX este depreciat de la Windows 8 și nu poate fi utilizat în aplicațiile Windows Store.

Unele caracteristici prezente în versiunile anterioare ale D3DX au fost eliminate în Direct3D 11 și acum furnizate ca surse separate:

  • Windows SDK și Visual Studio
  • O mare parte din biblioteca de matematică a fost eliminată. Microsoft recomandă utilizarea bibliotecii DirectX Math.
  • Matematica armonica sferică a fost eliminată și este distribuită acum ca sursă.
  • Cadrul de efecte a fost eliminat și acum este distribuit ca sursă prin CodePlex.
  • Interfața Mesh și funcțiile de geometrie au fost eliminate și sunt acum distribuite ca sursă prin CodePlex în biblioteca de procesare a geometriei DirectXMesh.
  • Funcțiile de textură au fost eliminate și sunt acum distribuite ca sursă prin CodePlex în biblioteca de procesare a texturilor DirectXTex.
  • Asistenții generali au fost eliminați și sunt distribuiți acum ca sursă prin CodePlex în cadrul proiectului DirectX Tool Kit (DirectXTK).
  • Atlasul de texturi isochart a fost eliminat și este distribuit acum ca sursă prin CodePlex în cadrul proiectului UVAtlas.

DXUT

DXUT (denumit și cadrul de probă) este un strat construit deasupra API-ului Direct3D. Cadrul este conceput pentru a ajuta programatorul să petreacă mai puțin timp cu sarcini banale, cum ar fi crearea unei ferestre, crearea unui dispozitiv, procesarea mesajelor Windows și gestionarea evenimentelor dispozitivului. DXUT au fost eliminate cu Windows SDK 8.0 și acum distribuite ca sursă prin CodePlex.

Vezi si

Referințe

linkuri externe