Direct3D - Direct3D

Direct3D
Vývojáři Microsoft
První vydání 2. června 1996 ; Před 25 lety ( 1996-06-02 )
Stabilní uvolnění
12 / 29. července 2015 ; před 6 lety ( 2015-07-29 )
Operační systém Okna
Plošina x86 , ARM
Typ 3D grafika API
Licence Proprietární
webová stránka msdn .microsoft .com /en-us /library /windows /desktop /hh309466

Direct3D je rozhraní API pro grafické aplikace pro Microsoft Windows . Část DirectX , Direct3D se používá k vykreslování trojrozměrné grafiky v aplikacích, kde je důležitý výkon, jako jsou hry. Direct3D využívá hardwarovou akceleraci, pokud je k dispozici na grafické kartě , což umožňuje hardwarovou akceleraci celého kanálu vykreslování 3D nebo dokonce jen částečné zrychlení. Direct3D odhaluje pokročilé grafické schopnosti 3D grafického hardwaru, včetně Z-bufferingu , W-bufferu, stencil bufferingu , prostorového vyhlazování , míchání alfa, míchání barev, mipmapping , míchání textur, ořezávání , utrácení , atmosférické efekty, textura s korektní perspektivou mapování , programovatelné shadery HLSL a efekty. Integrace s dalšími technologiemi DirectX umožňuje Direct3D poskytovat takové funkce, jako je mapování videa, hardwarové 3D vykreslování ve 2D překrývajících se rovinách a dokonce i skřítci , což umožňuje využití 2D a 3D grafiky v interaktivních mediálních vazbách.

Direct3D obsahuje mnoho příkazů pro vykreslování 3D počítačové grafiky ; od verze 8 však Direct3D nahradil rámec DirectDraw a také převzal odpovědnost za vykreslování 2D grafiky . Microsoft se snaží neustále aktualizovat Direct3D tak, aby podporoval nejnovější technologie dostupné na 3D grafických kartách. Direct3D nabízí plnou emulaci softwaru vertex, ale žádnou emulaci softwaru pixelu pro funkce, které nejsou k dispozici v hardwaru. Pokud například software naprogramovaný pomocí Direct3D vyžaduje pixelové shadery a grafická karta v počítači uživatele tuto funkci nepodporuje, Direct3D ji nebude emulovat, přestože bude počítat a vykreslovat polygony a textury 3D modelů, i když obvykle snížená kvalita a výkon ve srovnání s hardwarovým ekvivalentem. Rozhraní API obsahuje referenční rastr (nebo zařízení REF), který v softwaru emuluje obecnou grafickou kartu, ačkoli je pro většinu 3D aplikací v reálném čase příliš pomalý a obvykle se používá pouze k ladění. Nový softwarový rasterizer v reálném čase, WARP , navržený tak, aby emuloval kompletní sadu funkcí Direct3D 10.1, je součástí aktualizace Windows 7 a Windows Vista Service Pack 2 s aktualizací platformy; jeho výkon je prý srovnatelný s nižšími 3D kartami na vícejádrových CPU.

Jako součást DirectX je Direct3D k dispozici pro Windows 95 a vyšší a je základem pro API vektorové grafiky v různých verzích konzolových systémů Xbox . Vrstva kompatibility s vínem , bezplatná opětovná implementace softwaru několika Windows API, zahrnuje implementaci Direct3D.

Hlavním konkurentem Direct3D je Khronosův OpenGL a jeho následný Vulkan . Fahrenheit byl pokus společností Microsoft a SGI o sjednocení OpenGL a Direct3D v 90. letech, ale nakonec byl zrušen.

