1848b8605Smrg/* 2848b8605Smrg * (C) Copyright IBM Corporation 2002, 2004 3848b8605Smrg * All Rights Reserved. 4848b8605Smrg * 5848b8605Smrg * Permission is hereby granted, free of charge, to any person obtaining a 6848b8605Smrg * copy of this software and associated documentation files (the "Software"), 7848b8605Smrg * to deal in the Software without restriction, including without limitation 8848b8605Smrg * on the rights to use, copy, modify, merge, publish, distribute, sub 9848b8605Smrg * license, and/or sell copies of the Software, and to permit persons to whom 10848b8605Smrg * the Software is furnished to do so, subject to the following conditions: 11848b8605Smrg * 12848b8605Smrg * The above copyright notice and this permission notice (including the next 13848b8605Smrg * paragraph) shall be included in all copies or substantial portions of the 14848b8605Smrg * Software. 15848b8605Smrg * 16848b8605Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17848b8605Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18848b8605Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 19848b8605Smrg * THE COPYRIGHT HOLDERS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 20848b8605Smrg * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 21848b8605Smrg * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 22848b8605Smrg * USE OR OTHER DEALINGS IN THE SOFTWARE. 23848b8605Smrg */ 24848b8605Smrg 25848b8605Smrg/** 26848b8605Smrg * \file glxextensions.h 27848b8605Smrg * 28848b8605Smrg * \author Ian Romanick <idr@us.ibm.com> 29848b8605Smrg */ 30848b8605Smrg 31848b8605Smrg#ifndef GLX_GLXEXTENSIONS_H 32848b8605Smrg#define GLX_GLXEXTENSIONS_H 33848b8605Smrg 34b8e80941Smrg#ifdef __cplusplus 35b8e80941Smrgextern "C" { 36b8e80941Smrg#endif 37b8e80941Smrg 38848b8605Smrgenum 39848b8605Smrg{ 40b8e80941Smrg ARB_context_flush_control_bit = 0, 41b8e80941Smrg ARB_create_context_bit, 42b8e80941Smrg ARB_create_context_no_error_bit, 43848b8605Smrg ARB_create_context_profile_bit, 44848b8605Smrg ARB_create_context_robustness_bit, 45848b8605Smrg ARB_fbconfig_float_bit, 46848b8605Smrg ARB_get_proc_address_bit, 47848b8605Smrg ARB_multisample_bit, 48b8e80941Smrg EXT_buffer_age_bit, 49b8e80941Smrg EXT_create_context_es2_profile_bit, 50b8e80941Smrg EXT_create_context_es_profile_bit, 51b8e80941Smrg EXT_fbconfig_packed_float_bit, 52b8e80941Smrg EXT_framebuffer_sRGB_bit, 53b8e80941Smrg EXT_import_context_bit, 54b8e80941Smrg EXT_texture_from_pixmap_bit, 55848b8605Smrg EXT_visual_info_bit, 56848b8605Smrg EXT_visual_rating_bit, 57b8e80941Smrg ATI_pixel_format_float_bit, 58b8e80941Smrg INTEL_swap_event_bit, 59848b8605Smrg MESA_copy_sub_buffer_bit, 60848b8605Smrg MESA_depth_float_bit, 61848b8605Smrg MESA_multithread_makecurrent_bit, 62848b8605Smrg MESA_query_renderer_bit, 63848b8605Smrg MESA_swap_control_bit, 64848b8605Smrg MESA_swap_frame_usage_bit, 65848b8605Smrg NV_float_buffer_bit, 66848b8605Smrg OML_swap_method_bit, 67848b8605Smrg OML_sync_control_bit, 68848b8605Smrg SGIS_multisample_bit, 69848b8605Smrg SGIX_fbconfig_bit, 70848b8605Smrg SGIX_pbuffer_bit, 71848b8605Smrg SGIX_visual_select_group_bit, 72b8e80941Smrg SGI_make_current_read_bit, 73b8e80941Smrg SGI_swap_control_bit, 74b8e80941Smrg SGI_video_sync_bit, 75848b8605Smrg}; 76848b8605Smrg 77848b8605Smrg/* From the GLX perspective, the ARB and EXT extensions are identical. Use a 78848b8605Smrg * single bit for both. 79848b8605Smrg */ 80848b8605Smrg#define ARB_framebuffer_sRGB_bit EXT_framebuffer_sRGB_bit 81848b8605Smrg 82848b8605Smrgenum 83848b8605Smrg{ 84848b8605Smrg GL_ARB_depth_texture_bit = 0, 85848b8605Smrg GL_ARB_draw_buffers_bit, 86848b8605Smrg GL_ARB_fragment_program_bit, 87848b8605Smrg GL_ARB_fragment_program_shadow_bit, 88848b8605Smrg GL_ARB_framebuffer_object_bit, 89848b8605Smrg GL_ARB_imaging_bit, 90848b8605Smrg GL_ARB_multisample_bit, 91848b8605Smrg GL_ARB_multitexture_bit, 92848b8605Smrg GL_ARB_occlusion_query_bit, 93848b8605Smrg GL_ARB_point_parameters_bit, 94848b8605Smrg GL_ARB_point_sprite_bit, 95848b8605Smrg GL_ARB_shadow_bit, 96848b8605Smrg GL_ARB_shadow_ambient_bit, 97848b8605Smrg GL_ARB_texture_border_clamp_bit, 98848b8605Smrg GL_ARB_texture_cube_map_bit, 99848b8605Smrg GL_ARB_texture_compression_bit, 100848b8605Smrg GL_ARB_texture_env_add_bit, 101848b8605Smrg GL_ARB_texture_env_combine_bit, 102848b8605Smrg GL_ARB_texture_env_crossbar_bit, 103848b8605Smrg GL_ARB_texture_env_dot3_bit, 104b8e80941Smrg GL_ARB_texture_filter_anisotropic_bit, 105848b8605Smrg GL_ARB_texture_mirrored_repeat_bit, 106848b8605Smrg GL_ARB_texture_non_power_of_two_bit, 107848b8605Smrg GL_ARB_texture_rectangle_bit, 108848b8605Smrg GL_ARB_texture_rg_bit, 109848b8605Smrg GL_ARB_transpose_matrix_bit, 110848b8605Smrg GL_ARB_vertex_buffer_object_bit, 111848b8605Smrg GL_ARB_vertex_program_bit, 112848b8605Smrg GL_ARB_window_pos_bit, 113848b8605Smrg GL_EXT_abgr_bit, 114848b8605Smrg GL_EXT_bgra_bit, 115848b8605Smrg GL_EXT_blend_color_bit, 116848b8605Smrg GL_EXT_blend_equation_separate_bit, 117848b8605Smrg GL_EXT_blend_func_separate_bit, 118848b8605Smrg GL_EXT_blend_logic_op_bit, 119848b8605Smrg GL_EXT_blend_minmax_bit, 120848b8605Smrg GL_EXT_blend_subtract_bit, 121848b8605Smrg GL_EXT_clip_volume_hint_bit, 122848b8605Smrg GL_EXT_compiled_vertex_array_bit, 123848b8605Smrg GL_EXT_convolution_bit, 124848b8605Smrg GL_EXT_copy_texture_bit, 125848b8605Smrg GL_EXT_cull_vertex_bit, 126848b8605Smrg GL_EXT_depth_bounds_test_bit, 127848b8605Smrg GL_EXT_draw_range_elements_bit, 128848b8605Smrg GL_EXT_fog_coord_bit, 129848b8605Smrg GL_EXT_framebuffer_blit_bit, 130848b8605Smrg GL_EXT_framebuffer_multisample_bit, 131848b8605Smrg GL_EXT_framebuffer_object_bit, 132848b8605Smrg GL_EXT_framebuffer_sRGB_bit, 133848b8605Smrg GL_EXT_multi_draw_arrays_bit, 134848b8605Smrg GL_EXT_packed_depth_stencil_bit, 135848b8605Smrg GL_EXT_packed_pixels_bit, 136848b8605Smrg GL_EXT_paletted_texture_bit, 137848b8605Smrg GL_EXT_pixel_buffer_object_bit, 138848b8605Smrg GL_EXT_polygon_offset_bit, 139848b8605Smrg GL_EXT_rescale_normal_bit, 140848b8605Smrg GL_EXT_secondary_color_bit, 141848b8605Smrg GL_EXT_separate_specular_color_bit, 142848b8605Smrg GL_EXT_shadow_funcs_bit, 143848b8605Smrg GL_EXT_shared_texture_palette_bit, 144848b8605Smrg GL_EXT_stencil_two_side_bit, 145848b8605Smrg GL_EXT_stencil_wrap_bit, 146848b8605Smrg GL_EXT_subtexture_bit, 147848b8605Smrg GL_EXT_texture_bit, 148848b8605Smrg GL_EXT_texture3D_bit, 149848b8605Smrg GL_EXT_texture_compression_dxt1_bit, 150848b8605Smrg GL_EXT_texture_compression_s3tc_bit, 151848b8605Smrg GL_EXT_texture_edge_clamp_bit, 152848b8605Smrg GL_EXT_texture_env_combine_bit, 153848b8605Smrg GL_EXT_texture_env_dot3_bit, 154b8e80941Smrg GL_EXT_texture_integer_bit, 155848b8605Smrg GL_EXT_texture_lod_bit, 156848b8605Smrg GL_EXT_texture_lod_bias_bit, 157848b8605Smrg GL_EXT_texture_mirror_clamp_bit, 158848b8605Smrg GL_EXT_texture_object_bit, 159848b8605Smrg GL_EXT_vertex_array_bit, 160848b8605Smrg GL_3DFX_texture_compression_FXT1_bit, 161848b8605Smrg GL_APPLE_packed_pixels_bit, 162848b8605Smrg GL_APPLE_ycbcr_422_bit, 163848b8605Smrg GL_ATI_text_fragment_shader_bit, 164848b8605Smrg GL_ATI_texture_env_combine3_bit, 165848b8605Smrg GL_ATI_texture_float_bit, 166848b8605Smrg GL_ATI_texture_mirror_once_bit, 167848b8605Smrg GL_HP_convolution_border_modes_bit, 168848b8605Smrg GL_HP_occlusion_test_bit, 169848b8605Smrg GL_IBM_cull_vertex_bit, 170848b8605Smrg GL_IBM_pixel_filter_hint_bit, 171848b8605Smrg GL_IBM_rasterpos_clip_bit, 172848b8605Smrg GL_IBM_texture_clamp_nodraw_bit, 173848b8605Smrg GL_INGR_interlace_read_bit, 174848b8605Smrg GL_MESA_pack_invert_bit, 175848b8605Smrg GL_MESA_ycbcr_texture_bit, 176848b8605Smrg GL_NV_blend_square_bit, 177848b8605Smrg GL_NV_copy_depth_to_color_bit, 178848b8605Smrg GL_NV_depth_clamp_bit, 179848b8605Smrg GL_NV_fog_distance_bit, 180848b8605Smrg GL_NV_fragment_program_bit, 181848b8605Smrg GL_NV_fragment_program_option_bit, 182848b8605Smrg GL_NV_fragment_program2_bit, 183848b8605Smrg GL_NV_light_max_exponent_bit, 184848b8605Smrg GL_NV_multisample_filter_hint_bit, 185848b8605Smrg GL_NV_packed_depth_stencil_bit, 186848b8605Smrg GL_NV_point_sprite_bit, 187848b8605Smrg GL_NV_texgen_reflection_bit, 188848b8605Smrg GL_NV_texture_compression_vtc_bit, 189848b8605Smrg GL_NV_texture_env_combine4_bit, 190848b8605Smrg GL_NV_vertex_program_bit, 191848b8605Smrg GL_NV_vertex_program1_1_bit, 192848b8605Smrg GL_NV_vertex_program2_bit, 193848b8605Smrg GL_NV_vertex_program2_option_bit, 194848b8605Smrg GL_NV_vertex_program3_bit, 195848b8605Smrg GL_OES_compressed_paletted_texture_bit, 196848b8605Smrg GL_OES_read_format_bit, 197848b8605Smrg GL_SGI_color_matrix_bit, 198848b8605Smrg GL_SGI_color_table_bit, 199848b8605Smrg GL_SGI_texture_color_table_bit, 200848b8605Smrg GL_SGIS_generate_mipmap_bit, 201848b8605Smrg GL_SGIS_multisample_bit, 202848b8605Smrg GL_SGIS_texture_lod_bit, 203848b8605Smrg GL_SGIX_blend_alpha_minmax_bit, 204848b8605Smrg GL_SGIX_clipmap_bit, 205848b8605Smrg GL_SGIX_depth_texture_bit, 206848b8605Smrg GL_SGIX_fog_offset_bit, 207848b8605Smrg GL_SGIX_shadow_bit, 208848b8605Smrg GL_SGIX_texture_coordinate_clamp_bit, 209848b8605Smrg GL_SGIX_texture_lod_bias_bit, 210848b8605Smrg GL_SGIX_texture_range_bit, 211848b8605Smrg GL_SGIX_texture_scale_bias_bit, 212848b8605Smrg GL_SGIX_vertex_preclip_bit, 213848b8605Smrg GL_SGIX_vertex_preclip_hint_bit, 214848b8605Smrg GL_SGIX_ycrcb_bit, 215848b8605Smrg GL_SUN_convolution_border_modes_bit, 216848b8605Smrg GL_SUN_slice_accum_bit, 217848b8605Smrg 218848b8605Smrg /* This *MUST* go here. If it gets put after the duplicate values it will 219848b8605Smrg * get the value after the last duplicate. 220848b8605Smrg */ 221848b8605Smrg __NUM_GL_EXTS, 222848b8605Smrg 223848b8605Smrg 224848b8605Smrg /* Alias extension bits. These extensions exist in either vendor-specific 225848b8605Smrg * or EXT form and were later promoted to either EXT or ARB form. In all 226b8e80941Smrg * cases, the meaning (to GLX) is *exactly* the same. That's why 227848b8605Smrg * EXT_texture_env_combine is *NOT* an alias of ARB_texture_env_combine and 228848b8605Smrg * EXT_texture_env_dot3 is *NOT* an alias of ARB_texture_env_dot3. Be 229b8e80941Smrg * careful! When in doubt, src/mesa/main/extensions.c is a great reference. 230848b8605Smrg */ 231848b8605Smrg 232848b8605Smrg GL_ATI_blend_equation_separate_bit = GL_EXT_blend_equation_separate_bit, 233848b8605Smrg GL_ATI_draw_buffers_bit = GL_ARB_draw_buffers_bit, 234848b8605Smrg GL_ATIX_texture_env_combine3_bit = GL_ATI_texture_env_combine3_bit, 235848b8605Smrg GL_EXT_point_parameters_bit = GL_ARB_point_parameters_bit, 236848b8605Smrg GL_EXT_texture_env_add_bit = GL_ARB_texture_env_add_bit, 237b8e80941Smrg GL_EXT_texture_filter_anisotropic_bit = GL_ARB_texture_filter_anisotropic_bit, 238848b8605Smrg GL_EXT_texture_rectangle_bit = GL_ARB_texture_rectangle_bit, 239848b8605Smrg GL_IBM_texture_mirrored_repeat_bit = GL_ARB_texture_mirrored_repeat_bit, 240848b8605Smrg GL_INGR_blend_func_separate_bit = GL_EXT_blend_func_separate_bit, 241848b8605Smrg GL_MESA_window_pos_bit = GL_ARB_window_pos_bit, 242848b8605Smrg GL_NV_texture_rectangle_bit = GL_ARB_texture_rectangle_bit, 243848b8605Smrg GL_SGIS_texture_border_clamp_bit = GL_ARB_texture_border_clamp_bit, 244848b8605Smrg GL_SGIS_texture_edge_clamp_bit = GL_EXT_texture_edge_clamp_bit, 245848b8605Smrg GL_SGIX_shadow_ambient_bit = GL_ARB_shadow_ambient_bit, 246848b8605Smrg GL_SUN_multi_draw_arrays_bit = GL_EXT_multi_draw_arrays_bit 247848b8605Smrg}; 248848b8605Smrg 249848b8605Smrg#define __GL_EXT_BYTES ((__NUM_GL_EXTS + 7) / 8) 250848b8605Smrg 251848b8605Smrgstruct glx_screen; 252848b8605Smrgstruct glx_context; 253848b8605Smrg 254848b8605Smrgextern GLboolean __glXExtensionBitIsEnabled(struct glx_screen *psc, 255848b8605Smrg unsigned bit); 256848b8605Smrgextern const char *__glXGetClientExtensions(void); 257848b8605Smrgextern void __glXCalculateUsableExtensions(struct glx_screen *psc, 258848b8605Smrg GLboolean 259848b8605Smrg display_is_direct_capable, 260848b8605Smrg int server_minor_version); 261848b8605Smrg 262848b8605Smrgextern void __glXCalculateUsableGLExtensions(struct glx_context *gc, 263848b8605Smrg const char *server_string, 264848b8605Smrg int major_version, 265848b8605Smrg int minor_version); 266848b8605Smrgextern void __glXGetGLVersion(int *major_version, int *minor_version); 267848b8605Smrgextern char *__glXGetClientGLExtensionString(void); 268848b8605Smrg 269848b8605Smrgextern GLboolean __glExtensionBitIsEnabled(struct glx_context *gc, 270848b8605Smrg unsigned bit); 271848b8605Smrg 272848b8605Smrgextern void 273848b8605Smrg__glXEnableDirectExtension(struct glx_screen *psc, const char *name); 274848b8605Smrg 275848b8605Smrg/* Source-level backwards compatibility with old drivers. They won't 276848b8605Smrg * find the respective functions, though. 277848b8605Smrg */ 278848b8605Smrgtypedef void (*PFNGLXENABLEEXTENSIONPROC) (const char *name, 279848b8605Smrg GLboolean force_client); 280848b8605Smrgtypedef void (*PFNGLXDISABLEEXTENSIONPROC) (const char *name); 281848b8605Smrg 282848b8605Smrg/* GLX_ALIAS should be used for functions with a non-void return type. 283848b8605Smrg GLX_ALIAS_VOID is for functions with a void return type. */ 284b8e80941Smrg# ifdef HAVE_FUNC_ATTRIBUTE_ALIAS 285b8e80941Smrg/* GLX_ALIAS and GLX_ALIAS_VOID both expand to the macro GLX_ALIAS2. Using the 286b8e80941Smrg * extra expansion means that the name mangling macros in glx_mangle.h will 287b8e80941Smrg * apply before stringification, so the alias attribute will have a string like 288b8e80941Smrg * "mglXFoo" instead of "glXFoo". */ 289b8e80941Smrg# define GLX_ALIAS2(return_type, real_func, proto_args, args, aliased_func) \ 290848b8605Smrg return_type real_func proto_args \ 291848b8605Smrg __attribute__ ((alias( # aliased_func ) )); 292b8e80941Smrg# define GLX_ALIAS(return_type, real_func, proto_args, args, aliased_func) \ 293b8e80941Smrg GLX_ALIAS2(return_type, real_func, proto_args, args, aliased_func) 294848b8605Smrg# define GLX_ALIAS_VOID(real_func, proto_args, args, aliased_func) \ 295b8e80941Smrg GLX_ALIAS2(void, real_func, proto_args, args, aliased_func) 296848b8605Smrg# else 297848b8605Smrg# define GLX_ALIAS(return_type, real_func, proto_args, args, aliased_func) \ 298848b8605Smrg return_type real_func proto_args \ 299848b8605Smrg { return aliased_func args ; } 300848b8605Smrg# define GLX_ALIAS_VOID(real_func, proto_args, args, aliased_func) \ 301848b8605Smrg void real_func proto_args \ 302848b8605Smrg { aliased_func args ; } 303b8e80941Smrg# endif /* HAVE_FUNC_ATTRIBUTE_ALIAS */ 304b8e80941Smrg 305b8e80941Smrg#ifdef __cplusplus 306b8e80941Smrg} 307b8e80941Smrg#endif 308848b8605Smrg 309848b8605Smrg#endif /* GLX_GLXEXTENSIONS_H */ 310