"Отсутствует версия GL" из glewInit() с использованием EGL?

Я просто пытаюсь запустить это:

int main(int argc, char **argv) {

EGLDisplay display;
EGLConfig config;
EGLContext context;
EGLint num_config;

display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
if (display == EGL_NO_DISPLAY)
{
    std:: cout << "ERROR: EGL could not be initialized"<< std::endl;
    exit(EXIT_FAILURE);
}
if (!eglInitialize(display, nullptr, nullptr))
{
    std:: cout << "ERROR: Could not start EGL display connection"<< std::endl;
    exit(EXIT_FAILURE);
}
if (eglChooseConfig(display, nullptr, &config, 1, &num_config) != EGL_TRUE)
{
    std:: cout << "ERROR: Configuration selection failed" << std::endl;
    exit(EXIT_FAILURE);
}
eglBindAPI(EGL_OPENGL_API);
context = eglCreateContext(display, config, EGL_NO_CONTEXT, NULL);
if (eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, context) != EGL_TRUE) {
    std:: cout << "ERROR: Display was not made current one"<< std::endl;
    exit(EXIT_FAILURE);
}

GLenum err = glewInit();
if (GLEW_OK != err)
{
    std:: cout << "GLEW Error: " << glewGetErrorString(err) << std::endl;
    exit(EXIT_FAILURE);
}
// ... some code here
}

Но при его запуске у меня есть:

Ошибка GLEW: отсутствует версия GL

Похоже мой glewInit() терпит неудачу с контекстом GL, но я не понимаю почему, потому что мой glewInit() вызывается после создания контекста. И нет ошибки от EGL.

Цель этого кода - иметь возможность иметь контекст Opengl без какого-либо окна. Этот код работал в прошлом, но не с тех пор, как я обновил Ubuntu 17.10 до Nvidia 384, работающего на Quadro K2000M.

Вот мой glxinfo:

glxinfo 
name of display: :1
display: :1  screen: 0
direct rendering: Yes
server glx vendor string: NVIDIA Corporation
server glx version string: 1.4
server glx extensions:
    GLX_ARB_context_flush_control, GLX_ARB_create_context, 
    GLX_ARB_create_context_profile, GLX_ARB_create_context_robustness, 
    GLX_ARB_fbconfig_float, GLX_ARB_multisample, GLX_EXT_buffer_age, 
    GLX_EXT_create_context_es2_profile, GLX_EXT_create_context_es_profile, 
    GLX_EXT_framebuffer_sRGB, GLX_EXT_import_context, GLX_EXT_libglvnd, 
    GLX_EXT_stereo_tree, GLX_EXT_swap_control, GLX_EXT_swap_control_tear, 
    GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating, 
    GLX_NV_copy_buffer, GLX_NV_copy_image, GLX_NV_delay_before_swap, 
    GLX_NV_float_buffer, GLX_NV_robustness_video_memory_purge, 
    GLX_NV_swap_group, GLX_NV_video_capture, GLX_SGIX_fbconfig, 
    GLX_SGIX_pbuffer, GLX_SGI_swap_control, GLX_SGI_video_sync
client glx vendor string: NVIDIA Corporation
client glx version string: 1.4
client glx extensions:
    GLX_ARB_context_flush_control, GLX_ARB_create_context, 
    GLX_ARB_create_context_profile, GLX_ARB_create_context_robustness, 
    GLX_ARB_fbconfig_float, GLX_ARB_get_proc_address, GLX_ARB_multisample, 
    GLX_EXT_buffer_age, GLX_EXT_create_context_es2_profile, 
    GLX_EXT_create_context_es_profile, GLX_EXT_fbconfig_packed_float, 
    GLX_EXT_framebuffer_sRGB, GLX_EXT_import_context, GLX_EXT_stereo_tree, 
    GLX_EXT_swap_control, GLX_EXT_swap_control_tear, 
    GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating, 
    GLX_NV_copy_buffer, GLX_NV_copy_image, GLX_NV_delay_before_swap, 
    GLX_NV_float_buffer, GLX_NV_multisample_coverage, GLX_NV_present_video, 
    GLX_NV_robustness_video_memory_purge, GLX_NV_swap_group, 
    GLX_NV_video_capture, GLX_NV_video_out, GLX_SGIX_fbconfig, 
    GLX_SGIX_pbuffer, GLX_SGI_swap_control, GLX_SGI_video_sync
