У меня есть 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.