Přehled

  • Direct3D 6.0 - Multitexturing
  • Direct3D 7.0 - Hardwarová transformace, ořezávání a osvětlení (TCL/T & L)
  • Direct3D 8.0 - Pixel Shader 1.0 a 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 a Vertex Shader 1.1
  • Direct3D 9.0 - Shader Model 2.0 (Pixel Shader 2.0 & 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 - pouze 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, vícevláknové vykreslování, výpočetní shadery, implementováno hardwarem a softwarem se systémem Direct3D 9/10/10.1, GPGPU
  • Direct3D 11.1 - Windows 7 SP1/ Windows 8 , stereoskopické 3D vykreslování, GPGPU
  • Direct3D 11.2 - Windows 8.1 , Dlaždice, GPGPU
  • Direct3D 11.3 - Windows 10 , Shader Model 5.1, GPGPU
  • Direct3D 12.0- Windows 10 , API vykreslování na nízké úrovni , Shader Model 6.0, GPGPU

Direct3D 2.0 a 3.0

V roce 1992 založili Servan Keondjian a Doug Rabson společnost s názvem RenderMorphics, která vyvinula 3D grafický API s názvem Reality Lab , který se používal v lékařském zobrazovacím a CAD softwaru. Byly vydány dvě verze tohoto API. Microsoft koupil RenderMorphics v únoru 1995, čímž Keondjian na palubě implementovat 3D grafický engine pro Windows 95 . První verze Direct3D dodávaná v DirectX 2.0 (2. června 1996) a DirectX 3.0 (26. září 1996).

Direct3D zpočátku implementovalo 3D API „ zachovaného režimu “ i „ okamžitého režimu “. Stejně jako ostatní rozhraní DirectX API, například DirectDraw , byla obě založena na modelu COM . Zachovaný režim byl API grafu scény, které dosáhlo malého přijetí. Vývojáři her usilovali o přímější kontrolu nad aktivitami hardwaru, než by mohl zachovat režim Direct3D. Pouze dvě hry, které prodaly značný objem, Lego Island a Lego Rock Raiders , byly založeny na zachovaném režimu Direct3D, takže Microsoft po DirectX 3.0 neaktualizoval zachovaný režim.

U DirectX 2.0 a 3.0 používal okamžitý režim Direct3D programovací model „spustit vyrovnávací paměť“, který Microsoft doufal, že dodavatelé hardwaru přímo podporují. Vyrovnávací paměti Execute byly určeny k přidělení v hardwarové paměti a analyzovány hardwarem k provedení 3D vykreslování. V té době byly považovány za extrémně nešikovné pro programování, což však bránilo přijetí nového API a přimělo Microsoft k přijetí OpenGL jako oficiálního API pro 3D vykreslování pro hry i aplikace pracovních stanic. (viz OpenGL vs. Direct3D )

Spíše než přijmout OpenGL jako herní API, Microsoft se rozhodl nadále zlepšovat Direct3D, a to nejen, aby byly konkurenceschopné s OpenGL, ale účinněji soutěžit s ostatními proprietární API, jako 3Dfx je Glide .

Od začátku bezprostřední mód podporuje také Talisman ‚s kachlová renderování s beginScene / EndScene metod rozhraní IDirect3DDevice.

Direct3D 4.0

V Direct3D pro DirectX 4.0 , které bylo naplánováno na konec roku 1996 a poté zrušeno, nebyly plánovány žádné podstatné změny .

Direct3D 5.0

V prosinci 1996 převzal tým v Redmondu vývoj Direct3D Immediate Mode, zatímco londýnský tým RenderMorphics pokračoval v práci na Retained Mode. Redmondský tým přidal DrawPrimitive API, které eliminovalo potřebu aplikací vytvářet vyrovnávací paměti pro spouštění, takže Direct3D se více podobá jiným API pro vykreslování okamžitého režimu, jako jsou Glide a OpenGL . První beta verze DrawPrimitive byla dodána v únoru 1997 a finální verze byla dodána s DirectX 5.0 v srpnu 1997.

Kromě zavedení jednoduššího API pro okamžitý režim přidal DirectX 5.0 metodu SetRenderTarget, která umožnila zařízením Direct3D zapisovat jejich grafický výstup na různé povrchy DirectDraw.

Direct3D 6.0

DirectX 6.0 (vydaný v srpnu 1998) představil řadu funkcí pro pokrytí současného hardwaru (jako jsou multitexture a stencil buffery ) a také optimalizované kanály geometrie pro x87 , SSE a 3DNow! a volitelná správa textur pro zjednodušení programování. Direct3D 6.0 také zahrnoval podporu pro funkce, které byly licencovány společností Microsoft od konkrétních dodavatelů hardwaru pro zahrnutí do API, výměnou za výhodu uvedení na trh pro dodavatele licencí. Jednou z takových funkcí byla podpora komprese textury S3 , přejmenovaná jako DXTC za účelem zahrnutí do API. Další byla patentovaná technika mapování nárazů TriTech . Společnost Microsoft zahrnula tyto funkce do rozhraní DirectX a poté je přidala k požadavkům potřebným pro získání loga systému Windows, aby se podpořilo široké přijetí funkcí hardwaru jiných dodavatelů.

Menší aktualizace DirectX 6.0 přišla v únoru 1999 DirectX 6.1 aktualizace. Kromě prvního přidání podpory DirectMusic tato verze vylepšila podporu 3D rozšíření Intel Pentium III .

Důvěrná zpráva zaslaná v roce 1997 ukazuje, že Microsoft plánuje oznámit plnou podporu pro Talisman v DirectX 6.0, ale API bylo nakonec zrušeno (podrobnosti najdete na stránce Microsoft Talisman ).

Direct3D 7.0

DirectX 7.0 (vydaný v září 1999) představil formát textury .dds a podporu hardwarové akcelerace transformace a osvětlení (první k dispozici na hardwaru PC s GeForce 256 od Nvidie ) a také možnost alokovat mezipaměti vrcholů v hardwarové paměti. Hardwarové vertexové vyrovnávací paměti představují první podstatné zlepšení oproti OpenGL v historii DirectX. Direct3D 7.0 také rozšířil podporu DirectX pro multitexturing hardware a představuje vrchol funkcí multitexture pipeline s pevnými funkcemi: přestože byl výkonný, programování bylo tak komplikované, že k odhalení možností stínování grafického hardwaru byl zapotřebí nový programovací model.

Direct3D 8.0

DirectX 8.0 , vydaný v listopadu 2000, zavedl programovatelnost ve formě vertexových a pixelových shaderů , což vývojářům umožňuje psát kód bez obav o nadbytečný stav hardwaru. Složitost programů shaderů závisela na složitosti úkolu a ovladač displeje sestavil tyto shadery podle pokynů, kterým by rozuměl hardware. Direct3D 8.0 a jeho programovatelné možnosti stínování byly prvním velkým odklonem od architektury s pevnou funkcí ve stylu OpenGL, kde kreslení ovládá komplikovaný stavový stroj. Direct3D 8.0 také eliminoval DirectDraw jako samostatné API. Direct3D zahrnoval všechna zbývající volání rozhraní API DirectDraw, která jsou stále potřebná pro vývoj aplikací, jako je například funkce Present (), která se používá k zobrazení výsledků vykreslování.

Direct3D nebyl považován za uživatelsky přívětivý, ale od verze DirectX 8.1 bylo vyřešeno mnoho problémů s použitelností. Direct3D 8 obsahoval mnoho výkonných 3D grafických funkcí, jako jsou vrcholové shadery , pixelové shadery , mlha , bump mapping a mapování textur .

Direct3D 9

Direct3D 9.0 , vydaný v prosinci 2002, přidal novou verzi podpory High Level Shader Language pro formáty textur s plovoucí desetinnou čárkou, Multiple Render Targets (MRT), Textury s více prvky, vyhledávání textur v technikách vertex shader a stencil buffer.

Direct3D 9Ex [1]

Rozšíření dostupné pouze v systému Windows Vista a novějších (7, 8, 8.1 a 10) s názvem Direct3D 9Ex (dříve verze 9.0L (L - kódové označení Windows Longhorn)) umožňuje využití výhod, které nabízí model Windows Vista Windows Display Driver Model (WDDM) a používá se pro Windows Aero . Direct3D 9Ex ve spojení s ovladači WDDM třídy DirectX 9 umožňuje virtualizaci grafické paměti a její stránkování do systémové paměti, umožňuje přerušení a plánování grafických operací a sdílení povrchů DirectX mezi procesy. Direct3D 9Ex byl dříve znám jako verze 1.0 Windows Graphics Foundation (WGF).

Direct3D 10

Windows Vista obsahuje zásadní aktualizaci rozhraní Direct3D API. Původně se jmenoval WGF 2.0 (Windows Graphics Foundation 2.0), poté DirectX 10 a DirectX Next. Direct3D 10 obsahuje aktualizovaný shader model 4.0 a volitelnou přerušitelnost pro shaderové programy. V tomto modelu se shadery stále skládají z pevných fází jako v předchozích verzích, ale všechny fáze podporují téměř jednotné rozhraní a také jednotné přístupové paradigma pro prostředky, jako jsou textury a konstanty shaderu. Samotný jazyk byl rozšířen, aby byl výraznější, včetně celočíselných operací, výrazně zvýšeného počtu instrukcí a dalších jazykových konstrukcí podobných jazyku C. Kromě dříve dostupných vertexových a pixelových shaderových fází obsahuje API i geometrickou shaderovou fázi, která rozbíjí starý model jednoho vrcholu v/jednom vrcholu ven, aby bylo možné geometrii skutečně generovat z shaderu, což umožňuje komplexní geometrii budou generovány výhradně na grafickém hardwaru.

Windows XP není podporován DirectX 10.0 a novějším.

Na rozdíl od předchozích verzí rozhraní API Direct3D 10 již nepoužívá „bity schopností“ (nebo „čepice“) k označení, které funkce jsou na daném grafickém zařízení podporovány. Místo toho definuje minimální standard hardwarových funkcí, které musí být podporovány, aby byl zobrazovací systém „kompatibilní s Direct3D 10“. Toto je významný posun s cílem zefektivnit aplikační kód odstraněním kódu pro kontrolu schopností a speciálních případů na základě přítomnosti nebo absence konkrétních schopností.

Vzhledem k tomu, že hardware Direct3D 10 byl po počátečním vydání systému Windows Vista poměrně vzácný a vzhledem k masivní instalované základně grafických karet, které nejsou kompatibilní s Direct3D 10, první hry kompatibilní s Direct3D 10 stále poskytují cesty vykreslování Direct3D 9. Příkladem takových titulů jsou hry původně napsané pro Direct3D 9 a přenesené na Direct3D 10 po jejich vydání, jako například Company of Heroes , nebo hry původně vyvinuté pro Direct3D 9 s cestou Direct3D 10 dodatečně vybavené později ve vývoji, například Hellgate: London nebo Crysis . Sada DirectX 10 SDK byla k dispozici v únoru 2007.

Direct3D 10.0

Hardware na úrovni Direct3D 10.0 musí podporovat následující funkce: Schopnost zpracovávat celá primitiva v nové fázi geometrie-shaderu, schopnost odesílat data vrcholů generovaná potrubím do paměti pomocí fáze výstupního proudu, podpora více vzorkování alfa-k pokrytí, zpětné čtení povrchu hloubky/šablony nebo vícevzorkovaného zdroje, jakmile již není vázán jako cíl vykreslování, plná integrace HLSL-všechny shadery Direct3D 10 jsou zapsány v HLSL a implementovány pomocí operací common-shader core, integer a bitwise shader, organizace stav potrubí do 5 neměnných stavových objektů, organizace konstant shaderu do konstantních vyrovnávacích pamětí, zvýšený počet cílů vykreslování, textur a vzorkovačů, žádné omezení délky shaderu, nové typy zdrojů a formáty prostředků, vrstvené vrstvy runtime/API, možnost provádět podle -primitivní výměna a nastavení materiálu pomocí shaderu geometrie, zvýšená generalizace přístupu ke zdrojům pomocí pohledu, odstraněné starší bity hardwarových schopností (čepice).

  • Opravují se fixní kanály ve prospěch plně programovatelných kanálů (často označovaných jako jednotná architektura potrubí), které lze naprogramovat tak, aby emulovaly totéž.
  • Nový stavový objekt umožňující (většinou) CPU efektivně měnit stavy.
  • Shader model 4.0 vylepšuje programovatelnost grafického kanálu . Přidává pokyny pro celočíselné a bitové výpočty.
  • Společné jádro shaderu poskytuje úplnou sadu 32bitových celočíselných a bitových operací kompatibilních s IEEE. Tyto operace umožňují novou třídu algoritmů v grafickém hardwaru-příklady zahrnují techniky komprese a balení, FFT a řízení toku programů v bitovém poli.
  • Geometrické shadery , které pracují na sousedních trojúhelnících, které tvoří síť .
  • Pole textur umožňují výměnu textur v GPU bez zásahu CPU.
  • Predikované vykreslování umožňuje ignorovat kreslení hovorů na základě některých dalších podmínek. To umožňuje rychlé vyřazení okluze , které zabrání vykreslení objektů, pokud nejsou viditelné nebo příliš daleko, aby byly viditelné.
  • Podpora Instancing 2.0 , která umožňuje vykreslit více instancí podobných sítí, jako jsou armády nebo tráva nebo stromy, v rámci jednoho tažení, čímž se zkrátí doba zpracování potřebná pro více podobných objektů, než je tomu u jednoho.

Direct3D 10.1

Direct3D 10.1 oznámil Microsoft krátce po vydání Direct3D 10 jako menší aktualizaci. Specifikace byla dokončena vydáním sady DirectX SDK z listopadu 2007 a modul runtime byl dodáván s aktualizací Windows Vista SP1 , která je k dispozici od poloviny března 2008.

Direct3D 10.1 stanovuje několik dalších standardů kvality obrazu pro prodejce grafiky a dává vývojářům větší kontrolu nad kvalitou obrazu. Mezi funkce patří jemnější kontrola vyhlazování (multisampling i supersampling se stínováním na vzorek a kontrolou aplikace nad pozicí vzorku) a větší flexibilita některých stávajících funkcí (pole cubemap a nezávislá míchání). Hardware na úrovni Direct3D 10.1 musí podporovat následující funkce: Multisampling byl vylepšen, aby zobecnil transparentnost na základě pokrytí a aby multisampling fungoval efektivněji s víceprůchodovým vykreslováním, lepší chování při utracení-obličeje s nulovou oblastí jsou automaticky zrušeny; to má vliv pouze na vykreslování drátového modelu, nezávislé režimy prolnutí na cíl vykreslování, nové spuštění shaderu s frekvencí vzorkovací frekvence s primitivní rasterizací, větší šířku pásma fázového kanálu, barvu i hloubku/vzorník Povrchy MSAA lze nyní použít s CopyResource jako zdroj nebo cíl, MultisampleEnable ovlivňuje pouze rastrování čar (body a trojúhelníky nejsou ovlivněny) a používá se k výběru algoritmu kreslení čar. To znamená, že některé vícesamplerové rasterizace z Direct3D 10 již nejsou podporovány, instrukce Texture Sampling - sample_c a sample_c_lz jsou definovány tak, aby fungovaly jak s Texture2DArrays, tak s TextureCubeArrays pomocí člena Location (komponenta alfa) k určení indexu pole, podpory pro TextureCubeArrays.

  • Povinné 32bitové filtrování s plovoucí desetinnou čárkou .
  • Pravidla s pohyblivou řádovou čárkou-Používá stejná pravidla IEEE-754 pro plovoucí desetinnou čárku KROMĚ 32bitové operace s plovoucí desetinnou čárkou byly zpřísněny, aby poskytly výsledek do 0,5 jednotky na posledním místě (0,5 ULP) od nekonečně přesného výsledku. To platí pro sčítání, odčítání a násobení. (přesnost na 0,5 ULP pro násobení, 1,0 ULP pro reciproční).
  • Formáty - Přesnost míchání float16 se zvýšila na 0,5 ULP. Míchání je také vyžadováno pro formáty UNORM16/SNORM16/SNORM8.
  • Převod formátu při kopírování mezi určitými 32/64/128 bitovými před strukturovanými, zadanými prostředky a komprimovanými reprezentacemi stejných bitových šířek.
  • Povinná podpora pro 4x MSAA pro všechny cíle vykreslování kromě R32G32B32A32 a R32G32B32.
  • Shader model 4.1

Na rozdíl od Direct3D 10, který striktně vyžadoval rozhraní hardwaru a ovladačů Direct3D 10, může běh Direct3D 10.1 běžet na hardwaru Direct3D 10.0 pomocí konceptu „ úrovní funkcí “, ale nové funkce jsou podporovány výhradně novým hardwarem, který odhaluje úroveň funkcí 10_1.

Jediným dostupným hardwarem Direct3D 10.1 v červnu 2008 byly Radeon HD 3000 a Radeon HD 4000 od ATI ; v roce 2009 k nim přibyly GPU Chrome 430/440GT od S3 Graphics a vybrané modely nižší třídy v řadě GeForce 200 od Nvidia . V roce 2011 začaly čipové sady Intel podporovat Direct3D 10.1 se zavedením Intel HD Graphics 2000 (GMA HD).

Direct3D 11

Direct3D 11 byl vydán jako součást Windows 7. Byl představen na Gamefestu 2008 22. července 2008 a předveden na technické konferenci Nvision 08 26. srpna 2008. Technický náhled Direct3D 11 byl zahrnut do vydání DirectX SDK z listopadu 2008 . AMD zobrazilo náhled funkčního hardwaru DirectX11 na Computexu 3. června 2009 a spustilo několik ukázek SDK DirectX 11.

Modul runtime Direct3D 11 může běžet na hardwaru a ovladačích třídy Direct3D 9 a 10.x pomocí konceptu „úrovní funkcí“ , čímž se rozšíří funkce poprvé představené v modulu runtime Direct3D 10.1. Úrovně funkcí umožňují vývojářům sjednotit vykreslovací kanál pod rozhraním Direct3D 11 API a využívat vylepšení API, jako je lepší správa zdrojů a vícevláknové zpracování i na kartách základní úrovně, i když pokročilé funkce, jako jsou nové modely shaderů a fáze vykreslování, budou vystaveny pouze -hardwarová úroveň. K dispozici jsou tři profily „10 úrovně 9“, které zapouzdřují různé možnosti populárních karet DirectX 9.0a, a Direct3D 10, 10.1 a 11 mají každý samostatnou úroveň funkcí; každá horní úroveň je přísná nadmnožina nižší úrovně.

Teselace byla dříve zvažována pro Direct3D 10, ale později byla opuštěna. GPU, jako je Radeon R600, mají teselační engine, který lze použít s Direct3D 9/10/10.1 a OpenGL, ale není kompatibilní s Direct3D 11 (podle Microsoftu). Starší grafický hardware, jako je Radeon 8xxx, GeForce 3/4, měl podporu pro jinou formu teselace (RT patche, N patche), ale tyto technologie nikdy neviděly podstatné využití. Z tohoto důvodu byla jejich podpora upuštěna od novějšího hardwaru.

Microsoft také naznačil další funkce, jako je transparentnost nezávislá na objednávce , která nebyla nikdy odhalena rozhraním Direct3D API, ale téměř transparentně podporována raným hardwarem Direct3D, jako je řada čipů VideVicic PowerVR .

Direct3D 11.0

Mezi funkce Direct3D 11.0 patří: Podpora Shader Model 5.0, dynamické propojení shaderů, adresovatelné zdroje, další typy zdrojů, podprogramy, vytváření geometrie, pokrytí jako vstup pixelového shaderu, programovatelná interpolace vstupů, nové formáty komprese textur (1 nový formát LDR a 1 nový Formát HDR), texturní kleště omezující předpětí WDDM, vyžadující 8bitovou přesnost subtexelu a submipu při filtrování textur, 16k texturové limity, Gather4 (podpora vícekomponentních textur, podpora programovatelných ofsetů), DrawIndirect, konzervativní oDepth, Hloubka předpětí, adresovatelný výstup streamu, upínání mipmapy podle zdrojů, výřezy s plovoucí desetinnou čárkou, pokyny pro převod shaderu, vylepšené vícevláknové zpracování.

  • Shader Model 5
  • Podpora Tessellation a Tessellation Shaders ke zvýšení za běhu počtu viditelných polygonů z polygonálního modelu s nízkými detaily
  • Vícevláknové vykreslování - vykreslení na stejný objekt zařízení Direct3D z různých vláken pro vícejádrové procesory
  • Compute shadery -což odhaluje shader pipeline pro negrafické úkoly, jako je zpracování streamu a fyzikální akcelerace, v duchu podobné tomu, comimo jiné dosahují OpenCL , Nvidia CUDA , ATI Stream a HLSL Shader Model 5.
  • Povinná podpora pro 4x MSAA pro všechny cíle vykreslování a 8x MSAA pro všechny cílové formáty vykreslování kromě formátů R32G32B32A32.

Mezi další pozoruhodné funkce patří přidání dvou nových algoritmů komprese textur pro efektivnější balení vysoce kvalitních a HDR/alfa textur a zvětšení mezipaměti textur .

Windows 7, který byl poprvé spatřen ve verzi Release Candidate , integruje první vydanou podporu Direct3D 11. Aktualizace platformy pro systém Windows Vista obsahuje plnohodnotné Direct3D 11 runtime a aktualizace DXGI 1.1, jakož i další související komponenty ze systému Windows 7, jako je WARP , Direct2D , DirectWrite a WIC .

Direct3D 11.1

Direct3D 11.1 je aktualizací rozhraní API dodávaného se systémem Windows 8 . Běh Direct3D v systému Windows 8 obsahuje DXGI 1.2 a vyžaduje nové ovladače zařízení WDDM 1.2 . Předběžná verze Windows SDK pro Windows 8 Developer Preview byla vydána 13. září 2011.

Nové API nabízí trasování shaderů a vylepšení kompilátoru HLSL, podporu skalárních datových typů HLSL s minimální přesností, UAV (Unordered Access Views) v každé fázi pipeline, cílově nezávislou rasterizaci (TIR), možnost mapovat SRV dynamických vyrovnávacích pamětí pomocí NO_OVERWRITE, shader zpracování zdrojů videa, možnost použít logické operace v cíli vykreslování, možnost svázat podrozsah konstantní vyrovnávací paměti se shaderem a načíst ji, možnost vytvořit větší konstantní vyrovnávací paměti, než ke které má shader přístup, možnost zahodit zdroje a zobrazení zdrojů , možnost změnit dílčí zdroje s novými možnostmi kopírování, možnost vynutit počet vzorků k vytvoření stavu rasterizéru, možnost vymazat celý nebo část pohledu na zdroje, možnost použít Direct3D v procesech Session 0, možnost zadat roviny klipů uživatelů v HLSL na úrovni funkce 9 a vyšší, podpora stínové vyrovnávací paměti na úrovni funkce 9, podpora přehrávání videa, rozšířená podpora pro sdílené prostředky Texture2D a přepínání za běhu mezi Dire ct3D 10 a 11 kontextů a úrovní funkcí. Direct3D 11.1 obsahuje novou úroveň funkcí 11_1, která přináší drobné aktualizace jazyka shaderu, jako jsou větší konstantní vyrovnávací paměti a volitelné pokyny s dvojitou přesností, stejně jako vylepšené režimy prolnutí a povinnou podporu 16bitových barevných formátů pro zlepšení výkonu vstupu -úrovňové GPU, jako je Intel HD Graphics . WARP byl aktualizován tak, aby podporoval úroveň funkcí 11_1.

Aktualizace platformy pro Windows 7 zahrnuje omezenou sadu funkcí z Direct3D 11.1, i když komponenty, které jsou závislé na WDDM 1.2 - jako hraný úrovni 11_1 a související API, nebo quad ukládání do vyrovnávací paměti pro stereoskopické vykreslování - nejsou přítomny.

Direct3D 11.2

Direct3D 11.2 byl dodán se systémem Windows 8.1 . Nové hardwarové funkce vyžadují DXGI 1.3 s ovladači WDDM 1.3 a zahrnují modifikaci a propojení runtime shaderu, Graph Linking Graph (FLG), inbox HLSL compiler, možnost anotovat grafické příkazy. Úrovně funkcí 11_0 a 11_1 zavádějí volitelnou podporu pro kachlové zdroje s úrovní shaderu detailů (Tier2). Tato druhá funkce efektivně poskytuje kontrolu nad tabulkami hardwarových stránek přítomnými v mnoha současných GPU. WARP byl aktualizován, aby plně podporoval nové funkce. Neexistuje však žádná úroveň funkcí 11_2; nové funkce jsou rozptýleny do stávajících úrovní funkcí. Ty, které jsou závislé na hardwaru, lze jednotlivě zkontrolovat pomocí CheckFeatureSupport. Některé „nové“ funkce v Direct3D 11.2 ve skutečnosti odhalují některé staré hardwarové funkce podrobněji; například D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORTodhaluje částečnou podporu pro vytváření instancí na hardwaru úrovně 9_1 a 9_2, jinak je plně podporována od úrovně funkcí 9_3 dále.

Direct3D 11.X

Direct3D 11.X je nadmnožinou DirectX 11.2 běžícího na Xboxu One . Obsahuje některé funkce, jako například balíčky draw, které byly později oznámeny jako součást DirectX 12.

Direct3D 11.3

Direct3D 11.3 dodaný v červenci 2015 s Windows 10; obsahuje drobné vykreslovací funkce z Direct3D 12 při zachování celkové struktury rozhraní Direct3D 11.x API. Direct3D 11.3 uvádí Shader Model 5.1, volitelnou referenční hodnotu šablony specifikovanou Shaderem, načtená zobrazení neuspořádaného přístupu, načtená zobrazení ROV, volitelně standardní swizzle, volitelně výchozí mapování textur, konzervativní rastrování (ze tří úrovní), volitelně přístup sjednocené paměti ( Podpora UMA) a další prostředky vedle sebe (úroveň 2) (prostředky pro dlaždice pro svazky).

Direct3D 11.4

  • Direct3D 11.4 verze 1511 - Počáteční Direct3D 11.4 byl představen s aktualizací Windows 10 Threshold 2 (verze 1511) zlepšující podporu externích grafických adaptérů a DXGI 1.5.
  • Direct3D 11.4 verze 1607 - Aktualizováno Direct3D 11.4 s Windows 10 Anniversary Update (verze 1607) obsahuje podporu WDDM 2.1 a pro formát UHDTV HDR10 ( ST 2084 ) a podporu proměnných obnovovacích frekvencí pro aplikace UWP.

Direct3D 12

Direct3D 12 umožňuje nižší úroveň abstrakce hardwaru než předchozí verze, což umožňuje budoucím hrám výrazně zlepšit škálování ve více vláknech a snížit využití CPU. Toho je dosaženo lepším sladěním vrstvy abstrakce Direct3D se základním hardwarem pomocí nových funkcí, jako je nepřímé kreslení, tabulky deskriptorů, stručné objekty stavu potrubí a balíčky volání draw. Snížení režie ovladačů je ve skutečnosti hlavním lákadlem Direct3D 12, podobně jako u AMD Mantle ; slovy hlavního vývojáře Maxe McMullena je hlavním cílem Direct3D 12 dosáhnout „efektivity na úrovni konzoly“ a vylepšeného paralelismu CPU.

Ačkoli Nvidia oznámila širokou podporu Direct3D 12, byli také poněkud zdrženliví vůči univerzální přitažlivosti nového API, přičemž poznamenali, že zatímco vývojáři herních motorů mohou být nadšeni přímou správou zdrojů GPU ze svého kódu aplikace, „mnoho [jiných] lidé by nebyli „šťastní, že to musí udělat.

V Direct3D 12 jsou také některé nové hardwarové funkce, včetně Shader Model 5.1, Volume Tiled Resources (Tier 2), Shader Specified Stencil Reference Value, Typed UAV Load, Conservative Rasterization (Tier 1), better collision and culling with Conservative Rasterization, Rasterizer Ordered Pohledy (ROV), standardní Swizzles, výchozí mapování textur, swapové řetězce, swizzled zdroje a komprimované zdroje , další režimy prolnutí , programovatelné míchání a efektivní transparentnost nezávislá na pořadí (OIT) s UAV uspořádaným podle pixelů.

Objekty stavu potrubí se vyvinuly z Direct3D 11 a nové stručné stavy potrubí znamenají, že proces byl zjednodušen. DirectX 11 nabídl flexibilitu v tom, jak lze měnit jeho stavy, na úkor výkonu. Zjednodušení procesu a sjednocení kanálů (např. Stavy pixelových shaderů) vedou k efektivnějšímu procesu, což výrazně snižuje režijní náklady a umožňuje grafické kartě čerpat více hovorů pro každý snímek.

Direct3D 12 se také naučil od AMD Mantle v seznamech příkazů a balíčcích s cílem zajistit vyváženější spolupráci CPU a GPU.

V Direct3D 11 jsou příkazy odesílány z CPU na GPU jeden po druhém a GPU pracuje prostřednictvím těchto příkazů postupně. To znamená, že příkazy jsou omezeny rychlostí, s jakou by CPU mohl tyto příkazy odesílat lineárně. V DirectX 12 jsou tyto příkazy odesílány jako seznamy příkazů, které obsahují všechny požadované informace v rámci jednoho balíčku. GPU je pak schopen vypočítat a provést tento příkaz v jednom jediném procesu, aniž by musel čekat na další informace od CPU.

V rámci těchto seznamů příkazů jsou svazky. Tam, kde dříve byly příkazy pouze převzaty, použity a poté zapomenuty GPU, lze svazky znovu použít. To snižuje zátěž GPU a znamená, že opakované prostředky lze použít mnohem rychleji.

I když je vazba zdrojů v Direct3D 11 pro vývojáře v tuto chvíli poměrně pohodlná, její neefektivnost znamená, že několik moderních hardwarových schopností je drasticky málo využíváno. Když herní engine potřeboval zdroje v DX11, musel pokaždé čerpat data od nuly, což znamenalo opakování procesů a zbytečné používání. V Direct3D 12 haldy a tabulky deskriptorů znamenají, že nejčastěji používané prostředky mohou být přidělovány vývojáři v tabulkách, ke kterým má GPU rychlý a snadný přístup. To může přispět k lepšímu výkonu než Direct3D 11 na ekvivalentním hardwaru, ale také to znamená více práce pro vývojáře.

Dynamické hromady jsou také funkcí Direct3D 12.

Direct3D 12 nabízí explicitní podporu více adaptérů, což umožňuje explicitní ovládání více konfiguračních systémů GPU. Takové konfigurace lze sestavit společně s grafickým adaptérem stejného dodavatele hardwaru i jiného dodavatele hardwaru.

  • Direct3D 12 verze 1607 -S aktualizací Windows 10 výročí (verze 1607), vydanou 2. srpna 2016, byl modul runtime Direct3D 12 aktualizován tak, aby podporoval konstrukce pro explicitní multithreading a meziprocesovou komunikaci, což vývojářům umožňuje masivně využívat moderní paralelní GPU. Mezi další funkce patří aktualizované kořenové podpisy verze 1.1, stejně jako podpora formátu HDR10 a variabilní obnovovací frekvence .
  • Direct3D 12 verze 1703 - S aktualizací Windows 10 Creators Update (verze 1703), vydanou 11. dubna 2017, byl modul runtime Direct3D 12 aktualizován tak, aby podporoval Shader Model 6.0 a DXIL . a Shader Model 6.0 vyžaduje aktualizaci Windows 10 Anniversary Update (verze 1607), WDDM 2.1. Nové grafické funkce jsou Testování hloubkových vazeb a Programovatelná MSAA.
  • Direct3D 12 verze 1709 - Direct3D v aktualizaci Windows 10 Fall Creators Update (verze 1709), vydané 17. října 2017, obsahuje vylepšené ladění.
  • Direct3D 12 verze 1809 - Windows 10. října 2018 Update (verze 1809) přináší podporu pro DirectX Raytracing, takže GPU mohou těžit z jeho API.
  • Direct3D 12 verze 1903 - Aktualizace Windows 10 z května 2019 (verze 1903) přináší podporu pro DirectML .
  • Direct3D 12 verze 2004 - Aktualizace Windows 10 z května 2020 (verze 2004) přináší podporu pro Mesh & Amplification Shaders, Sampler Feedback, DirectX Raytracing Tier 1.1 a vylepšení alokace paměti.

Architektura

Abstraktní vrstva

Direct3D je komponenta subsystému Microsoft DirectX API. Cílem Direct3D je abstraktní komunikace mezi grafickou aplikací a ovladači grafického hardwaru. Je prezentována jako tenká abstraktní vrstva na úrovni srovnatelné s GDI (viz přiložený diagram). Direct3D obsahuje mnoho funkcí, které GDI postrádá.

Direct3D je grafické rozhraní API okamžitého režimu . Poskytuje rozhraní na nízké úrovni pro každou 3D funkci grafické karty ( transformace, ořez, osvětlení , materiály , textury , hloubkové ukládání do vyrovnávací paměti atd.). Kdysi měl vyšší úroveň komponenty Retained mode , nyní oficiálně ukončen.

Okamžitý režim Direct3D představuje tři hlavní abstrakce: zařízení , zdroje a Swap Chains (viz přiložený diagram). Zařízení jsou zodpovědná za vykreslení 3D scény. Poskytují rozhraní s různými možnostmi vykreslování. Například mono zařízení poskytuje bílé a černé vykreslování, zatímco RGB zařízení činí v barvě. Existují čtyři typy zařízení:

přístroj
  • Referenční zařízení: Simuluje nové funkce, které v hardwaru zatím nejsou k dispozici. K použití tohoto typu zařízení je nutné nainstalovat sadu Direct3D SDK .
  • Nulové referenční zařízení: Nic nedělá. Toto zařízení se používá, pokud není nainstalována sada SDK a je požadováno referenční zařízení.
  • Připojitelné softwarové zařízení: Provádí vykreslování softwaru. Toto zařízení bylo představeno s DirectX 9.0 .

Každé zařízení obsahuje alespoň jeden výměnný řetězec . Odkládací řetězec se skládá z jedné nebo více zadních nárazníků povrchy. K vykreslování dochází v zadní vyrovnávací paměti .

Zařízení navíc obsahují soubor zdrojů ; konkrétní data použitá při vykreslování. Každý zdroj má čtyři atributy:

  • Typ : Určuje typ zdroje: povrch, objem, textura, textura krychle, objemová textura, povrchová textura, indexová vyrovnávací paměť nebo vrcholová vyrovnávací paměť.
  • Pool : Popisuje, jak je prostředek spravován za běhu a kde je uložen. Ve výchozím fondu bude prostředek existovat pouze v paměti zařízení. Prostředky ve spravovaném fondu budou uloženy v systémové paměti a v případě potřeby budou odeslány do zařízení. Prostředky ve fondu systémové paměti budou existovat pouze v systémové paměti. Nakonec jefond scratch v zásadě stejný jako fond systémové paměti, ale prostředky nejsou vázány hardwarovými omezeními.
  • Formát : Popisuje rozložení dat o prostředcích v paměti. Například hodnota formátu D3DFMT_R8G8B8 znamená barevnou hloubku 24 bitů (8 bitů pro červenou, 8 bitů pro zelenou a 8 bitů pro modrou).
  • Použití : S kolekcí příznakových bitů popisuje, jak bude prostředek používán aplikací. Tyto příznaky určují, které prostředky se používají v dynamických nebo statických přístupových vzorcích. Statické hodnoty prostředků se po načtení nezmění, zatímco hodnoty dynamických prostředků lze upravit.

Direct3D implementuje dva režimy zobrazení:

  • Režim celé obrazovky: Aplikace Direct3D generuje veškerý grafický výstup pro zobrazovací zařízení. V tomto režimu Direct3D automaticky zachytí Alt-Tab a nastaví/obnoví rozlišení obrazovky a formát pixelu bez zásahu programátora. To také přináší spoustu problémů při ladění díky „exkluzivnímu režimu spolupráce“.
  • Režim v okně: Výsledek je zobrazen uvnitř oblasti okna. Direct3D komunikuje s GDI a generuje grafický výstup na displeji. Okenní režim může mít stejnou úroveň výkonu jako celá obrazovka, v závislosti na podpoře ovladače.

Potrubí

Proces grafického potrubí

Rozhraní Microsoft Direct3D 11 API definuje proces převodu skupiny vrcholů, textur, vyrovnávacích pamětí a stavu na obrázek na obrazovce. Tento proces je popsán jako vykreslovací kanál s několika odlišnými fázemi. Různé fáze potrubí Direct3D 11 jsou:

  1. Input Assembler : Načte data vrcholů z mezipaměti vrcholů dodávané aplikací a přivede je do kanálu.
  2. Vertex Shader : Provádí operace na jednom vrcholu současně, jako jsou transformace, stahování z kůže nebo osvětlení.
  3. Hull Shader : Provádí operace na sadách řídicích bodů opravy a generuje další data známá jako konstanty opravy.
  4. Fáze teselace : Rozděluje geometrii a vytváří reprezentace trupu vyššího řádu.
  5. Domain Shader : Provádí operace s výstupy vrcholů ve fázi teselace, téměř stejným způsobem jako shader vrcholů.
  6. Geometry Shader : Zpracovává celá primitiva, jako jsou trojúhelníky, body nebo čáry. Vzhledem k primitivovi ho tato fáze zahodí nebo vygeneruje jednoho nebo více nových primitivů.
  7. Streamový výstup : Může zapsat výsledky předchozí fáze do paměti. To je užitečné pro recirkulaci dat zpět do potrubí.
  8. Rasterizer : Převádí primitiva na pixely a vkládá tyto pixely do pixelového shaderu. Rasterizer může také provádět další úkoly, jako je oříznutí toho, co není viditelné, nebo interpolace vrcholných dat do dat na pixel.
  9. Pixel Shader : Určuje konečnou barvu pixelu, která má být zapsána do cíle vykreslení, a může také vypočítat hodnotu hloubky, která má být zapsána do vyrovnávací paměti hloubky.
  10. Sloučení výstupu : Sloučí různé typy výstupních dat ( hodnoty shaderů pixelů , míchání alfa, hloubka/vzorník ...) za účelem vytvoření konečného výsledku.

Stupně potrubí znázorněné kulatým rámečkem jsou plně programovatelné. Aplikace poskytuje shaderový program, který popisuje přesné operace, které mají být v dané fázi dokončeny. Mnoho fází je volitelných a lze je zcela deaktivovat.

Úrovně funkcí

V Direct3D 5 až 9, kdy nové verze API zavedly podporu pro nové hardwarové možnosti, byla většina z nich volitelná - každý prodejce grafik si kromě základní požadované funkce zachoval i vlastní sadu podporovaných funkcí. Podpora jednotlivých funkcí musela být stanovena pomocí „bitů schopností“ nebo „čepic“, což z programování grafiky mezi dodavateli činilo složitý úkol.

Direct3D 10 představil značně zjednodušenou sadu povinných hardwarových požadavků na základě nejpopulárnějších funkcí Direct3D 9, které musely dodržovat všechny podpůrné grafické karty, pouze s několika volitelnými možnostmi podporovaných formátů a operací textur.

Direct3D 10.1 přidal několik nových povinných požadavků na hardware a aby zůstaly kompatibilní s hardwarem a ovladači 10.0, byly tyto funkce zapouzdřeny do dvou sad nazývaných „úrovně funkcí“, přičemž úroveň 10.1 tvořila nadmnožinu úrovně 10.0. Protože Direct3D 11.0, 11.1 a 12 přidaly podporu pro nový hardware, nové povinné funkce byly dále seskupeny do vyšších úrovní funkcí.

Direct3D 11 také představil „10level9“, podmnožinu rozhraní Direct3D 10 API se třemi úrovněmi funkcí zapouzdřujících různé karty Direct3D 9 s ovladači WDDM , a Direct3D 11.1 znovu zavedlo několik volitelných funkcí pro všechny úrovně, které byly rozšířeny v Direct3D 11.2 a novějších verze.

Tento přístup umožňuje vývojářům sjednotit kanál vykreslování a používat jedinou verzi rozhraní API na novějším i starším hardwaru, přičemž využívá vylepšení výkonu a použitelnosti v novějším běhu.

Nové úrovně funkcí jsou zavedeny s aktualizovanými verzemi API a obvykle zapouzdřují:

  • hlavní povinné funkce - (Direct3D 11.0, 12),
  • několik drobných funkcí (Direct3D 10.1, 11.1), nebo
  • společná sada dříve volitelných funkcí (Direct3D 11.0 "10 úroveň 9").

Každá vyšší úroveň je přísnou nadmnožinou nižší úrovně s pouze několika novými nebo dříve volitelnými funkcemi, které přecházejí na základní funkce na vyšší úrovni. Pokročilejší funkce v hlavní revizi rozhraní Direct3D API, jako jsou nové modely shaderů a fáze vykreslování, jsou k dispozici pouze na hardwaru vyšší úrovně.

Existují samostatné funkce, které indikují podporu pro konkrétní texturové operace a formáty zdrojů; tyto jsou specifikovány pro každý formát textury pomocí kombinace příznaků schopností.

Úrovně funkcí používají podtržítko jako oddělovač (tj. „12_1“), zatímco verze API/runtime používají tečku (tj. „Direct3D 11.4“).

Direct3D 11 úrovní

V Direct3D 11.4 pro Windows 10 existuje devět úrovní funkcí poskytovaných D3D_FEATURE_LEVELstrukturou; úrovně 9_1, 9_2 a 9_3 (souhrnně označované jako Direct3D 10 úroveň 9 ) znovu zapouzdřují různé funkce populárních karet Direct3D 9, úrovně 10_0, 10_1 odkazují na příslušné starší verze Direct3D 10, 11_0 a 11_1 odrážejí funkci zavedenou u Direct3D 11 a Rozhraní API a doby běhu rozhraní Direct3D 11.1, zatímco úrovně 12_0 a 12_1 odpovídají novým úrovním funkcí zavedeným pomocí rozhraní API Direct3D 12.

Úrovně funkcí v Direct3D 11.4
Úroveň funkcí Povinné hardwarové funkce Volitelné funkce
9_1 Shader Model 2.0 ( vs_2_0/ ps_2_0), 2K textury, objemové textury, dotazy na události, BC1-3 (aka DXTn), několik dalších specifických funkcí. N/A
9_2 Dotazy na okluzi, formáty s plovoucí desetinnou čárkou (bez prolnutí), rozšířená písmena, všechny funkce 9_1.
9_3 vs_2_a/ ps_2_xs instancingem a dalšími shaderovými kryty, texturami 4K, více cíli vykreslování (4 MRT), míchání s plovoucí desetinnou čárkou (omezeno), všechny funkce 9_2.
10_0 Shader Model 4.0, geometrický shader, stream out, alfa-to-pokrytí, 8K textury, MSAA textury, oboustranná šablona, ​​obecné pohledy na cíle vykreslování, pole textur, BC4/BC5, plná podpora formátu s plovoucí desetinnou čárkou, všechny funkce 9_3. Operace logického míchání, DirectCompute (CS 4.0/4.1), rozšířené pixelové formáty.
10_1 Shader Model 4.1, pole cubemap, rozšířená MSAA, všechny funkce 10_0.
11_0 Shader Model 5.0/5.1, trupové a doménové shadery, DirectCompute (CS 5.0/5.1), 16K textury, BC6H/BC7, rozšířené pixelové formáty, všechny funkce 10_1. Vykreslování pouze UAV s počtem vzorků síly, konstantním vyrovnáváním vyrovnávací paměti a částečnými aktualizacemi, operace s dvojitou přesností (64bitové) s plovoucí desetinnou čárkou, minimální přesnost s plovoucí desetinnou čárkou (10 nebo 16 bitů ), filtrování min/max.
11_1 Operace logického míchání, rasterizace nezávislá na cíli, UAV v každé fázi potrubí se zvýšeným počtem slotů, pouze vykreslování UAV s počtem vzorků síly, konstantní vyrovnávání vyrovnávací paměti a částečné aktualizace, všechny funkce 11_0. Dlaždice zdrojů (čtyři úrovně), konzervativní rasterizace (tři úrovně), referenční hodnota šablony z Pixel Shader, zobrazení seřazená rasterizérem, typizované zatížení UAV pro další formáty.
12_0 Dlaždice Zdroje Tier 2 (Texture2D), zadané zatížení UAV (další formáty).
12_1 Konzervativní rastrování, úroveň 1, zobrazení objednaná rasterizací.

Direct3D 12 úrovní

Direct3D 12 pro Windows 10 vyžaduje grafický hardware odpovídající úrovním funkcí 11_0 a 11_1, které podporují překlady adres virtuální paměti, a vyžaduje ovladače WDDM 2.0. Existují dvě nové úrovně funkcí, 12_0 a 12_1, které zahrnují některé nové funkce zpřístupněné Direct3D 12, které jsou volitelné na úrovních 11_0 a 11_1. Některé dříve volitelné funkce jsou znovu zarovnány jako základní na úrovních 11_0 a 11_1. Shader Model 6.0 byl vydán s aktualizací Windows 10 Creators Update a vyžaduje Windows 10 Anniversary Update, ovladače WDDM 2.1.

Direct3D 12 úrovní funkcí
Úroveň Povinné funkce Volitelné funkce
11_0 Všechny povinné funkce 11_0 z Direct3D 11, Shader Model 5.1, Resource binding Tier 1. Logické operace prolnutí, operace s plovoucí desetinnou čárkou s dvojitou přesností (64 bitů), minimální přesnost s plovoucí desetinnou čárkou (10 nebo 16 bitů).

Vazba zdrojů (tři úrovně), dlaždice zdrojů (čtyři úrovně), konzervativní rasterizace (tři úrovně), referenční hodnota šablony z Pixel Shaderu, zobrazení seřazená rasterizérem, načtené typizované UAV pro další formáty, instancování pohledu.

Shader Model 6.0-6.6

Meta příkazy, proměnná rychlost stínování, raytracing, shadery sítí, zpětná vazba vzorkovače.

Další volitelné funkce.

UAV v každé fázi potrubí, pouze UAV vykreslování s počtem vzorků síly, konstantním vyrovnáváním vyrovnávací paměti a částečnými aktualizacemi.
11_1 Operace logického prolnutí, rasterizace nezávislá na cíli, zvýšený počet slotů UAV.
12_0 Vazba zdrojů Tier 2, Tiled Resources Tier 2 (Texture2D), Typed UAV Loads (další formáty), Shader Model 6.0.
12_1 Konzervativní rastrování, úroveň 1, zobrazení objednaná rasterizací.
12_2 DirectX 12 Ultimate : Shader Model 6.5, Raytracing Tier 1.1, Mesh Shaders, Shading s proměnnou rychlostí, Sampler Feedback, Resource Binding Tier 3, Tiled Resources Tier 3 (Texture3D), Conservative Rasterization Tier 3, 40-bit virtual address space.

Direct3D 12 představuje přepracovaný model vazby prostředků, který umožňuje explicitní ovládání paměti. Abstraktní objekty „zobrazení zdrojů“ jsou nyní reprezentovány deskriptory prostředků, které jsou přidělovány pomocí haldy paměti a tabulek. Úrovně vazby prostředků definují maximální počet prostředků, které lze adresovat pomocí CBV (zobrazení konstantní vyrovnávací paměti), SRV (zobrazení zdrojů shaderu) a UAV (zobrazení neuspořádaného přístupu), jakož i jednotek vzorkovače textur. Hardware úrovně 3 umožňuje plně neomezené prostředky omezené pouze velikostí haldy deskriptoru, zatímco hardware úrovně 1 a úrovně 2 ukládá určitá omezení počtu deskriptorů („zobrazení“), které lze použít současně.

Úrovně vazby prostředků
Omezení zdrojů Úroveň 1 Úroveň 2 Úroveň 3
Deskriptory v haldě CBV/SRV/UAV 1 mil 1 mil > 1 mil
CBV na stupeň shaderu 14 14 plná hromada
SRV na stupeň shaderu 128 plná hromada
UAV ve všech fázích 8, 64 64 plná hromada
Vzorkovače na stupeň shaderu 16 plná hromada
64 slotů na hardwaru úrovně 11_1

Vícevláknové

Model ovladače WDDM v systému Windows Vista a vyšším podporuje libovolně velký počet kontextů spuštění (nebo vláken) v hardwaru nebo softwaru. Systém Windows XP podporoval pouze víceúlohový přístup k Direct3D, kde bylo možné spouštět samostatné aplikace v různých oknech a hardwarově akcelerovat a OS měl omezenou kontrolu nad tím, co GPU dokáže, a ovladač mohl libovolně přepínat vlákna spouštění.

Možnost spouštění modulu runtime ve vícevláknovém režimu byla zavedena v modulu runtime Direct3D 11. Každý kontext spouštění je prezentován s výhledem na prostředky GPU. Kontexty spouštění jsou navzájem chráněny, ale nepoctivá nebo špatně napsaná aplikace může převzít kontrolu nad prováděním v ovladači uživatelského režimu a potenciálně by mohla přistupovat k datům z jiného procesu v paměti GPU odesláním upravených příkazů. I když je dobře napsaná aplikace chráněna před přístupem jinou aplikací, musí se chránit před selháním a ztrátou zařízení způsobenou jinými aplikacemi.

Operační systém spravuje vlákna zcela sám, což hardwaru umožňuje v případě potřeby přepínat z jednoho vlákna na druhé, a také zpracovává správu paměti a stránkování (do systémové paměti a na disk) prostřednictvím integrované správy paměti jádra OS.

Přepínání kontextu s jemnějším zrnem, tj. Možnost přepínat dvě podprocesy spouštění na úrovni instrukcí shaderu namísto úrovně jednoho příkazu nebo dokonce dávky příkazů, bylo zavedeno ve WDDM/DXGI 1.2, který je dodáván se systémem Windows 8. Tím se překonává potenciální problém s plánováním, kdy by aplikace měla velmi dlouhé provádění jednoho příkazu/dávky příkazů a bude muset být ukončena časovačem hlídacího systému OS.

WDDM 2.0 a DirectX 12 byly přepracovány tak, aby umožňovaly plně vícevláknové čerpání hovorů. Toho bylo dosaženo tím, že se všechny prostředky stanou neměnnými (tj. Pouze pro čtení), serializují se stavy vykreslování a používají se balíčky draw draw. Tím se zabrání složité správě prostředků v ovladači režimu jádra, což umožňuje několik opakovaných volání ovladače v uživatelském režimu prostřednictvím souběžných kontextů spouštění poskytovaných samostatnými vlákny vykreslování ve stejné aplikaci.

Direct3D Mobile

Direct3D Mobile je odvozen z Direct3D, ale má menší paměťovou stopu . Windows CE poskytuje podporu Direct3D Mobile.

Alternativní implementace

Existují následující alternativní implementace rozhraní Direct3D API. Jsou užitečné pro platformy jiné než Windows a pro hardware bez některých verzí podpory DX:

  • WineD3D - Open source projekt Wine má funkční implementace rozhraní API Direct3D prostřednictvím překladu do OpenGL . Implementaci Wine lze za určitých podmínek spustit i na Windows.
  • vkd3d - vkd3d je open source 3D grafická knihovna postavená na Vulkanu, která umožňuje spouštět aplikace Direct3D 12 na Vulkanu . Je primárně používán projektem Wine a nyní je součástí projektu Protone společnosti Valve, který je dodáván s párou na linuxu.
  • DXVK -Překladová vrstva s otevřeným zdrojovým kódem Vulkan pro Direct3D 9/10/11, která umožňuje spouštění 3D aplikací na Linuxu pomocí Wine. Používá ho Proton / Steam pro Linux. DXVK je schopen provozovat velké množství moderních her pro Windows pod Linuxem.
    • D9VK - Vidlice DXVK pro přidání podpory Direct3D 9, která je součástí Linuxu/Steam/Proton. 16. prosince 2019 byla D9VK sloučena do DXVK.
  • Gallium Nine - Gallium Nine umožňuje spouštět aplikace Direct3D 9 na Linuxu nativně, tj. Bez překladu hovorů, který umožňuje téměř nativní rychlost. Vyžaduje spolupráci společnosti Wine a Mesa .

Související nástroje

D3DX

Direct3D je dodáván s D3DX, knihovnou nástrojů navržených k provádění běžných matematických výpočtů vektorů , matic a barev, výpočtu matic pohledu a projekce , interpolací spline a několika složitějších úkolů, jako je kompilace nebo sestavování shaderů používaných pro 3D grafické programování , komprimované úložiště kosterních animací a maticové komíny. Existuje několik funkcí, které poskytují komplexní operace s 3D sítěmi, jako je výpočet tečného prostoru, zjednodušení sítě, předpočítaný přenos záření , optimalizace pro přívětivost a svlékání mezipaměti vrcholů a generátory pro 3D textové sítě. 2D funkce patří kurzy pro čerpání obrazovkou prostor linky, textové a skřítka bázi částicových systémů . Prostorové funkce zahrnují různé rutiny křižovatek, převod z /do barycentrických souřadnic a generátory ohraničujícího rámečku /koule. D3DX je k dispozici jako knihovna dynamických odkazů (DLL). D3DX je od Windows 8 zastaralé a nelze jej použít v aplikacích Windows Store.

Některé funkce přítomné v předchozích verzích D3DX byly v Direct3D 11 odstraněny a nyní poskytovány jako samostatné zdroje:

  • Windows SDK a Visual Studio
  • Byla odstraněna velká část matematické knihovny. Společnost Microsoft doporučuje místo toho použít knihovnu DirectX Math.
  • Matematika sférických harmonických byla odstraněna a nyní je distribuována jako zdroj.
  • Rámec efektů byl odstraněn a nyní je distribuován jako zdroj prostřednictvím CodePlex.
  • Rozhraní Mesh a funkce geometrie byly odstraněny a jsou nyní distribuovány jako zdroj prostřednictvím CodePlex v knihovně zpracování geometrie DirectXMesh.
  • Funkce textur byly odstraněny a nyní jsou distribuovány jako zdroj prostřednictvím CodePlex v knihovně zpracování textur DirectXTex.
  • Obecní pomocníci byli odebráni a nyní jsou distribuováni jako zdroj prostřednictvím CodePlex v rámci projektu DirectX Tool Kit (DirectXTK).
  • Atlas isochart textury byl odstraněn a nyní je distribuován jako zdroj prostřednictvím CodePlex v rámci projektu UVAtlas.

DXUT

DXUT (také nazývaný ukázkový framework) je vrstva postavená na rozhraní Direct3D API. Rámec je navržen tak, aby pomohl programátorovi strávit méně času všedními úkoly, jako je vytvoření okna, vytvoření zařízení, zpracování zpráv systému Windows a zpracování událostí zařízení. DXUT byly odstraněny pomocí Windows SDK 8.0 a nyní distribuovány jako zdroj prostřednictvím CodePlex.

Viz také

Reference

externí odkazy