Auteur Sujet: Les bugs OpenGL  (Lu 2474 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne ponce

    • Pouet.net
    • Coup de coeur
    • Voir le profil
    • Games from mars
  • Ancienneté: 2009
  • Groupe: aucun
  • Rôle: code
Les bugs OpenGL
« le: 07 Septembre 2010 à 12:22:28 »
N'HESITEZ PAS A COMPLETER CE THREAD AVEC VOS PROPRES TROUVAILLES


Ce thread est fait pour répertorier ici les bugs que vous rencontrez, qui ne sont pas dus à une mauvaise utilisation d'OpenGL, et pour lesquels vous soupçonnez fortement les drivers.


Ce genre de bugs sont pénibles et très décourageants, il n'y a pas besoin de devoir les découvrir chacun indépendamment.


Je commence, avec le format suivant:

Carte: NVIDIA GeForce 8800 GTS
Driver: R259.09 XP 32-bit
Symptôme: bloqué dans un glGetError après avoir deleté un FBO.
Résolution: désactiver nView
« Modifié: 03 Octobre 2010 à 23:56:47 par ponce »

Hors ligne ponce

    • Pouet.net
    • Coup de coeur
    • Voir le profil
    • Games from mars
  • Ancienneté: 2009
  • Groupe: aucun
  • Rôle: code
Re : Les bugs OpenGL
« Réponse #1 le: 07 Septembre 2010 à 12:25:10 »
Carte: ATI HD 2400
Driver: Catalyst 10.5 ou 10.6 je sais plus
Symptôme: le driver crashe en compilant un shader qui finit par "#endif\0"
Résolution: Dans un shader GLSL toujours terminer une #directive par une fin de ligne, même si c'est la dernière ligne.

Carte: toutes les NVIDIA
Driver: tous
Symptôme: le driver accepte #version XYZ ailleurs qu'en première ligne dans un shader, ce qui n'est pas du GLSL valide (error sur ATI).
Résolution: mettre #version XYZ en première ligne.
« Modifié: 28 Septembre 2010 à 14:12:10 par ponce »

Hors ligne ponce

    • Pouet.net
    • Coup de coeur
    • Voir le profil
    • Games from mars
  • Ancienneté: 2009
  • Groupe: aucun
  • Rôle: code
Re : Les bugs OpenGL
« Réponse #2 le: 07 Septembre 2010 à 12:27:49 »
Carte: ATI HD 2400
Driver: Catalyst 10.6 ou 10.7
Symptôme: lors d'un readback de 1x1 pixel triple-buffered dans une texture, les valeurs retournées sont fausses.
Résolution: faire un readback plus large (ici, 25x25 pixels)
« Modifié: 07 Septembre 2010 à 12:58:28 par ponce »

Hors ligne ponce

    • Pouet.net
    • Coup de coeur
    • Voir le profil
    • Games from mars
  • Ancienneté: 2009
  • Groupe: aucun
  • Rôle: code
Re : Les bugs OpenGL
« Réponse #3 le: 07 Septembre 2010 à 12:32:56 »
Carte: NVIDIA GeForce 7
Driver: ?
Symptôme: on ne peut pas indexer un tableau dans un shader avec autre chose qu'une variable de boucle ou je sais plus quoi
Résolution: faire un switch ou des if.

Hors ligne ponce

    • Pouet.net
    • Coup de coeur
    • Voir le profil
    • Games from mars
  • Ancienneté: 2009
  • Groupe: aucun
  • Rôle: code
Re : Les bugs OpenGL
« Réponse #4 le: 07 Septembre 2010 à 12:34:17 »
Carte: NVIDIA GeForce 7
Driver: ?
Symptôme: gl_FragData[0] n'est pas accepté si on utilise pas de MRT. Ca marche sur ATI par contre.
Résolution: utiliser gl_FragColor à la place.
« Modifié: 07 Septembre 2010 à 12:50:37 par ponce »

Hors ligne ponce

    • Pouet.net
    • Coup de coeur
    • Voir le profil
    • Games from mars
  • Ancienneté: 2009
  • Groupe: aucun
  • Rôle: code
Re : Les bugs OpenGL
« Réponse #5 le: 07 Septembre 2010 à 12:36:20 »
Carte: ATI en dessous des HD, mais pas toutes...
Driver: ?
Symptôme: glGenerateMipmapEXT ne crée PAS les niveaux de mipmaps supérieurs.
Résolution: créer ces niveaux à la main avec glTexImageXD, les remplir avec du garbage, puis appeler glGenerateMipmapEXT.
« Modifié: 07 Septembre 2010 à 12:51:03 par ponce »

Hors ligne ponce

    • Pouet.net
    • Coup de coeur
    • Voir le profil
    • Games from mars
  • Ancienneté: 2009
  • Groupe: aucun
  • Rôle: code
Re : Les bugs OpenGL
« Réponse #6 le: 07 Septembre 2010 à 12:42:30 »
Carte: ATI HD 2400, GeForce 7M
Driver: Catalyst 10.4 (ATI), ? (NVIDIA)
Symptôme: on ne peut pas mettre de sampler dans une struct GLSL. Ca ne marche pas quand on le sample. ca ne compile pas côté NVIDIA.
Résolution: séparer les samplers du reste de la struct.
« Modifié: 28 Septembre 2010 à 14:10:58 par ponce »

Hors ligne ponce

    • Pouet.net
    • Coup de coeur
    • Voir le profil
    • Games from mars
  • Ancienneté: 2009
  • Groupe: aucun
  • Rôle: code
Re : Les bugs OpenGL
« Réponse #7 le: 07 Septembre 2010 à 12:50:14 »
Maintenant des vieilles cartes :)

