Hirdetés

Új hozzászólás Aktív témák

  • Abu85

    HÁZIGAZDA

    válasz Dandris #148 üzenetére

    A bekötés magának az API-nak a része. Maga a bindless a DX12-nek az alapvető modellje. Amikor a Microsoft megszabta a bindless specifikációkat, akkor két modellt különítettek el. Egyet kapott az NVIDIA, leginkább azért, mert külön kérték ezt, és természetesen bekerült az alapvetően tervezett pure bindless koncepció, amit tulajdonképpen az Xbox One-ra szabtak, de ezáltal nyilván a GCN is jó, és az Intel is támogatta a Gen9-cel, mert ezt is finomították a véglegesítésre. Ezek alatt van egy kompatibilitási szint, ami gyakorlatilag egy CPU-n futó binding API. Ilyenkor a meghajtó elhelyez egy erőforrás-leírót egy tömbbe. Amikor a wave-ek elkezdenek futni a multiprocesszoron, ezt a tömböt fogja a multiprocesszor igényelni. Ennyi lényegében a bekötés. De a probléma az vele, hogy a processzor segítségére van szükség ahhoz, hogy a GPU tudja honnan kell mit betölteni a memóriából. Ezért jött be a bindless, ugyanis a Tier2-es szint, vagyis amit az NV-re csináltak, annyiban különbözik, hogy az SRV-ket és a samplereket be tudja tölteni a mintavételezőbe a branch egység. De a többi puffer view-re már a CPU kell. A Tier3-es pure bindless szint alapvetően annyi, hogy nem kell használni a DX12 binding API-ját, mert a GPU-ban van egy programozható integer skalár egység (vagy az Intel esetében maga a CPU-mag és az LLC), ami a CPU munkáját teljesen ki tudja váltani. Minden memóriahozzáférés, akár a szűrt adattal visszatérők is beleprogramozhatók a shaderekbe, mert lényegében erről szólnak a bindless szintek, hogy a CPU-t ne terheljék a fejlesztők ezzel a feladattal. Na most a programozhtóság megkövetelése miatt ezt nem tudod csak úgy fixfunkciós blokkal megoldani, ide kell egy olyan részegység, ami megcsinálja a proci feladatát, vagy trükközöl, ahogy az Intel.

    Ez így mind szép és jó volt, de időközben felmerült az a probléma, hogy egy architektúrát áttenni memóriaalapúvá, igen nagy változást igényel, akár 4-5 éves tervezést is, ha előtte nem volt erre semmilyen akarat. Ezzel viszont a Tier2-es szint, vagyis a sima bindless bekötés korlátozza a hardvereket, mivel például hiába tud a Pascalnál több CBV-t, UAV-t kezelni, vagy esetleg hiába támogat minden pufferhalmaz esetében unpopulated RS bejegyzést, a DirectX 12 nem fogja megengedni neki az extra tudás kihasználását. Emiatt a Tier2-es bindless szint rendkívül korlátozóvá és haszontalanná vált.

    Az NV a múlt évben átváltott a pure bindless szintre, amit a végleges specifikációkkal szerencsére nem nehéz emulálni, mert volt esze a Microsoftnak a véglegesítés előtt az emuláció lehetőségét is mérlegelni. Az NV-nek a megoldás persze valahol káros is, mert a SM-enként 4 KB-nyi vektorregisztert is bukhatnak, ami a regiszterszegény Maxwell és Pascal architektúrákban jóval több, mint az egészséges határ, de valószínűleg 10-15%-nál nagyobb büntit nem szereznek vele, és innentől kezdve a bindless motorok nem jelentenek problémát, tehát egyedül az erőforráshalmazok problémájával kell foglalkozni, mivel a GeForce-ok csak olyan halmazokat hozhatnak létre, ahol a flagek csak egy kategóriába sorolt típust engednek használni.

    Szóval a bekötés magának az API-nak a szerves része, és nem véletlen, hogy még trükközés vagy emuláció árán is a pure bindless megoldásra megy mindenki.

    [ Szerkesztve ]

    Senki sem dől be a hivatalos szóvivőnek, de mindenki hisz egy meg nem nevezett forrásnak.

Új hozzászólás Aktív témák