Назад | Перейти на главную страницу

Утилита GPU Passthrough работает как в гостевых системах Windows, так и в Linux, но ошибка libGL SDL Linux не может найти соответствующий glx visual NX x2go freenx

У меня есть GPU Pass-through, работающий с KVM qemu как с Windows 7, так и с гостевой системой CentOS, но с Windows я могу легко RDP с удаленным рабочим столом mstsc и даже запускать приложения с 3D-ускорением, которые будут использовать ускорение OpenGL и т. Д.

Меня не интересуют VirtualGL и подобные технологии, с помощью которых можно играть в игры удаленно, меня волнует только возможность удаленного использования приложений, для которых требуется видеокарта, поэтому я просто хочу, чтобы openGL glx и т. Д. Запускался на сервере и мог войдите в систему удаленно с помощью nxclient (nomachine nx или vnc / xrdp), чтобы использовать эти программы удаленно, как это возможно в Windows, просто выполнив RDP (с клиентом удаленного рабочего стола mstsc.exe) в гостевой системе Windows 7. Но в Linux я продолжаю получать ошибки, когда пытаюсь запустить программное обеспечение, которому требуется графический процессор, такие ошибки, как не удалось найти соответствующий визуальный элемент glx, не могу записать в окно SDL2 и т. Д. И glxinfo показывает «прямой рендеринг»: Нет

Итак, снова это отлично работает с гостевой Windows 7, я передаю графический процессор в Windows 7, и я могу удаленный рабочий стол RDP через Интернет на гостевую систему Windows 7 и могу запускать инструменты тестирования OpenGL в Windows 7 или других приложениях, для которых требуется графический процессор. Но когда я пытаюсь сделать это внутри Linux GUEST (centos 6.x), где я также прошел через графический процессор, я получаю ошибки, например, не могу найти соответствующий визуальный элемент glx. Вот мои glxinfo и lsmod | grep radeon driver (установлен проприетарный драйвер с сайта ATI). Спасибо!

glxinfo

name of display: :50.0
display: :50  screen: 0
direct rendering: No (If you want to find out why, try setting LIBGL_DEBUG=verbose)
server glx vendor string: SGI
server glx version string: 1.2
server glx extensions:
    GLX_ARB_multisample, GLX_EXT_visual_info, GLX_EXT_visual_rating, 
    GLX_EXT_import_context, GLX_OML_swap_method, GLX_SGI_make_current_read, 
    GLX_SGIS_multisample, GLX_SGIX_hyperpipe, GLX_SGIX_swap_barrier, 
    GLX_SGIX_fbconfig
client glx vendor string: ATI
client glx version string: 1.4
client glx extensions:
    GLX_ARB_create_context, GLX_ARB_create_context_profile, 
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context, 
    GLX_EXT_swap_control, GLX_EXT_visual_info, GLX_EXT_visual_rating, 
    GLX_MESA_allocate_memory, GLX_MESA_copy_sub_buffer, GLX_MESA_swap_control, 
    GLX_MESA_swap_frame_usage, GLX_NV_swap_group, GLX_OML_swap_method, 
    GLX_SGI_make_current_read, GLX_SGI_swap_control, GLX_SGI_video_sync, 
    GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, 
    GLX_SGIX_swap_barrier, GLX_SGIX_swap_group, GLX_SGIX_visual_select_group, 
    GLX_EXT_texture_from_pixmap, GLX_EXT_framebuffer_sRGB, 
    GLX_ARB_fbconfig_float, GLX_AMD_gpu_association, GLX_EXT_buffer_age
GLX version: 1.2
GLX extensions:
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context, 
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_OML_swap_method, 
    GLX_SGI_make_current_read, GLX_SGIS_multisample, GLX_SGIX_fbconfig, 
    GLX_SGIX_swap_barrier
