J'explore des algorithmes d'isosurface sur GPU pour un projet de baccalauréat (en me concentrant spécifiquement sur les données voxels d'entrée / sortie binaires plutôt que sur les champs à valeur réelle). J'ai donc une implémentation CPU de bons vieux cubes de marche en place dans OpenFrameworks, et maintenant au stade d'essayer de le porter sur les shaders de calcul GLSL, et de considérer les pièges avant de plonger. Je n'ai écrit que des shaders vert et frag avant donc c'est tout nouveau pour moi.
Mon premier problème est de savoir comment utiliser efficacement une table de recherche sur des dizaines ou des centaines de threads dans un groupe de travail? Je comprends qu'un GPU possède différents types de mémoire pour différentes tâches, mais je ne sais pas exactement comment chacun fonctionne ou quel type utiliser.
La table copypasta classique de Paul Bourke est un tableau 256 * 16, donc si vous utilisez un type d'octet scalaire, cela peut probablement être compressé dans une texture de 4 Ko ou SSBO.
La question est, comment empêcher les différents fils de se déclencher? De nombreux cubes dans chaque groupe de travail peuvent potentiellement avoir la même configuration, essayant donc d'accéder au même emplacement dans le tampon en même temps. Existe-t-il une solution de contournement ou une optimisation pour résoudre ce problème?