Hirdetés

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

  • Abu85

    HÁZIGAZDA

    válasz b. #20079 üzenetére

    Nem oldották meg. Kezelhető, nem túl jól persze, de nem megoldható, csak akkor, ha a nulláról újraírják az egészet, ami viszont elég sok idő, és úgy nehezen tehető meg, hogy évente egy csomó játékot kér az asztalra az EA. Az Intel úgy magyarázta nekem, amikor rákérdeztem, hogy miért nem érintettek, hogy ez egy Mantle örökség. Amikor a Frostbite-ot írták az explicit API-ra, akkor mindent a Mantle-höz szabtak, így keletkezett egy egészen vaskos kód a memóriamenedzsmentre. Ezt elég jól átmentették a DX12-höz, hiszen annyiban azért ez az API nem különbözik, de egy dologban azért mégis. Amíg például a Mantle esetében az AMD nem specifikált olyan memóriatípust, ami nem volt legalább látható a hostnak, addig a DirectX 12-ben van ilyen, és ez a fő memóriatípusa a VGA-knak. Na most a Frostbite a Mantle öröksége miatt nagyon épít a host felé látható erőforrásokra, amelyek olyanok, hogy a CPU dinamikusan frissíti őket minden jelenet során, és a GPU majd ezeket fogja olvasni (írni nem). Na most ez egy IGP-nél tök oké, hiszen ott eleve a rendszermemória része a VRAM, és gyakorlatilag bármilyen struktúra mellett az egész host által látható. Tehát a CPU úgy képes a GPU által olvasható erőforrásokat írni, hogy nem szükséges hozzá explicit memóriamásolás. Csak ezért van egyébként az AMD DX12-es implementációjában egy 256 MB-os terület a VRAM-ban elkülönítve, hogy azt a CPU a rendszermemóriát megkerülve, kvázi közvetlenül tudja írni, mert host visible flag van rajta, és a GPU olvashatja az odakerült eredményeket a VRAM sebességével. Na most a Frostbite szemével vizsgálva az a legfőbb gond a DirectX 12-ben, hogy VRAM-ra nem kötelező a host visible flag, és az NVIDIA nem is alkalmazza, így nekik a teljes VRAM olyan, amit a host CPU nem tud se látni, se cache-elni (utóbbi annyira nem lényeges). Erre egy L0-s memory pool van generálva az NV meghajtójába, amiből van egy host visible típus, de ez nem a VRAM-ban van, hanem a rendszermemóriában. Tehát amíg a Frostbite a host visible flaggel rendelkező memóriatípusba helyezett erőforrásokat az Intel és az AMD hardverein úgy frissíti, hogy azokat a GPU közvetlenül tudja olvasni, addig a GeForce-on ez nem lehetséges, mert a VRAM nem elérhető a hostnak, így ezeket az erőforrásokat a GPU nem a VRAM-ból olvassa be, hanem a rendszermemóriából a PCI Express interfészen keresztül. Az újabb Frostbite motorok (a BF1 óta) annyiban kedvezőbbek, hogy van erre egy explicit másolás, vagyis amint a CPU frissítette az érintett erőforrásokat, azokat rögtön bemásolják a GPU memóriájába (erre jó az aszinkron DMA), de ez itt akkor is egy extra másolási művelet, ami ha nem lesz kész időben, akkor sajnos akadásokat idézhet elő.

    Az egészet úgy lehetne végérvényesen megoldani, ha az EA mondjuk adna időt a Frostbite Teamnek a memóriamenedzsment újraírására, így az le tudná vetni magáról a Mantle örökségeit. Ennek az a baja, hogy kockázatos, mivel az EA portfóliója megköveteli, hogy a motor folyamatosan fejlődjön, így nagyon mélyen nem nyúlkálnak bele, hogy az ne veszélyeztesse a tervezett játékok kiadását. Valószínűleg úgy vannak ezzel, hogy a next-gen konzolokig kihúzzák, azokhoz pedig úgyis új alapokat írnak, és azzal a fenti probléma is megszűnik.

    Sajnos nagyon nem egyszerű ez, és nem igazán a DX12 a hibás érte, mert annak vannak specifikációi, egy csomó játék követi azokat, lásd Rise of the Tomb Raider vagy Sniper Elite 4, és működik igazából a DX12 mód. Persze a VRAM kell, de ettől még fut, zömében akadások nélkül (néha pedig egy-egy akadás eleve előfordul, a PC nem egy fix hardverplatform nem tudod abszolút rátervezni a programot). A Frostbite az a másik véglet valóban nem, sok pénzt beleöltek a Mantle-be, és természetesen úgy akarták ezt áthozni DX12-re, hogy a Mantle-höz írt kódok jelentős részét megőrzik. Gazdaságilag így logikus. De például a Rebellion úgy portolta a DX12-re az eredetileg Mantle-re írt Asurát, hogy a memória-menedzsmentet újraírták. És láss csodát minden hardveren akadásoktól mentesen működik DX12-vel valamelyik grafikai beállítással, amit nyilván a hardver ereje szab meg. :)) Szóval azért elég sok fejlesztőnek működik a DX12, míg pár fejlesztőnek nem. Nem igazán az API a szar, még csak nem is a gyártói implementációk, mert látod, sokan megoldják. :)

    [ 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