LINUX.ORG.RU

Как установить OpenGL X11 драйвер на Raspberry Pi 1?

 ,


0

1

Raspbian Buster, raspberry pi 1B, подключаюсь через xorgxrdp

Проблема: Используется драйвер llvmpipe, а не VC4 Gallium3D

glxinfo | grep -i opengl
OpenGL vendor string: VMware, Inc.
OpenGL renderer string: llvmpipe (LLVM 6.0, 128 bits)
OpenGL core profile version string: 3.3 (Core Profile) Mesa 19.1.0-devel
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.1 Mesa 19.1.0-devel
OpenGL shading language version string: 1.40
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.0 Mesa 19.1.0-devel
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00
OpenGL ES profile extensions

в glxgears 5 fps

Как пытался решить проблему:

sudo raspi-config
и дальше установить opengl драйвер, full kms

Вот всякие логи, которые советуют в интернете смотреть если есть проблемы

lsmod
Module                  Size  Used by
fuse                   99599  5
ctr                     5171  4
ccm                    11179  6
8021q                  23744  0
garp                    7383  1 8021q
stp                     2297  1 garp
llc                     5642  2 garp,stp
arc4                    2554  2
mt7601u                91872  0
mac80211              685385  1 mt7601u
sha256_generic         10778  0
cfg80211              596560  2 mac80211,mt7601u
rfkill                 22462  3 cfg80211
vc4                   160720  5
drm_kms_helper        172398  2 vc4
drm                   420741  4 vc4,drm_kms_helper
drm_panel_orientation_quirks     1142  1 drm
snd_soc_core          179536  1 vc4
snd_compress           10695  1 snd_soc_core
snd_pcm_dmaengine       5745  1 snd_soc_core
snd_bcm2835            16839  2
raspberrypi_hwmon       2959  0
snd_pcm                92916  4 vc4,snd_pcm_dmaengine,snd_bcm2835,snd_soc_core
hwmon                  11168  1 raspberrypi_hwmon
snd_timer              23433  1 snd_pcm
syscopyarea             3293  1 drm_kms_helper
sysfillrect             3848  1 drm_kms_helper
sysimgblt               2553  1 drm_kms_helper
fb_sys_fops             1771  1 drm_kms_helper
snd                    63223  11 snd_compress,snd_timer,snd_bcm2835,snd_soc_core,snd_pcm
i2c_bcm2835             7690  0
bcm2835_codec          28300  0
bcm2835_v4l2           35910  0
v4l2_mem2mem           18877  1 bcm2835_codec
bcm2835_mmal_vchiq     20644  2 bcm2835_codec,bcm2835_v4l2
v4l2_common             7385  1 bcm2835_v4l2
videobuf2_dma_contig    10303  1 bcm2835_codec
videobuf2_vmalloc       6084  1 bcm2835_v4l2
videobuf2_memops        1973  2 videobuf2_dma_contig,videobuf2_vmalloc
videobuf2_v4l2         16087  3 bcm2835_codec,bcm2835_v4l2,v4l2_mem2mem
videobuf2_common       37145  4 bcm2835_codec,bcm2835_v4l2,v4l2_mem2mem,videobuf2_v4l2
videodev              182757  6 bcm2835_codec,v4l2_common,videobuf2_common,bcm2835_v4l2,v4l2_mem2mem,videobuf2_v4l2
media                  27597  2 videodev,v4l2_mem2mem
fixed                   3336  0
uio_pdrv_genirq         3953  0
uio                    11360  1 uio_pdrv_genirq
i2c_dev                 7171  0
ip_tables              13419  0
x_tables               24457  1 ip_tables
ipv6                  429117  24