GLX version: 1.4
GLX extensions:
    GLX_ARB_context_flush_control, GLX_ARB_create_context, 
    GLX_ARB_create_context_profile, GLX_ARB_create_context_robustness, 
    GLX_ARB_fbconfig_float, GLX_ARB_get_proc_address, GLX_ARB_multisample, 
    GLX_EXT_buffer_age, GLX_EXT_create_context_es2_profile, 
    GLX_EXT_create_context_es_profile, GLX_EXT_framebuffer_sRGB, 
    GLX_EXT_import_context, GLX_EXT_stereo_tree, GLX_EXT_swap_control, 
    GLX_EXT_swap_control_tear, GLX_EXT_texture_from_pixmap, 
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_NV_copy_buffer, 
    GLX_NV_copy_image, GLX_NV_delay_before_swap, GLX_NV_float_buffer, 
    GLX_NV_robustness_video_memory_purge, GLX_NV_swap_group, 
    GLX_NV_video_capture, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, 
    GLX_SGI_swap_control, GLX_SGI_video_sync
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: Quadro M2000M/PCIe/SSE2
OpenGL core profile version string: 4.5.0 NVIDIA 384.90
OpenGL core profile shading language version string: 4.50 NVIDIA
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
    GL_AMD_multi_draw_indirect, GL_AMD_seamless_cubemap_per_texture, 
    GL_ARB_ES2_compatibility, GL_ARB_ES3_1_compatibility, 
    GL_ARB_ES3_2_compatibility, GL_ARB_ES3_compatibility, 
    GL_ARB_arrays_of_arrays, GL_ARB_base_instance, GL_ARB_bindless_texture, 
    GL_ARB_blend_func_extended, GL_ARB_buffer_storage, GL_ARB_cl_event, 
    GL_ARB_clear_buffer_object, GL_ARB_clear_texture, GL_ARB_clip_control, 
    GL_ARB_color_buffer_float, GL_ARB_compressed_texture_pixel_storage, 
    GL_ARB_compute_shader, GL_ARB_compute_variable_group_size, 
    GL_ARB_conditional_render_inverted, GL_ARB_conservative_depth, 
    GL_ARB_copy_buffer, GL_ARB_copy_image, GL_ARB_cull_distance, 
    GL_ARB_debug_output, GL_ARB_depth_buffer_float, GL_ARB_depth_clamp, 
    GL_ARB_depth_texture, GL_ARB_derivative_control, 
    GL_ARB_direct_state_access, GL_ARB_draw_buffers, 
    GL_ARB_draw_buffers_blend, GL_ARB_draw_elements_base_vertex, 
    GL_ARB_draw_indirect, GL_ARB_draw_instanced, GL_ARB_enhanced_layouts, 
    GL_ARB_explicit_attrib_location, GL_ARB_explicit_uniform_location, 
    GL_ARB_fragment_coord_conventions, GL_ARB_fragment_layer_viewport, 
    GL_ARB_fragment_program, GL_ARB_fragment_program_shadow, 
    GL_ARB_fragment_shader, GL_ARB_framebuffer_no_attachments, 
    GL_ARB_framebuffer_object, GL_ARB_framebuffer_sRGB, 
    GL_ARB_geometry_shader4, GL_ARB_get_program_binary, 
    GL_ARB_get_texture_sub_image, GL_ARB_gl_spirv, GL_ARB_gpu_shader5, 
    GL_ARB_gpu_shader_fp64, GL_ARB_gpu_shader_int64, GL_ARB_half_float_pixel, 
    GL_ARB_half_float_vertex, GL_ARB_imaging, GL_ARB_indirect_parameters, 
    GL_ARB_instanced_arrays, GL_ARB_internalformat_query, 
    GL_ARB_internalformat_query2, GL_ARB_invalidate_subdata, 
    GL_ARB_map_buffer_alignment, GL_ARB_map_buffer_range, GL_ARB_multi_bind, 
    GL_ARB_multi_draw_indirect, GL_ARB_multisample, GL_ARB_multitexture, 
    GL_ARB_occlusion_query, GL_ARB_occlusion_query2, 
    GL_ARB_parallel_shader_compile, GL_ARB_pipeline_statistics_query, 
    GL_ARB_pixel_buffer_object, GL_ARB_point_parameters, GL_ARB_point_sprite, 
    GL_ARB_program_interface_query, GL_ARB_provoking_vertex, 
    GL_ARB_query_buffer_object, GL_ARB_robust_buffer_access_behavior, 
    GL_ARB_robustness, GL_ARB_sample_shading, GL_ARB_sampler_objects, 
    GL_ARB_seamless_cube_map, GL_ARB_seamless_cubemap_per_texture, 
    GL_ARB_separate_shader_objects, GL_ARB_shader_atomic_counter_ops, 
    GL_ARB_shader_atomic_counters, GL_ARB_shader_ballot, 
    GL_ARB_shader_bit_encoding, GL_ARB_shader_clock, 
    GL_ARB_shader_draw_parameters, GL_ARB_shader_group_vote, 
    GL_ARB_shader_image_load_store, GL_ARB_shader_image_size, 
    GL_ARB_shader_objects, GL_ARB_shader_precision, 
    GL_ARB_shader_storage_buffer_object, GL_ARB_shader_subroutine, 
    GL_ARB_shader_texture_image_samples, GL_ARB_shader_texture_lod, 
    GL_ARB_shading_language_100, GL_ARB_shading_language_420pack, 
    GL_ARB_shading_language_include, GL_ARB_shading_language_packing, 
    GL_ARB_shadow, GL_ARB_sparse_buffer, GL_ARB_sparse_texture, 
    GL_ARB_stencil_texturing, GL_ARB_sync, GL_ARB_tessellation_shader, 
    GL_ARB_texture_barrier, GL_ARB_texture_border_clamp, 
    GL_ARB_texture_buffer_object, GL_ARB_texture_buffer_object_rgb32, 
    GL_ARB_texture_buffer_range, GL_ARB_texture_compression, 
    GL_ARB_texture_compression_bptc, GL_ARB_texture_compression_rgtc, 
    GL_ARB_texture_cube_map, GL_ARB_texture_cube_map_array, 
    GL_ARB_texture_env_add, GL_ARB_texture_env_combine, 
    GL_ARB_texture_env_crossbar, GL_ARB_texture_env_dot3, 
    GL_ARB_texture_float, GL_ARB_texture_gather, 
    GL_ARB_texture_mirror_clamp_to_edge, GL_ARB_texture_mirrored_repeat, 
    GL_ARB_texture_multisample, GL_ARB_texture_non_power_of_two, 
    GL_ARB_texture_query_levels, GL_ARB_texture_query_lod, 
    GL_ARB_texture_rectangle, GL_ARB_texture_rg, GL_ARB_texture_rgb10_a2ui, 
    GL_ARB_texture_stencil8, GL_ARB_texture_storage, 
    GL_ARB_texture_storage_multisample, GL_ARB_texture_swizzle, 
    GL_ARB_texture_view, GL_ARB_timer_query, GL_ARB_transform_feedback2, 
    GL_ARB_transform_feedback3, GL_ARB_transform_feedback_instanced, 
    GL_ARB_transform_feedback_overflow_query, GL_ARB_transpose_matrix, 
    GL_ARB_uniform_buffer_object, GL_ARB_vertex_array_bgra, 
    GL_ARB_vertex_array_object, GL_ARB_vertex_attrib_64bit, 
    GL_ARB_vertex_attrib_binding, GL_ARB_vertex_buffer_object, 
    GL_ARB_vertex_program, GL_ARB_vertex_shader, 
    GL_ARB_vertex_type_10f_11f_11f_rev, GL_ARB_vertex_type_2_10_10_10_rev, 
    GL_ARB_viewport_array, GL_ARB_window_pos, GL_ATI_draw_buffers, 
    GL_ATI_texture_float, GL_ATI_texture_mirror_once, 
    GL_EXTX_framebuffer_mixed_formats, GL_EXT_Cg_shader, GL_EXT_abgr, 
    GL_EXT_bgra, GL_EXT_bindable_uniform, GL_EXT_blend_color, 
    GL_EXT_blend_equation_separate, GL_EXT_blend_func_separate, 
    GL_EXT_blend_minmax, GL_EXT_blend_subtract, GL_EXT_compiled_vertex_array, 
    GL_EXT_depth_bounds_test, GL_EXT_direct_state_access, 
    GL_EXT_draw_buffers2, GL_EXT_draw_instanced, GL_EXT_draw_range_elements, 
    GL_EXT_fog_coord, GL_EXT_framebuffer_blit, GL_EXT_framebuffer_multisample, 
    GL_EXT_framebuffer_multisample_blit_scaled, GL_EXT_framebuffer_object, 
    GL_EXT_framebuffer_sRGB, GL_EXT_geometry_shader4, 
    GL_EXT_gpu_program_parameters, GL_EXT_gpu_shader4, 
    GL_EXT_import_sync_object, GL_EXT_memory_object, GL_EXT_memory_object_fd, 
    GL_EXT_multi_draw_arrays, GL_EXT_packed_depth_stencil, 
    GL_EXT_packed_float, GL_EXT_packed_pixels, GL_EXT_pixel_buffer_object, 
    GL_EXT_point_parameters, GL_EXT_polygon_offset_clamp, 
    GL_EXT_provoking_vertex, GL_EXT_rescale_normal, GL_EXT_secondary_color, 
    GL_EXT_semaphore, GL_EXT_semaphore_fd, GL_EXT_separate_shader_objects, 
    GL_EXT_separate_specular_color, GL_EXT_shader_image_load_formatted, 
    GL_EXT_shader_image_load_store, GL_EXT_shader_integer_mix, 
    GL_EXT_shadow_funcs, GL_EXT_stencil_two_side, GL_EXT_stencil_wrap, 
    GL_EXT_texture3D, GL_EXT_texture_array, GL_EXT_texture_buffer_object, 
    GL_EXT_texture_compression_dxt1, GL_EXT_texture_compression_latc, 
    GL_EXT_texture_compression_rgtc, GL_EXT_texture_compression_s3tc, 
    GL_EXT_texture_cube_map, GL_EXT_texture_edge_clamp, 
    GL_EXT_texture_env_add, GL_EXT_texture_env_combine, 
    GL_EXT_texture_env_dot3, GL_EXT_texture_filter_anisotropic, 
    GL_EXT_texture_integer, GL_EXT_texture_lod, GL_EXT_texture_lod_bias, 
    GL_EXT_texture_mirror_clamp, GL_EXT_texture_object, GL_EXT_texture_sRGB, 
    GL_EXT_texture_sRGB_decode, GL_EXT_texture_shared_exponent, 
    GL_EXT_texture_storage, GL_EXT_texture_swizzle, GL_EXT_timer_query, 
    GL_EXT_transform_feedback2, GL_EXT_vertex_array, GL_EXT_vertex_array_bgra, 
    GL_EXT_vertex_attrib_64bit, GL_EXT_window_rectangles, 
    GL_EXT_x11_sync_object, GL_IBM_rasterpos_clip, 
    GL_IBM_texture_mirrored_repeat, GL_KHR_blend_equation_advanced, 
    GL_KHR_blend_equation_advanced_coherent, GL_KHR_context_flush_control, 
    GL_KHR_debug, GL_KHR_no_error, GL_KHR_robust_buffer_access_behavior, 
    GL_KHR_robustness, GL_KTX_buffer_region, GL_NVX_conditional_render, 
    GL_NVX_gpu_memory_info, GL_NVX_nvenc_interop, GL_NV_ES1_1_compatibility, 
    GL_NV_ES3_1_compatibility, GL_NV_alpha_to_coverage_dither_control, 
    GL_NV_bindless_multi_draw_indirect, 
    GL_NV_bindless_multi_draw_indirect_count, GL_NV_bindless_texture, 
    GL_NV_blend_equation_advanced, GL_NV_blend_equation_advanced_coherent, 
    GL_NV_blend_square, GL_NV_command_list, GL_NV_compute_program5, 
    GL_NV_conditional_render, GL_NV_copy_depth_to_color, GL_NV_copy_image, 
    GL_NV_deep_texture3D, GL_NV_depth_buffer_float, GL_NV_depth_clamp, 
    GL_NV_draw_texture, GL_NV_draw_vulkan_image, GL_NV_explicit_multisample, 
    GL_NV_fence, GL_NV_float_buffer, GL_NV_fog_distance, 
    GL_NV_fragment_program, GL_NV_fragment_program2, 
    GL_NV_fragment_program_option, GL_NV_framebuffer_multisample_coverage, 
    GL_NV_geometry_shader4, GL_NV_gpu_program4, GL_NV_gpu_program4_1, 
    GL_NV_gpu_program5, GL_NV_gpu_program5_mem_extended, 
    GL_NV_gpu_program_fp64, GL_NV_gpu_shader5, GL_NV_half_float, 
    GL_NV_internalformat_sample_query, GL_NV_light_max_exponent, 
    GL_NV_multisample_coverage, GL_NV_multisample_filter_hint, 
    GL_NV_occlusion_query, GL_NV_packed_depth_stencil, 
    GL_NV_parameter_buffer_object, GL_NV_parameter_buffer_object2, 
    GL_NV_path_rendering, GL_NV_pixel_data_range, GL_NV_point_sprite, 
    GL_NV_primitive_restart, GL_NV_register_combiners, 
    GL_NV_register_combiners2, GL_NV_robustness_video_memory_purge, 
    GL_NV_shader_atomic_counters, GL_NV_shader_atomic_float, 
    GL_NV_shader_atomic_int64, GL_NV_shader_buffer_load, 
    GL_NV_shader_storage_buffer_object, GL_NV_shader_thread_group, 
    GL_NV_shader_thread_shuffle, GL_NV_texgen_reflection, 
    GL_NV_texture_barrier, GL_NV_texture_compression_vtc, 
    GL_NV_texture_env_combine4, GL_NV_texture_multisample, 
    GL_NV_texture_rectangle, GL_NV_texture_shader, GL_NV_texture_shader2, 
    GL_NV_texture_shader3, GL_NV_transform_feedback, 
    GL_NV_transform_feedback2, GL_NV_uniform_buffer_unified_memory, 
    GL_NV_vdpau_interop, GL_NV_vertex_array_range, GL_NV_vertex_array_range2, 
    GL_NV_vertex_attrib_integer_64bit, GL_NV_vertex_buffer_unified_memory, 
    GL_NV_vertex_program, GL_NV_vertex_program1_1, GL_NV_vertex_program2, 
    GL_NV_vertex_program2_option, GL_NV_vertex_program3, GL_S3_s3tc, 
    GL_SGIS_generate_mipmap, GL_SGIS_texture_lod, GL_SGIX_depth_texture, 
    GL_SGIX_shadow, GL_SUN_slice_accum

