glxextensions.h revision 848b8605
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 34848b8605Smrgenum 35848b8605Smrg{ 36848b8605Smrg ARB_create_context_bit = 0, 37848b8605Smrg ARB_create_context_profile_bit, 38848b8605Smrg ARB_create_context_robustness_bit, 39848b8605Smrg ARB_fbconfig_float_bit, 40848b8605Smrg ARB_get_proc_address_bit, 41848b8605Smrg ARB_multisample_bit, 42848b8605Smrg ATI_pixel_format_float_bit, 43848b8605Smrg EXT_visual_info_bit, 44848b8605Smrg EXT_visual_rating_bit, 45848b8605Smrg EXT_import_context_bit, 46848b8605Smrg EXT_framebuffer_sRGB_bit, 47848b8605Smrg EXT_fbconfig_packed_float_bit, 48848b8605Smrg EXT_create_context_es2_profile_bit, 49848b8605Smrg MESA_copy_sub_buffer_bit, 50848b8605Smrg MESA_depth_float_bit, 51848b8605Smrg MESA_multithread_makecurrent_bit, 52848b8605Smrg MESA_query_renderer_bit, 53848b8605Smrg MESA_swap_control_bit, 54848b8605Smrg MESA_swap_frame_usage_bit, 55848b8605Smrg NV_float_buffer_bit, 56848b8605Smrg OML_swap_method_bit, 57848b8605Smrg OML_sync_control_bit, 58848b8605Smrg SGI_make_current_read_bit, 59848b8605Smrg SGI_swap_control_bit, 60848b8605Smrg SGI_video_sync_bit, 61848b8605Smrg SGIS_multisample_bit, 62848b8605Smrg SGIX_fbconfig_bit, 63848b8605Smrg SGIX_pbuffer_bit, 64848b8605Smrg SGIX_swap_barrier_bit, 65848b8605Smrg SGIX_swap_group_bit, 66848b8605Smrg SGIX_visual_select_group_bit, 67848b8605Smrg EXT_texture_from_pixmap_bit, 68848b8605Smrg INTEL_swap_event_bit, 69848b8605Smrg EXT_buffer_age_bit, 70848b8605Smrg}; 71848b8605Smrg 72848b8605Smrg/* From the GLX perspective, the ARB and EXT extensions are identical. Use a 73848b8605Smrg * single bit for both. 74848b8605Smrg */ 75848b8605Smrg#define ARB_framebuffer_sRGB_bit EXT_framebuffer_sRGB_bit 76848b8605Smrg 77848b8605Smrgenum 78848b8605Smrg{ 79848b8605Smrg GL_ARB_depth_texture_bit = 0, 80848b8605Smrg GL_ARB_draw_buffers_bit, 81848b8605Smrg GL_ARB_fragment_program_bit, 82848b8605Smrg GL_ARB_fragment_program_shadow_bit, 83848b8605Smrg GL_ARB_framebuffer_object_bit, 84848b8605Smrg GL_ARB_imaging_bit, 85848b8605Smrg GL_ARB_multisample_bit, 86848b8605Smrg GL_ARB_multitexture_bit, 87848b8605Smrg GL_ARB_occlusion_query_bit, 88848b8605Smrg GL_ARB_point_parameters_bit, 89848b8605Smrg GL_ARB_point_sprite_bit, 90848b8605Smrg GL_ARB_shadow_bit, 91848b8605Smrg GL_ARB_shadow_ambient_bit, 92848b8605Smrg GL_ARB_texture_border_clamp_bit, 93848b8605Smrg GL_ARB_texture_cube_map_bit, 94848b8605Smrg GL_ARB_texture_compression_bit, 95848b8605Smrg GL_ARB_texture_env_add_bit, 96848b8605Smrg GL_ARB_texture_env_combine_bit, 97848b8605Smrg GL_ARB_texture_env_crossbar_bit, 98848b8605Smrg GL_ARB_texture_env_dot3_bit, 99848b8605Smrg GL_ARB_texture_mirrored_repeat_bit, 100848b8605Smrg GL_ARB_texture_non_power_of_two_bit, 101848b8605Smrg GL_ARB_texture_rectangle_bit, 102848b8605Smrg GL_ARB_texture_rg_bit, 103848b8605Smrg GL_ARB_transpose_matrix_bit, 104848b8605Smrg GL_ARB_vertex_buffer_object_bit, 105848b8605Smrg GL_ARB_vertex_program_bit, 106848b8605Smrg GL_ARB_window_pos_bit, 107848b8605Smrg GL_EXT_abgr_bit, 108848b8605Smrg GL_EXT_bgra_bit, 109848b8605Smrg GL_EXT_blend_color_bit, 110848b8605Smrg GL_EXT_blend_equation_separate_bit, 111848b8605Smrg GL_EXT_blend_func_separate_bit, 112848b8605Smrg GL_EXT_blend_logic_op_bit, 113848b8605Smrg GL_EXT_blend_minmax_bit, 114848b8605Smrg GL_EXT_blend_subtract_bit, 115848b8605Smrg GL_EXT_clip_volume_hint_bit, 116848b8605Smrg GL_EXT_compiled_vertex_array_bit, 117848b8605Smrg GL_EXT_convolution_bit, 118848b8605Smrg GL_EXT_copy_texture_bit, 119848b8605Smrg GL_EXT_cull_vertex_bit, 120848b8605Smrg GL_EXT_depth_bounds_test_bit, 121848b8605Smrg GL_EXT_draw_range_elements_bit, 122848b8605Smrg GL_EXT_fog_coord_bit, 123848b8605Smrg GL_EXT_framebuffer_blit_bit, 124848b8605Smrg GL_EXT_framebuffer_multisample_bit, 125848b8605Smrg GL_EXT_framebuffer_object_bit, 126848b8605Smrg GL_EXT_framebuffer_sRGB_bit, 127848b8605Smrg GL_EXT_multi_draw_arrays_bit, 128848b8605Smrg GL_EXT_packed_depth_stencil_bit, 129848b8605Smrg GL_EXT_packed_pixels_bit, 130848b8605Smrg GL_EXT_paletted_texture_bit, 131848b8605Smrg GL_EXT_pixel_buffer_object_bit, 132848b8605Smrg GL_EXT_polygon_offset_bit, 133848b8605Smrg GL_EXT_rescale_normal_bit, 134848b8605Smrg GL_EXT_secondary_color_bit, 135848b8605Smrg GL_EXT_separate_specular_color_bit, 136848b8605Smrg GL_EXT_shadow_funcs_bit, 137848b8605Smrg GL_EXT_shared_texture_palette_bit, 138848b8605Smrg GL_EXT_stencil_two_side_bit, 139848b8605Smrg GL_EXT_stencil_wrap_bit, 140848b8605Smrg GL_EXT_subtexture_bit, 141848b8605Smrg GL_EXT_texture_bit, 142848b8605Smrg GL_EXT_texture3D_bit, 143848b8605Smrg GL_EXT_texture_compression_dxt1_bit, 144848b8605Smrg GL_EXT_texture_compression_s3tc_bit, 145848b8605Smrg GL_EXT_texture_edge_clamp_bit, 146848b8605Smrg GL_EXT_texture_env_combine_bit, 147848b8605Smrg GL_EXT_texture_env_dot3_bit, 148848b8605Smrg GL_EXT_texture_filter_anisotropic_bit, 149848b8605Smrg GL_EXT_texture_lod_bit, 150848b8605Smrg GL_EXT_texture_lod_bias_bit, 151848b8605Smrg GL_EXT_texture_mirror_clamp_bit, 152848b8605Smrg GL_EXT_texture_object_bit, 153848b8605Smrg GL_EXT_vertex_array_bit, 154848b8605Smrg GL_3DFX_texture_compression_FXT1_bit, 155848b8605Smrg GL_APPLE_packed_pixels_bit, 156848b8605Smrg GL_APPLE_ycbcr_422_bit, 157848b8605Smrg GL_ATI_text_fragment_shader_bit, 158848b8605Smrg GL_ATI_texture_env_combine3_bit, 159848b8605Smrg GL_ATI_texture_float_bit, 160848b8605Smrg GL_ATI_texture_mirror_once_bit, 161848b8605Smrg GL_HP_convolution_border_modes_bit, 162848b8605Smrg GL_HP_occlusion_test_bit, 163848b8605Smrg GL_IBM_cull_vertex_bit, 164848b8605Smrg GL_IBM_pixel_filter_hint_bit, 165848b8605Smrg GL_IBM_rasterpos_clip_bit, 166848b8605Smrg GL_IBM_texture_clamp_nodraw_bit, 167848b8605Smrg GL_INGR_interlace_read_bit, 168848b8605Smrg GL_MESA_pack_invert_bit, 169848b8605Smrg GL_MESA_ycbcr_texture_bit, 170848b8605Smrg GL_NV_blend_square_bit, 171848b8605Smrg GL_NV_copy_depth_to_color_bit, 172848b8605Smrg GL_NV_depth_clamp_bit, 173848b8605Smrg GL_NV_fog_distance_bit, 174848b8605Smrg GL_NV_fragment_program_bit, 175848b8605Smrg GL_NV_fragment_program_option_bit, 176848b8605Smrg GL_NV_fragment_program2_bit, 177848b8605Smrg GL_NV_light_max_exponent_bit, 178848b8605Smrg GL_NV_multisample_filter_hint_bit, 179848b8605Smrg GL_NV_packed_depth_stencil_bit, 180848b8605Smrg GL_NV_point_sprite_bit, 181848b8605Smrg GL_NV_texgen_reflection_bit, 182848b8605Smrg GL_NV_texture_compression_vtc_bit, 183848b8605Smrg GL_NV_texture_env_combine4_bit, 184848b8605Smrg GL_NV_vertex_program_bit, 185848b8605Smrg GL_NV_vertex_program1_1_bit, 186848b8605Smrg GL_NV_vertex_program2_bit, 187848b8605Smrg GL_NV_vertex_program2_option_bit, 188848b8605Smrg GL_NV_vertex_program3_bit, 189848b8605Smrg GL_OES_compressed_paletted_texture_bit, 190848b8605Smrg GL_OES_read_format_bit, 191848b8605Smrg GL_SGI_color_matrix_bit, 192848b8605Smrg GL_SGI_color_table_bit, 193848b8605Smrg GL_SGI_texture_color_table_bit, 194848b8605Smrg GL_SGIS_generate_mipmap_bit, 195848b8605Smrg GL_SGIS_multisample_bit, 196848b8605Smrg GL_SGIS_texture_lod_bit, 197848b8605Smrg GL_SGIX_blend_alpha_minmax_bit, 198848b8605Smrg GL_SGIX_clipmap_bit, 199848b8605Smrg GL_SGIX_depth_texture_bit, 200848b8605Smrg GL_SGIX_fog_offset_bit, 201848b8605Smrg GL_SGIX_shadow_bit, 202848b8605Smrg GL_SGIX_texture_coordinate_clamp_bit, 203848b8605Smrg GL_SGIX_texture_lod_bias_bit, 204848b8605Smrg GL_SGIX_texture_range_bit, 205848b8605Smrg GL_SGIX_texture_scale_bias_bit, 206848b8605Smrg GL_SGIX_vertex_preclip_bit, 207848b8605Smrg GL_SGIX_vertex_preclip_hint_bit, 208848b8605Smrg GL_SGIX_ycrcb_bit, 209848b8605Smrg GL_SUN_convolution_border_modes_bit, 210848b8605Smrg GL_SUN_slice_accum_bit, 211848b8605Smrg 212848b8605Smrg /* This *MUST* go here. If it gets put after the duplicate values it will 213848b8605Smrg * get the value after the last duplicate. 214848b8605Smrg */ 215848b8605Smrg __NUM_GL_EXTS, 216848b8605Smrg 217848b8605Smrg 218848b8605Smrg /* Alias extension bits. These extensions exist in either vendor-specific 219848b8605Smrg * or EXT form and were later promoted to either EXT or ARB form. In all 220848b8605Smrg * cases, the meaning is *exactly* the same. That's why 221848b8605Smrg * EXT_texture_env_combine is *NOT* an alias of ARB_texture_env_combine and 222848b8605Smrg * EXT_texture_env_dot3 is *NOT* an alias of ARB_texture_env_dot3. Be 223848b8605Smrg * careful! When in doubt, src/mesa/main/extensions.c in the Mesa tree 224848b8605Smrg * is a great reference. 225848b8605Smrg */ 226848b8605Smrg 227848b8605Smrg GL_ATI_blend_equation_separate_bit = GL_EXT_blend_equation_separate_bit, 228848b8605Smrg GL_ATI_draw_buffers_bit = GL_ARB_draw_buffers_bit, 229848b8605Smrg GL_ATIX_texture_env_combine3_bit = GL_ATI_texture_env_combine3_bit, 230848b8605Smrg GL_EXT_point_parameters_bit = GL_ARB_point_parameters_bit, 231848b8605Smrg GL_EXT_texture_env_add_bit = GL_ARB_texture_env_add_bit, 232848b8605Smrg GL_EXT_texture_rectangle_bit = GL_ARB_texture_rectangle_bit, 233848b8605Smrg GL_IBM_texture_mirrored_repeat_bit = GL_ARB_texture_mirrored_repeat_bit, 234848b8605Smrg GL_INGR_blend_func_separate_bit = GL_EXT_blend_func_separate_bit, 235848b8605Smrg GL_MESA_window_pos_bit = GL_ARB_window_pos_bit, 236848b8605Smrg GL_NV_texture_rectangle_bit = GL_ARB_texture_rectangle_bit, 237848b8605Smrg GL_SGIS_texture_border_clamp_bit = GL_ARB_texture_border_clamp_bit, 238848b8605Smrg GL_SGIS_texture_edge_clamp_bit = GL_EXT_texture_edge_clamp_bit, 239848b8605Smrg GL_SGIX_shadow_ambient_bit = GL_ARB_shadow_ambient_bit, 240848b8605Smrg GL_SUN_multi_draw_arrays_bit = GL_EXT_multi_draw_arrays_bit 241848b8605Smrg}; 242848b8605Smrg 243848b8605Smrg#define __GL_EXT_BYTES ((__NUM_GL_EXTS + 7) / 8) 244848b8605Smrg 245848b8605Smrgstruct glx_screen; 246848b8605Smrgstruct glx_context; 247848b8605Smrg 248848b8605Smrgextern GLboolean __glXExtensionBitIsEnabled(struct glx_screen *psc, 249848b8605Smrg unsigned bit); 250848b8605Smrgextern const char *__glXGetClientExtensions(void); 251848b8605Smrgextern void __glXCalculateUsableExtensions(struct glx_screen *psc, 252848b8605Smrg GLboolean 253848b8605Smrg display_is_direct_capable, 254848b8605Smrg int server_minor_version); 255848b8605Smrg 256848b8605Smrgextern void __glXCalculateUsableGLExtensions(struct glx_context *gc, 257848b8605Smrg const char *server_string, 258848b8605Smrg int major_version, 259848b8605Smrg int minor_version); 260848b8605Smrgextern void __glXGetGLVersion(int *major_version, int *minor_version); 261848b8605Smrgextern char *__glXGetClientGLExtensionString(void); 262848b8605Smrg 263848b8605Smrgextern GLboolean __glExtensionBitIsEnabled(struct glx_context *gc, 264848b8605Smrg unsigned bit); 265848b8605Smrg 266848b8605Smrgextern void 267848b8605Smrg__glXEnableDirectExtension(struct glx_screen *psc, const char *name); 268848b8605Smrg 269848b8605Smrg/* Source-level backwards compatibility with old drivers. They won't 270848b8605Smrg * find the respective functions, though. 271848b8605Smrg */ 272848b8605Smrgtypedef void (*PFNGLXENABLEEXTENSIONPROC) (const char *name, 273848b8605Smrg GLboolean force_client); 274848b8605Smrgtypedef void (*PFNGLXDISABLEEXTENSIONPROC) (const char *name); 275848b8605Smrg 276848b8605Smrg/* GLX_ALIAS should be used for functions with a non-void return type. 277848b8605Smrg GLX_ALIAS_VOID is for functions with a void return type. */ 278848b8605Smrg#ifdef GLX_NO_STATIC_EXTENSION_FUNCTIONS 279848b8605Smrg# define GLX_ALIAS(return_type, real_func, proto_args, args, aliased_func) 280848b8605Smrg# define GLX_ALIAS_VOID(real_func, proto_args, args, aliased_func) 281848b8605Smrg#else 282848b8605Smrg# if defined(__GNUC__) && !defined(GLX_ALIAS_UNSUPPORTED) 283848b8605Smrg# define GLX_ALIAS(return_type, real_func, proto_args, args, aliased_func) \ 284848b8605Smrg return_type real_func proto_args \ 285848b8605Smrg __attribute__ ((alias( # aliased_func ) )); 286848b8605Smrg# define GLX_ALIAS_VOID(real_func, proto_args, args, aliased_func) \ 287848b8605Smrg GLX_ALIAS(void, real_func, proto_args, args, aliased_func) 288848b8605Smrg# else 289848b8605Smrg# define GLX_ALIAS(return_type, real_func, proto_args, args, aliased_func) \ 290848b8605Smrg return_type real_func proto_args \ 291848b8605Smrg { return aliased_func args ; } 292848b8605Smrg# define GLX_ALIAS_VOID(real_func, proto_args, args, aliased_func) \ 293848b8605Smrg void real_func proto_args \ 294848b8605Smrg { aliased_func args ; } 295848b8605Smrg# endif /* __GNUC__ */ 296848b8605Smrg#endif /* GLX_NO_STATIC_EXTENSION_FUNCTIONS */ 297848b8605Smrg 298848b8605Smrg#endif /* GLX_GLXEXTENSIONS_H */ 299