dmesg | grep vc4
[   18.826380] vc4_hdmi 20902000.hdmi: ASoC: Failed to create component debugfs directory
[   18.879422] vc4_hdmi 20902000.hdmi: vc4-hdmi-hifi <-> 20902000.hdmi mapping ok
[   18.924223] vc4-drm soc:gpu: bound 20902000.hdmi (ops vc4_hdmi_ops [vc4])
[   18.924700] vc4-drm soc:gpu: bound 20806000.vec (ops vc4_vec_ops [vc4])
[   18.925128] vc4-drm soc:gpu: bound 20004000.txp (ops vc4_txp_ops [vc4])
[   18.925400] vc4-drm soc:gpu: bound 20400000.hvs (ops vc4_hvs_ops [vc4])
[   18.926237] vc4-drm soc:gpu: bound 20206000.pixelvalve (ops vc4_crtc_ops [vc4])
[   18.927042] vc4-drm soc:gpu: bound 20207000.pixelvalve (ops vc4_crtc_ops [vc4])
[   18.927879] vc4-drm soc:gpu: bound 20807000.pixelvalve (ops vc4_crtc_ops [vc4])
[   20.011705] vc4-drm soc:gpu: bound 20c00000.v3d (ops vc4_v3d_ops [vc4])
[   20.180471] [drm] Initialized vc4 0.0.0 20140616 for soc:gpu on minor 0
[   71.532085] vc4-drm soc:gpu: fb0: DRM emulated frame buffer device
file /dev/dri/card0
/dev/dri/card0: character special (226/0)
cat /var/log/Xorg.0.log
[  1222.589]
X.Org X Server 1.20.4
X Protocol Version 11, Revision 0
[  1222.589] Build Operating System: Linux 4.15.0-48-generic armv8l Raspbian
[  1222.589] Current Operating System: Linux raspberrypi 4.19.50+ #896 Thu Jun 20 16:09:52 BST 2019 armv6l
[  1222.590] Kernel command line: coherent_pool=1M cma=256M  vc_mem.mem_base=0x1fa00000 vc_mem.mem_size=0x20000000  dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=PARTUUID=96dc08cb-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
[  1222.591] Build Date: 05 June 2019  12:49:54PM
[  1222.591] xorg-server 2:1.20.4-1+rpt1 (https://www.debian.org/support)
[  1222.591] Current version of pixman: 0.36.0
[  1222.591]    Before reporting problems, check http://wiki.x.org
        to make sure that you have the latest version.
[  1222.591] Markers: (--) probed, (**) from config file, (==) default setting,
        (++) from command line, (!!) notice, (II) informational,
        (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
[  1222.593] (==) Log file: "/var/log/Xorg.0.log", Time: Wed Jul  3 01:34:06 2019
[  1222.594] (==) Using system config directory "/usr/share/X11/xorg.conf.d"
[  1222.596] (==) No Layout section.  Using the first Screen section.
[  1222.596] (==) No screen section available. Using defaults.
[  1222.596] (**) |-->Screen "Default Screen Section" (0)
[  1222.596] (**) |   |-->Monitor "<default monitor>"
[  1222.600] (==) No monitor specified for screen "Default Screen Section".
        Using a default monitor configuration.
[  1222.600] (==) Automatically adding devices
[  1222.600] (==) Automatically enabling devices
[  1222.600] (==) Automatically adding GPU devices
[  1222.601] (==) Max clients allowed: 256, resource mask: 0x1fffff
[  1222.601] (WW) The directory "/usr/share/fonts/X11/cyrillic" does not exist.
[  1222.601]    Entry deleted from font path.
[  1222.601] (==) FontPath set to:
        /usr/share/fonts/X11/misc,
        /usr/share/fonts/X11/100dpi/:unscaled,
        /usr/share/fonts/X11/75dpi/:unscaled,
        /usr/share/fonts/X11/Type1,
        /usr/share/fonts/X11/100dpi,
        /usr/share/fonts/X11/75dpi,
        built-ins
[  1222.602] (==) ModulePath set to "/usr/lib/xorg/modules"
[  1222.602] (II) The server relies on udev to provide the list of input devices.
        If no devices become available, reconfigure udev or disable AutoAddDevices.
[  1222.602] (II) Loader magic: 0x1fcf80
[  1222.602] (II) Module ABI versions:
[  1222.602]    X.Org ANSI C Emulation: 0.4
[  1222.602]    X.Org Video Driver: 24.0
[  1222.603]    X.Org XInput driver : 24.1
[  1222.603]    X.Org Server Extension : 10.0
[  1222.614] (++) using VT number 7

[  1222.614] (II) systemd-logind: logind integration requires -keeptty and -keeptty was not provided, disabling logind integration
[  1222.624] (II) xfree86: Adding drm device (/dev/dri/card0)
ls /usr/lib/xorg/modules
drivers     libexa.so      libglamoregl.so  libshadow.so  libwfb.so       libxorgxrdp.so
extensions  libfbdevhw.so  libint10.so      libvbe.so     libxorgxrdp.a
input       libfb.so       libshadowfb.so   libvgahw.so   libxorgxrdp.la
ls /usr/lib/xorg/modules/drivers
fbdev_drv.so    fbturbo_drv.so      xrdpdev_drv.a   xrdpdev_drv.so
fbturbo_drv.la  modesetting_drv.so  xrdpdev_drv.la

Может есть тут кто настраивал OpenGL драйвер на Raspberry Pi...

★★★

Ответ на: комментарий от ZenitharChampion

Спасибо, вот что выдаёт:

pi@raspberrypi:~ $ export LIBGL_ALWAYS_INDIRECT=1
pi@raspberrypi:~ $ glxinfo | grep -i opengl
X Error of failed request:  GLXBadContext
  Major opcode of failed request:  150 (GLX)
  Minor opcode of failed request:  6 (X_GLXIsDirect)
  Serial number of failed request:  39
  Current serial number in output stream:  38
fsb4000 ★★★ ()
Ответ на: комментарий от Zubok

Включил Indirect GLX, но ничего не поменялось.

Включал, созданием файла xorg.conf

cat /etc/X11/xorg.conf
Section "ServerFlags"
    Option "AllowIndirectGLX" "on"
    Option "IndirectGLX" "on"
EndSection

Вроде включилось:https://pastebin.com/AZ6gV8LE

но ничего не поменялось:

без LIBGL_ALWAYS_INDIRECT=1 llvmpipe

с LIBGL_ALWAYS_INDIRECT=1 X Error of failed request: GLXBadContext

Хотя в xorg.log.0 видно

[   305.050] (II) modeset(0): glamor X acceleration enabled on VC4 V3D 2.1
[   305.050] (II) modeset(0): glamor initialized
значит мы на правильном пути...

fsb4000 ★★★ ()
Последнее исправление: fsb4000 (всего исправлений: 1)
Ответ на: комментарий от fsb4000

Кажется нашёл проблему:

LIBGL_DEBUG=verbose glxgears
libGL: screen 0 does not appear to be DRI2 capable
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /home/pi/.drirc: No such file or directory.
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /home/pi/.drirc: No such file or directory.
2 frames in 12.5 seconds =  0.160 FPS
21 frames in 5.1 seconds =  4.158 FPS
22 frames in 5.2 seconds =  4.263 FPS

Теперь погуглю решение...

fsb4000 ★★★ ()
Последнее исправление: fsb4000 (всего исправлений: 1)
Ответ на: комментарий от fsb4000

DRI2 это Direct Rendering, то есть «прямой вывод». То есть, с видеокарты прямо на монитор, минуя проц ми не загружая его. Indirect Rendering это непрямой вывод. Например, сначала с GPU на проц, а потом с проца на VGA Output.

В нашем случае, DRI2 нам не нужен, потому что мы выводим в Ethernet. Поэтому надо включить Indirect Rendering. У меня например на десктопе KDM, и мне пришлось править конфиг KDM, чтобы вписать туда +iglx

ZenitharChampion ★★★★★ ()
Ответ на: комментарий от ZenitharChampion

Спасибо, пока не нашёл как включить xorgxrdp, но я установил Xserver for Windows, и через ssh -X у меня получилось так:

pi@raspberrypi:~ $ LIBGL_ALWAYS_INDIRECT=1 glxinfo | grep -i opengl
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce GTX 1060 6GB/PCIe/SSE2
OpenGL version string: 1.2 (4.6.0 NVIDIA 417.71)
OpenGL extensions:
pi@raspberrypi:~ $ LIBGL_ALWAYS_INDIRECT=1 glxgears
5525 frames in 5.0 seconds = 1104.992 FPS
8528 frames in 5.0 seconds = 1705.447 FPS
11455 frames in 5.0 seconds = 2290.955 FPS

Но всё же это не то :(

rdp он удобный, типа TeamViewer, так что поищу ещё...

Update:

Попробуй всё-таки внести правку в конфиг-файл LightDM:

https://askubuntu.com/questions/745135/how-to-enable-indirect-glx-contexts-ig...

Сейчас попробу, только увидел комментарий

fsb4000 ★★★ ()
Последнее исправление: fsb4000 (всего исправлений: 1)
Ответ на: комментарий от ZenitharChampion

Спасибо, я ещё раз подумал и понял, моё решение:

Купить HDMI кабель и переходник HDMI-DVI.

Твоё сообщение и вот этот вывод мне очень помогли:

pi@raspberrypi:~ $ LIBGL_ALWAYS_INDIRECT=1 glxinfo | grep -i opengl
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce GTX 1060 6GB/PCIe/SSE2
OpenGL version string: 1.2 (4.6.0 NVIDIA 417.71)
OpenGL extensions:

То есть, даже если я включу LIBGL_ALWAYS_INDIRECT=1 для XorgXrdp, то он будет использовать мою видеокарту, а не армовскую. А я просто хотел посмотреть насколько готовы драйвера vc4, и как работают на vc4 Qt Widgets приложения и Qt QML.

fsb4000 ★★★ ()
Последнее исправление: fsb4000 (всего исправлений: 2)
Ответ на: комментарий от fsb4000

Для vc4 есть два драйвера. Проприетарный не умеет OpenGL, а умеет только OpenGL ES. Открытый умеет и OpenGL тоже, но он работает медленно (как и OpernGL ES). Я использую проприетарный, потому что он поддерживает аппаратное ускорение FullHD-видео в браузере и в плеере

ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от fsb4000

То есть, даже если я включу LIBGL_ALWAYS_INDIRECT=1 для XorgXrdp, то он будет использовать мою видеокарту, а не армовскую.

Да и только до версии OpenGL 2.0 (2.1 силами Nvidia).

Zubok ★★★★★ ()
Ответ на: комментарий от fsb4000

То есть, даже если я включу LIBGL_ALWAYS_INDIRECT=1 для XorgXrdp, то он будет использовать мою видеокарту, а не армовскую.

Тогда нужен virtualgl, который даст возможность для рендеринга использовать именно армовскую, а потом готовую картинку гнать через протокол X11. Но насколько я знаю (может, ошибочно), virtualgl отсутствует под ARM. Но эту информацию я видел давно. Может, что-то поменялось. Вот инфа, как это работает:

https://en.wikipedia.org/wiki/VirtualGL

Zubok ★★★★★ ()