web-dev-qa-db-fra.com

Comment faire fonctionner Unity 3D avec Bumblebee à l'aide du chipset Intel

J'ai un ordinateur portable Sony VAIO S avec le redouté Optimus et j'ai finalement réussi à faire en sorte que Bumblebee fonctionne pleinement sur Ubuntu 12.04 afin de pouvoir utiliser à la fois l'accélération matérielle du chipset Intel et celle de Nvidia via optirun et/ou bumble-app -paramètres.

Cependant, les effets de bureau ne fonctionnent pas. Mais ils devraient, je me souviens vaguement qu'ils ont travaillé pendant un certain temps avant que Bumblebee ne soit installé.

Voici ce que je reçois avec le test de support:

:~$ /usr/lib/nux/unity_support_test -p
Xlib:  extension "NV-GLX" missing on display ":0".
OpenGL vendor string:   Tungsten Graphics, Inc
OpenGL renderer string: Mesa DRI Intel(R) Ivybridge Mobile 
OpenGL version string:  1.4 (2.1 Mesa 8.0.2)

Not software rendered:    yes
Not blacklisted:          yes
GLX fbconfig:             yes
GLX texture from pixmap:  yes
GL npot or rect textures: yes
GL vertex program:        yes
GL fragment program:      yes
GL vertex buffer object:  no
GL framebuffer object:    yes
GL version is 1.4+:       yes

Unity 3D supported:       no

Tout d'abord, je doute que le chipset ne prenne pas en charge les VBO (essentiellement une fonctionnalité standard de GL).

Ni Xorg.0.log ni Xorg.8.log ne signalent d’erreurs particulières.

En ce qui concerne les pilotes Nvidia: Pour les faire fonctionner, je devais installer les pilotes 304.22 (les anciens ne fonctionneraient pas). Ils ont détruit libglx.so. J'ai donc rétabli le fichier libglx.so de xserver-xorg-core à son emplacement d'origine, déplacé le fichier libglx.so de Nvidia dans un dossier spécifique à nvidia et spécifié ce dossier dans le fichier bumblebee.config. Cela semble fonctionner et ne devrait pas causer le problème que je vois ici.

Pour le plaisir, j'ai essayé d'utiliser le chipset Nvidia pour Unity, mais cela n'a pas volé non plus:

~$ optirun /usr/lib/nux/unity_support_test -p
OpenGL vendor string:   NVIDIA Corporation
OpenGL renderer string: GeForce GT 640M LE/PCIe/SSE2
OpenGL version string:  4.2.0 NVIDIA 304.22

Not software rendered:    yes
Not blacklisted:          yes
GLX fbconfig:             yes
GLX texture from pixmap:  no
GL npot or rect textures: yes
GL vertex program:        yes
GL fragment program:      yes
GL vertex buffer object:  yes
GL framebuffer object:    yes
GL version is 1.4+:       yes

Unity 3D supported:       no
3
EboMike

Le problème était avec libGL.so.1 - apparemment, le programme d’installation de Nvidia également supprimé celui d’Intel et l’a remplacé par le sien.

Donc, je l'ai récupéré de libgl1-mesa-glx et j'ai changé le lien symbolique dans/usr/lib pour qu'il pointe vers lui.

Je ne vais pas entrer dans les détails de la configuration de Bumblebee, mais il manque des éléments clés qui ne sont pas vraiment documentés:

  1. Le programme d'installation du pilote Nvidia est susceptible de détruire votre libglx.so existant (dans/usr/lib/xorg/modules/extensions) et votre libGL.so (dans/usr/lib). Sauvegardez-les avant d'installer le pilote. Si vous les avez déjà perdues, vous pouvez les récupérer en réinsérant xserver-xorg-core et libgl1-mesa-glx, mais lorsque j'ai essayé la première fois, mon ordinateur portable était en mauvais état (écran noir après la connexion, récupération), je vous recommande donc de les récupérer manuellement via dpkg-deb.

  2. Après avoir installé le pilote Nvidia, vous remarquerez que Nvidia a remplacé les deux fichiers énumérés ci-dessus par des liens symboliques vers les bibliothèques Nvidia. Dans mon cas, par exemple, libglx.so est un lien symbolique vers libglx.so.304.22.

  3. Bumblebee ayant besoin des deux pilotes et ne pouvant se différencier que par répertoire, laissez les pilotes de chaque carte graphique se déplacer dans un répertoire distinct. Le programme d’installation de Nvidia que j’ai utilisé a installé des pilotes dans/usr/lib/nvidia-current, utilisons cela. N'oubliez pas que nous devons séparer les bibliothèques et les modules Xorg. Voici où je mets les fichiers pertinents:

Dans/usr/lib:

libGL.so.304.22   -- Nvidia's driver (unchanged where the installer put it)
libGL.so          -- symlink to libGL.so.1
libGL.so.1        -- symlink to /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1,
                     i.e. the libgl1-mesa-glx driver

Dans/usr/lib/x86_64-linux-gnu/mesa:

libGL.so.1   -- symlink to libGL.so.1.2
libGL.so.1.2 -- The normal driver from libgl1-mesa-glx 

Dans/usr/lib/nvidia-current:

libGL.so   -- symlink to libGL.so.1
libGL.so.1 -- symlink to /usr/lib/libGL.so.304.22 (i.e. Nvidia's driver)

Dans/usr/lib/nvidia-current/xorg:

libglx.so -- symlink to /usr/lib/xorg/modules/extensions/libglx.so.304.22

Dans/usr/lib/xorg/modules/extensions:

libglx.so.1       -- symlink to libglx.so.xserver
libglx.so.304.22  -- Nvidia's driver (unchanged from where the installer put it)
libglx.so.xserver -- I renamed the original libglx.so to that and put it here

Enfin, nous devons modifier /etc/bumblebee/bumbleeeee.conf pour indiquer au système où trouver les pilotes Nvidia. J'utilise le pilote nvidia (par opposition à nouveau), donc dans la section nvidia, j'utilise ceci:

KernelDriver=nvidia
Module=nvidia
PMMethod=auto
# colon-separated path to the nvidia libraries
LibraryPath=/usr/lib/nvidia-current:/usr/lib32/nvidia-current
# comma-separated path of the directory containing nvidia_drv.so and the
# default Xorg modules path
XorgModulePath=/usr/lib/nvidia-current/xorg,/usr/lib/xorg/modules

Notez que LibraryPath et XorgModulePath désignent les pilotes Nvidia. Par conséquent, si Bumblebee les recherche, il les trouvera. Si Unity les recherche, il cherchera dans/usr/lib et et/usr/lib/xorg/modules/extensions, et nous nous sommes assurés que ceux-ci étaient des liens symboliques vers ceux qui ne sont pas de Nvidia.

C'est peut-être un peu maladroit par endroits, mais que puis-je dire? Cela fonctionne parfaitement:

Unity 3D fonctionne à plein effets de bureau, et ils sont rapides comme l'éclair, mais utilisent toujours le chipset Intel lent à économie d'énergie. L'accélération 3D normale est disponible pour des applications comme VirtualBox. optirun fonctionne et j'ai le choix de lancer "glxspheres" (à ~ 60 ips) ou "optirun glxspheres" (à ~ 120 fps).

2
EboMike