A Direct3D 11 (D3D11) a Direct3D 10/10.1 utódja, a Direct3D 11. verziója, a DirectX 11 alkalmazásprogramozási felületének ( API ) összetevője . A Direct3D 11 funkciókat biztosít az operációs rendszer és az alkalmazások számára a grafikus kártya illesztőprogramjaival való interakcióhoz . Ezek a szolgáltatások nem kapcsolódnak a Windows termékcsalád következő operációs rendszeréhez ( Windows 7 ), és elérhetők a Windows Vista rendszerben . Részben a D3D11 Direct3D 9-10 szintű videokártyákon működik .
Az első előzetes verziók 2008 novemberében jelentek meg. A hivatalos végleges verzió 2009. október 22-én jelent meg a Windows 7 részeként . 2009. október 28-án a DirectX 11 hivatalosan is elérhetővé vált Windows Vista és Windows Server 2008 rendszereken a Windows Update szolgáltatáson keresztüli letöltéssel . [egy]
A D3D11 3 további lépést ad a renderelési folyamathoz, amelyek célja a felületek hatékony mozaikolása .
A D3D11 folyamat három új szakaszt tartalmaz a vertex és a geometria shader szakaszok között . Közülük kettő programozható (hullató árnyékoló és domain árnyékoló szakasz), egy pedig konfigurálható (tessellációs szakasz).
A bemutatott csővezeték felületfoltok által meghatározott rácsokkal működik. A D3D11 fő primitívei háromszög- és négyzet alakú foltok. Az egyes foltok alakját a kontrollpontok száma határozza meg. A vertex shaderben ezek a pontok szekvenciálisan transzformálódnak, nyúznak és/vagy morfizálódnak.
A shell shader minden patchhez meghívásra kerül. A vertex shader patch töréspontjai bemenetként használatosak. A shell shadernek két fő felhasználási területe van. Az első (opcionális) a töréspontok konvertálása egyik reprezentációból a másikba. Például lehetővé teszi a Catmull-Clark felosztási felületek közelítése bikubikus foltokkal című részben bemutatott módszer megvalósítását . E shader után a vezérlőpontok közvetlenül továbbküldésre kerülnek, a tesselátor megkerülésével. Egy másik felhasználási terület egy megfelelő tesszellációs paraméter kiszámítása, amely azután átkerül a tesszellációs szakaszba. Ez a megközelítés lehetővé teszi az adaptív tessellációt, amely nézetfüggő részletszintek (LOD) esetén használható. A tesszellációs paraméter a folt minden lapjára van meghatározva, és 2 és 64 között van. Ez azt jelenti, hogy a háromszög (vagy négyzet alakú) folt minden lapja 2 (vagy legfeljebb 64) lapra osztható.
A tesszelátor szakaszt egy rögzített függvénykészlet képviseli (nagyon konfigurálható), amelyek a tesszellációs paramétert használják a folt több háromszögre vagy négyszögre való felosztására. A tesszellátor nem fér hozzá a töréspontokhoz – minden felosztási döntés a shell shadertől átadott konfigurációs és tessellációs paraméterek alapján történik. A tesszellációs szakaszt követő minden csúcs átadásra kerül a domain shadernek, és csak a paraméterezési koordináták kerülnek átadásra.
A tartomány shader a patch paraméterezési koordinátáit minden csúcsra külön-külön kezeli, bár a transzformált vezérlőpontokhoz a teljes javításhoz hozzá lehet férni. A tartomány árnyékoló minden információt elküld a csúcsról (pozíció, textúra koordináták stb.) a geometria árnyékolónak (vagy a vágási szakasznak, ha nincs megadva geometria árnyékoló). Lényegében minden pontban értékeli a felület ábrázolását. Ebben a szakaszban az eltolásleképezési módszer alkalmazható.
A Direct3D 11 egy új shader-típust, a Compute Shadert mutat be. A számítási árnyékolót szálak szabályos tömbjének nevezik. A folyamok csoportokra vannak osztva. Minden csoportnak 32 KB memória van megosztva a csoport szálai között. Így a csoport szálai megoszthatják egymással az eredményeket, javítva a teljesítményüket. Ezenkívül a szálak olvasást és írást végezhetnek a grafikus erőforrásokhoz való véletlenszerű hozzáféréssel: textúrák, csúcstömbök, renderelési célok. Ezek a memória-hozzáférések rendezetlenek, bár a különböző utasításokat szükség esetén szinkronizálják.
A pixel (töredék) shaderek tetszőleges címen is tudnak olvasni, ami lehetővé teszi olyan adatstruktúrák írását, amelyeket aztán számítási shaderben használhatunk, vagy fordítva. Érdemes megjegyezni, hogy a pixel shadereknek mindig volt véletlenszerű olvasási hozzáférésük a textúra-kereséseken keresztül.
A számítási árnyékolók olyan műveleteket is végrehajthatnak, mint például az összegzett területtáblázatok, a gyors Fourier-transzformációk sokkal gyorsabbak, mint a GPU-n korábban használt módszerek. A Microsoft jelenleg olyan könyvtárakat vizsgál, amelyek ilyen számításokat biztosítanak. A Microsoft úgy véli, hogy az olyan algoritmusok, mint az A-puffer renderelés és a sugárkövetés is hatékonyan implementálhatók, de jelenleg nincs valódi bizonyíték ezek hatékonyságára.
A számítási árnyékoló meghívása lecseréli a renderelési folyamat összes szakaszát. Azonban lehetséges a számítási árnyékolók és a hagyományos renderelés keverése az eredmények felhasználásával. Például képfeldolgozás egy számítási árnyékolóval történő renderelés után (tölthet be további adatstruktúrákat).
A D3D10 csak egyetlen szálból teszi lehetővé a renderelési parancsok átadását (jelenleg van egy speciális többszálú mód, de a gyenge teljesítmény miatt a Microsoft nem javasolja ennek használatát). Mint ismeretes, a megjelenítési parancsok Direct3D-n keresztüli küldése további CPU számítási erőforrások felhasználásával jár . Tekintettel a CPU magok számának növekedésére, a fejlettebb többszálú feldolgozás támogatása bevezetésre kerül annak érdekében, hogy ezt a munkát több szál között megosszák, ezáltal hatékonyabban állítsák elő.
A Direct3D 11 lehetővé teszi megjelenítési listák létrehozását több szálból, és azok végrehajtását a fő megjelenítési szálból. Ezenkívül az erőforrásokat létrehozó eszközt eltávolították a megjelenítési parancsokat küldő környezetből. Ez lehetővé teszi az erőforrások aszinkron létrehozását. A késleltetett kontextusok megjelenítési listák létrehozására, az azonnali kontextus pedig a megjelenítési parancsok GPU -nak történő átadására szolgál , beleértve a halasztott kontextusokban létrehozott megjelenítési listák kezelését.
Más szolgáltatásokkal ellentétben a Direct3D 11 többszálú megjelenítése programozottan, az illesztőprogramon keresztül valósul meg. A megfelelő D3D10 illesztőprogramok (talán még a D3D9 is) sokkal hatékonyabban teszik lehetővé a többszálas renderelést, mint korábban. Egy bizonyos szintű többszálú megoldás új driverek nélkül is elérhető lesz, de egyelőre nem világos, hogy ebben az esetben milyen korlátozások lesznek.
Shaderek dinamikus összekapcsolásának támogatása (hasonlóan a Cg-hez). Ez lehetővé teszi az írási és összeállítási fény- és anyagárnyékolók elkülönítését. Késői kötés akkor történik, amikor a shader látható. Ez a megközelítés megoldást jelent a kombinatorikus robbanás problémájára különféle fényforrások és anyagok esetén (ezt és néhány más problémát a Real-Time Rendering, 3. kiadás 7.9. fejezete tárgyalja )
Két új tömörített textúraformátum került hozzáadásra. A BC6 támogatja az RGB textúrák széles dinamikus tartományát texelenként 1 bájt használatával (a 6 bites RGB valódi textúrák 6 bájtja helyett). A BC7 támogatja a szűk dinamikatartományú RGB vagy RGBA textúrákat. Texelenként 1 bájtot is használ (mint például a DXT5/BC3), de lényegesen jobb minőséget biztosít, mint a D3D10 textúraformátumok. Mindkét új formátum több blokktípust használ – a tömörítő segédprogram tartalma alapján választja ki a megfelelő blokktípust.
A D3D9 és D3D10 tömörítési blokkformátumok azon az elgondoláson alapulnak, hogy minden 4×4-es texelblokk egyetlen sorban tartalmazza az összes értékét, és az egyes texelek bitjei egy pozíciót kódolnak ebben a sorban. Például a DXT1/BC1-ben egy vonal az RGB térben két RGB-végpontot jelöl, és minden texel két bitet használ annak jelzésére, hogy melyik színt használja a vonal négy pontjából.
Az új D3D11 formátumok támogatják a blokktípusokat egy, két, sőt három (BC7 esetén) színvonallal. Kompromisszum van a sorok száma és az ilyen vonal mentén lévő pontok száma között, mivel minden blokk ugyanannyi memóriát foglal el. Alapvetően egy 4×4-es blokkhoz két színvonallal további 16 bit szükséges blokkonként, hogy meghatározzuk, hogy az egyes texelekből melyik sor volt hozzárendelve (három színsor esetén még több bitre lenne szükség). A memóriaigény csökkentése érdekében a lehetséges színes vonalmintáknak csak egy kis készlete támogatott. A csomagoló segédprogram minden egyes blokkhoz kiválasztja a legjobb opciót az adott részhalmazból.
A Direct3D 11 szigorúbb textúra specifikációval rendelkezik. A dekompressziós eredményeknek pontosnak kell lenniük, a szubtexel/submip szűrésnek pedig legalább 8 bit pontosnak kell lennie.
A Direct3D 11 lehetővé teszi olyan textúrák használatát, amelyek maximális mérete 8K-16K texel. Ne feledje, hogy egy 16K x 16K DXT1/BC1 textúra 128MB – nem sok játék használ ekkora textúrát, de alkalmas lehet olyan technikákhoz, mint a megatextúra . Általában a D3D11-ben egy erőforrás mérete akár 2 GB is lehet.
A hardver opcionálisan támogathatja a dupla pontosságú valós lebegőpontos számokat.
A 2008-as Gamefest egy csúszdát is tartalmazott sok más újdonsággal, amelyek részleteit nem magyarázták el:
A SlimDX és a SharpDX támogatja a DirectX 11 -et. XNA - nem