web-dev-qa-db-fra.com

Donner un sens aux versions glxinfo OpenGL

Quelle est la différence entre les différentes chaînes de version dans la sortie de la commande glxinfo?

J'ai déjà demandé ceci ici , mais je n'ai pas eu beaucoup de réponses et, de toute façon, il semble qu'il y ait plus de questions connexes sur AskUbuntu.

La sortie de glxinfo|grep OpenGL suit,

 glxinfo |grep Open
    Vendor: Intel Open Source Technology Center (0x8086)
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 520 (Skylake GT2) 
OpenGL core profile version string: 4.5 (Core Profile) Mesa 13.0.2
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 13.0.2
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 13.0.2
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:
.

Pourquoi le "profil principal" est-il 4.5 alors que la chaîne de version OpenGL est 3.0?

4
Mali Remorker

OpenGL ES est un sous-ensemble de la spécification OpenGL d'origine et est conçu pour les systèmes intégrés tels que les téléphones intelligents. Je ne suis pas sûr à 100% pourquoi les numéros de version ne correspondent pas, mais ils ne le font pas. La dernière version est 4.5 pour OpenGL et 3.2 pour OpenGL ES. Ceci explique la raison de la partie OpenGL ES de votre sortie. Dans votre cas, vous avez un support pour les dernières versions d'OpenGL et d'OpenGL ES.

Vous remarquerez que les entrées OpenGL et OpenGL ES ont une chaîne de version et une chaîne de version de langage d’ombrage. Avant OpenGL 3.3, le numéro de version d'OpenGL et le numéro de version du langage de shading ne correspondaient pas. Je crois que c'est la raison pour laquelle ils ont des entrées séparées dans la sortie (car ils peuvent évidemment être différents pour un matériel plus ancien). Comme vous le voyez dans votre sortie, le numéro de version (4.5) correspond à la version du langage d’ombrage (également 4.5).

La partie la plus difficile (et la partie dont je ne suis pas sûr à 100%) est la "chaîne de version OpenGL".

D'après ce que j'ai vu sur plusieurs machines complètement différentes, cela semble être limité à la version 3.0. La version du langage de shading pour la version 3.0 est 1.3, donc la chaîne de version du langage de shading est logique pour cette version OpenGL. Cependant, pourquoi la version est-elle limitée à la version 3.0? Mes pensées sont les suivantes:

La version 3.0 introduit la désapprobation (voir ce lien ). C’est également de là que proviennent les deux profils distincts, "Core" et "Compatibility". Toute implémentation d'OpenGL doit seulement implémenter la spécification "core" pour être valide.

Si vous lisez les notes de publication de Mesa pour une version particulière, vous verrez une déclaration relative à ce problème de profil principal/de compatibilité. Ce qui suit est tiré des notes de publication de la dernière version 17.0.0 ici :

Mesa 17.0.0 implements the OpenGL 4.5 API, but the version reported by glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) / glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used. Some drivers don't support all the features required in OpenGL 4.5. OpenGL 4.5 is only available if requested at context creation because compatibility contexts are not supported.

Notez la dernière partie "OpenGL 4.5 n'est disponible que si demandé lors de la création du contexte car les contextes de compatibilité ne sont pas pris en charge" . Par conséquent, je pense que la "chaîne de version OpenGL" est la version prise en charge pour un contexte de profil "compatibilité" (ou, en d'autres termes, pour la prise en charge de toute fonctionnalité obsolète antérieure à la version 3.0).

5
gsxruk