OpenGL vendor string: Mesa project: www.mesa3d.org
OpenGL renderer string: Mesa GLX Indirect
OpenGL version string: 1.2 (1.5 Mesa 6.4.1)
OpenGL extensions:
    GL_ARB_depth_texture, GL_ARB_imaging, GL_ARB_multitexture, 
    GL_ARB_point_parameters, GL_ARB_point_sprite, GL_ARB_shadow, 
    GL_ARB_shadow_ambient, GL_ARB_texture_border_clamp, 
    GL_ARB_texture_cube_map, GL_ARB_texture_env_add, 
    GL_ARB_texture_env_combine, GL_ARB_texture_env_crossbar, 
    GL_ARB_texture_env_dot3, GL_ARB_texture_mirrored_repeat, 
    GL_ARB_texture_rectangle, GL_ARB_transpose_matrix, GL_ARB_window_pos, 
    GL_EXT_abgr, GL_EXT_bgra, GL_EXT_blend_color, GL_EXT_blend_func_separate, 
    GL_EXT_blend_logic_op, GL_EXT_blend_minmax, GL_EXT_blend_subtract, 
    GL_EXT_clip_volume_hint, GL_EXT_copy_texture, GL_EXT_draw_range_elements, 
    GL_EXT_fog_coord, GL_EXT_multi_draw_arrays, GL_EXT_packed_pixels, 
    GL_EXT_point_parameters, GL_EXT_polygon_offset, GL_EXT_rescale_normal, 
    GL_EXT_secondary_color, GL_EXT_separate_specular_color, 
    GL_EXT_shadow_funcs, GL_EXT_stencil_two_side, GL_EXT_stencil_wrap, 
    GL_EXT_subtexture, GL_EXT_texture, GL_EXT_texture3D, 
    GL_EXT_texture_edge_clamp, GL_EXT_texture_env_add, 
    GL_EXT_texture_env_combine, GL_EXT_texture_env_dot3, 
    GL_EXT_texture_lod_bias, GL_EXT_texture_object, GL_EXT_texture_rectangle, 
    GL_EXT_vertex_array, GL_APPLE_packed_pixels, GL_ATI_texture_env_combine3, 
    GL_ATI_texture_mirror_once, GL_ATIX_texture_env_combine3, 
    GL_HP_occlusion_test, GL_IBM_texture_mirrored_repeat, 
    GL_INGR_blend_func_separate, GL_MESA_pack_invert, GL_MESA_ycbcr_texture, 
    GL_SGIS_generate_mipmap, GL_SGIS_texture_border_clamp, 
    GL_SGIS_texture_edge_clamp, GL_SGIS_texture_lod, GL_SGIX_depth_texture, 
    GL_SGIX_shadow, GL_SGIX_shadow_ambient, GL_SUN_multi_draw_arrays

5 GLX Visuals
    visual  x   bf lv rg d st  colorbuffer  sr ax dp st accumbuffer  ms  cav
  id dep cl sp  sz l  ci b ro  r  g  b  a F gb bf th cl  r  g  b  a ns b eat
----------------------------------------------------------------------------
0x04f 24 tc  0  24  0 r  y .   8  8  8  0 .  .  0 16  0  0  0  0  0  0 0 None
0x050 24 tc  0  24  0 r  y .   8  8  8  0 .  .  0 16  8 16 16 16  0  0 0 None
0x051 24 tc  0  32  0 r  y .   8  8  8  8 .  .  0 16  8 16 16 16 16  0 0 None
0x052 24 tc  0  32  0 r  . .   8  8  8  8 .  .  0 16  8 16 16 16 16  0 0 None
0x053 24 sc  0  24  0  c y .   8  8  8  0 .  .  0 16  0  0  0  0  0  0 0 None

11 GLXFBConfigs:
    visual  x   bf lv rg d st  colorbuffer  sr ax dp st accumbuffer  ms  cav
  id dep cl sp  sz l  ci b ro  r  g  b  a F gb bf th cl  r  g  b  a ns b eat
