Je ne sais pas si c'est le bon forum mais c'est surement mieux que dans certains autres je pense.
Voila mon problème est le suivant. J'ai un shader GLSL extrêmement gourmand (en gros un screen-sized quad pour faire du calcul de raytracing).
Bref, tellement gourmand que la fonction display() (je suis en jogl) n'as pas le temps de se terminer dans un temps impartis et donc j'obtiens un ecran noire suivi d'un warning de mon driver (nvidia dans mon cas) me disant qu'il a dut arrêter le process suite a une erreur...
Je me suis donc renseigné et il existe apparement un watchdog (logiciel ou hardware aucune idée) ou je ne sais quoi qui vérifie que la fonction display ou le shader (je sais pas) ne puissent pas etre executé plus de X millisecondes afin d'éviter un eventuel plantage...
Cf : forum de gpgpu ou j'ai put lireJ'ai évidement contourner le problème en divisant mon screen-sized quad en plusieurs petit carré, j'appele display autant de fois qu'il y'a de petit carré sans vider le framebuffer (mes resultat etant la) et j'obtient le même résultat qu'avant, mais sans plantage MAIS avec bcp plus de lenteur. (Solution du "multi passe" en qlq sortes).The driver has a watchdog timer that is used to avoid deadlock kinds of scenarios. Unfortunately, this useful feature has the side effect that shaders can only take up to a certain amount of time to execute a single pass before the timer assumes they're misbehaving.
Connaitriez vous un moyen d'eviter cette espèce de timer qui m'interdit d'exécuter ma boucle display() (meme si ca mets 2 minutes) sans devoir faire la magouille décrite ci dessus ?
Partager