[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Jak efektivne texturovat I BEZ MMU :-)




>  Jiste ze ano. MMU je ti v tomhle zcela na hovno. 100% reseni je tzv.
> swizzling, kteri vymysleli koderi na PC (mozna bych jeste nasel jmeno
> autora)
> For je v tom, ze pixely se reorganizuji tak, ze vzdy 16 po sobe jdoucich
> bytes tvori 4x4 pixely v texture. Takze at to ctu jakkoliv v jakemkoliv
> uhlu, tak vzdy burstem natahnu 16 pixelu z nichz vetsinu vyuziju.
> Jak to rozkodovat zpatky ? Easy. Offset do textury ma rozdelene
> casti na adresovani X a Y v tom ctverecku, mezi nimi ma tzv. gap
> coz je misto pro signed znaminka a pri kodovani se to musi maskovat
> EORem. A opravdu nejsou jen lameri. Nastesti.

Offset do 256x256 bajtu velke textury se obvykle da zapsat napriklad
jako [v7..v0][u7..u0].
[u,v] je ona souradnice bodu v texture.
Pokud k texture pristupujeme prez takto vytvorenou adresu samozrejme
dochazi k velkym skokum v adresovem prostoru
(a zbytecne se naplnuje/vyprazdnuje cache a delaji se dalsi zbytecne
nepodlozenosti...).
Nic nam vsak nebrani v tom trochu tuto adresu upravit (a adekvatne
dopredu upravit vzhled a organizaci textury v pameti).
Napriklad: [v7..v2][u7..u2][v1v0][u1u0] cimz si prvni dva bity u a v
dame k sobe. Diky tomu pri zmene v-souradnice se zbytecne nebude delat
velky skok v adresovem prostoru.
Nevim ale, jak rychle takto offset poskladat. Zrejme par xoru, and a oru
to zvladne ;))

Je to vlastne obdobne onomu "swizzlingu", jak ho popisoval Fido. Zrejme
se jedna jen o jiny popis obdobne metody.

Uvadim to tu proto, ze to takto muze byt nekterym lepe pochopitelne a
taky, ze je to obecny popis reseni problemu "indexace velkych tabulek".
Pouziti MMU se mi jevi jako metoda zalozena na pouziti brutalni sily.
Navic "hardware dependant".

defor

P.S.:
Z predchazejich velmi vulgarnich mailu mne zaujalo jen jedine. Otazka
"nepouzivani emulovanych instrukci FPU". Ted uz je nam vsem jasne, ze
nase skvela motorola 040/060 neumi spocitat ani jednu goniometrickou
funkci a funkce k nim inverzni.
Je alibisticke se domnivat, ze _zadny_ procesor tento vypocet (a navrch
jeste treba vypocet funkce exp) nema primo v cipu, a ze se tudiz jenom
emuluje. Jeden z algoritmu, ktery se v FPU jednotkach k tomu pouziva se
jmenuje CORDIC a je soucasti mnoha procesoru (je to smutne, ale fsin,
fcos atd. ma i Intel...).
Ponechme vsak stranou hw implementaci goniometrickych funkci a
soustredme se na to, jak tedy obejit tento nemaly problem.
Troda je nejvetsim odpurcem pouzivani emulovanych instrukce, sam vsak
nikdy neprinesl zadne reseni tohoto tiziveho problemu.
Z praktickeho hlediska ma pogramator k dispozici tri moznosti:
1. Pouzit emulovanou instrukci (emulovanou goniometrickou instrukci), a
tak si vyzadat zavolani obsluhy vyjimky a provedeni vypoctu obvyklymi
aritmetickymi instrukcemi (tusim, ze ji obsluhuje 68040.library). Tady
velmi zalezi na tom, jak kvalitne emulovane tyto instrukce jsou (v praxi
na verzi knihovny).
2. Sam v programu zavolat funkce mathtrans.library (popr. jine) a dale
se spolehat na totez jako viz.1
3. Naprogramovat si vypocet goniometrickych funkci sam. Zde ma
programator opet na vyber.
At uz trivialni reseni vypoctu tabulky sin/cos s urcitou presnosti (a
interpolovani "mezihodnot") nebo presne reseni prez rozvoj Taylorovy
rady. Prvnim zpusobem se da vicemene pokryt 99% vsech nutnych vypoctu
gon. funkci v demo produkcich. Inverznim vyhledavanim v tabulce (plus
interpolace) se da spocitat i inverzni funkce. Ne nepodstatna je ovsem
vec prakticke realizace. Zkuste si predstavit, ze napriklad pocitate
funkci kombinaci nekolika harmonickych prubehu (casto se timto zpusobem
generuji textury). A tak musite jen v jedne funkci vyvolavat svuj
vypocet funkce radove v desitkach volani. Snad tim usetrite nejakou
drahocenou sekundu, ale ztratite tim hodiny sveho casu implementovanim
neceho, co uz tady bylo udelano davno a je (napriklad) implementovano
prave v onech knihovnach, ktere se volaji pri vyvolani vyjimky.
Osobne radeji travim cas delanim neceho noveho (at uz z meho
subjektivniho pocitu, nebo podle objektivnich meritek) nez
implementovanim postupu, ktere jsou stare jako pocitace samy a
neprinasejici nic pozitivniho a konstruktivniho.