Решил установить в одну систему и драйвер NVIDIA, и драйвер ATi. Причин две: в openSUSE не знаю когда именно, но разрешили проблему с дублирующимся /usr/lib64/libGL.so.1. Теперь он всегда принадлежит Mesa, а для проприетарных OpenGL есть каталог /usr/X11R6/. А значит, все три OpenGL установлены в одной системе и не конфликтуют. Также проприетарные драйверы создают правило blacklist nouveau и blacklist radeon, что также мне нужно.
Неужели теперь не важно, какая видеокарта в моём компьютере - система сама подставит нужный OpenGL? Установил. Чтобы не возникло конфликтов, удалил пакет nvidia-computeG02, который содержал /usr/lib64/libOpenCL.so.1, который дублировался бы с RPM драйвера ATi. И конфликтов не возникло:
# lspci -v
01:05.0 VGA compatible controller: ATI Technologies Inc Radeon HD 3200 Graphics (prog-if 00 [VGA controller])
Subsystem: ASRock Incorporation Device 9610
Flags: bus master, fast devsel, latency 0, IRQ 18
Memory at ce000000 (32-bit, prefetchable) [size=32M]
I/O ports at c000 [size=256]
Memory at f9ff0000 (32-bit, non-prefetchable) [size=64K]
Memory at f9e00000 (32-bit, non-prefetchable) [size=1M]
Capabilities: [50] Power Management version 3
Capabilities: [a0] MSI: Enable- Count=1/1 Maskable- 64bit+
Kernel driver in use: fglrx_pci
02:00.0 VGA compatible controller: nVidia Corporation G92 [GeForce 9800 GT] (rev a2) (prog-if 00 [VGA controller])
Subsystem: ASUSTeK Computer Inc. Device 8314
Flags: bus master, fast devsel, latency 0, IRQ 18
Memory at fd000000 (32-bit, non-prefetchable) [size=16M]
Memory at d0000000 (64-bit, prefetchable) [size=256M]
Memory at fa000000 (64-bit, non-prefetchable) [size=32M]
I/O ports at d800 [size=128]
[virtual] Expansion ROM at feae0000 [disabled] [size=128K]
Capabilities: [60] Power Management version 3
Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [78] Express Endpoint, MSI 00
Capabilities: [100] Virtual Channel
Capabilities: [128] Power Budgeting <?>
Capabilities: [600] Vendor Specific Information: ID=0001 Rev=1 Len=024 <?>
Kernel driver in use: nvidia
Затем я удалил /etc/X11/xorg.conf и решил по-очереди загрузиться с NVIDIA и ATi. ATi загрузился и запустил игру. Чтобы NVIDIA загрузился всё же пришлось создать xorg.conf, но нет OpenGL. Смотрю /usr/X11R6/lib64 - а там OpenGL ATi лежит в подкаталоге fglrx, а OpenGL NVIDIA - прямо в lib64! Символьная ссылка libGL.so.1 ведёт на OpenGL ATi.
Я могу конечно её поменять, и тогда и на NVIDIA будет OpenGL. Вопрос вам: как сделать так, чтобы когда я загружаю систему на компьютере с NVIDIA, он запускался без xorg.conf? Как создать два разных каталога с OpenGL для NVIDIA и ATi? Как Linux понимает, что OpenGL ему надо искать не в /usr/lib64, а в /usr/X11R6/lib64, и как затем это поведение изменить на /usr/X11R6/lib64/fglrx либо /usr/X11R6/lib64/nvidia? И нужно ли аналогично переключать библиотеку GLX?
Меня напрягло следующее. При установке RPM с драйвером ATi была строчка:
Switch to AMD
Какая команда выполнялась? Мне кажется, это и есть то, что указывает Linux'у, где OpenGL. switchlibGL из состава драйвера ATi говорит:
# /usr/lib64/fglrx/switchlibGL --help
Usage: switchlibGL <amd|intel|query>
#
А switchlibglx:
# /usr/lib64/fglrx/switchlibglx --help
Usage: switchlibglx <amd|intel|query>
#