OpenGL version string: 4.5.0 NVIDIA 384.90
OpenGL shading language version string: 4.50 NVIDIA
OpenGL context flags: (none)
OpenGL profile mask: (none)
OpenGL extensions:
    GL_AMD_multi_draw_indirect, GL_AMD_seamless_cubemap_per_texture, 
    GL_ARB_ES2_compatibility, GL_ARB_ES3_1_compatibility, 
    GL_ARB_ES3_2_compatibility, GL_ARB_ES3_compatibility, 
    GL_ARB_arrays_of_arrays, GL_ARB_base_instance, GL_ARB_bindless_texture, 
    GL_ARB_blend_func_extended, GL_ARB_buffer_storage, GL_ARB_cl_event, 
    GL_ARB_clear_buffer_object, GL_ARB_clear_texture, GL_ARB_clip_control, 
    GL_ARB_color_buffer_float, GL_ARB_compatibility, 
    GL_ARB_compressed_texture_pixel_storage, GL_ARB_compute_shader, 
    GL_ARB_compute_variable_group_size, GL_ARB_conditional_render_inverted, 
    GL_ARB_conservative_depth, GL_ARB_copy_buffer, GL_ARB_copy_image, 
    GL_ARB_cull_distance, GL_ARB_debug_output, GL_ARB_depth_buffer_float, 
    GL_ARB_depth_clamp, GL_ARB_depth_texture, GL_ARB_derivative_control, 
    GL_ARB_direct_state_access, GL_ARB_draw_buffers, 
    GL_ARB_draw_buffers_blend, GL_ARB_draw_elements_base_vertex, 
    GL_ARB_draw_indirect, GL_ARB_draw_instanced, GL_ARB_enhanced_layouts, 
    GL_ARB_explicit_attrib_location, GL_ARB_explicit_uniform_location, 
    GL_ARB_fragment_coord_conventions, GL_ARB_fragment_layer_viewport, 
    GL_ARB_fragment_program, GL_ARB_fragment_program_shadow, 
    GL_ARB_fragment_shader, GL_ARB_framebuffer_no_attachments, 
    GL_ARB_framebuffer_object, GL_ARB_framebuffer_sRGB, 
    GL_ARB_geometry_shader4, GL_ARB_get_program_binary, 
    GL_ARB_get_texture_sub_image, GL_ARB_gl_spirv, GL_ARB_gpu_shader5, 
    GL_ARB_gpu_shader_fp64, GL_ARB_gpu_shader_int64, GL_ARB_half_float_pixel, 
    GL_ARB_half_float_vertex, GL_ARB_imaging, GL_ARB_indirect_parameters, 
    GL_ARB_instanced_arrays, GL_ARB_internalformat_query, 
    GL_ARB_internalformat_query2, GL_ARB_invalidate_subdata, 
    GL_ARB_map_buffer_alignment, GL_ARB_map_buffer_range, GL_ARB_multi_bind, 
    GL_ARB_multi_draw_indirect, GL_ARB_multisample, GL_ARB_multitexture, 
    GL_ARB_occlusion_query, GL_ARB_occlusion_query2, 
    GL_ARB_parallel_shader_compile, GL_ARB_pipeline_statistics_query, 
    GL_ARB_pixel_buffer_object, GL_ARB_point_parameters, GL_ARB_point_sprite, 
    GL_ARB_program_interface_query, GL_ARB_provoking_vertex, 
    GL_ARB_query_buffer_object, GL_ARB_robust_buffer_access_behavior, 
    GL_ARB_robustness, GL_ARB_sample_shading, GL_ARB_sampler_objects, 
    GL_ARB_seamless_cube_map, GL_ARB_seamless_cubemap_per_texture, 
    GL_ARB_separate_shader_objects, GL_ARB_shader_atomic_counter_ops, 
    GL_ARB_shader_atomic_counters, GL_ARB_shader_ballot, 
    GL_ARB_shader_bit_encoding, GL_ARB_shader_clock, 
    GL_ARB_shader_draw_parameters, GL_ARB_shader_group_vote, 
    GL_ARB_shader_image_load_store, GL_ARB_shader_image_size, 
    GL_ARB_shader_objects, GL_ARB_shader_precision, 
    GL_ARB_shader_storage_buffer_object, GL_ARB_shader_subroutine, 
    GL_ARB_shader_texture_image_samples, GL_ARB_shader_texture_lod, 
    GL_ARB_shading_language_100, GL_ARB_shading_language_420pack, 
    GL_ARB_shading_language_include, GL_ARB_shading_language_packing, 
    GL_ARB_shadow, GL_ARB_sparse_buffer, GL_ARB_sparse_texture, 
    GL_ARB_stencil_texturing, GL_ARB_sync, GL_ARB_tessellation_shader, 
    GL_ARB_texture_barrier, GL_ARB_texture_border_clamp, 
    GL_ARB_texture_buffer_object, GL_ARB_texture_buffer_object_rgb32, 
    GL_ARB_texture_buffer_range, GL_ARB_texture_compression, 
    GL_ARB_texture_compression_bptc, GL_ARB_texture_compression_rgtc, 
    GL_ARB_texture_cube_map, GL_ARB_texture_cube_map_array, 
    GL_ARB_texture_env_add, GL_ARB_texture_env_combine, 
    GL_ARB_texture_env_crossbar, GL_ARB_texture_env_dot3, 
    GL_ARB_texture_float, GL_ARB_texture_gather, 
    GL_ARB_texture_mirror_clamp_to_edge, GL_ARB_texture_mirrored_repeat, 
    GL_ARB_texture_multisample, GL_ARB_texture_non_power_of_two, 
    GL_ARB_texture_query_levels, GL_ARB_texture_query_lod, 
    GL_ARB_texture_rectangle, GL_ARB_texture_rg, GL_ARB_texture_rgb10_a2ui, 
    GL_ARB_texture_stencil8, GL_ARB_texture_storage, 
    GL_ARB_texture_storage_multisample, GL_ARB_texture_swizzle, 
    GL_ARB_texture_view, GL_ARB_timer_query, GL_ARB_transform_feedback2, 
    GL_ARB_transform_feedback3, GL_ARB_transform_feedback_instanced, 
    GL_ARB_transform_feedback_overflow_query, GL_ARB_transpose_matrix, 
    GL_ARB_uniform_buffer_object, GL_ARB_vertex_array_bgra, 
    GL_ARB_vertex_array_object, GL_ARB_vertex_attrib_64bit, 
    GL_ARB_vertex_attrib_binding, GL_ARB_vertex_buffer_object, 
    GL_ARB_vertex_program, GL_ARB_vertex_shader, 
    GL_ARB_vertex_type_10f_11f_11f_rev, GL_ARB_vertex_type_2_10_10_10_rev, 
    GL_ARB_viewport_array, GL_ARB_window_pos, GL_ATI_draw_buffers, 
    GL_ATI_texture_float, GL_ATI_texture_mirror_once, 
    GL_EXTX_framebuffer_mixed_formats, GL_EXT_Cg_shader, GL_EXT_abgr, 
    GL_EXT_bgra, GL_EXT_bindable_uniform, GL_EXT_blend_color, 
    GL_EXT_blend_equation_separate, GL_EXT_blend_func_separate, 
    GL_EXT_blend_minmax, GL_EXT_blend_subtract, GL_EXT_compiled_vertex_array, 
    GL_EXT_depth_bounds_test, GL_EXT_direct_state_access, 
    GL_EXT_draw_buffers2, GL_EXT_draw_instanced, GL_EXT_draw_range_elements, 
    GL_EXT_fog_coord, GL_EXT_framebuffer_blit, GL_EXT_framebuffer_multisample, 
    GL_EXT_framebuffer_multisample_blit_scaled, GL_EXT_framebuffer_object, 
    GL_EXT_framebuffer_sRGB, GL_EXT_geometry_shader4, 
    GL_EXT_gpu_program_parameters, GL_EXT_gpu_shader4, 
    GL_EXT_import_sync_object, GL_EXT_memory_object, GL_EXT_memory_object_fd, 
    GL_EXT_multi_draw_arrays, GL_EXT_packed_depth_stencil, 
    GL_EXT_packed_float, GL_EXT_packed_pixels, GL_EXT_pixel_buffer_object, 
    GL_EXT_point_parameters, GL_EXT_polygon_offset_clamp, 
    GL_EXT_provoking_vertex, GL_EXT_rescale_normal, GL_EXT_secondary_color, 
    GL_EXT_semaphore, GL_EXT_semaphore_fd, GL_EXT_separate_shader_objects, 
    GL_EXT_separate_specular_color, GL_EXT_shader_image_load_formatted, 
    GL_EXT_shader_image_load_store, GL_EXT_shader_integer_mix, 
    GL_EXT_shadow_funcs, GL_EXT_stencil_two_side, GL_EXT_stencil_wrap, 
    GL_EXT_texture3D, GL_EXT_texture_array, GL_EXT_texture_buffer_object, 
    GL_EXT_texture_compression_dxt1, GL_EXT_texture_compression_latc, 
    GL_EXT_texture_compression_rgtc, GL_EXT_texture_compression_s3tc, 
    GL_EXT_texture_cube_map, GL_EXT_texture_edge_clamp, 
    GL_EXT_texture_env_add, GL_EXT_texture_env_combine, 
    GL_EXT_texture_env_dot3, GL_EXT_texture_filter_anisotropic, 
    GL_EXT_texture_integer, GL_EXT_texture_lod, GL_EXT_texture_lod_bias, 
    GL_EXT_texture_mirror_clamp, GL_EXT_texture_object, GL_EXT_texture_sRGB, 
    GL_EXT_texture_sRGB_decode, GL_EXT_texture_shared_exponent, 
    GL_EXT_texture_storage, GL_EXT_texture_swizzle, GL_EXT_timer_query, 
    GL_EXT_transform_feedback2, GL_EXT_vertex_array, GL_EXT_vertex_array_bgra, 
    GL_EXT_vertex_attrib_64bit, GL_EXT_window_rectangles, 
    GL_EXT_x11_sync_object, GL_IBM_rasterpos_clip, 
    GL_IBM_texture_mirrored_repeat, GL_KHR_blend_equation_advanced, 
    GL_KHR_blend_equation_advanced_coherent, GL_KHR_context_flush_control, 
    GL_KHR_debug, GL_KHR_no_error, GL_KHR_robust_buffer_access_behavior, 
    GL_KHR_robustness, GL_KTX_buffer_region, GL_NVX_conditional_render, 
    GL_NVX_gpu_memory_info, GL_NVX_nvenc_interop, GL_NV_ES1_1_compatibility, 
    GL_NV_ES3_1_compatibility, GL_NV_alpha_to_coverage_dither_control, 
    GL_NV_bindless_multi_draw_indirect, 
    GL_NV_bindless_multi_draw_indirect_count, GL_NV_bindless_texture, 
    GL_NV_blend_equation_advanced, GL_NV_blend_equation_advanced_coherent, 
    GL_NV_blend_square, GL_NV_command_list, GL_NV_compute_program5, 
    GL_NV_conditional_render, GL_NV_copy_depth_to_color, GL_NV_copy_image, 
    GL_NV_deep_texture3D, GL_NV_depth_buffer_float, GL_NV_depth_clamp, 
    GL_NV_draw_texture, GL_NV_draw_vulkan_image, GL_NV_explicit_multisample, 
    GL_NV_fence, GL_NV_float_buffer, GL_NV_fog_distance, 
    GL_NV_fragment_program, GL_NV_fragment_program2, 
    GL_NV_fragment_program_option, GL_NV_framebuffer_multisample_coverage, 
    GL_NV_geometry_shader4, GL_NV_gpu_program4, GL_NV_gpu_program4_1, 
    GL_NV_gpu_program5, GL_NV_gpu_program5_mem_extended, 
    GL_NV_gpu_program_fp64, GL_NV_gpu_shader5, GL_NV_half_float, 
    GL_NV_internalformat_sample_query, GL_NV_light_max_exponent, 
    GL_NV_multisample_coverage, GL_NV_multisample_filter_hint, 
    GL_NV_occlusion_query, GL_NV_packed_depth_stencil, 
    GL_NV_parameter_buffer_object, GL_NV_parameter_buffer_object2, 
    GL_NV_path_rendering, GL_NV_pixel_data_range, GL_NV_point_sprite, 
    GL_NV_primitive_restart, GL_NV_register_combiners, 
    GL_NV_register_combiners2, GL_NV_robustness_video_memory_purge, 
    GL_NV_shader_atomic_counters, GL_NV_shader_atomic_float, 
    GL_NV_shader_atomic_int64, GL_NV_shader_buffer_load, 
    GL_NV_shader_storage_buffer_object, GL_NV_shader_thread_group, 
    GL_NV_shader_thread_shuffle, GL_NV_texgen_reflection, 
    GL_NV_texture_barrier, GL_NV_texture_compression_vtc, 
    GL_NV_texture_env_combine4, GL_NV_texture_multisample, 
    GL_NV_texture_rectangle, GL_NV_texture_shader, GL_NV_texture_shader2, 
    GL_NV_texture_shader3, GL_NV_transform_feedback, 
    GL_NV_transform_feedback2, GL_NV_uniform_buffer_unified_memory, 
    GL_NV_vdpau_interop, GL_NV_vertex_array_range, GL_NV_vertex_array_range2, 
    GL_NV_vertex_attrib_integer_64bit, GL_NV_vertex_buffer_unified_memory, 
    GL_NV_vertex_program, GL_NV_vertex_program1_1, GL_NV_vertex_program2, 
    GL_NV_vertex_program2_option, GL_NV_vertex_program3, GL_S3_s3tc, 
    GL_SGIS_generate_mipmap, GL_SGIS_texture_lod, GL_SGIX_depth_texture, 
    GL_SGIX_shadow, GL_SUN_slice_accum

OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 384.90
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:
    GL_ANDROID_extension_pack_es31a, GL_EXT_base_instance, 
    GL_EXT_blend_func_extended, GL_EXT_blend_minmax, GL_EXT_buffer_storage, 
    GL_EXT_clip_cull_distance, GL_EXT_color_buffer_float, 
    GL_EXT_color_buffer_half_float, GL_EXT_compressed_ETC1_RGB8_sub_texture, 
    GL_EXT_copy_image, GL_EXT_debug_label, GL_EXT_discard_framebuffer, 
    GL_EXT_disjoint_timer_query, GL_EXT_draw_buffers_indexed, 
    GL_EXT_draw_elements_base_vertex, GL_EXT_draw_transform_feedback, 
    GL_EXT_float_blend, GL_EXT_frag_depth, GL_EXT_geometry_point_size, 
    GL_EXT_geometry_shader, GL_EXT_gpu_shader5, GL_EXT_map_buffer_range, 
    GL_EXT_memory_object, GL_EXT_memory_object_fd, GL_EXT_multi_draw_indirect, 
    GL_EXT_multisample_compatibility, GL_EXT_occlusion_query_boolean, 
    GL_EXT_polygon_offset_clamp, GL_EXT_primitive_bounding_box, 
    GL_EXT_protected_textures, GL_EXT_render_snorm, GL_EXT_robustness, 
    GL_EXT_sRGB, GL_EXT_sRGB_write_control, GL_EXT_semaphore, 
    GL_EXT_semaphore_fd, GL_EXT_separate_shader_objects, 
    GL_EXT_shader_group_vote, GL_EXT_shader_implicit_conversions, 
    GL_EXT_shader_integer_mix, GL_EXT_shader_io_blocks, 
    GL_EXT_shader_non_constant_global_initializers, GL_EXT_shader_texture_lod, 
    GL_EXT_shadow_samplers, GL_EXT_sparse_texture, 
    GL_EXT_tessellation_point_size, GL_EXT_tessellation_shader, 
    GL_EXT_texture_border_clamp, GL_EXT_texture_buffer, 
    GL_EXT_texture_compression_dxt1, GL_EXT_texture_compression_s3tc, 
    GL_EXT_texture_cube_map_array, GL_EXT_texture_filter_anisotropic, 
    GL_EXT_texture_format_BGRA8888, GL_EXT_texture_norm16, GL_EXT_texture_rg, 
    GL_EXT_texture_sRGB_R8, GL_EXT_texture_sRGB_decode, 
    GL_EXT_texture_storage, GL_EXT_texture_view, GL_EXT_unpack_subimage, 
    GL_EXT_window_rectangles, GL_KHR_blend_equation_advanced, 
    GL_KHR_blend_equation_advanced_coherent, GL_KHR_context_flush_control, 
    GL_KHR_debug, GL_KHR_no_error, GL_KHR_robust_buffer_access_behavior, 
    GL_KHR_robustness, GL_NV_bgr, GL_NV_bindless_texture, 
    GL_NV_blend_equation_advanced, GL_NV_blend_equation_advanced_coherent, 
    GL_NV_conditional_render, GL_NV_copy_buffer, GL_NV_copy_image, 
    GL_NV_draw_buffers, GL_NV_draw_instanced, GL_NV_draw_texture, 
    GL_NV_draw_vulkan_image, GL_NV_explicit_attrib_location, 
    GL_NV_fbo_color_attachments, GL_NV_framebuffer_blit, 
    GL_NV_framebuffer_multisample, GL_NV_generate_mipmap_sRGB, 
    GL_NV_gpu_shader5, GL_NV_image_formats, GL_NV_instanced_arrays, 
    GL_NV_internalformat_sample_query, GL_NV_non_square_matrices, 
    GL_NV_occlusion_query_samples, GL_NV_pack_subimage, GL_NV_packed_float, 
    GL_NV_packed_float_linear, GL_NV_path_rendering, 
    GL_NV_pixel_buffer_object, GL_NV_polygon_mode, GL_NV_read_buffer, 
    GL_NV_read_depth, GL_NV_read_depth_stencil, GL_NV_read_stencil, 
    GL_NV_sRGB_formats, GL_NV_shader_noperspective_interpolation, 
    GL_NV_shadow_samplers_array, GL_NV_shadow_samplers_cube, 
    GL_NV_texture_array, GL_NV_texture_barrier, GL_NV_texture_border_clamp, 
    GL_NV_texture_compression_latc, GL_NV_texture_compression_s3tc, 
    GL_NV_texture_compression_s3tc_update, GL_NV_timer_query, 
    GL_NV_viewport_array, GL_OES_compressed_ETC1_RGB8_texture, 
    GL_OES_copy_image, GL_OES_depth24, GL_OES_depth32, GL_OES_depth_texture, 
    GL_OES_depth_texture_cube_map, GL_OES_draw_buffers_indexed, 
    GL_OES_draw_elements_base_vertex, GL_OES_element_index_uint, 
    GL_OES_fbo_render_mipmap, GL_OES_geometry_point_size, 
    GL_OES_geometry_shader, GL_OES_get_program_binary, GL_OES_gpu_shader5, 
    GL_OES_mapbuffer, GL_OES_packed_depth_stencil, 
    GL_OES_primitive_bounding_box, GL_OES_rgb8_rgba8, GL_OES_sample_shading, 
    GL_OES_sample_variables, GL_OES_shader_image_atomic, 
    GL_OES_shader_io_blocks, GL_OES_shader_multisample_interpolation, 
    GL_OES_standard_derivatives, GL_OES_tessellation_point_size, 
    GL_OES_tessellation_shader, GL_OES_texture_border_clamp, 
    GL_OES_texture_buffer, GL_OES_texture_cube_map_array, 
    GL_OES_texture_float, GL_OES_texture_float_linear, 
    GL_OES_texture_half_float, GL_OES_texture_half_float_linear, 
    GL_OES_texture_npot, GL_OES_texture_stencil8, 
    GL_OES_texture_storage_multisample_2d_array, GL_OES_texture_view, 
    GL_OES_vertex_array_object, GL_OES_vertex_half_float, 
    GL_OES_viewport_array

Любая подсказка? Я делаю что-то неправильно?

Редактировать:

Из es2_info:

EGL_VERSION: 1.4
EGL_VENDOR: NVIDIA
EGL_CLIENT_APIS: OpenGL_ES OpenGL
GL_VERSION: OpenGL ES 3.2 NVIDIA 384.90
GL_RENDERER: Quadro M2000M/PCIe/SSE2

Я удалил расширения. Ограничение переполнения стека

2 ответа

Решение

ОРИГИНАЛЬНЫЙ ОТВЕТ 28 ноября 2017 г.:

Я думаю, что это ошибка в последней версии пакета nvidia:

https://bugs.launchpad.net/ubuntu/+source/nvidia-graphics-drivers-384/+bug/1731968

Релиз: Ubuntu 16.04.3 LTS

Версия пакета: 384.90-0ubuntu0.16.04.2

В последнем драйвере 384.90-0ubuntu0.16.04.2 инициализация EGL теперь нарушена, и возвращенный контекст GL является непоследовательным, что приводит к сбоям. Я подготовил свернутый тестовый пример, который демонстрирует проблему с последним драйвером. Я также удостоверился, что он работает нормально с обеими предыдущими версиями 384.90-0ubuntu0.16.04.1 и 384.81-0ubuntu1 в чистой установке.

Моя программа EGL отлично работает на моем сервере prod, где у меня есть следующие пакеты nvidia:

$ dpkg -l | grep nvidia
ii  nvidia-367                            375.66-0ubuntu0.16.04.1                    amd64        Transitional package for nvidia-375
ii  nvidia-375                            384.90-0ubuntu0.16.04.1                    amd64        Transitional package for nvidia-384
ii  nvidia-384                            384.90-0ubuntu0.16.04.1                    amd64        NVIDIA binary driver - version 384.90
rc  nvidia-opencl-icd-375                 384.90-0ubuntu0.16.04.1                    amd64        Transitional package for nvidia-opencl-icd-384
ii  nvidia-opencl-icd-384                 384.90-0ubuntu0.16.04.1                    amd64        NVIDIA OpenCL ICD
ii  nvidia-prime                          0.8.2                                      amd64        Tools to enable NVIDIA's Prime
ii  nvidia-settings                       361.42-0ubuntu1                            amd64        Tool for configuring the NVIDIA graphics driver

Но на моем тестовом сервере он начал давать сбой после установки обновлений (apt-get update с последующим apt-get upgrade), где у меня тогда были эти пакеты nvidia:

$ dpkg -l | grep nvidia
ii  nvidia-367                            375.66-0ubuntu0.16.04.1                    amd64        Transitional package for nvidia-375
ii  nvidia-375                            384.90-0ubuntu0.16.04.2                    amd64        Transitional package for nvidia-384
ii  nvidia-384                            384.90-0ubuntu0.16.04.2                    amd64        NVIDIA binary driver - version 384.90
ii  nvidia-opencl-icd-384                 384.90-0ubuntu0.16.04.2                    amd64        NVIDIA OpenCL ICD
ii  nvidia-prime                          0.8.2                                      amd64        Tools to enable NVIDIA's Prime
ii  nvidia-settings                       361.42-0ubuntu1                            amd64        Tool for configuring the NVIDIA graphics driver

Я понизил пакет nvidia-384 до более старой версии:

$ sudo apt-get install nvidia-384=384.90-0ubuntu0.16.04.1

Потом перезагрузился. После этого у меня теперь есть это:

