.[ ČeskéHry.cz ].
hlubiny HLSL

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Khaj



Založen: 16. 01. 2008
Příspěvky: 49

PříspěvekZaslal: 20. únor 2008, 19:37:25    Předmět: hlubiny HLSL Odpovědět s citátem

Zdravim, potreboval bych vedet jestli lze nejak v HLSL pristupovat primo k registrum, rekneme jako k poli - nemyslim napsat pri deklaraci ":register(c0)" ale napsat c[0] nebo ekvivalenty (v,s,o) samozrejme se zachovanim pravidel (write only o[] atd...)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 20. únor 2008, 21:58:22    Předmět: Odpovědět s citátem

Na přepisovatelných registrech (lokální proměnné, parametry funkcí) to jde až od SM4.0 a bohužel to znemožní některé optimalizace v compileru. Konstatní registry se dají bez problému indexovat od SM2.0. Tohle se týká jenom těch konstrukcí, kde se nedá výraz array[index] převést na konkrétní registr už v době překladu.

Většinou to ale jde a pokud to nejde, je možné z parametru v shaderu udělat literal, což znamená, že pro každou použitou hodnotu proměnné se shader zkompiluje znovu tak, že se každý výskyt proměnné nahradí tou hodnotou. Jelikož možných hodnot je příliš mnoho a kompilace všech možností by trvala neúnosně dlouho, shader se pro konkrétní hodnotu proměnné zkompiluje jen tehdy, když se ta hodnota použije a pokud už jednou použita byla, použije se již dříve zkompilovaná verze. Aby ti to za běhu moc neškubalo, když se ti budou shadery překompilovávat, je lepší je na konci loadingu použít s konkrétníma hodnotama, tzn. něco vyrenderovat do off-screen bufferu, třeba trojúhelník. Tím vynutíš kompilaci pro tvoje hodnoty hned. Je možné, že některé knihovny to řeší pohodlněji. Mimochodem některé verze nVidia driveru na to jdou dost agresivně a dělají z parametrů v shaderu literal parametry automaticky, typicky jen pro hodnoty 0 a 1 (jelikož to jsou neutrální prvky pro operace + a *, je možno snížit počet instrukcí tím, že se daná operace nebude provádět vůbec, aniž by se změnil výsledek) a pro jiné hodnoty se použije původní - kompletní verze shaderu.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna