Les shaders sont donc des programmes exécutés par le GPUA.2. Ils sont caractérisés par :
- leur taille, exprimée en nombre d'accès aux textures et en nombre
d'opérations arithmétiques
- la précision interne des calculs. Différents formats de données coexistent
: entier sur 16 ou 32 bits, flottant sur 16, 24, 32 ou 64 bits.
- la prise en compte des branchement conditionnels (sauts, boucles)
: seules les toutes dernières cartes graphiques permettent un tel
contrôle de flux dynamique.
Le tableau
A.1 page
présente les caractéristiques des différentes versions des
shaders
depuis leur apparition, de la version 1 à 3.
Comme on peut le voir, les limitations sont drastiques. Bien que les
opérations arithmétiques soient spécialement dédiées au calcul d'éclairement
(par exemple les produits vectoriels et scalaires sont ''cablés''),
un shader est un programme très court.
Tableau A.1:
Caractéristiques des
différentes versions des Shaders. ps = pixel shader, vs = vertex
shader, f = flottant, b = booléen, e = entier.
|
vs1 |
ps1 |
vs2 |
ps2 |
vs3 |
ps3 |
nb. op. arithmétiques |
128 |
8 |
256 |
64 |
512 |
512 |
nb. accès textures |
- |
4 |
- |
32 |
512 |
512 |
paramètres en entrée |
16 |
8f+2e |
16 |
8f+2e |
16 |
10f |
paramètres constants |
96 |
8 |
256f +16b +16e |
32f +16b +16e |
256f +16b +16e |
224f +16b +16e |
registres temporaires |
12 |
2 |
12 |
12 |
32 |
32 |
contrôle de flux |
- |
- |
stat. |
- |
dyn. |
dyn. |
|
Porquet Damien
2005-03-02