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