web-dev-qa-db-fra.com

Ubuntu 12.10 OpenCL OpenGL Interop avec les graphiques ATI

J'ai correctement installé les pilotes ATI Catalyst sur un système graphique hybride ATI fonctionnant sous Ubuntu 12.10. J'ai vérifié qu'OpenCL et OpenGL fonctionnent de manière indépendante; toutefois, l'interopérabilité OpenCL-OpenGL ne fonctionne pas correctement. J'ai fait du débogage, mais je ne sais pas par où aller à partir de maintenant. Quelqu'un peut-il aider?

Détails:

Mon système est un HP Envy 6 exécutant Ubuntu 12.10 (toutes les mises à jour appliquées) avec un système graphique hybride ATI composé d’une Radeon 7600m et d’un Intel HD3000. J'ai installé les derniers pilotes ATI Beta (version 12.11) en suivant ces instructions:

Comment faire fonctionner les pilotes AMD/Intel Hybrid Graphics?

Ce faisant, j'ai pu obtenir OpenGL et OpenCL opérationnels. glxgears s'exécute à environ 1 200 images par seconde et tous les échantillons OpenCL du programme AMD APP SDK fonctionnent comme prévu. Cependant, les applications d'interopérabilité OpenCL-OpenGL ne parviennent pas à se lancer avec une erreur X Error of failed request: BadMatch (invalid parameter attributes). Tous les exemples de code travaillaient précédemment sous Ubuntu 12.04 avec les pilotes ATI du gestionnaire de paquets.

Pour obtenir un peu plus d'informations de débogage, j'ai exécuté LIBGL_DEBUG=verbose /opt/AMDAPP/samples/opencl/bin/x86_64/SimpleGL. Cela détecte mon GPU discret, semble sélectionner les bons pilotes et détecte que l'interop OpenCL-OpenGL est activé:

$ LIBGL_DEBUG=verbose ./SimpleGL
ukiDynamicMajor: found major device number 250
ukiDynamicMajor: found major device number 250
ukiDynamicMajor: found major device number 250
ukiOpenDevice: node name is /dev/ATI/card0
ukiOpenDevice: open result is 7, (OK)
ukiGetBusid returned 'PCI:1:0:0'
ukiOpenDevice: node name is /dev/ATI/card1
ukiOpenDevice: UKI_ERR_NOT_ROOT
...
ukiOpenDevice: node name is /dev/ATI/card15
ukiOpenDevice: UKI_ERR_NOT_ROOT
ukiDynamicMajor: found major device number 250
ukiOpenByBusid: Searching for BusID PCI:1:0:0
ukiOpenDevice: node name is /dev/ATI/card0
ukiOpenDevice: open result is 7, (OK)
ukiOpenByBusid: ukiOpenMinor returns 7
ukiOpenByBusid: ukiGetBusid reports PCI:1:0:0
ukiDynamicMajor: found major device number 250
ukiDynamicMajor: found major device number 250
ukiOpenByBusid: Searching for BusID PCI:1:0:0
ukiOpenDevice: node name is /dev/ATI/card0
ukiOpenDevice: open result is 7, (OK)
ukiOpenByBusid: ukiOpenMinor returns 7
ukiOpenByBusid: ukiGetBusid reports PCI:1:0:0
Platform 0 : Advanced Micro Devices, Inc.
Platform found : Advanced Micro Devices, Inc.

Selected Platform Vendor : Advanced Micro Devices, Inc.
Device 0 : Turks Device ID is 0x1a16b40
Number of displays 1
libGL: AtiGetClientDriverName: 9.1.11 fglrx (screen 0)
libGL: OpenDriver: trying /usr/lib/fglrx/dri/fglrx_dri.so
ukiDynamicMajor: found major device number 250
ukiDynamicMajor: found major device number 250
ukiOpenByBusid: Searching for BusID PCI:1:0:0
ukiOpenDevice: node name is /dev/ATI/card0
ukiOpenDevice: open result is 10, (OK)
ukiOpenByBusid: ukiOpenMinor returns 10
ukiOpenByBusid: ukiGetBusid reports PCI:1:0:0
glXCreateContextAttribsARB 0x7f4e05938280
Number of interoperable devices 1
Interop Device ID is 0x1a16b40
libGL: OpenDriver: trying /usr/lib/fglrx/dri/tls/i965_dri.so
libGL: OpenDriver: trying /usr/lib/fglrx/dri/i965_dri.so
libGL error: dlopen /usr/lib/fglrx/dri/i965_dri.so failed     (/usr/lib/fglrx/dri/i965_dri.so: cannot open shared object file: No such file or     directory)
libGL: OpenDriver: trying /usr/lib32/fglrx/dri/tls/i965_dri.so
libGL: OpenDriver: trying /usr/lib32/fglrx/dri/i965_dri.so
libGL error: dlopen /usr/lib32/fglrx/dri/i965_dri.so failed     (/usr/lib32/fglrx/dri/i965_dri.so: cannot open shared object file: No such file or directory)
libGL error: unable to load driver: i965_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: i965
libGL: OpenDriver: trying /usr/lib/fglrx/dri/tls/swrast_dri.so
libGL: OpenDriver: trying /usr/lib/fglrx/dri/swrast_dri.so
libGL error: dlopen /usr/lib/fglrx/dri/swrast_dri.so failed (/usr/lib/fglrx/dri/swrast_dri.so: cannot open shared object file: No such file or directory)
libGL: OpenDriver: trying /usr/lib32/fglrx/dri/tls/swrast_dri.so
libGL: OpenDriver: trying /usr/lib32/fglrx/dri/swrast_dri.so
libGL error: dlopen /usr/lib32/fglrx/dri/swrast_dri.so failed (/usr/lib32/fglrx/dri/swrast_dri.so: cannot open shared object file: No such file or directory)
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  155 (GLX)
  Minor opcode of failed request:  5 (X_GLXMakeCurrent)
  Serial number of failed request:  28
  Current serial number in output stream:  28

Je ne suis pas sûr où aller d'ici. Cela pourrait être un problème persistant lié aux problèmes connus d'ATI Ubuntu 12.10 ou quelque chose de nouveau. Quelqu'un a des suggestions?

6
bkloppenborg

D'accord. Je l'ai compris (du moins dans mon cas). Le fichier libGL.so dans /usr/lib/fglrx n'est pas trouvé par l'éditeur de liens. Ajouter

LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/fglrx

à mon ~/.bashrc (ou ~/.profile) l'a fait fonctionner. Cela ne devrait cependant pas être nécessaire car le programme d'installation du pilote ajoute /usr/lib/fglrx au fichier /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf.

EDIT Note: Mon post précédent a imputé ce bogue à Cinnamon ( bug 148 ); Cependant, c'était incorrect. La solution documentée est correcte.

5
bkloppenborg