Carte: ATI Radeon 9800
Driver: ?
Symptôme: ne peut pas rendre dans une texture NPOT, contrairement à ce qui a été annoncé :).
Résolution: utiliser seulement des texture POT...

Carte: ATi x700, ATI Radeon 9800
Driver: ?
Symptôme: pas de textureLod dans le fragment shader
Résolution: utiliser GL_MIN_LOD et GL_MAX_LOD, ou le LOD bias.

Carte: ATi x700, ATI Radeon 9800
Driver: ?
Symptôme: on ne peut pas indexer un tableau dynamiquement, ni définir des tableaux statiques de matrices
Résolution: utiliser des if

Carte: ATi x700
Driver: ?
Symptôme: pas d'instruction switch en GLSL
Résolution: utiliser des if

Carte: ATi x700
Driver: ?
Symptôme: les sampler renvoient du noir
Résolution: il faut utiliser glEnable(GL_TEXTURE_XD) et glDisable(GL_TEXTURE_xD), contrairement à ce qu' OpenGL indique. Pas indispensable sur ATI HD par contre.
« Modifié: 07 Septembre 2010 à 13:01:01 par ponce »

Hors ligne ponce

    • Pouet.net
    • Coup de coeur
    • Voir le profil
    • Games from mars
  • Ancienneté: 2009
  • Groupe: aucun
  • Rôle: code
Re : Re : Les bugs OpenGL
« Réponse #8 le: 07 Septembre 2010 à 12:54:13 »
Carte: ATI HD 2400
Driver: ?
Symptôme: le driver plante lors d'un appel a glDrawArrays avec 0 éléments
Résolution: ne pas appeler glDrawArrays dans ce cas

« Modifié: 28 Septembre 2010 à 14:10:16 par ponce »

Hors ligne ponce

    • Pouet.net
    • Coup de coeur
    • Voir le profil
    • Games from mars
  • Ancienneté: 2009
  • Groupe: aucun
  • Rôle: code
Re : Les bugs OpenGL
« Réponse #9 le: 16 Septembre 2010 à 18:18:36 »
Carte: ATI HD 3xxx Mobility
Driver: ?
Symptôme: le driver prend un switch pour une déclaration. "switch is a reserved word" dit-il. Oui, je sais, et alors ?
Résolution: faire une suite de if. Mmmm...
« Modifié: 28 Septembre 2010 à 14:09:57 par ponce »

Hors ligne ponce

    • Pouet.net
    • Coup de coeur
    • Voir le profil
    • Games from mars
  • Ancienneté: 2009
  • Groupe: aucun
  • Rôle: code
Re : Les bugs OpenGL
« Réponse #10 le: 27 Septembre 2010 à 13:08:41 »
Quelques bugs de portabilité GLSL, qui peuvent être évités par un test sur ATI ou AMD ShaderAnalyst.

Carte: toutes les NVIDIA
Driver: probablement tous
Symptôme: le compilateur GLSL accepte des swizzle inconsistants genre v.xyza
Résolution: ne pas utiliser de swizzle inconsistants, comme le dit la spec GLSL.


Carte: toutes les NVIDIA
Driver: probablement tous
Symptôme: le compilateur GLSL accepte des déclarations de samplers varying (!)
Résolution: c'est probablement une confusion entre uniform et varying


Carte: toutes les NVIDIA
Driver: probablement tous
Symptôme: le compilateur GLSL convertit implicitement n'importe quel valeur de type vecteur/float en n'importe quel autre vecteur/float.
Résolution: spécifier les types avec un constructeur et le bon nombre d'arguments, comme le dit la spec GLSL.

Genre ce genre de trucs qui ne veulent rien dire mais que NVIDIA est content d'accepter:
gl_FragColor = 1.0;                          // accepté chez NVIDIA, pas chez AMD
float dp = dot(vec3(machin), vec2(truc));    // accepté chez NVIDIA, pas chez AMD
float s = texture2D(mySampler, vec4(chose)); // accepté chez NVIDIA, pas chez AMD

