Pixel Hacking avec glslDevil

glslDevil  - OpenGL GLSL Debugger

glslDevil  - GeeXLab debug



La nouvelle version de glslDevil vient de sortir. glslDevil est un debugger de shaders GLSL (le langage de shading d’OpenGL) developpé à l’université de Stuttgart en Allemagne. glslDevil supporte les 3 types de shaders actuellement disponibles en OpenGL à savoir le vertex shader, le fragment shader et le geometry shader. La chose intéressante et pratique avec ce debugger est qu’il ne nécessite pas d’avoir les codes sources de l’application à debugger, l’exécutable suffit. glslDevil intercepte les fonctions OpenGL et permet donc de faire du pas à pas dans le flot de commandes OpenGL. Et bien sur, dès que l’on tombe sur un shader GLSL, on peut faire du pas à pas dans le code du shader et anaylser la valeur de chacune des variables.

Pour debugger les shaders, glslDevil repose sur l’extension GL_NV_transform_feedback qui permet de récupérer les attributs des vertices (position, normale, coordonnées de texture) après le vertex shader ou geometry shader (ci ce dernier est utilisé). GL_NV_transform_feedback n’est supportée que par les GeForce 8 et supérieures. Donc pas de debug de shader possible avec une carte à base de Radeon. GL_NV_transform_feedback propose la même fonctionnalité que le stream output de Direct3D 10 (voir plus en détail dans le milieu de cette page). Cela signifie que cette limitation n’est qu’un problème logiciel…

glslDevil peut aussi être utilisé pour profiler le code OpenGL (cette fonctionnalité est diponible sur NVIDIA er ATI) grâce aux stats des fonctions OpenGL:

glslDevil  - OpenCL calls statistics

J’ai testé en vitesse avec une toute petite scene GeeXLab: un mesh plan et un shader tout simple qui colorie le mesh en rouge. La scene est téléchargeable ICI.

glslDevil fonctionne globalement bien (ma carte graphique est une GeForce GTS 250), j’ai pu faire du pas à pas dans le vertex shader et connaitre la valeur du vecteur pos:

void main(void)
{
  vec4 pos = gl_Vertex;
  gl_Position = ftransform();
}

Je n’ai pas trouvé la possibilité de placer des break points dans le code du shader mais je crois avoir lu que cette feature sera pour une versuin ultérieure.

GeeXLab dispose d’un paramètre en ligne de commande qui permet de charger directement une scène:

GeeXLab.exe /file="simple_glsl_shader.xml"

Cette fonctionnalité est utile pour lancer GeeXLab avec glslDevil:

glslDevil  - Open program

3 Comments

  • Matumbo
    November 23, 2009 - 1:52 pm | Permalink

    J’ai utilisé ce logiciel il y a 1-2 ans, et j’ai souvenir d’avoir placé des breakpoints dans un pixel shader.
    J’ai bcp aimé glslDevil, il m’a bien aidé à debugguer et trouver des erreurs dues à la précision des floats.
    Je me souviens qu’on pouvait visualiser tous les “varying”, pour voir comment ils avaient été interpolés entre le vertex et pixel shader (à cette époque reculée, point de geometry shaders supportés par le logiciel, à mon grand regret).
    Une belle bête, et gratuit en plus.

  • November 24, 2009 - 2:37 pm | Permalink

    Merci de ton feedback sur ce soft Matumbo.
    Je vais essayer de suivre son actualité en espérant que la prochaine version ne sorte pas dans 1 année ;)

  • Pingback: Debug Your GLSL Shaders With glslDevil | The Geeks Of 3D - 3D Tech News

  • Comments are closed.