$ dpkg -l | grep nvidia
ii  nvidia-367                            375.66-0ubuntu0.16.04.1                    amd64        Transitional package for nvidia-375
ii  nvidia-375                            384.90-0ubuntu0.16.04.2                    amd64        Transitional package for nvidia-384
ii  nvidia-384                            384.90-0ubuntu0.16.04.1                    amd64        NVIDIA binary driver - version 384.90
ii  nvidia-opencl-icd-384                 384.90-0ubuntu0.16.04.2                    amd64        NVIDIA OpenCL ICD
ii  nvidia-prime                          0.8.2                                      amd64        Tools to enable NVIDIA's Prime
ii  nvidia-settings                       361.42-0ubuntu1                            amd64        Tool for configuring the NVIDIA graphics driver

И теперь моя программа EGL снова работает!

ОБНОВЛЕНИЕ 15 января 2018 года:

Несколько дней назад Ubuntu выпустила обновление 384.111, которое содержит исправление для одной из уязвимостей Spectre:

https://bugs.launchpad.net/ubuntu/+source/nvidia-graphics-drivers-384/+bug/1741807

Согласно http://nvidia.custhelp.com/app/answers/detail/a_id/4611 драйвер NVIDIA необходимо обновить до 384.111, чтобы исправить уязвимости Spectre в модулях ядра NVIDIA (вместе с будущими исправлениями безопасности ядра).

Это обновление было применено автоматически и снова сломало EGL на моем сервере с установленными следующими пакетами:

$ dpkg -l | grep nvidia
ii  nvidia-367                            375.66-0ubuntu0.16.04.1                    amd64        Transitional package for nvidia-375
ii  nvidia-375                            384.111-0ubuntu0.16.04.1                   amd64        Transitional package for nvidia-384
ii  nvidia-384                            384.111-0ubuntu0.16.04.1                   amd64        NVIDIA binary driver - version 384.111
rc  nvidia-opencl-icd-375                 384.90-0ubuntu0.16.04.1                    amd64        Transitional package for nvidia-opencl-icd-384
ii  nvidia-opencl-icd-384                 384.111-0ubuntu0.16.04.1                   amd64        NVIDIA OpenCL ICD
ii  nvidia-prime                          0.8.2                                      amd64        Tools to enable NVIDIA's Prime
ii  nvidia-settings                       361.42-0ubuntu1                            amd64        Tool for configuring the NVIDIA graphics driver

Предыдущее исправление для понижения до 384.90-0ubuntu0.16.04.1 больше не работает:

$ sudo apt-get install nvidia-384=384.90-0ubuntu0.16.04.1
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Version '384.90-0ubuntu0.16.04.1' for 'nvidia-384' was not found

Это потому, что он был заменен и удален 10 января 2018 года:

https://launchpad.net/ubuntu/+source/nvidia-graphics-drivers-384/+publishinghistory

Я смог обойти это, удалив все пакеты NVIDIA:

$ sudo apt-get purge nvidia*

А затем вручную установить драйвер 384.90:

$ wget https://launchpad.net/ubuntu/+archive/primary/+files/nvidia-graphics-drivers-384_384.90.orig.tar.gz
$ tar xzf nvidia-graphics-drivers-384_384.90.orig.tar.gz
$ cd nvidia-graphics-drivers-384_384.90
$ chmod u+x NVIDIA-Linux-x86_64-384.90-no-compat32.run
$ sudo ./NVIDIA-Linux-x86_64-384.90-no-compat32.run

Моя программа EGL теперь снова заработала. Тем не менее, обратите внимание, что сейчас он работает с непатентованным драйвером, поэтому он может не подойти вам, так как он может открыть вашу систему для уязвимостей.

ОБНОВЛЕНИЕ 15 января 2018 года (часть 2):

Просто для некоторого дополнительного фона / ссылки, я также попробовал бета-версию 390.12 отсюда, которая была выпущена 13 января:

https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa

Я сделал следующее:

$ sudo apt-get purge nvidia*
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update
$ sudo apt-get install nvidia-390

Что приводит к следующему списку установленных пакетов:

$ dpkg -l | grep nvidia
ii  nvidia-390                            390.12-0ubuntu0~gpu16.04.2                 amd64        NVIDIA binary driver - version 390.12
ii  nvidia-opencl-icd-390                 390.12-0ubuntu0~gpu16.04.2                 amd64        NVIDIA OpenCL ICD
ii  nvidia-prime                          0.8.2                                      amd64        Tools to enable NVIDIA's Prime
ii  nvidia-settings                       390.12-0ubuntu0~gpu16.04.1                 amd64        Tool for configuring the NVIDIA graphics driver

Однако EGL все еще не работает.

ОБНОВЛЕНИЕ 16 марта 2018 года:

Бета-версия 390.25 была выпущена 30 января. Чтобы попробовать это, я снова сделал следующее:

$ sudo apt-get purge nvidia*
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update
$ sudo apt-get install nvidia-390

Что приводит к следующему списку установленных пакетов:

$ dpkg -l | grep nvidia
ii  nvidia-390                            390.25-0ubuntu0~gpu16.04.1                 amd64        NVIDIA binary driver - version 390.25
ii  nvidia-opencl-icd-390                 390.25-0ubuntu0~gpu16.04.1                 amd64        NVIDIA OpenCL ICD
ii  nvidia-prime                          0.8.2                                      amd64        Tools to enable NVIDIA's Prime
ii  nvidia-settings                       390.25-0ubuntu0~gpu16.04.1                 amd64        Tool for configuring the NVIDIA graphics driver

Однако EGL все еще не работает.

ОБНОВЛЕНИЕ 17 мая 2018 года:

Я настраивал новый сервер, и поэтому попробовал это снова.

На https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa "долгоживущий выпуск ветки" теперь находится в 390.48 (выпущен 18 апреля), а "недолговечный выпуск ветки" теперь в 396,24 (выпущен 3 мая).

Я попробовал 390.48:

$ sudo apt-get purge nvidia*
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update
$ sudo apt-get install nvidia-390

Что привело к следующему списку установленных пакетов:

$ dpkg -l | grep nvidia
ii  nvidia-390                            390.48-0ubuntu0~gpu16.04.3                 amd64        NVIDIA binary driver - version 390.48
ii  nvidia-opencl-icd-390                 390.48-0ubuntu0~gpu16.04.3                 amd64        NVIDIA OpenCL ICD
ii  nvidia-prime                          0.8.2                                      amd64        Tools to enable NVIDIA's Prime
ii  nvidia-settings                       396.24-0ubuntu0~gpu16.04.1                 amd64        Tool for configuring the NVIDIA graphics driver

Однако EGL все еще не работает.

Я попробовал 396.24:

$ sudo apt-get purge nvidia*
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update
$ sudo apt-get install nvidia-396

Что привело к следующему списку установленных пакетов:

$ dpkg -l | grep nvidia
ii  nvidia-396                            396.24-0ubuntu0~gpu16.04.1                 amd64        NVIDIA binary driver - version 396.24
ii  nvidia-opencl-icd-396                 396.24-0ubuntu0~gpu16.04.1                 amd64        NVIDIA OpenCL ICD
ii  nvidia-prime                          0.8.2                                      amd64        Tools to enable NVIDIA's Prime
ii  nvidia-settings                       396.24-0ubuntu0~gpu16.04.1                 amd64        Tool for configuring the NVIDIA graphics driver

Однако EGL все еще не работает.

Установка драйвера 384.90 по-прежнему работает вручную.

Ранее я устанавливал на серверы AWS g2.2xlarge. На этот раз я выполнял установку на сервере Azure NC6 и мне пришлось отключить объединенную память, иначе установка не удалась бы, т. Е.

$ sudo apt-get purge nvidia*
$ wget https://launchpad.net/ubuntu/+archive/primary/+files/nvidia-graphics-drivers-384_384.90.orig.tar.gz
$ tar xzf nvidia-graphics-drivers-384_384.90.orig.tar.gz
$ cd nvidia-graphics-drivers-384_384.90
$ chmod u+x NVIDIA-Linux-x86_64-384.90-no-compat32.run
$ sudo ./NVIDIA-Linux-x86_64-384.90-no-compat32.run --no-unified-memory

Обратите внимание, что без единой памяти CUDA недоступна.

Также обратите внимание, как упоминалось выше, это все еще не исправленный драйвер, выпущенный до исправления уязвимости Spectre.

ОБНОВЛЕНИЕ 25 июня 2018 года:

С https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa последние версии теперь 390.67 (выпущено 7 июня) и 396.24.02 (выпущено 4 июня).

Я попробовал 390.67:

$ sudo apt-get purge nvidia*
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update
$ sudo apt-get install nvidia-390
$ sudo reboot
[after reboot]
$ dpkg -l | grep nvidia
ii  nvidia-390                            390.67-0ubuntu0~gpu16.04.1                 amd64        NVIDIA binary driver - version 390.67
ii  nvidia-opencl-icd-390                 390.67-0ubuntu0~gpu16.04.1                 amd64        NVIDIA OpenCL ICD
ii  nvidia-prime                          0.8.2                                      amd64        Tools to enable NVIDIA's Prime
ii  nvidia-settings                       396.24-0ubuntu0~gpu16.04.1                 amd64        Tool for configuring the NVIDIA graphics driver