gl_FragColor = vec4(1.0);                      // OK
float dp = dot(vec2(machin), vec2(truc));      // OK
float s = texture2D(mySampler, vec2(chose)).r; // OK
« Modifié: 27 Septembre 2010 à 13:22:32 par ponce »

Hors ligne LLB

    • Pouet.net
    • Coup de coeur
    • Voir le profil
    • site perso
  • Ancienneté: 2000
  • Groupe: Ctrl-Alt-Test
  • Rôle: code
  • Ville: Munich
Re : Les bugs OpenGL
« Réponse #11 le: 01 Octobre 2010 à 18:28:04 »
Sur ma NVidia (bug trouvé par mon minifier !) :
void main()
{
vec3 o=texture2D(e,vec2(0.)),v;
//vec3 o=texture2D(e,vec3(0.).xy),v;
v.r=0.;
v.g=0.;
v.b=0.;
}
Ce code me donne l'erreur : "(7) : error C1031: swizzle mask element not present in operand "b"", alors qu'en utilisant la ligne commentée à la place, ça marche. On dirait qu'il interprète v comme étant de type vec2. :/

Résolution : faire gaffe en regroupant les déclarations de vec. J'imagine que ce problème ne concerne que ceux qui font du 4k.

Hors ligne ponce

    • Pouet.net
    • Coup de coeur
    • Voir le profil
    • Games from mars
  • Ancienneté: 2009
  • Groupe: aucun
  • Rôle: code
Re : Les bugs OpenGL
« Réponse #12 le: 08 Octobre 2010 à 13:47:04 »
Carte: ATI SM 4 et 5
Driver: ?
Symptôme: glGetProgramiv avec l'argument GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH renvoie une erreur.
Résolution: utiliser la divination. Corrigé dans Catalyst 10.9.

« Modifié: 08 Octobre 2010 à 14:46:27 par ponce »

Hors ligne nystep

    • Pouet.net
    • Voir le profil
    • lostgarden
  • Ancienneté: 1995
  • Rôle: code
  • Ville: Jyväskylä
Re : Les bugs OpenGL
« Réponse #13 le: 13 Octobre 2010 à 21:42:39 »
Carte : ATI SM 4 (SM 5?)
Driver : 10.9
Symptôme : Freeze complet du système sous windows 7 quand on utilise de la récursivité dans un shader.
Résolution : Le driver sort une erreur comme quoi la récursivité est non supportée, mais seulement quand la fonction est trivialle et qu'elle s'appele elle même. Dans le cas de fonctions mutuellements récursives, le driver est incapable de détecter et celà peut très bien marcher, un moment, avant de freezer le système. Si l'on réalise deux appels récursifs dans l'une des fonctions mutuellements récursives par contre, la compilation échoue avec une erreur interne du compilateur, ce qui est plus acceptable qu'un freeze complet du système en fait.
(EDIT MODO: pas vraiment un bug OpenGL, la recursivité n'est pas supportée en GLSL)
« Modifié: 14 Octobre 2010 à 14:10:55 par ponce »
"L'être humain met 2 ans a apprendre le langage mais toute une vie pour apprendre à se taire."

Hors ligne nystep

    • Pouet.net
    • Voir le profil
    • lostgarden
  • Ancienneté: 1995
  • Rôle: code
  • Ville: Jyväskylä
Re : Les bugs OpenGL
« Réponse #14 le: 13 Octobre 2010 à 21:53:24 »
Carte : ATI SM 4 (SM 5?)
Driver : 10.8
Symptôme : Textures 3D remplies avec du garbage. (Rendu par tranches d'une texture 3D à partir de shaders en GLSL en utilisant les FBO)
Résolution : Il ne faut utiliser qu'une seule tranche de la texture 3D en sortie. Pourtant, il est tentant de faire le rendu de 8 tranches successives de la texture en une seule passe, mais celà ne marche pas. Je suppose que le même bug est présent pour les Texture Arrays, mais je n'ai pas tenté.

« Modifié: 13 Octobre 2010 à 21:55:20 par ponce »
"L'être humain met 2 ans a apprendre le langage mais toute une vie pour apprendre à se taire."

 

Dans la Réponse Rapide, vous pouvez utiliser du BBCode et des smileys comme sur un message normal, mais à partir d'une interface plus rapide d'accès.

Attention, il n'y a pas eu de réponse à ce sujet depuis au moins 30 jours.
À moins que vous ne soyez sûr de vouloir répondre, pensez éventuellement à créer un nouveau sujet.

Nom: E-mail:
Vérification:
Quel est la couleur du cheval rouge d'Henri IV ?: