Prosím autora o nějaké rozvedení kapitoly 4. Nerozumím přesně co tam má ma mysli pod pojmem vyrovnávací paměť. Moje představa je, že texturu přenáším z operační paměti do videoadaptéru, tak sakra jaká vyrovnávací paměť ?
K tomu režimu, který se podobá starým 8bitům: mám tomu rozumět tak, že videopaměť se objeví na fyzických adresách v rozsahu operační paměti ?
Děkuji.
Pokud je na grafickém akcelerátoru méně paměti, než je zapotřebí pro framebuffer+textury (+vertexy atd), dají se přes AGP přenášet textury přímo z operační paměti. V klasickém režimu by se přenos prováděl takto:
To však nemá moc smysl právě při nedostatku paměti na gfx. akcelerátoru, takže se texturovací paměť z tohoto řetězce dá vynechat a akcelerátor textury přímo načítá z operační paměti. Je to pomalejší, to jistě (už jen proto, že datové cesty uvnitř akcelerátoru nemusí být omezeny na 32/64 bitů), ale při nedostatku paměti je to lepší řešení než si pořád přepisovat texturovací paměť nebo omezovat framebuffer. Zda se textura přenáší celá nebo se stripuje je již do jisté míry interní záležitost grafického akcelerátoru resp. jeho ovladačů.
Druhý dotaz - přesně tak, přímé mapování. Ono je to samozřejmě pravda i u PCI karet, zde jsou však přenosy efektivnější vzhledem k vytížení.
"mám tomu rozumět tak, že videopaměť se objeví na fyzických adresách v rozsahu operační paměti ?"
Ne, to znamená, že se (potenciálně nesouvislá) část operační paměti objeví na adresách, které vidí grafická karta. Jaká část to bude, určuje ovladač agpgart.
Čili si pomocí toho můžeš udělat to, že si funkcí malloc() naalokuješ paměť, nahraješ do ní texturu, a pak, aniž bys tu texturu musel někam kopíroval, necháš 3D akcelerátor tu texturu vykreslovat.
Videoram takhle namapovat do operační paměti nejde, protože na té sběrnici nemáš zaručenou dobu přístupu --- čili by ti ten obraz vypadával podle momentálního vytížení počítače. Používat operační paměť jako videoram umí jen on-board karty Intel.