From 9f97f994c3f65e44e46b464d3257adfeafac87e5 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Tue, 13 Apr 2021 18:40:51 -0400 Subject: [PATCH] glx: Enable pure-client-library extensions explicitly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These are rare enough to not be worth tracking separately. Especially since after this change all the known_gl_extensions have N for both direct_support and direct_only (unsurprising, since that's only used to compute usable indirect extensions). Reviewed-by: Marek Olšák Part-of: --- src/glx/glxextensions.c | 390 +++++++++++++++++++--------------------- 1 file changed, 181 insertions(+), 209 deletions(-) diff --git a/src/glx/glxextensions.c b/src/glx/glxextensions.c index 1695b2c55b6..fd797ab9df5 100644 --- a/src/glx/glxextensions.c +++ b/src/glx/glxextensions.c @@ -68,21 +68,6 @@ struct extension_info */ unsigned char direct_support; - /** - * The extension depends only on client support. - * - * This is for extensions like GLX_ARB_get_proc_address that are contained - * entirely in the client library. There is no dependency on the server or - * the direct-renderer. - * - * \note - * An extension \b cannot be both client-only and direct-only because being - * direct-only implies a dependency on the direct renderer. - * - * \sa ::direct_only - */ - unsigned char client_only; - /** * The extension only functions with direct-rendering contexts * @@ -90,199 +75,192 @@ struct extension_info * dependency on the server. The functionality is contained entirely in * the client library and the direct renderer. A few of the swap-related * extensions are intended to behave this way. - * - * \note - * An extension \b cannot be both client-only and direct-only because being - * client-only implies that all functionality is outside the - * direct-renderer. - * - * \sa ::client_only */ unsigned char direct_only; }; /* *INDENT-OFF* */ static const struct extension_info known_glx_extensions[] = { - { GLX(ARB_context_flush_control), N, N, N }, - { GLX(ARB_create_context), N, N, N }, - { GLX(ARB_create_context_no_error), N, N, N }, - { GLX(ARB_create_context_profile), N, N, N }, - { GLX(ARB_create_context_robustness), N, N, N }, - { GLX(ARB_fbconfig_float), Y, N, N }, - { GLX(ARB_framebuffer_sRGB), Y, N, N }, - { GLX(ARB_get_proc_address), N, Y, N }, - { GLX(ARB_multisample), Y, N, N }, - { GLX(EXT_buffer_age), N, N, Y }, - { GLX(EXT_create_context_es2_profile), N, N, N }, - { GLX(EXT_create_context_es_profile), N, N, N }, - { GLX(EXT_fbconfig_packed_float), Y, N, N }, - { GLX(EXT_framebuffer_sRGB), Y, N, N }, - { GLX(EXT_import_context), Y, N, N }, - { GLX(EXT_swap_control), N, N, Y }, - { GLX(EXT_swap_control_tear), N, N, Y }, - { GLX(EXT_texture_from_pixmap), N, N, N }, - { GLX(EXT_visual_info), Y, N, N }, - { GLX(EXT_visual_rating), Y, N, N }, - { GLX(ATI_pixel_format_float), N, N, N }, - { GLX(INTEL_swap_event), N, N, N }, - { GLX(MESA_copy_sub_buffer), N, N, N }, - { GLX(MESA_multithread_makecurrent), N, N, Y }, - { GLX(MESA_query_renderer), N, N, Y }, - { GLX(MESA_swap_control), N, N, Y }, - { GLX(NV_float_buffer), N, N, N }, - { GLX(OML_swap_method), Y, N, N }, - { GLX(OML_sync_control), N, N, Y }, - { GLX(SGIS_multisample), Y, N, N }, - { GLX(SGIX_fbconfig), Y, N, N }, - { GLX(SGIX_pbuffer), Y, N, N }, - { GLX(SGIX_visual_select_group), Y, N, N }, - { GLX(SGI_make_current_read), N, N, N }, - { GLX(SGI_swap_control), N, N, N }, - { GLX(SGI_video_sync), N, N, Y }, + { GLX(ARB_context_flush_control), N, N }, + { GLX(ARB_create_context), N, N }, + { GLX(ARB_create_context_no_error), N, N }, + { GLX(ARB_create_context_profile), N, N }, + { GLX(ARB_create_context_robustness), N, N }, + { GLX(ARB_fbconfig_float), Y, N }, + { GLX(ARB_framebuffer_sRGB), Y, N }, + { GLX(ARB_get_proc_address), N, N }, + { GLX(ARB_multisample), Y, N }, + { GLX(EXT_buffer_age), N, Y }, + { GLX(EXT_create_context_es2_profile), N, N }, + { GLX(EXT_create_context_es_profile), N, N }, + { GLX(EXT_fbconfig_packed_float), Y, N }, + { GLX(EXT_framebuffer_sRGB), Y, N }, + { GLX(EXT_import_context), Y, N }, + { GLX(EXT_swap_control), N, Y }, + { GLX(EXT_swap_control_tear), N, Y }, + { GLX(EXT_texture_from_pixmap), N, N }, + { GLX(EXT_visual_info), Y, N }, + { GLX(EXT_visual_rating), Y, N }, + { GLX(ATI_pixel_format_float), N, N }, + { GLX(INTEL_swap_event), N, N }, + { GLX(MESA_copy_sub_buffer), N, N }, + { GLX(MESA_multithread_makecurrent), N, Y }, + { GLX(MESA_query_renderer), N, Y }, + { GLX(MESA_swap_control), N, Y }, + { GLX(NV_float_buffer), N, N }, + { GLX(OML_swap_method), Y, N }, + { GLX(OML_sync_control), N, Y }, + { GLX(SGIS_multisample), Y, N }, + { GLX(SGIX_fbconfig), Y, N }, + { GLX(SGIX_pbuffer), Y, N }, + { GLX(SGIX_visual_select_group), Y, N }, + { GLX(SGI_make_current_read), N, N }, + { GLX(SGI_swap_control), N, N }, + { GLX(SGI_video_sync), N, Y }, { NULL } }; static const struct extension_info known_gl_extensions[] = { - { GL(ARB_depth_texture), N, N, N }, - { GL(ARB_draw_buffers), N, N, N }, - { GL(ARB_fragment_program), N, N, N }, - { GL(ARB_fragment_program_shadow), N, N, N }, - { GL(ARB_framebuffer_object), N, N, N }, - { GL(ARB_imaging), N, N, N }, - { GL(ARB_multisample), N, N, N }, - { GL(ARB_multitexture), N, N, N }, - { GL(ARB_occlusion_query), N, N, N }, - { GL(ARB_point_parameters), N, N, N }, - { GL(ARB_point_sprite), N, N, N }, - { GL(ARB_shadow), N, N, N }, - { GL(ARB_shadow_ambient), N, N, N }, - { GL(ARB_texture_border_clamp), N, N, N }, - { GL(ARB_texture_compression), N, N, N }, - { GL(ARB_texture_cube_map), N, N, N }, - { GL(ARB_texture_env_add), N, N, N }, - { GL(ARB_texture_env_combine), N, N, N }, - { GL(ARB_texture_env_crossbar), N, N, N }, - { GL(ARB_texture_env_dot3), N, N, N }, - { GL(ARB_texture_filter_anisotropic), N, N, N }, - { GL(ARB_texture_mirrored_repeat), N, N, N }, - { GL(ARB_texture_non_power_of_two), N, N, N }, - { GL(ARB_texture_rectangle), N, N, N }, - { GL(ARB_texture_rg), N, N, N }, - { GL(ARB_transpose_matrix), N, Y, N }, - { GL(ARB_vertex_program), N, N, N }, - { GL(ARB_window_pos), N, N, N }, - { GL(EXT_abgr), N, N, N }, - { GL(EXT_bgra), N, N, N }, - { GL(EXT_blend_color), N, N, N }, - { GL(EXT_blend_equation_separate), N, N, N }, - { GL(EXT_blend_func_separate), N, N, N }, - { GL(EXT_blend_logic_op), N, N, N }, - { GL(EXT_blend_minmax), N, N, N }, - { GL(EXT_blend_subtract), N, N, N }, - { GL(EXT_clip_volume_hint), N, N, N }, - { GL(EXT_copy_texture), N, N, N }, - { GL(EXT_draw_range_elements), N, Y, N }, - { GL(EXT_fog_coord), N, N, N }, - { GL(EXT_framebuffer_blit), N, N, N }, - { GL(EXT_framebuffer_multisample), N, N, N }, - { GL(EXT_framebuffer_object), N, N, N }, - { GL(EXT_framebuffer_sRGB), N, N, N }, - { GL(EXT_multi_draw_arrays), N, Y, N }, - { GL(EXT_packed_depth_stencil), N, N, N }, - { GL(EXT_packed_pixels), N, N, N }, - { GL(EXT_paletted_texture), N, N, N }, - { GL(EXT_point_parameters), N, N, N }, - { GL(EXT_polygon_offset), N, N, N }, - { GL(EXT_rescale_normal), N, N, N }, - { GL(EXT_secondary_color), N, N, N }, - { GL(EXT_separate_specular_color), N, N, N }, - { GL(EXT_shadow_funcs), N, N, N }, - { GL(EXT_shared_texture_palette), N, N, N }, - { GL(EXT_stencil_two_side), N, N, N }, - { GL(EXT_stencil_wrap), N, N, N }, - { GL(EXT_subtexture), N, N, N }, - { GL(EXT_texture), N, N, N }, - { GL(EXT_texture3D), N, N, N }, - { GL(EXT_texture_compression_dxt1), N, N, N }, - { GL(EXT_texture_compression_s3tc), N, N, N }, - { GL(EXT_texture_edge_clamp), N, N, N }, - { GL(EXT_texture_env_add), N, N, N }, - { GL(EXT_texture_env_combine), N, N, N }, - { GL(EXT_texture_env_dot3), N, N, N }, - { GL(EXT_texture_filter_anisotropic), N, N, N }, - { GL(EXT_texture_integer), N, N, N }, - { GL(EXT_texture_lod), N, N, N }, - { GL(EXT_texture_lod_bias), N, N, N }, - { GL(EXT_texture_mirror_clamp), N, N, N }, - { GL(EXT_texture_object), N, N, N }, - { GL(EXT_texture_rectangle), N, N, N }, - { GL(EXT_vertex_array), N, N, N }, - { GL(3DFX_texture_compression_FXT1), N, N, N }, - { GL(APPLE_packed_pixels), N, N, N }, - { GL(APPLE_ycbcr_422), N, N, N }, - { GL(ATI_draw_buffers), N, N, N }, - { GL(ATI_text_fragment_shader), N, N, N }, - { GL(ATI_texture_env_combine3), N, N, N }, - { GL(ATI_texture_float), N, N, N }, - { GL(ATI_texture_mirror_once), N, N, N }, - { GL(ATIX_texture_env_combine3), N, N, N }, - { GL(HP_convolution_border_modes), N, N, N }, - { GL(HP_occlusion_test), N, N, N }, - { GL(IBM_cull_vertex), N, N, N }, - { GL(IBM_pixel_filter_hint), N, N, N }, - { GL(IBM_rasterpos_clip), N, N, N }, - { GL(IBM_texture_clamp_nodraw), N, N, N }, - { GL(IBM_texture_mirrored_repeat), N, N, N }, - { GL(INGR_blend_func_separate), N, N, N }, - { GL(INGR_interlace_read), N, N, N }, - { GL(MESA_pack_invert), N, N, N }, - { GL(MESA_ycbcr_texture), N, N, N }, - { GL(NV_blend_square), N, N, N }, - { GL(NV_copy_depth_to_color), N, N, N }, - { GL(NV_depth_clamp), N, N, N }, - { GL(NV_fog_distance), N, N, N }, - { GL(NV_fragment_program), N, N, N }, - { GL(NV_fragment_program_option), N, N, N }, - { GL(NV_fragment_program2), N, N, N }, - { GL(NV_light_max_exponent), N, N, N }, - { GL(NV_multisample_filter_hint), N, N, N }, - { GL(NV_packed_depth_stencil), N, N, N }, - { GL(NV_point_sprite), N, N, N }, - { GL(NV_texgen_reflection), N, N, N }, - { GL(NV_texture_compression_vtc), N, N, N }, - { GL(NV_texture_env_combine4), N, N, N }, - { GL(NV_texture_rectangle), N, N, N }, - { GL(NV_vertex_program), N, N, N }, - { GL(NV_vertex_program1_1), N, N, N }, - { GL(NV_vertex_program2), N, N, N }, - { GL(NV_vertex_program2_option), N, N, N }, - { GL(NV_vertex_program3), N, N, N }, - { GL(OES_read_format), N, N, N }, - { GL(OES_compressed_paletted_texture), N, N, N }, - { GL(SGI_color_matrix), N, N, N }, - { GL(SGI_color_table), N, N, N }, - { GL(SGI_texture_color_table), N, N, N }, - { GL(SGIS_generate_mipmap), N, N, N }, - { GL(SGIS_multisample), N, N, N }, - { GL(SGIS_texture_border_clamp), N, N, N }, - { GL(SGIS_texture_edge_clamp), N, N, N }, - { GL(SGIS_texture_lod), N, N, N }, - { GL(SGIX_blend_alpha_minmax), N, N, N }, - { GL(SGIX_clipmap), N, N, N }, - { GL(SGIX_depth_texture), N, N, N }, - { GL(SGIX_fog_offset), N, N, N }, - { GL(SGIX_shadow), N, N, N }, - { GL(SGIX_shadow_ambient), N, N, N }, - { GL(SGIX_texture_coordinate_clamp), N, N, N }, - { GL(SGIX_texture_lod_bias), N, N, N }, - { GL(SGIX_texture_range), N, N, N }, - { GL(SGIX_texture_scale_bias), N, N, N }, - { GL(SGIX_vertex_preclip), N, N, N }, - { GL(SGIX_vertex_preclip_hint), N, N, N }, - { GL(SGIX_ycrcb), N, N, N }, - { GL(SUN_convolution_border_modes), N, N, N }, - { GL(SUN_multi_draw_arrays), N, Y, N }, - { GL(SUN_slice_accum), N, N, N }, + { GL(ARB_depth_texture), N, N }, + { GL(ARB_draw_buffers), N, N }, + { GL(ARB_fragment_program), N, N }, + { GL(ARB_fragment_program_shadow), N, N }, + { GL(ARB_framebuffer_object), N, N }, + { GL(ARB_imaging), N, N }, + { GL(ARB_multisample), N, N }, + { GL(ARB_multitexture), N, N }, + { GL(ARB_occlusion_query), N, N }, + { GL(ARB_point_parameters), N, N }, + { GL(ARB_point_sprite), N, N }, + { GL(ARB_shadow), N, N }, + { GL(ARB_shadow_ambient), N, N }, + { GL(ARB_texture_border_clamp), N, N }, + { GL(ARB_texture_compression), N, N }, + { GL(ARB_texture_cube_map), N, N }, + { GL(ARB_texture_env_add), N, N }, + { GL(ARB_texture_env_combine), N, N }, + { GL(ARB_texture_env_crossbar), N, N }, + { GL(ARB_texture_env_dot3), N, N }, + { GL(ARB_texture_filter_anisotropic), N, N }, + { GL(ARB_texture_mirrored_repeat), N, N }, + { GL(ARB_texture_non_power_of_two), N, N }, + { GL(ARB_texture_rectangle), N, N }, + { GL(ARB_texture_rg), N, N }, + { GL(ARB_transpose_matrix), N, N }, + { GL(ARB_vertex_program), N, N }, + { GL(ARB_window_pos), N, N }, + { GL(EXT_abgr), N, N }, + { GL(EXT_bgra), N, N }, + { GL(EXT_blend_color), N, N }, + { GL(EXT_blend_equation_separate), N, N }, + { GL(EXT_blend_func_separate), N, N }, + { GL(EXT_blend_logic_op), N, N }, + { GL(EXT_blend_minmax), N, N }, + { GL(EXT_blend_subtract), N, N }, + { GL(EXT_clip_volume_hint), N, N }, + { GL(EXT_copy_texture), N, N }, + { GL(EXT_draw_range_elements), N, N }, + { GL(EXT_fog_coord), N, N }, + { GL(EXT_framebuffer_blit), N, N }, + { GL(EXT_framebuffer_multisample), N, N }, + { GL(EXT_framebuffer_object), N, N }, + { GL(EXT_framebuffer_sRGB), N, N }, + { GL(EXT_multi_draw_arrays), N, N }, + { GL(EXT_packed_depth_stencil), N, N }, + { GL(EXT_packed_pixels), N, N }, + { GL(EXT_paletted_texture), N, N }, + { GL(EXT_point_parameters), N, N }, + { GL(EXT_polygon_offset), N, N }, + { GL(EXT_rescale_normal), N, N }, + { GL(EXT_secondary_color), N, N }, + { GL(EXT_separate_specular_color), N, N }, + { GL(EXT_shadow_funcs), N, N }, + { GL(EXT_shared_texture_palette), N, N }, + { GL(EXT_stencil_two_side), N, N }, + { GL(EXT_stencil_wrap), N, N }, + { GL(EXT_subtexture), N, N }, + { GL(EXT_texture), N, N }, + { GL(EXT_texture3D), N, N }, + { GL(EXT_texture_compression_dxt1), N, N }, + { GL(EXT_texture_compression_s3tc), N, N }, + { GL(EXT_texture_edge_clamp), N, N }, + { GL(EXT_texture_env_add), N, N }, + { GL(EXT_texture_env_combine), N, N }, + { GL(EXT_texture_env_dot3), N, N }, + { GL(EXT_texture_filter_anisotropic), N, N }, + { GL(EXT_texture_integer), N, N }, + { GL(EXT_texture_lod), N, N }, + { GL(EXT_texture_lod_bias), N, N }, + { GL(EXT_texture_mirror_clamp), N, N }, + { GL(EXT_texture_object), N, N }, + { GL(EXT_texture_rectangle), N, N }, + { GL(EXT_vertex_array), N, N }, + { GL(3DFX_texture_compression_FXT1), N, N }, + { GL(APPLE_packed_pixels), N, N }, + { GL(APPLE_ycbcr_422), N, N }, + { GL(ATI_draw_buffers), N, N }, + { GL(ATI_text_fragment_shader), N, N }, + { GL(ATI_texture_env_combine3), N, N }, + { GL(ATI_texture_float), N, N }, + { GL(ATI_texture_mirror_once), N, N }, + { GL(ATIX_texture_env_combine3), N, N }, + { GL(HP_convolution_border_modes), N, N }, + { GL(HP_occlusion_test), N, N }, + { GL(IBM_cull_vertex), N, N }, + { GL(IBM_pixel_filter_hint), N, N }, + { GL(IBM_rasterpos_clip), N, N }, + { GL(IBM_texture_clamp_nodraw), N, N }, + { GL(IBM_texture_mirrored_repeat), N, N }, + { GL(INGR_blend_func_separate), N, N }, + { GL(INGR_interlace_read), N, N }, + { GL(MESA_pack_invert), N, N }, + { GL(MESA_ycbcr_texture), N, N }, + { GL(NV_blend_square), N, N }, + { GL(NV_copy_depth_to_color), N, N }, + { GL(NV_depth_clamp), N, N }, + { GL(NV_fog_distance), N, N }, + { GL(NV_fragment_program), N, N }, + { GL(NV_fragment_program_option), N, N }, + { GL(NV_fragment_program2), N, N }, + { GL(NV_light_max_exponent), N, N }, + { GL(NV_multisample_filter_hint), N, N }, + { GL(NV_packed_depth_stencil), N, N }, + { GL(NV_point_sprite), N, N }, + { GL(NV_texgen_reflection), N, N }, + { GL(NV_texture_compression_vtc), N, N }, + { GL(NV_texture_env_combine4), N, N }, + { GL(NV_texture_rectangle), N, N }, + { GL(NV_vertex_program), N, N }, + { GL(NV_vertex_program1_1), N, N }, + { GL(NV_vertex_program2), N, N }, + { GL(NV_vertex_program2_option), N, N }, + { GL(NV_vertex_program3), N, N }, + { GL(OES_read_format), N, N }, + { GL(OES_compressed_paletted_texture), N, N }, + { GL(SGI_color_matrix), N, N }, + { GL(SGI_color_table), N, N }, + { GL(SGI_texture_color_table), N, N }, + { GL(SGIS_generate_mipmap), N, N }, + { GL(SGIS_multisample), N, N }, + { GL(SGIS_texture_border_clamp), N, N }, + { GL(SGIS_texture_edge_clamp), N, N }, + { GL(SGIS_texture_lod), N, N }, + { GL(SGIX_blend_alpha_minmax), N, N }, + { GL(SGIX_clipmap), N, N }, + { GL(SGIX_depth_texture), N, N }, + { GL(SGIX_fog_offset), N, N }, + { GL(SGIX_shadow), N, N }, + { GL(SGIX_shadow_ambient), N, N }, + { GL(SGIX_texture_coordinate_clamp), N, N }, + { GL(SGIX_texture_lod_bias), N, N }, + { GL(SGIX_texture_range), N, N }, + { GL(SGIX_texture_scale_bias), N, N }, + { GL(SGIX_vertex_preclip), N, N }, + { GL(SGIX_vertex_preclip_hint), N, N }, + { GL(SGIX_ycrcb), N, N }, + { GL(SUN_convolution_border_modes), N, N }, + { GL(SUN_multi_draw_arrays), N, N }, + { GL(SUN_slice_accum), N, N }, { NULL } }; /* *INDENT-ON* */ @@ -521,6 +499,7 @@ __glXExtensionsCtr(void) (void) memset(client_gl_only, 0, sizeof(client_gl_only)); + SET_BIT(client_glx_only, ARB_get_proc_address_bit); for (i = 0; known_glx_extensions[i].name != NULL; i++) { const unsigned bit = known_glx_extensions[i].bit; @@ -528,22 +507,15 @@ __glXExtensionsCtr(void) SET_BIT(direct_glx_support, bit); } - if (known_glx_extensions[i].client_only) { - SET_BIT(client_glx_only, bit); - } - if (known_glx_extensions[i].direct_only) { SET_BIT(direct_glx_only, bit); } } - for (i = 0; known_gl_extensions[i].name != NULL; i++) { - const unsigned bit = known_gl_extensions[i].bit; - - if (known_gl_extensions[i].client_only) { - SET_BIT(client_gl_only, bit); - } - } + SET_BIT(client_gl_only, GL_ARB_transpose_matrix_bit); + SET_BIT(client_gl_only, GL_EXT_draw_range_elements_bit); + SET_BIT(client_gl_only, GL_EXT_multi_draw_arrays_bit); + SET_BIT(client_gl_only, GL_SUN_multi_draw_arrays_bit); #if 0 fprintf(stderr, "[%s:%u] Maximum client library version: %u.%u\n",