Ubuntu 12.10 OpenCL OpenGL Interop com gráficos ATI

6

Eu instalei com sucesso os drivers ATI Catalyst em um sistema gráfico híbrido ATI, rodando no Ubuntu 12.10. Eu verifiquei que OpenCL e OpenGL trabalham independentemente; no entanto OpenCL-OpenGL interoperabilidade não está funcionando corretamente. Eu fiz algumas depurações, mas não tenho certeza para onde ir a partir daqui. Alguém pode ajudar?

Detalhes:

Meu sistema é um HP Envy 6 executando o Ubuntu 12.10 (todas as atualizações aplicadas) com um sistema gráfico híbrido ATI composto de uma Radeon 7600m e Intel HD3000. Eu instalei os drivers mais recentes da ATI Beta (v. 12.11) seguindo estas instruções:

Como faço para que os drivers gráficos AMD / Intel Hybrid sejam trabalho?

Fazendo isso, consegui operacionalizar o OpenGL e o OpenCL. glxgears é executado em ~ 1200 fps e todos os exemplos somente OpenCL na função AMD APP SDK como esperado. No entanto, qualquer aplicativo de interoperabilidade OpenCL-OpenGL falha ao iniciar com um erro X Error of failed request: BadMatch (invalid parameter attributes) . Todo o código de amostra trabalhou anteriormente no Ubuntu 12.04 com os drivers do gerenciador de pacotes ATI.

Para obter um pouco mais de informações de depuração, corri LIBGL_DEBUG=verbose /opt/AMDAPP/samples/opencl/bin/x86_64/SimpleGL . Isso detecta minha GPU discreta, aparece para selecionar os drivers corretos e detecta que a interoperabilidade OpenCL-OpenGL está ativada:

$ 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

Não sei ao certo para onde ir a partir daqui. Isso pode ser um problema persistente com os problemas conhecidos do ATI Ubuntu 12.10 ou algo novo. Alguém tem alguma sugestão?

    
por bkloppenborg 07.12.2012 / 16:38

1 resposta

5

Ok. Descobri isso (pelo menos no meu caso). O arquivo libGL.so em /usr/lib/fglrx não é encontrado pelo vinculador. Adicionando

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

ao meu ~/.bashrc (ou ~/.profile ) fez com que funcionasse. Isso não deve ser necessário, porque o instalador do driver adiciona /usr/lib/fglrx ao arquivo /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf .

EDIT Nota: Meu post anterior culpou esse bug no Cinnamon ( bug 1483 ); no entanto, isso estava incorreto. A solução documentada está correta.

    
por bkloppenborg 09.12.2012 / 16:34