Пусть 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 через Интернет к гостю Windows7 и могу запускать инструменты тестирования OpenGL в Windows7 или других приложениях, которым требуется графический процессор. Но когда я пытаюсь сделать это в Linux GUEST (centos 6.x), где я также прошел через GPU, я получаю ошибки, например, не могу найти соответствующий визуальный элемент glx. Вот мой glxinfo и lsmod | grep radeon driver (установлен проприетарный драйвер с сайта ATI). Спасибо!
glxinfo
название дисплея::50.0 дисплей:: 50 экран: 0 прямой рендеринг: нет (если вы хотите узнать почему, попробуйте установить LIBGL_DEBUG=verbose) Строка поставщика GLX сервера: SGI строка версии сервера glx: 1.2 сервер GLX расширения: 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 строка поставщика клиента glx: ATI строка версии клиента glx: 1.4 клиентские GLX расширения: 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: 1.2 Расширения GLX: 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: проект Mesa: www.mesa3d.org Строка рендерера OpenGL: Mesa GLX Indirect Строка версии OpenGL: 1.2 (1.5 Mesa 6.4.1) Расширения OpenGL: 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 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 есть ---------------------------------------------------------------------------- 0x04f 24 tc 0 24 0 r y . 8 8 8 0 ., 0 16 0 0 0 0 0 0 0 Нет 0x050 24 тк 0 24 0 ры. 8 8 8 0., 0 16 8 16 16 16 0 0 0 Нет 0x051 24 tc 0 32 0 r y . 8 8 8 8 ., 0 16 8 16 16 16 16 0 0 Нет 0x052 24 tc 0 32 0 р., 8 8 8 8., 0 16 8 16 16 16 16 0 0 Нет 0x053 24 sc 0 24 0 c y . 8 8 8 0 ., 0 16 0 0 0 0 0 0 0 Нет 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 есть ---------------------------------------------------------------------------- 0x04f 24 tc 0 24 0 r y . 8 8 8 0 ., 0 16 0 0 0 0 0 0 0 Нет 0x050 24 тк 0 24 0 ры. 8 8 8 0., 0 16 8 16 16 16 0 0 0 Нет 0x051 24 tc 0 32 0 r y . 8 8 8 8 ., 0 16 8 16 16 16 16 0 0 Нет 0x052 24 tc 0 32 0 р., 8 8 8 8., 0 16 8 16 16 16 16 0 0 Нет 0x053 24 sc 0 24 0 c y . 8 8 8 0 ., 0 16 0 0 0 0 0 0 0 Нет 0x053 0 tc 0 128 0 y . 32 32 32 32 ., 0 24 0 0 0 0 0 0 0 Нет 0x053 0 tc 0 128 0 ., 32 32 32 32., 0 24 0 0 0 0 0 0 0 Нет 0x053 0 tc 0 64 0 y . 16 16 16 16 ., 0 24 0 0 0 0 0 0 0 Нет 0x053 0 tc 0 64 0 ., 16 16 16 16., 0 24 0 0 0 0 0 0 0 Нет 0x053 0 tc 0 32 0 y . 11 11 10 0 ., 0 24 0 0 0 0 0 0 0 Нет 0x053 0 tc 0 32 0 ., 11 11 10 0., 0 24 0 0 0 0 0 0 0 Нет
lsmod | Grep Radeon
Radeon 917108 2 ттм 80957 1 радеон 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, потому что я думаю, что он не может справиться с эмуляцией OpenGL "ES", которую он хочет сделать, или с какими-то другими проблемами. Я не могу избавиться от этой ошибки:
Не удалось открыть lib64EGL_translator Не удалось запустить эмулятор init_egl_dispatch: ОШИБКА: сбой при инициализации OpenGLES! Эмулятор: ОШИБКА: Не удалось инициализировать библиотеку эмуляции OpenGLES! Эмулятор: ПРЕДУПРЕЖДЕНИЕ. Не удалось инициализировать эмуляцию OpenglES с использованием программного средства визуализации.
В заключение я вижу, что мое единственное решение - заставить мой GPU pass-through работать в качестве основной карты вместо загрузки с использованием эмулированной логики Cirrus, а затем с использованием переданного через AMD GPU с vglrun/virtualgl. Если я удаляю эмулированную циррусологию, то я могу ПРЯМО ЗАГРУЗИТЬ консоль хоста на пропущенном через GPU. Тогда я смогу запустить x11vnc или аналогичный vnc, который позволяет связывать на дисплее LOCAL:0 на пропущенном через GPU. Это означает, что тогда я могу просто выполнить NX на удаленной машине и затем подключиться с помощью tigervnc, turbovnc или ightvnc к сеансу x11vnc на локальном дисплее, и таким образом у меня должен быть прямой OPENGL для всего, всего сеанса, без необходимости полагаться на VirtualGL и vglrun, которые для эмулятора Android не работали, опять же, некоторые проблемы с переводчиком lib64EGL. (и да, мне нужно было.so в пути, в ldconfig и т. д., там был правильный 64-битный файл и т. д., это не что-то простое, я думаю, что vglrun может не справиться с переводом OpenGLES?)
В любом случае, моя единственная проблема сейчас заключается в том, что, хотя раньше я как-то работал, теперь, если я пытаюсь удалить cirruslogic vga из моего виртуального образа, виртуальная машина переходит в "приостановленное состояние", как только она пытается загрузиться. (Я могу изменить параметры загрузки ядра, но как только я скажу, что все в порядке загрузки, он переходит в состояние "приостановлено" в KVM), но, по крайней мере, если я смогу это исправить, я могу решить проблему с эмулятором андроида.