EGL все еще не работал.

Я попробовал 396.24.02:

$ sudo apt-get purge nvidia*
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update
$ sudo apt-get install nvidia-396
$ sudo reboot
[after reboot]
$ dpkg -l | grep nvidia
ii  nvidia-396                            396.24.02-0ubuntu0~gpu16.04.1              amd64        NVIDIA binary driver - version 396.24.02
ii  nvidia-opencl-icd-396                 396.24.02-0ubuntu0~gpu16.04.1              amd64        NVIDIA OpenCL ICD
ii  nvidia-prime                          0.8.2                                      amd64        Tools to enable NVIDIA's Prime
ii  nvidia-settings                       396.24-0ubuntu0~gpu16.04.1                 amd64        Tool for configuring the NVIDIA graphics driver

EGL все еще не работал.

Я также попробовал 384.130 (выпущен 29 марта 2018 года), который является "старым долгоживущим выпуском ветки":

$ sudo apt-get purge nvidia*
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update
$ sudo apt-get install nvidia-384
$ sudo reboot
[after reboot]
$ dpkg -l | grep nvidia
ii  nvidia-384                            384.130-0ubuntu0.16.04.1                   amd64        NVIDIA binary driver - version 384.130
ii  nvidia-opencl-icd-384                 384.130-0ubuntu0.16.04.1                   amd64        NVIDIA OpenCL ICD
ii  nvidia-prime                          0.8.2                                      amd64        Tools to enable NVIDIA's Prime
ii  nvidia-settings                       396.24-0ubuntu0~gpu16.04.1                 amd64        Tool for configuring the NVIDIA graphics driver

EGL все еще не работал.

Причина, по которой я попробовал это снова сегодня, заключается в том, что EGL перестал работать на моем сервере после перезагрузки.

Ручная установка старого драйвера 384.90 (который раньше работал для меня, как описано в предыдущих обновлениях) завершится неудачно со следующими ошибками в /var/log/nvidia-installer.log:

/tmp/selfgz3957/NVIDIA-Linux-x86_64-384.90-no-compat32/kernel/nvidia/nv.c: In function ‘nv_start_rc_timer’:
/tmp/selfgz3957/NVIDIA-Linux-x86_64-384.90-no-compat32/kernel/nvidia/nv.c:3206:5: error: implicit declaration of function ‘init_timer’ [-Werror=implicit-function-declaration]
     init_timer(&nvl->rc_timer);
     ^
/tmp/selfgz3957/NVIDIA-Linux-x86_64-384.90-no-compat32/kernel/nvidia/nv.c:3207:28: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
     nvl->rc_timer.function = nvidia_rc_timer;
                            ^
/tmp/selfgz3957/NVIDIA-Linux-x86_64-384.90-no-compat32/kernel/nvidia/nv.c:3208:18: error: ‘struct timer_list’ has no member named ‘data’
     nvl->rc_timer.data = (unsigned long) nvl;

Эта ошибка произошла из-за того, что API таймеров Linux был изменен в ядре 4.15:

https://lwn.net/Articles/735887/

https://github.com/torvalds/linux/commit/513ae785c63c30741e46f43960213d4ae5382ec0

И мой сервер недавно обновился до ядра 4.15:

$ uname -r
4.15.0-1013-azure

$ grep install /var/log/dpkg.log | grep linux-image
2018-06-18 04:13:09 install linux-image-4.15.0-1013-azure:amd64 <none> 4.15.0-1013.13~16.04.2
2018-06-18 04:13:09 status half-installed linux-image-4.15.0-1013-azure:amd64 4.15.0-1013.13~16.04.2
2018-06-18 04:13:10 status half-installed linux-image-azure:amd64 4.13.0.1018.19
2018-06-18 04:13:10 status half-installed linux-image-azure:amd64 4.13.0.1018.19
2018-06-18 04:13:58 status installed linux-image-4.15.0-1013-azure:amd64 4.15.0-1013.13~16.04.2
2018-06-18 04:13:59 status installed linux-image-azure:amd64 4.15.0.1013.20
2018-06-18 04:14:13 status installed linux-image-4.15.0-1013-azure:amd64 4.15.0-1013.13~16.04.2

Чтобы старый драйвер работал, я вернулся к ядру 4.13, используя эти инструкции для изменения конфигурации grub. Сначала я проверил, какие пункты меню grub были доступны:

