Shaders simple et chute de perfs
Bonjour,
Je fais un petit programme 3D qui utilise OpenGL, Je me suis dit pourquoi ne pas utiliser le pipeline programmable, et donc un pixel et un fragment shader. Je précise que je suis débutant en openGL que le programme en ce moment n’affiche que 1 carré coloré que je n’y ai pas encore intégré les VBO, et que je suis en fenêtré 512x512 (histoire de pouvoir voir ma console, comme vous l’imaginez il est loin d’être fini). Ma carte n’est pas des plus récente c’est une FX5700LE.
Résulat
Sans shaders je suis à + ou - 3750fps
Avec shader, je suis à + ou - 1900fps
Mon super vertex shader (qui ne fait rien en faite)
Code:
1 2 3 4 5
|
void main(void)
{
gl_Position = gl_Vertex;
} |
Mon super fragment shader (qui ne fait que changer la couleur)
Code:
1 2 3 4 5
|
void main(void)
{
gl_FragColor = vec4(0.1, 0.8, 0.1,1.0);
} |
Quel que soit la résolution mes perfs diminuent toujours d’a peu près 50%. Par contre si je change la taille de mon carrée les performances change rapidement. J’en conclu que c’est le nombre de pixel écrit qui me bloque et pas le calcule de vertex. Car le pipeline calcule toujours 4 vertex. Je peu rajouter du code dans le VS ça ne change rien au fps. Par contre si je modifie le FS, les perf varient fortement. J’en conclu donc que la chute de perf vient du FS.
J’ai lu qu’en utilisant des autres type genre "half" ça pouvais booster les performances jusque 3 fois (source NVidia GPU guide). Mais dans tout les cas, je ne vois pas comment utiliser ça en GLSL (NVidia donne des infos que pour CG).
Est-ce que pour vous cette chute de performance est normale ?
Et si non , ce que j’espère, comment pourrais je optimiser mon fragment shader ?
Me conseillez vous CG avec un type half pour ce genre de chose ?
Il y a t'il des chose essentiel a faire avant de passer a un pipeline programmable ?