Il existe plusieurs offres de fournisseurs de GPU, telles que CodeXL d’AMD ou le débogueur nSight / Linux GFX de NVIDIA, qui permettent de passer à travers les shaders mais qui sont liées au matériel du fournisseur respectif.
Permettez-moi de noter que, bien qu’ils soient disponibles sous Linux, j’ai toujours eu très peu de succès à les utiliser là-bas. Je ne peux pas commenter la situation sous Windows.
L’option que j’ai récemment utilisée est de modulariser mon code de shader via #includes
et de limiter le code inclus à un sous-ensemble commun de GLSL et C ++ & glm .
Lorsque je rencontre un problème, j'essaie de le reproduire sur un autre périphérique pour voir si le problème est identique, ce qui laisse supposer une erreur de logique (au lieu d'un problème de pilote / comportement non défini). Il existe également un risque de transmission de données erronées au GPU (par exemple, par des tampons mal liés, etc.) que j’élimine généralement en déboguant la sortie comme dans cifz answer ou en inspectant les données via apitrace .
Lorsqu'il s'agit d'une erreur de logique, j'essaie de reconstruire la situation à partir du GPU sur la CPU en appelant le code inclus sur la CPU avec les mêmes données. Ensuite, je peux le parcourir sur le processeur.
En vous appuyant sur la modularité du code, vous pouvez également essayer d'écrire unittest pour lui et comparer les résultats entre une exécution GPU et une exécution CPU. Cependant, vous devez savoir qu'il existe des cas où C ++ pourrait se comporter différemment du GLSL, vous donnant ainsi de faux positifs lors de ces comparaisons.
Enfin, lorsque vous ne pouvez pas reproduire le problème sur un autre périphérique, vous ne pouvez que commencer à comprendre d'où vient la différence. Unittests peut vous aider à préciser où cela se produit mais à la fin, vous aurez probablement besoin d'écrire des informations de débogage supplémentaires à partir du shader, comme dans cifz answer .
Et pour vous donner un aperçu, voici un organigramme de mon processus de débogage:
Pour terminer, voici une liste des avantages et inconvénients aléatoires:
pro
- passer en revue avec le débogueur habituel
- diagnostics supplémentaires (souvent meilleurs) du compilateur
con