$ grep menuentry /boot/grub/grub.cfg
if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-dfb884db-c6ad-4c7a-8075-98cf640a2892' {
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-dfb884db-c6ad-4c7a-8075-98cf640a2892' {
    menuentry 'Ubuntu, with Linux 4.15.0-1013-azure' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-1013-azure-advanced-dfb884db-c6ad-4c7a-8075-98cf640a2892' {
    menuentry 'Ubuntu, with Linux 4.15.0-1013-azure (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-1013-azure-init-upstart-dfb884db-c6ad-4c7a-8075-98cf640a2892' {
    menuentry 'Ubuntu, with Linux 4.15.0-1013-azure (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-1013-azure-recovery-dfb884db-c6ad-4c7a-8075-98cf640a2892' {
    menuentry 'Ubuntu, with Linux 4.13.0-1018-azure' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.13.0-1018-azure-advanced-dfb884db-c6ad-4c7a-8075-98cf640a2892' {
    menuentry 'Ubuntu, with Linux 4.13.0-1018-azure (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.13.0-1018-azure-init-upstart-dfb884db-c6ad-4c7a-8075-98cf640a2892' {
    menuentry 'Ubuntu, with Linux 4.13.0-1018-azure (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.13.0-1018-azure-recovery-dfb884db-c6ad-4c7a-8075-98cf640a2892' {
    menuentry 'Ubuntu, with Linux 4.13.0-1016-azure' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.13.0-1016-azure-advanced-dfb884db-c6ad-4c7a-8075-98cf640a2892' {
    menuentry 'Ubuntu, with Linux 4.13.0-1016-azure (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.13.0-1016-azure-init-upstart-dfb884db-c6ad-4c7a-8075-98cf640a2892' {
    menuentry 'Ubuntu, with Linux 4.13.0-1016-azure (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.13.0-1016-azure-recovery-dfb884db-c6ad-4c7a-8075-98cf640a2892' {

Ядро, которое я хотел, было Ubuntu, with Linux 4.13.0-1018-azure под Advanced options for Ubuntu подменю.

Поэтому я отредактировал / etc / default / grub, чтобы изменить строку GRUB_DEFAULT на:

GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.13.0-1018-azure"

Затем:

$ sudo update-grub

Затем перезагрузите компьютер и проверьте ядро:

$ uname -r
4.13.0-1018-azure

Затем я смог заставить EGL снова работать со старым драйвером 384.90.

ОБНОВЛЕНИЕ 13 февраля 2019 года:

Я достиг предела в 30000 символов в моем другом ответе, и поэтому должен был опубликовать это как отдельный ответ.

Я наткнулся на это сообщение в блоге nvidia о связывании OpenGL для рендеринга на стороне сервера.

Это включает в себя следующее (выделение мое):

Когда 17 лет назад был представлен классический двоичный интерфейс приложений OpenGL (ABI), единственной широко используемой системой управления окнами и дисплеями в Linux была X11. Управление контекстом OpenGL, которое не является частью самого OpenGL, поэтому было синонимом API glX. И поскольку единственный способ использовать OpenGL в Linux был через glX, функции для OpenGL и glX были объединены в одну и ту же библиотеку, libGL.so.

Связать приложение OpenGL было просто: вам нужно было только связать файл libGL.so.

С годами ситуация изменилась, и появился широкий спектр дисплеев. Люди хотят иметь диспетчеры отображения на основе X11 в одной системе с Wayland или использовать аппаратно-ускоренный OpenGL в той же системе с программным эмулированием OpenGL. Это требует более четкого разделения между библиотекой OpenGL и библиотеками управления контекстом OpenGL.

GLVND, OpenGL Vendor Neutral Dispatch для Linux, был создан для удовлетворения этого требования.

Чтобы использовать glX и OpenGL сегодня, вы должны ссылаться на libOpenGL.so, а также на libGLX.so. Первый содержит символы OpenGL, последний - символы GLX. Если вы хотите вместо этого использовать управление контекстом EGL, создайте ссылку на libOpenGL.so и libEGL.so.

Итак, это говорит о том, что для использования EGL я должен ссылаться на libOpenGL.so вместо libGL.so.

Чтобы проверить это, я сначала установил драйверы, используя менеджер пакетов:

$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update
$ sudo apt-get install nvidia-410
$ sudo reboot
[after reboot]
$ dpkg -l | grep nvidia
ii  nvidia-410                            410.78-0ubuntu0~gpu16.04.1                 amd64        NVIDIA binary driver - version 410.78
ii  nvidia-opencl-icd-410                 410.78-0ubuntu0~gpu16.04.1                 amd64        NVIDIA OpenCL ICD
ii  nvidia-prime                          0.8.2                                      amd64        Tools to enable NVIDIA's Prime
ii  nvidia-settings                       415.27-0ubuntu0~gpu16.04.1                 amd64        Tool for configuring the NVIDIA graphics driver
$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  410.78  Sat Nov 10 22:09:04 CST 2018
GCC version:  gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.11)

Как было показано ранее, EGL дает сбой с упакованным драйвером при связывании тестового приложения с libGL.so:

$ wget https://gist.githubusercontent.com/funchal/bff0a8d6dae5b3ace1a88c392416b5bc/raw/1427821a2390a30779881ab59c55b5550a468919/main.c
$ gcc main.c -lGL -lEGL
$ ./a.out
egl 1.5
a.out: main.c:53: main: Assertion `renderer' failed.
Aborted (core dumped)

Машина содержит как libGL.so, так и libOpenGL.so:

$ sudo find /usr -name libGL.so
/usr/lib32/nvidia-410/libGL.so
/usr/lib/nvidia-410/libGL.so
/usr/lib/x86_64-linux-gnu/mesa/libGL.so
/usr/lib/x86_64-linux-gnu/libGL.so
$ sudo find /usr -name libOpenGL.so
/usr/lib32/nvidia-410/libOpenGL.so
/usr/lib/nvidia-410/libOpenGL.so
$ sudo find /usr -name libEGL.so
/usr/lib32/nvidia-410/libEGL.so
/usr/lib/nvidia-410/libEGL.so
/usr/lib/x86_64-linux-gnu/mesa-egl/libEGL.so
/usr/lib/x86_64-linux-gnu/libEGL.so

Связывание тестового приложения с libOpenGL.so работает!

$ wget https://gist.githubusercontent.com/funchal/bff0a8d6dae5b3ace1a88c392416b5bc/raw/1427821a2390a30779881ab59c55b5550a468919/main.c
$ gcc main.c -L/usr/lib/nvidia-410 -lOpenGL -lEGL
$ ./a.out
egl 1.5
renderer: Tesla K80/PCIe/SSE2
version: 4.6.0 NVIDIA 410.78

Затем я проверил установку драйверов через файл запуска:

$ wget -L http://us.download.nvidia.com/XFree86/Linux-x86_64/410.93/NVIDIA-Linux-x86_64-410.93.run
$ sudo sh NVIDIA-Linux-x86_64-410.93.run
$ sudo reboot
[after reboot]
$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  410.93  Thu Dec 20 17:01:16 CST 2018
GCC version:  gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10)

Доступны следующие библиотеки:

$ sudo find /usr -name libGL.so
/usr/lib32/libGL.so
/usr/lib/x86_64-linux-gnu/libGL.so
$ sudo find /usr -name libOpenGL.so
/usr/lib32/libOpenGL.so
/usr/lib/x86_64-linux-gnu/libOpenGL.so
$ sudo find /usr -name libEGL.so
/usr/lib32/libEGL.so
/usr/lib/x86_64-linux-gnu/libEGL.so

Как видно из предыдущего обновления от 8 января, с драйверами, установленными с помощью файла запуска, EGL работает с libGL.so:

$ wget https://gist.githubusercontent.com/funchal/bff0a8d6dae5b3ace1a88c392416b5bc/raw/1427821a2390a30779881ab59c55b5550a468919/main.c
$ gcc main.c -lGL -lEGL
$ ./a.out
egl 1.5
renderer: Tesla K80/PCIe/SSE2
version: 4.6.0 NVIDIA 410.93

EGL также работает при связывании с libOpenGL.so:

$ wget https://gist.githubusercontent.com/funchal/bff0a8d6dae5b3ace1a88c392416b5bc/raw/1427821a2390a30779881ab59c55b5550a468919/main.c
$ gcc main.c -lOpenGL -lEGL
$ ./a.out
egl 1.5
renderer: Tesla K80/PCIe/SSE2
version: 4.6.0 NVIDIA 410.93

Я не уверен, связано ли это с этим, но я заметил, что файл запуска и упакованные драйверы имеют разные зависимости, связанные с libGL.so. Установленные в файле запуска драйверы имеют следующие зависимости, включая libGLX.so:

$ ldd /usr/lib/x86_64-linux-gnu/libGL.so
    linux-vdso.so.1 =>  (0x00007fff28ce5000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fda5af05000)
    libGLX.so.0 => /usr/lib/x86_64-linux-gnu/libGLX.so.0 (0x00007fda5acd5000)
    libGLdispatch.so.0 => /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007fda5aa02000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fda5a638000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fda5b3b2000)
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fda5a2fe000)
    libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007fda5a0ec000)
    libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fda59eca000)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fda59cc6000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fda59ac0000)

Хотя драйверы, установленные в пакете, не зависят от libGLX.so, вместо этого они содержат libnvidia-tls.so и libnvidia-glcore.so в качестве зависимостей:

$ ldd /usr/lib/nvidia-410/libGL.so
    linux-vdso.so.1 =>  (0x00007fff139dd000)
    libnvidia-tls.so.410.78 => /usr/lib/nvidia-410/tls/libnvidia-tls.so.410.78 (0x00007fed5efef000)
    libnvidia-glcore.so.410.78 => /usr/lib/nvidia-410/libnvidia-glcore.so.410.78 (0x00007fed5d414000)
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fed5d0da000)
    libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007fed5cec8000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fed5cafe000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fed5c8fa000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fed5c5f1000)
    libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fed5c3cf000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fed5f531000)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fed5c1cb000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fed5bfc5000)

Чтобы подвести итог окончательного решения этой проблемы:

Ссылка на libOpenGL.so вместо libGL.so!

#define GLEW_EGL в командной строке gcc, чтобы glew.c использования eglGetProcAddress() вместо glXGetProcAddressARB():

g++ -DGLEW_EGL -DGLEW_STATIC -Iglew-2.1.0/include main.cpp glew-2.1.0/src/glew.c -lGL -lEGL
    ^^^^^^^^^^ this is where the magic happens

Сборка этого кода с последним архивом GLEW 2.1.0:

#include <GL/glew.h>
#include <EGL/egl.h>
#include <iostream>

int main(int argc, char **argv)
{
    EGLDisplay display = eglGetDisplay( EGL_DEFAULT_DISPLAY ) ;
    if( display == EGL_NO_DISPLAY )
    {
        std:: cout << "ERROR: EGL could not be initialized"<< std::endl;
        exit(EXIT_FAILURE);
    }

    if( eglInitialize( display, nullptr, nullptr ) != EGL_TRUE )
    {
        std:: cout << "ERROR: Could not start EGL display connection"<< std::endl;
        exit(EXIT_FAILURE);
    }

    EGLConfig config;
    EGLint num_config = 0;
    if( eglChooseConfig( display, nullptr, &config, 1, &num_config ) != EGL_TRUE )
    {
        std:: cout << "ERROR: Configuration selection failed" << std::endl;
        exit(EXIT_FAILURE);
    }
    if( num_config == 0 )
    {
        std:: cout << "ERROR: No configurations" << std::endl;
        exit(EXIT_FAILURE);
    }

    eglBindAPI( EGL_OPENGL_API );
    EGLContext context = eglCreateContext( display, config, EGL_NO_CONTEXT, NULL );
    if( eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, context) != EGL_TRUE )
    {
        std:: cout << "ERROR: Display was not made current one"<< std::endl;
        exit(EXIT_FAILURE);
    }

    GLenum err = glewInit();
    if (GLEW_OK != err)
    {
        std:: cout << "GLEW Error: " << glewGetErrorString(err) << std::endl;
        exit(EXIT_FAILURE);
    }

    std::cout << glGetString( GL_VERSION ) << std::endl;
    std::cout << glGetString( GL_VENDOR ) << std::endl;
    std::cout << glGetString( GL_RENDERER ) << std::endl;

    return 0;
}

... дает мне это в моей системе Debian Stretch в X11:

3.0 Mesa 13.0.6
Intel Open Source Technology Center
Mesa DRI Intel(R) Kabylake GT2 
Другие вопросы по тегам