----------------------------------------------------------------------------
0x04f 24 tc  0  24  0 r  y .   8  8  8  0 .  .  0 16  0  0  0  0  0  0 0 None
0x050 24 tc  0  24  0 r  y .   8  8  8  0 .  .  0 16  8 16 16 16  0  0 0 None
0x051 24 tc  0  32  0 r  y .   8  8  8  8 .  .  0 16  8 16 16 16 16  0 0 None
0x052 24 tc  0  32  0 r  . .   8  8  8  8 .  .  0 16  8 16 16 16 16  0 0 None
0x053 24 sc  0  24  0  c y .   8  8  8  0 .  .  0 16  0  0  0  0  0  0 0 None
0x053  0 tc  0 128  0    y .  32 32 32 32 .  .  0 24  0  0  0  0  0  0 0 None
0x053  0 tc  0 128  0    . .  32 32 32 32 .  .  0 24  0  0  0  0  0  0 0 None
0x053  0 tc  0  64  0    y .  16 16 16 16 .  .  0 24  0  0  0  0  0  0 0 None
0x053  0 tc  0  64  0    . .  16 16 16 16 .  .  0 24  0  0  0  0  0  0 0 None
0x053  0 tc  0  32  0    y .  11 11 10  0 .  .  0 24  0  0  0  0  0  0 0 None
0x053  0 tc  0  32  0    . .  11 11 10  0 .  .  0 24  0  0  0  0  0  0 0 None

lsmod | grep radeon

radeon                917108  2
ttm                    80957  1 radeon
drm_kms_helper         40087  1 radeon
drm                   265638  4 radeon,ttm,drm_kms_helper
i2c_algo_bit            5935  1 radeon
i2c_core               31084  5 i2c_i801,radeon,drm_kms_helper,drm,i2c_algo_bit

Похоже, VirtualGL делает что-то в соответствии с тем, что я хочу. Теперь я могу запустить 3D opengl и получить «прямой рендеринг», говоря «да», когда я использую «vglrun glxinfo» и vglrun glxgears и т. Д. (Интересно, что glxgears работает намного быстрее при программном рендеринге без vglrun, но эта штука glxspheres работает намного быстрее с vglrun по сравнению с использованием программного обеспечения mesa.)

В любом случае, я обнаружил, что vglrun не будет работать с Android Emulator, потому что я предполагаю, что он не может справиться с эмуляцией OpenGL "ES", которую он хочет сделать, или с некоторыми подобными проблемами. Не могу избавиться от этой ошибки:

Failed to open lib64EGL_translator
Failed to init_egl_dispatch
emulator: ERROR: OpenGLES initialization failed!
emulator: ERROR: OpenGLES emulation library could not be initialized!
emulator: WARNING: Could not initialize OpenglES emulation, using software renderer.

В заключение я вижу, что мое единственное решение - заставить мой сквозной графический процессор работать как основную карту вместо загрузки с использованием эмулированной логики Cirrus, а затем использовать переданный через AMD графический процессор с vglrun / virtualgl. Если я удалю эмулируемую cirruslogic, я могу ЗАГРУЗИТЬ хост-консоль НЕПОСРЕДСТВЕННО на переданном через GPU. Тогда я смогу запустить x11vnc или аналогичный vnc, который позволяет привязку к LOCAL: 0 display на проходящем через GPU. Это означает, что я могу просто выполнить NX на удаленном компьютере и один раз подключиться к tigervnc, turbovnc или tightvnc к сеансу x11vnc на ЛОКАЛЬНОМ дисплее, и таким образом я должен иметь прямой OPENGL для всего, всего сеанса, не полагаясь на VirtualGL и vglrun, которые для эмулятора Android все равно не работали, опять же проблема с переводчиком lib64EGL. (и да, мне нужен был. поэтому в пути и в ldconfig и т.д. и т.д. был правильный 64-битный файл и т.д., это не что-то простое, я думаю, что как-то vglrun может не справиться с переводом opengl es?)

В любом случае, моя единственная проблема сейчас заключается в том, что хотя у меня и раньше она работала каким-то образом, теперь, если я попытаюсь удалить cirruslogic vga из моего виртуального образа, виртуальная машина перейдет в «состояние паузы», как только она попытается загрузиться. (Я могу изменить параметры загрузки ядра, но как только я скажу, что все в порядке, загрузка переходит в состояние паузы в KVM), но, по крайней мере, если я могу исправить это, я могу исправить свою проблему с эмулятором Android.