Citat:
eva 01: Jos se nisam bacio na programiranje shader-a, ali ipak da te pitam: da li ću ovako imati veliko usporenje jer ću morati da čitam rezultat iz teksture ? Kada se priča o optimizaciji često se govori da ne treba menjati/čitati podatke iz memorije kartice jer ovo opterećuje komunikaciju gpu-cpu.
Zavisi od hw-a i od API-a. Konkretno, na NV karticama i OpenGL-om mozes koristiti pixel buffer objects i asinhroni readback. Ovo ti omogucava da zapocens readback i zatim nastavis da radis nesto drugo pa da se posle vratis da proveris rezultat. Na ovaj nacin i CPU i GPU su maximalno zaposleni. Na zalost, ovo je NV-only resenje.
Neka me Relja ispravi ako gresim, mislim da D3D API ne podrzava asinhrone operacije.
Generalno, sadasnja generacija hw-a (ukljucujuci i NV40) ne podrzava procesiranje vertexa (koriscenjem shadera) za korisnika, vec iskljucivo za (rasterizer). Bilo bi divno da ProcessVertices radi u hw-u... Workaround je tehnika koju sam ti opisao. Zgodna je ako ti rezultat treba da ostane u GPU memoriji za cloth simulaciju ili character skinning.
Ako ti vec trebaju vertexi za collision detection, razmisi o muti-thread resenju. Jedan thread ima zadatak da puni GPU (ako ovo dovoljno dobro radis saobracaj na AGP/PCIX-u ce biti mali), a drugi thread neka radi fizikalije. Ovo bi posebno doslo do izrazaja na hyper-threading masinama.
yooyo