1999-08-19 00:55:39 +00:00
|
|
|
/*
|
|
|
|
* Mesa 3-D graphics library
|
2009-06-08 17:02:36 -06:00
|
|
|
* Version: 7.6
|
2000-11-22 07:32:16 +00:00
|
|
|
*
|
2008-08-26 16:13:39 -06:00
|
|
|
* Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
|
2009-06-08 17:02:36 -06:00
|
|
|
* Copyright (C) 2009 VMware, Inc. All Rights Reserved.
|
2000-11-22 07:32:16 +00:00
|
|
|
*
|
1999-08-19 00:55:39 +00:00
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
|
|
* copy of this software and associated documentation files (the "Software"),
|
|
|
|
* to deal in the Software without restriction, including without limitation
|
|
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
|
|
* Software is furnished to do so, subject to the following conditions:
|
2000-11-22 07:32:16 +00:00
|
|
|
*
|
1999-08-19 00:55:39 +00:00
|
|
|
* The above copyright notice and this permission notice shall be included
|
|
|
|
* in all copies or substantial portions of the Software.
|
2000-11-22 07:32:16 +00:00
|
|
|
*
|
1999-08-19 00:55:39 +00:00
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
|
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
|
|
* BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
|
|
|
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
|
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
*/
|
|
|
|
|
2003-07-17 13:43:59 +00:00
|
|
|
|
1999-11-11 01:22:25 +00:00
|
|
|
#include "glheader.h"
|
2002-10-24 23:57:19 +00:00
|
|
|
#include "imports.h"
|
1999-09-11 11:31:34 +00:00
|
|
|
#include "context.h"
|
1999-08-19 00:55:39 +00:00
|
|
|
#include "extensions.h"
|
|
|
|
#include "simple_list.h"
|
2000-11-22 07:32:16 +00:00
|
|
|
#include "mtypes.h"
|
1999-08-19 00:55:39 +00:00
|
|
|
|
1999-09-11 11:31:34 +00:00
|
|
|
|
2009-04-14 19:44:16 -06:00
|
|
|
#define F(x) offsetof(struct gl_extensions, x)
|
2000-10-30 13:31:59 +00:00
|
|
|
#define ON GL_TRUE
|
|
|
|
#define OFF GL_FALSE
|
|
|
|
|
2003-07-03 02:15:06 +00:00
|
|
|
|
2004-08-17 19:25:55 +00:00
|
|
|
/*
|
|
|
|
* Note: The GL_MESAX_* extensions are placeholders for future ARB extensions.
|
|
|
|
*/
|
2003-06-02 20:37:16 +00:00
|
|
|
static const struct {
|
2000-11-22 07:32:16 +00:00
|
|
|
GLboolean enabled;
|
|
|
|
const char *name;
|
|
|
|
int flag_offset;
|
2000-10-30 13:31:59 +00:00
|
|
|
} default_extensions[] = {
|
2009-06-02 20:32:34 -06:00
|
|
|
{ OFF, "GL_ARB_copy_buffer", F(ARB_copy_buffer) },
|
2002-02-15 16:32:06 +00:00
|
|
|
{ OFF, "GL_ARB_depth_texture", F(ARB_depth_texture) },
|
2009-08-26 09:51:15 -07:00
|
|
|
{ OFF, "GL_ARB_depth_clamp", F(ARB_depth_clamp) },
|
2009-01-27 19:10:43 -08:00
|
|
|
{ ON, "GL_ARB_draw_buffers", F(ARB_draw_buffers) },
|
2009-08-27 10:09:24 -07:00
|
|
|
{ OFF, "GL_ARB_draw_elements_base_vertex", F(ARB_draw_elements_base_vertex) },
|
2003-04-11 01:20:06 +00:00
|
|
|
{ OFF, "GL_ARB_fragment_program", F(ARB_fragment_program) },
|
2007-06-07 13:58:50 -07:00
|
|
|
{ OFF, "GL_ARB_fragment_program_shadow", F(ARB_fragment_program_shadow) },
|
2004-10-27 17:27:57 +00:00
|
|
|
{ OFF, "GL_ARB_fragment_shader", F(ARB_fragment_shader) },
|
2009-01-22 15:04:11 -07:00
|
|
|
{ OFF, "GL_ARB_framebuffer_object", F(ARB_framebuffer_object) },
|
2006-03-28 01:23:43 +00:00
|
|
|
{ OFF, "GL_ARB_half_float_pixel", F(ARB_half_float_pixel) },
|
2001-03-18 08:53:49 +00:00
|
|
|
{ OFF, "GL_ARB_imaging", F(ARB_imaging) },
|
2009-06-08 17:02:36 -06:00
|
|
|
{ OFF, "GL_ARB_map_buffer_range", F(ARB_map_buffer_range) },
|
2009-01-27 17:50:45 -08:00
|
|
|
{ ON, "GL_ARB_multisample", F(ARB_multisample) },
|
2001-03-18 08:53:49 +00:00
|
|
|
{ OFF, "GL_ARB_multitexture", F(ARB_multitexture) },
|
2003-06-13 02:37:27 +00:00
|
|
|
{ OFF, "GL_ARB_occlusion_query", F(ARB_occlusion_query) },
|
2004-12-18 16:19:08 +00:00
|
|
|
{ OFF, "GL_ARB_pixel_buffer_object", F(EXT_pixel_buffer_object) },
|
2002-04-02 16:15:16 +00:00
|
|
|
{ OFF, "GL_ARB_point_parameters", F(EXT_point_parameters) },
|
2003-08-23 00:12:46 +00:00
|
|
|
{ OFF, "GL_ARB_point_sprite", F(ARB_point_sprite) },
|
2009-09-15 16:01:22 -06:00
|
|
|
{ OFF, "GL_ARB_provoking_vertex", F(EXT_provoking_vertex) },
|
2009-08-14 01:20:56 -07:00
|
|
|
{ OFF, "GL_ARB_seamless_cube_map", F(ARB_seamless_cube_map) },
|
2005-07-21 15:41:56 +00:00
|
|
|
{ OFF, "GL_ARB_shader_objects", F(ARB_shader_objects) },
|
2005-04-14 10:23:51 +00:00
|
|
|
{ OFF, "GL_ARB_shading_language_100", F(ARB_shading_language_100) },
|
2006-11-03 15:18:17 +00:00
|
|
|
{ OFF, "GL_ARB_shading_language_120", F(ARB_shading_language_120) },
|
2001-12-04 23:44:55 +00:00
|
|
|
{ OFF, "GL_ARB_shadow", F(ARB_shadow) },
|
2009-01-28 16:49:28 -07:00
|
|
|
{ OFF, "GL_ARB_shadow_ambient", F(ARB_shadow_ambient) },
|
2009-08-28 20:10:05 -07:00
|
|
|
{ OFF, "GL_ARB_sync", F(ARB_sync) },
|
2001-03-26 19:42:40 +00:00
|
|
|
{ OFF, "GL_ARB_texture_border_clamp", F(ARB_texture_border_clamp) },
|
2009-01-27 17:36:03 -08:00
|
|
|
{ ON, "GL_ARB_texture_compression", F(ARB_texture_compression) },
|
2001-03-18 08:53:49 +00:00
|
|
|
{ OFF, "GL_ARB_texture_cube_map", F(ARB_texture_cube_map) },
|
|
|
|
{ OFF, "GL_ARB_texture_env_add", F(EXT_texture_env_add) },
|
2001-04-17 21:25:53 +00:00
|
|
|
{ OFF, "GL_ARB_texture_env_combine", F(ARB_texture_env_combine) },
|
2002-05-02 00:59:20 +00:00
|
|
|
{ OFF, "GL_ARB_texture_env_crossbar", F(ARB_texture_env_crossbar) },
|
2001-04-17 21:25:53 +00:00
|
|
|
{ OFF, "GL_ARB_texture_env_dot3", F(ARB_texture_env_dot3) },
|
2004-08-17 19:25:55 +00:00
|
|
|
{ OFF, "GL_MESAX_texture_float", F(ARB_texture_float) },
|
2001-10-17 13:31:07 +00:00
|
|
|
{ OFF, "GL_ARB_texture_mirrored_repeat", F(ARB_texture_mirrored_repeat)},
|
2003-07-03 03:05:48 +00:00
|
|
|
{ OFF, "GL_ARB_texture_non_power_of_two", F(ARB_texture_non_power_of_two)},
|
2004-08-20 14:21:20 +00:00
|
|
|
{ OFF, "GL_ARB_texture_rectangle", F(NV_texture_rectangle) },
|
2004-02-06 02:01:47 +00:00
|
|
|
{ ON, "GL_ARB_transpose_matrix", F(ARB_transpose_matrix) },
|
2009-08-06 15:21:23 -05:00
|
|
|
{ OFF, "GL_ARB_vertex_array_bgra", F(EXT_vertex_array_bgra) },
|
2009-06-22 16:47:45 -06:00
|
|
|
{ OFF, "GL_ARB_vertex_array_object", F(ARB_vertex_array_object) },
|
2009-01-27 18:04:12 -08:00
|
|
|
{ ON, "GL_ARB_vertex_buffer_object", F(ARB_vertex_buffer_object) },
|
2003-04-11 01:20:06 +00:00
|
|
|
{ OFF, "GL_ARB_vertex_program", F(ARB_vertex_program) },
|
2004-10-27 17:27:57 +00:00
|
|
|
{ OFF, "GL_ARB_vertex_shader", F(ARB_vertex_shader) },
|
2001-11-19 00:41:32 +00:00
|
|
|
{ ON, "GL_ARB_window_pos", F(ARB_window_pos) },
|
2004-02-06 02:01:47 +00:00
|
|
|
{ ON, "GL_EXT_abgr", F(EXT_abgr) },
|
|
|
|
{ ON, "GL_EXT_bgra", F(EXT_bgra) },
|
2001-03-18 08:53:49 +00:00
|
|
|
{ OFF, "GL_EXT_blend_color", F(EXT_blend_color) },
|
2004-01-27 18:52:40 +00:00
|
|
|
{ OFF, "GL_EXT_blend_equation_separate", F(EXT_blend_equation_separate) },
|
2001-03-18 08:53:49 +00:00
|
|
|
{ OFF, "GL_EXT_blend_func_separate", F(EXT_blend_func_separate) },
|
|
|
|
{ OFF, "GL_EXT_blend_logic_op", F(EXT_blend_logic_op) },
|
|
|
|
{ OFF, "GL_EXT_blend_minmax", F(EXT_blend_minmax) },
|
|
|
|
{ OFF, "GL_EXT_blend_subtract", F(EXT_blend_subtract) },
|
2007-11-05 18:04:30 -07:00
|
|
|
{ OFF, "GL_EXT_clip_volume_hint", F(EXT_clip_volume_hint) },
|
2004-05-10 18:16:03 +00:00
|
|
|
{ OFF, "GL_EXT_cull_vertex", F(EXT_cull_vertex) },
|
2001-03-18 08:53:49 +00:00
|
|
|
{ ON, "GL_EXT_compiled_vertex_array", F(EXT_compiled_vertex_array) },
|
2003-06-02 20:37:16 +00:00
|
|
|
{ OFF, "GL_EXT_convolution", F(EXT_convolution) },
|
2004-02-06 02:01:47 +00:00
|
|
|
{ ON, "GL_EXT_copy_texture", F(EXT_copy_texture) },
|
2003-04-21 15:02:17 +00:00
|
|
|
{ OFF, "GL_EXT_depth_bounds_test", F(EXT_depth_bounds_test) },
|
2004-02-06 02:01:47 +00:00
|
|
|
{ ON, "GL_EXT_draw_range_elements", F(EXT_draw_range_elements) },
|
2005-02-07 05:08:24 +00:00
|
|
|
{ OFF, "GL_EXT_framebuffer_object", F(EXT_framebuffer_object) },
|
2005-11-08 14:45:48 +00:00
|
|
|
{ OFF, "GL_EXT_framebuffer_blit", F(EXT_framebuffer_blit) },
|
2001-03-18 08:53:49 +00:00
|
|
|
{ OFF, "GL_EXT_fog_coord", F(EXT_fog_coord) },
|
2006-08-15 16:47:34 +00:00
|
|
|
{ OFF, "GL_EXT_gpu_program_parameters", F(EXT_gpu_program_parameters) },
|
2001-03-18 08:53:49 +00:00
|
|
|
{ OFF, "GL_EXT_histogram", F(EXT_histogram) },
|
2009-01-27 18:16:51 -08:00
|
|
|
{ ON, "GL_EXT_multi_draw_arrays", F(EXT_multi_draw_arrays) },
|
2006-03-21 21:57:00 +00:00
|
|
|
{ OFF, "GL_EXT_packed_depth_stencil", F(EXT_packed_depth_stencil) },
|
2004-02-06 02:01:47 +00:00
|
|
|
{ ON, "GL_EXT_packed_pixels", F(EXT_packed_pixels) },
|
2001-03-18 08:53:49 +00:00
|
|
|
{ OFF, "GL_EXT_paletted_texture", F(EXT_paletted_texture) },
|
2004-03-13 18:21:40 +00:00
|
|
|
{ OFF, "GL_EXT_pixel_buffer_object", F(EXT_pixel_buffer_object) },
|
2001-03-18 08:53:49 +00:00
|
|
|
{ OFF, "GL_EXT_point_parameters", F(EXT_point_parameters) },
|
2004-02-06 02:01:47 +00:00
|
|
|
{ ON, "GL_EXT_polygon_offset", F(EXT_polygon_offset) },
|
2009-05-28 12:30:25 -06:00
|
|
|
{ OFF, "GL_EXT_provoking_vertex", F(EXT_provoking_vertex) },
|
2004-02-06 02:01:47 +00:00
|
|
|
{ ON, "GL_EXT_rescale_normal", F(EXT_rescale_normal) },
|
2001-03-18 08:53:49 +00:00
|
|
|
{ OFF, "GL_EXT_secondary_color", F(EXT_secondary_color) },
|
2004-02-06 02:01:47 +00:00
|
|
|
{ ON, "GL_EXT_separate_specular_color", F(EXT_separate_specular_color) },
|
2002-03-23 16:33:53 +00:00
|
|
|
{ OFF, "GL_EXT_shadow_funcs", F(EXT_shadow_funcs) },
|
2001-03-18 08:53:49 +00:00
|
|
|
{ OFF, "GL_EXT_shared_texture_palette", F(EXT_shared_texture_palette) },
|
2002-09-06 02:56:08 +00:00
|
|
|
{ OFF, "GL_EXT_stencil_two_side", F(EXT_stencil_two_side) },
|
2003-06-02 20:37:16 +00:00
|
|
|
{ OFF, "GL_EXT_stencil_wrap", F(EXT_stencil_wrap) },
|
2004-02-06 02:01:47 +00:00
|
|
|
{ ON, "GL_EXT_subtexture", F(EXT_subtexture) },
|
|
|
|
{ ON, "GL_EXT_texture", F(EXT_texture) },
|
2001-03-18 08:53:49 +00:00
|
|
|
{ ON, "GL_EXT_texture3D", F(EXT_texture3D) },
|
|
|
|
{ OFF, "GL_EXT_texture_compression_s3tc", F(EXT_texture_compression_s3tc) },
|
2003-06-02 20:37:16 +00:00
|
|
|
{ ON, "GL_EXT_texture_edge_clamp", F(SGIS_texture_edge_clamp) },
|
2001-03-18 08:53:49 +00:00
|
|
|
{ OFF, "GL_EXT_texture_env_add", F(EXT_texture_env_add) },
|
|
|
|
{ OFF, "GL_EXT_texture_env_combine", F(EXT_texture_env_combine) },
|
|
|
|
{ OFF, "GL_EXT_texture_env_dot3", F(EXT_texture_env_dot3) },
|
|
|
|
{ OFF, "GL_EXT_texture_filter_anisotropic", F(EXT_texture_filter_anisotropic) },
|
|
|
|
{ OFF, "GL_EXT_texture_lod_bias", F(EXT_texture_lod_bias) },
|
2003-09-02 19:25:17 +00:00
|
|
|
{ OFF, "GL_EXT_texture_mirror_clamp", F(EXT_texture_mirror_clamp) },
|
2004-02-06 02:01:47 +00:00
|
|
|
{ ON, "GL_EXT_texture_object", F(EXT_texture_object) },
|
2003-06-04 12:59:01 +00:00
|
|
|
{ OFF, "GL_EXT_texture_rectangle", F(NV_texture_rectangle) },
|
2006-08-03 03:20:52 +00:00
|
|
|
{ OFF, "GL_EXT_texture_sRGB", F(EXT_texture_sRGB) },
|
2009-01-28 10:27:33 -07:00
|
|
|
{ OFF, "GL_EXT_texture_swizzle", F(EXT_texture_swizzle) },
|
2005-09-02 13:42:49 +00:00
|
|
|
{ OFF, "GL_EXT_timer_query", F(EXT_timer_query) },
|
2004-02-06 02:01:47 +00:00
|
|
|
{ ON, "GL_EXT_vertex_array", F(EXT_vertex_array) },
|
2009-01-23 11:23:12 -07:00
|
|
|
{ OFF, "GL_EXT_vertex_array_bgra", F(EXT_vertex_array_bgra) },
|
2001-03-18 08:53:49 +00:00
|
|
|
{ OFF, "GL_EXT_vertex_array_set", F(EXT_vertex_array_set) },
|
2003-06-02 20:37:16 +00:00
|
|
|
{ OFF, "GL_3DFX_texture_compression_FXT1", F(TDFX_texture_compression_FXT1) },
|
|
|
|
{ OFF, "GL_APPLE_client_storage", F(APPLE_client_storage) },
|
2004-02-06 02:01:47 +00:00
|
|
|
{ ON, "GL_APPLE_packed_pixels", F(APPLE_packed_pixels) },
|
2006-06-12 16:26:29 +00:00
|
|
|
{ OFF, "GL_APPLE_vertex_array_object", F(APPLE_vertex_array_object) },
|
2004-01-27 18:52:40 +00:00
|
|
|
{ OFF, "GL_ATI_blend_equation_separate", F(EXT_blend_equation_separate) },
|
2009-03-12 15:01:16 +01:00
|
|
|
{ OFF, "GL_ATI_envmap_bumpmap", F(ATI_envmap_bumpmap) },
|
2003-06-02 20:37:16 +00:00
|
|
|
{ OFF, "GL_ATI_texture_env_combine3", F(ATI_texture_env_combine3)},
|
|
|
|
{ OFF, "GL_ATI_texture_mirror_once", F(ATI_texture_mirror_once)},
|
2004-12-19 03:06:59 +00:00
|
|
|
{ OFF, "GL_ATI_fragment_shader", F(ATI_fragment_shader)},
|
2006-11-02 12:02:13 +00:00
|
|
|
{ OFF, "GL_ATI_separate_stencil", F(ATI_separate_stencil)},
|
2009-01-27 18:16:51 -08:00
|
|
|
{ ON, "GL_IBM_multimode_draw_arrays", F(IBM_multimode_draw_arrays) },
|
2001-06-26 01:32:48 +00:00
|
|
|
{ ON, "GL_IBM_rasterpos_clip", F(IBM_rasterpos_clip) },
|
2002-09-05 21:16:30 +00:00
|
|
|
{ OFF, "GL_IBM_texture_mirrored_repeat", F(ARB_texture_mirrored_repeat)},
|
2003-06-02 20:37:16 +00:00
|
|
|
{ OFF, "GL_INGR_blend_func_separate", F(EXT_blend_func_separate) },
|
2002-09-21 17:34:56 +00:00
|
|
|
{ OFF, "GL_MESA_pack_invert", F(MESA_pack_invert) },
|
2003-07-03 02:15:06 +00:00
|
|
|
{ OFF, "GL_MESA_packed_depth_stencil", F(MESA_packed_depth_stencil) },
|
2001-03-18 08:53:49 +00:00
|
|
|
{ OFF, "GL_MESA_resize_buffers", F(MESA_resize_buffers) },
|
2007-05-16 15:34:22 -07:00
|
|
|
{ OFF, "GL_MESA_texture_array", F(MESA_texture_array) },
|
2009-03-27 19:39:52 +01:00
|
|
|
{ OFF, "GL_MESA_texture_signed_rgba", F(MESA_texture_signed_rgba) },
|
2002-09-21 16:51:25 +00:00
|
|
|
{ OFF, "GL_MESA_ycbcr_texture", F(MESA_ycbcr_texture) },
|
2003-06-02 20:37:16 +00:00
|
|
|
{ ON, "GL_MESA_window_pos", F(ARB_window_pos) },
|
2001-03-18 08:53:49 +00:00
|
|
|
{ OFF, "GL_NV_blend_square", F(NV_blend_square) },
|
2009-09-08 12:32:05 -07:00
|
|
|
{ OFF, "GL_NV_depth_clamp", F(ARB_depth_clamp) },
|
2003-06-02 20:37:16 +00:00
|
|
|
{ OFF, "GL_NV_fragment_program", F(NV_fragment_program) },
|
2004-02-06 02:01:47 +00:00
|
|
|
{ ON, "GL_NV_light_max_exponent", F(NV_light_max_exponent) },
|
2002-05-27 17:04:52 +00:00
|
|
|
{ OFF, "GL_NV_point_sprite", F(NV_point_sprite) },
|
2009-01-23 17:29:26 -07:00
|
|
|
{ OFF, "GL_NV_texture_env_combine4", F(NV_texture_env_combine4) },
|
2002-06-15 03:03:06 +00:00
|
|
|
{ OFF, "GL_NV_texture_rectangle", F(NV_texture_rectangle) },
|
2004-02-06 02:01:47 +00:00
|
|
|
{ ON, "GL_NV_texgen_reflection", F(NV_texgen_reflection) },
|
2001-12-14 02:50:01 +00:00
|
|
|
{ OFF, "GL_NV_vertex_program", F(NV_vertex_program) },
|
2002-03-13 04:33:16 +00:00
|
|
|
{ OFF, "GL_NV_vertex_program1_1", F(NV_vertex_program1_1) },
|
2004-10-16 01:16:54 +00:00
|
|
|
{ ON, "GL_OES_read_format", F(OES_read_format) },
|
2001-03-18 08:53:49 +00:00
|
|
|
{ OFF, "GL_SGI_color_matrix", F(SGI_color_matrix) },
|
|
|
|
{ OFF, "GL_SGI_color_table", F(SGI_color_table) },
|
2003-01-21 21:47:45 +00:00
|
|
|
{ OFF, "GL_SGI_texture_color_table", F(SGI_texture_color_table) },
|
2001-05-24 14:47:56 +00:00
|
|
|
{ OFF, "GL_SGIS_generate_mipmap", F(SGIS_generate_mipmap) },
|
2001-03-26 19:42:40 +00:00
|
|
|
{ OFF, "GL_SGIS_texture_border_clamp", F(ARB_texture_border_clamp) },
|
2003-06-02 20:37:16 +00:00
|
|
|
{ ON, "GL_SGIS_texture_edge_clamp", F(SGIS_texture_edge_clamp) },
|
2004-02-06 02:01:47 +00:00
|
|
|
{ ON, "GL_SGIS_texture_lod", F(SGIS_texture_lod) },
|
2009-01-27 18:16:51 -08:00
|
|
|
{ ON, "GL_SUN_multi_draw_arrays", F(EXT_multi_draw_arrays) },
|
2003-11-21 09:56:50 +00:00
|
|
|
{ OFF, "GL_S3_s3tc", F(S3_s3tc) },
|
1999-08-19 00:55:39 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2000-03-07 17:54:58 +00:00
|
|
|
|
2003-07-03 02:15:06 +00:00
|
|
|
/**
|
2000-11-17 21:01:25 +00:00
|
|
|
* Enable all extensions suitable for a software-only renderer.
|
|
|
|
* This is a convenience function used by the XMesa, OSMesa, GGI drivers, etc.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
_mesa_enable_sw_extensions(GLcontext *ctx)
|
|
|
|
{
|
2009-06-02 20:32:34 -06:00
|
|
|
ctx->Extensions.ARB_copy_buffer = GL_TRUE;
|
2009-08-26 09:51:15 -07:00
|
|
|
ctx->Extensions.ARB_depth_clamp = GL_TRUE;
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.ARB_depth_texture = GL_TRUE;
|
2009-01-27 19:10:43 -08:00
|
|
|
/*ctx->Extensions.ARB_draw_buffers = GL_TRUE;*/
|
2009-08-27 10:09:24 -07:00
|
|
|
ctx->Extensions.ARB_draw_elements_base_vertex = GL_TRUE;
|
2003-04-21 15:02:17 +00:00
|
|
|
#if FEATURE_ARB_fragment_program
|
2004-05-01 18:28:49 +00:00
|
|
|
ctx->Extensions.ARB_fragment_program = GL_TRUE;
|
2007-06-07 13:58:50 -07:00
|
|
|
ctx->Extensions.ARB_fragment_program_shadow = GL_TRUE;
|
2005-07-21 15:41:56 +00:00
|
|
|
#endif
|
2006-02-15 11:00:15 +00:00
|
|
|
#if FEATURE_ARB_fragment_shader
|
2005-07-21 15:41:56 +00:00
|
|
|
ctx->Extensions.ARB_fragment_shader = GL_TRUE;
|
2009-01-19 16:14:39 -07:00
|
|
|
#endif
|
|
|
|
#if FEATURE_ARB_framebuffer_object
|
|
|
|
ctx->Extensions.ARB_framebuffer_object = GL_TRUE;
|
2003-04-21 15:02:17 +00:00
|
|
|
#endif
|
2006-03-28 01:23:43 +00:00
|
|
|
ctx->Extensions.ARB_half_float_pixel = GL_TRUE;
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.ARB_imaging = GL_TRUE;
|
2009-06-08 17:02:36 -06:00
|
|
|
ctx->Extensions.ARB_map_buffer_range = GL_TRUE;
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.ARB_multitexture = GL_TRUE;
|
2003-06-13 02:37:27 +00:00
|
|
|
#if FEATURE_ARB_occlusion_query
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.ARB_occlusion_query = GL_TRUE;
|
2003-06-13 02:37:27 +00:00
|
|
|
#endif
|
2005-07-21 15:41:56 +00:00
|
|
|
ctx->Extensions.ARB_point_sprite = GL_TRUE;
|
2006-02-13 11:04:27 +00:00
|
|
|
#if FEATURE_ARB_shader_objects
|
2005-07-21 15:41:56 +00:00
|
|
|
ctx->Extensions.ARB_shader_objects = GL_TRUE;
|
|
|
|
#endif
|
2006-02-13 11:04:27 +00:00
|
|
|
#if FEATURE_ARB_shading_language_100
|
2005-07-21 15:41:56 +00:00
|
|
|
ctx->Extensions.ARB_shading_language_100 = GL_TRUE;
|
2007-04-08 21:48:19 -06:00
|
|
|
#endif
|
|
|
|
#if FEATURE_ARB_shading_language_120
|
2009-02-17 16:12:49 -07:00
|
|
|
ctx->Extensions.ARB_shading_language_120 = GL_TRUE;
|
2005-07-21 15:41:56 +00:00
|
|
|
#endif
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.ARB_shadow = GL_TRUE;
|
2009-01-28 16:49:28 -07:00
|
|
|
ctx->Extensions.ARB_shadow_ambient = GL_TRUE;
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.ARB_texture_border_clamp = GL_TRUE;
|
|
|
|
ctx->Extensions.ARB_texture_cube_map = GL_TRUE;
|
|
|
|
ctx->Extensions.ARB_texture_env_combine = GL_TRUE;
|
|
|
|
ctx->Extensions.ARB_texture_env_crossbar = GL_TRUE;
|
|
|
|
ctx->Extensions.ARB_texture_env_dot3 = GL_TRUE;
|
2004-08-17 19:25:55 +00:00
|
|
|
/*ctx->Extensions.ARB_texture_float = GL_TRUE;*/
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.ARB_texture_mirrored_repeat = GL_TRUE;
|
2003-07-03 03:05:48 +00:00
|
|
|
ctx->Extensions.ARB_texture_non_power_of_two = GL_TRUE;
|
2009-06-22 16:47:45 -06:00
|
|
|
ctx->Extensions.ARB_vertex_array_object = GL_TRUE;
|
2003-04-21 15:02:17 +00:00
|
|
|
#if FEATURE_ARB_vertex_program
|
2004-05-01 18:28:49 +00:00
|
|
|
ctx->Extensions.ARB_vertex_program = GL_TRUE;
|
2005-07-21 15:41:56 +00:00
|
|
|
#endif
|
2006-02-13 11:04:27 +00:00
|
|
|
#if FEATURE_ARB_vertex_shader
|
2005-07-21 15:41:56 +00:00
|
|
|
ctx->Extensions.ARB_vertex_shader = GL_TRUE;
|
2003-09-17 03:32:12 +00:00
|
|
|
#endif
|
|
|
|
#if FEATURE_ARB_vertex_buffer_object
|
2009-01-27 18:04:12 -08:00
|
|
|
/*ctx->Extensions.ARB_vertex_buffer_object = GL_TRUE;*/
|
2009-08-28 20:10:05 -07:00
|
|
|
#endif
|
|
|
|
#if FEATURE_ARB_sync
|
|
|
|
ctx->Extensions.ARB_sync = GL_TRUE;
|
2004-10-27 17:27:57 +00:00
|
|
|
#endif
|
2006-06-12 16:26:29 +00:00
|
|
|
ctx->Extensions.APPLE_vertex_array_object = GL_TRUE;
|
2009-03-12 15:01:16 +01:00
|
|
|
ctx->Extensions.ATI_envmap_bumpmap = GL_TRUE;
|
2004-12-19 03:06:59 +00:00
|
|
|
#if FEATURE_ATI_fragment_shader
|
|
|
|
ctx->Extensions.ATI_fragment_shader = GL_TRUE;
|
2003-04-21 15:02:17 +00:00
|
|
|
#endif
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.ATI_texture_env_combine3 = GL_TRUE;
|
|
|
|
ctx->Extensions.ATI_texture_mirror_once = GL_TRUE;
|
2006-11-02 12:02:13 +00:00
|
|
|
ctx->Extensions.ATI_separate_stencil = GL_TRUE;
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.EXT_blend_color = GL_TRUE;
|
2004-01-27 18:52:40 +00:00
|
|
|
ctx->Extensions.EXT_blend_equation_separate = GL_TRUE;
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.EXT_blend_func_separate = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_blend_logic_op = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_blend_minmax = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_blend_subtract = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_convolution = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_depth_bounds_test = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_fog_coord = GL_TRUE;
|
2005-07-21 15:48:39 +00:00
|
|
|
#if FEATURE_EXT_framebuffer_object
|
|
|
|
ctx->Extensions.EXT_framebuffer_object = GL_TRUE;
|
2006-03-02 03:46:33 +00:00
|
|
|
#endif
|
|
|
|
#if FEATURE_EXT_framebuffer_blit
|
2005-11-08 14:45:48 +00:00
|
|
|
ctx->Extensions.EXT_framebuffer_blit = GL_TRUE;
|
2005-07-21 15:48:39 +00:00
|
|
|
#endif
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.EXT_histogram = GL_TRUE;
|
2009-01-27 18:16:51 -08:00
|
|
|
/*ctx->Extensions.EXT_multi_draw_arrays = GL_TRUE;*/
|
2005-09-28 02:29:50 +00:00
|
|
|
ctx->Extensions.EXT_packed_depth_stencil = GL_TRUE;
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.EXT_paletted_texture = GL_TRUE;
|
2004-03-13 18:21:40 +00:00
|
|
|
#if FEATURE_EXT_pixel_buffer_object
|
|
|
|
ctx->Extensions.EXT_pixel_buffer_object = GL_TRUE;
|
|
|
|
#endif
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.EXT_point_parameters = GL_TRUE;
|
2009-06-01 20:43:57 -06:00
|
|
|
ctx->Extensions.EXT_provoking_vertex = GL_TRUE;
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.EXT_shadow_funcs = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_secondary_color = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_shared_texture_palette = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_stencil_wrap = GL_TRUE;
|
2009-01-09 15:47:05 -08:00
|
|
|
ctx->Extensions.EXT_stencil_two_side = GL_TRUE;
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.EXT_texture_env_add = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_texture_env_combine = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_texture_env_dot3 = GL_TRUE;
|
2003-09-02 19:25:17 +00:00
|
|
|
ctx->Extensions.EXT_texture_mirror_clamp = GL_TRUE;
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.EXT_texture_lod_bias = GL_TRUE;
|
2006-08-03 03:20:52 +00:00
|
|
|
#if FEATURE_EXT_texture_sRGB
|
|
|
|
ctx->Extensions.EXT_texture_sRGB = GL_TRUE;
|
|
|
|
#endif
|
2009-01-28 10:31:05 -07:00
|
|
|
ctx->Extensions.EXT_texture_swizzle = GL_TRUE;
|
2009-01-23 11:26:51 -07:00
|
|
|
ctx->Extensions.EXT_vertex_array_bgra = GL_TRUE;
|
2009-01-27 18:16:51 -08:00
|
|
|
/*ctx->Extensions.IBM_multimode_draw_arrays = GL_TRUE;*/
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.MESA_pack_invert = GL_TRUE;
|
|
|
|
ctx->Extensions.MESA_resize_buffers = GL_TRUE;
|
2007-05-16 15:34:22 -07:00
|
|
|
ctx->Extensions.MESA_texture_array = GL_TRUE;
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.MESA_ycbcr_texture = GL_TRUE;
|
|
|
|
ctx->Extensions.NV_blend_square = GL_TRUE;
|
|
|
|
/*ctx->Extensions.NV_light_max_exponent = GL_TRUE;*/
|
|
|
|
ctx->Extensions.NV_point_sprite = GL_TRUE;
|
2009-01-23 17:32:32 -07:00
|
|
|
ctx->Extensions.NV_texture_env_combine4 = GL_TRUE;
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.NV_texture_rectangle = GL_TRUE;
|
|
|
|
/*ctx->Extensions.NV_texgen_reflection = GL_TRUE;*/
|
2002-10-16 17:57:51 +00:00
|
|
|
#if FEATURE_NV_vertex_program
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.NV_vertex_program = GL_TRUE;
|
|
|
|
ctx->Extensions.NV_vertex_program1_1 = GL_TRUE;
|
2003-01-14 04:55:45 +00:00
|
|
|
#endif
|
|
|
|
#if FEATURE_NV_fragment_program
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.NV_fragment_program = GL_TRUE;
|
2002-10-16 17:57:51 +00:00
|
|
|
#endif
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.SGI_color_matrix = GL_TRUE;
|
|
|
|
ctx->Extensions.SGI_color_table = GL_TRUE;
|
|
|
|
ctx->Extensions.SGI_texture_color_table = GL_TRUE;
|
|
|
|
ctx->Extensions.SGIS_generate_mipmap = GL_TRUE;
|
|
|
|
ctx->Extensions.SGIS_texture_edge_clamp = GL_TRUE;
|
2006-08-15 16:47:34 +00:00
|
|
|
#if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
|
|
|
|
ctx->Extensions.EXT_gpu_program_parameters = GL_TRUE;
|
|
|
|
#endif
|
2008-11-28 14:08:04 -07:00
|
|
|
#if FEATURE_texture_fxt1
|
|
|
|
_mesa_enable_extension(ctx, "GL_3DFX_texture_compression_FXT1");
|
|
|
|
#endif
|
|
|
|
#if FEATURE_texture_s3tc
|
|
|
|
if (ctx->Mesa_DXTn) {
|
|
|
|
_mesa_enable_extension(ctx, "GL_EXT_texture_compression_s3tc");
|
|
|
|
_mesa_enable_extension(ctx, "GL_S3_s3tc");
|
|
|
|
}
|
|
|
|
#endif
|
2000-11-17 21:01:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-07-03 02:15:06 +00:00
|
|
|
/**
|
2001-02-26 23:58:12 +00:00
|
|
|
* Enable GL_ARB_imaging and all the EXT extensions that are subsets of it.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
_mesa_enable_imaging_extensions(GLcontext *ctx)
|
|
|
|
{
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.ARB_imaging = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_blend_color = GL_TRUE;
|
2007-09-28 16:06:01 -06:00
|
|
|
ctx->Extensions.EXT_blend_logic_op = GL_TRUE;
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.EXT_blend_minmax = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_blend_subtract = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_convolution = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_histogram = GL_TRUE;
|
|
|
|
ctx->Extensions.SGI_color_matrix = GL_TRUE;
|
|
|
|
ctx->Extensions.SGI_color_table = GL_TRUE;
|
2001-02-26 23:58:12 +00:00
|
|
|
}
|
2000-03-07 17:54:58 +00:00
|
|
|
|
2001-02-26 23:58:12 +00:00
|
|
|
|
2001-06-15 14:18:46 +00:00
|
|
|
|
2003-07-03 02:15:06 +00:00
|
|
|
/**
|
2001-06-15 14:18:46 +00:00
|
|
|
* Enable all OpenGL 1.3 features and extensions.
|
2003-07-03 02:15:06 +00:00
|
|
|
* A convenience function to be called by drivers.
|
2001-06-15 14:18:46 +00:00
|
|
|
*/
|
|
|
|
void
|
|
|
|
_mesa_enable_1_3_extensions(GLcontext *ctx)
|
|
|
|
{
|
2009-01-27 17:50:45 -08:00
|
|
|
/*ctx->Extensions.ARB_multisample = GL_TRUE;*/
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.ARB_multitexture = GL_TRUE;
|
|
|
|
ctx->Extensions.ARB_texture_border_clamp = GL_TRUE;
|
2009-01-27 17:36:03 -08:00
|
|
|
/*ctx->Extensions.ARB_texture_compression = GL_TRUE;*/
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.ARB_texture_cube_map = GL_TRUE;
|
|
|
|
ctx->Extensions.ARB_texture_env_combine = GL_TRUE;
|
|
|
|
ctx->Extensions.ARB_texture_env_dot3 = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_texture_env_add = GL_TRUE;
|
|
|
|
/*ctx->Extensions.ARB_transpose_matrix = GL_TRUE;*/
|
2001-06-15 14:18:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2003-07-03 02:15:06 +00:00
|
|
|
/**
|
2002-06-29 20:03:13 +00:00
|
|
|
* Enable all OpenGL 1.4 features and extensions.
|
2003-07-03 02:15:06 +00:00
|
|
|
* A convenience function to be called by drivers.
|
2002-06-29 20:03:13 +00:00
|
|
|
*/
|
|
|
|
void
|
|
|
|
_mesa_enable_1_4_extensions(GLcontext *ctx)
|
|
|
|
{
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.ARB_depth_texture = GL_TRUE;
|
|
|
|
ctx->Extensions.ARB_shadow = GL_TRUE;
|
|
|
|
ctx->Extensions.ARB_texture_env_crossbar = GL_TRUE;
|
|
|
|
ctx->Extensions.ARB_texture_mirrored_repeat = GL_TRUE;
|
|
|
|
ctx->Extensions.ARB_window_pos = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_blend_color = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_blend_func_separate = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_blend_minmax = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_blend_subtract = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_fog_coord = GL_TRUE;
|
2009-01-27 18:16:51 -08:00
|
|
|
/*ctx->Extensions.EXT_multi_draw_arrays = GL_TRUE;*/
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.EXT_point_parameters = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_secondary_color = GL_TRUE;
|
|
|
|
ctx->Extensions.EXT_stencil_wrap = GL_TRUE;
|
2003-08-28 03:04:41 +00:00
|
|
|
ctx->Extensions.EXT_texture_lod_bias = GL_TRUE;
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.SGIS_generate_mipmap = GL_TRUE;
|
2002-06-29 20:03:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-07-03 02:15:06 +00:00
|
|
|
/**
|
|
|
|
* Enable all OpenGL 1.5 features and extensions.
|
|
|
|
* A convenience function to be called by drivers.
|
2001-02-26 23:58:12 +00:00
|
|
|
*/
|
|
|
|
void
|
2003-07-03 02:15:06 +00:00
|
|
|
_mesa_enable_1_5_extensions(GLcontext *ctx)
|
1999-08-19 00:55:39 +00:00
|
|
|
{
|
2003-07-03 02:15:06 +00:00
|
|
|
ctx->Extensions.ARB_occlusion_query = GL_TRUE;
|
2009-01-27 18:04:12 -08:00
|
|
|
/*ctx->Extensions.ARB_vertex_buffer_object = GL_TRUE;*/
|
2003-08-06 19:24:02 +00:00
|
|
|
ctx->Extensions.EXT_shadow_funcs = GL_TRUE;
|
1999-08-19 00:55:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-10-02 16:39:09 +00:00
|
|
|
/**
|
|
|
|
* Enable all OpenGL 2.0 features and extensions.
|
|
|
|
* A convenience function to be called by drivers.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
_mesa_enable_2_0_extensions(GLcontext *ctx)
|
|
|
|
{
|
2009-01-27 19:10:43 -08:00
|
|
|
/*ctx->Extensions.ARB_draw_buffers = GL_TRUE;*/
|
2006-02-15 11:00:15 +00:00
|
|
|
#if FEATURE_ARB_fragment_shader
|
2005-07-21 15:41:56 +00:00
|
|
|
ctx->Extensions.ARB_fragment_shader = GL_TRUE;
|
|
|
|
#endif
|
2004-10-02 16:39:09 +00:00
|
|
|
ctx->Extensions.ARB_point_sprite = GL_TRUE;
|
2009-08-06 15:54:49 +01:00
|
|
|
ctx->Extensions.EXT_blend_equation_separate = GL_TRUE;
|
2004-10-02 16:39:09 +00:00
|
|
|
ctx->Extensions.ARB_texture_non_power_of_two = GL_TRUE;
|
2006-02-13 11:04:27 +00:00
|
|
|
#if FEATURE_ARB_shader_objects
|
2005-07-21 15:41:56 +00:00
|
|
|
ctx->Extensions.ARB_shader_objects = GL_TRUE;
|
|
|
|
#endif
|
2006-02-13 11:04:27 +00:00
|
|
|
#if FEATURE_ARB_shading_language_100
|
2005-07-21 15:41:56 +00:00
|
|
|
ctx->Extensions.ARB_shading_language_100 = GL_TRUE;
|
|
|
|
#endif
|
2009-01-09 15:47:05 -08:00
|
|
|
ctx->Extensions.EXT_stencil_two_side = GL_TRUE;
|
2006-02-13 11:04:27 +00:00
|
|
|
#if FEATURE_ARB_vertex_shader
|
2005-07-21 15:41:56 +00:00
|
|
|
ctx->Extensions.ARB_vertex_shader = GL_TRUE;
|
|
|
|
#endif
|
2004-10-02 16:39:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2006-08-03 03:20:52 +00:00
|
|
|
/**
|
|
|
|
* Enable all OpenGL 2.1 features and extensions.
|
|
|
|
* A convenience function to be called by drivers.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
_mesa_enable_2_1_extensions(GLcontext *ctx)
|
|
|
|
{
|
|
|
|
#if FEATURE_EXT_pixel_buffer_object
|
|
|
|
ctx->Extensions.EXT_pixel_buffer_object = GL_TRUE;
|
|
|
|
#endif
|
|
|
|
#if FEATURE_EXT_texture_sRGB
|
|
|
|
ctx->Extensions.EXT_texture_sRGB = GL_TRUE;
|
|
|
|
#endif
|
2006-12-13 15:31:14 -07:00
|
|
|
#ifdef FEATURE_ARB_shading_language_120
|
2009-02-17 16:12:49 -07:00
|
|
|
ctx->Extensions.ARB_shading_language_120 = GL_TRUE;
|
2006-12-13 15:31:14 -07:00
|
|
|
#endif
|
2006-08-03 03:20:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-10-02 16:39:09 +00:00
|
|
|
|
2003-07-03 02:15:06 +00:00
|
|
|
/**
|
2000-03-07 17:54:58 +00:00
|
|
|
* Either enable or disable the named extension.
|
2009-06-08 10:52:16 -06:00
|
|
|
* \return GL_TRUE for success, GL_FALSE if invalid extension name
|
2000-03-07 17:54:58 +00:00
|
|
|
*/
|
2009-06-08 10:52:16 -06:00
|
|
|
static GLboolean
|
2003-07-03 02:15:06 +00:00
|
|
|
set_extension( GLcontext *ctx, const char *name, GLboolean state )
|
1999-08-19 00:55:39 +00:00
|
|
|
{
|
2003-07-03 02:15:06 +00:00
|
|
|
GLboolean *base = (GLboolean *) &ctx->Extensions;
|
|
|
|
GLuint i;
|
|
|
|
|
|
|
|
if (ctx->Extensions.String) {
|
|
|
|
/* The string was already queried - can't change it now! */
|
|
|
|
_mesa_problem(ctx, "Trying to enable/disable extension after glGetString(GL_EXTENSIONS): %s", name);
|
2009-06-08 10:52:16 -06:00
|
|
|
return GL_FALSE;
|
2001-02-26 23:58:12 +00:00
|
|
|
}
|
1999-08-19 00:55:39 +00:00
|
|
|
|
2003-07-03 02:15:06 +00:00
|
|
|
for (i = 0 ; i < Elements(default_extensions) ; i++) {
|
|
|
|
if (_mesa_strcmp(default_extensions[i].name, name) == 0) {
|
|
|
|
if (default_extensions[i].flag_offset) {
|
|
|
|
GLboolean *enabled = base + default_extensions[i].flag_offset;
|
|
|
|
*enabled = state;
|
|
|
|
}
|
2009-06-08 10:52:16 -06:00
|
|
|
return GL_TRUE;
|
2003-07-03 02:15:06 +00:00
|
|
|
}
|
|
|
|
}
|
2009-06-08 10:52:16 -06:00
|
|
|
return GL_FALSE;
|
2000-11-22 07:32:16 +00:00
|
|
|
}
|
1999-08-19 00:55:39 +00:00
|
|
|
|
|
|
|
|
2003-07-03 02:15:06 +00:00
|
|
|
/**
|
|
|
|
* Enable the named extension.
|
|
|
|
* Typically called by drivers.
|
|
|
|
*/
|
2001-02-26 23:58:12 +00:00
|
|
|
void
|
|
|
|
_mesa_enable_extension( GLcontext *ctx, const char *name )
|
1999-08-19 00:55:39 +00:00
|
|
|
{
|
2009-06-08 10:52:16 -06:00
|
|
|
if (!set_extension(ctx, name, GL_TRUE))
|
|
|
|
_mesa_problem(ctx, "Trying to enable unknown extension: %s", name);
|
1999-08-19 00:55:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-07-03 02:15:06 +00:00
|
|
|
/**
|
|
|
|
* Disable the named extension.
|
|
|
|
* XXX is this really needed???
|
|
|
|
*/
|
2001-02-26 23:58:12 +00:00
|
|
|
void
|
|
|
|
_mesa_disable_extension( GLcontext *ctx, const char *name )
|
1999-08-19 00:55:39 +00:00
|
|
|
{
|
2009-06-08 10:52:16 -06:00
|
|
|
if (!set_extension(ctx, name, GL_FALSE))
|
|
|
|
_mesa_problem(ctx, "Trying to disable unknown extension: %s", name);
|
1999-08-19 00:55:39 +00:00
|
|
|
}
|
2000-11-22 07:32:16 +00:00
|
|
|
|
1999-08-19 00:55:39 +00:00
|
|
|
|
2003-07-03 02:15:06 +00:00
|
|
|
/**
|
1999-11-12 02:05:46 +00:00
|
|
|
* Test if the named extension is enabled in this context.
|
|
|
|
*/
|
2001-02-26 23:58:12 +00:00
|
|
|
GLboolean
|
2003-07-03 02:15:06 +00:00
|
|
|
_mesa_extension_is_enabled( GLcontext *ctx, const char *name )
|
1999-11-12 02:05:46 +00:00
|
|
|
{
|
2003-07-03 02:15:06 +00:00
|
|
|
const GLboolean *base = (const GLboolean *) &ctx->Extensions;
|
|
|
|
GLuint i;
|
|
|
|
|
|
|
|
for (i = 0 ; i < Elements(default_extensions) ; i++) {
|
|
|
|
if (_mesa_strcmp(default_extensions[i].name, name) == 0) {
|
|
|
|
if (!default_extensions[i].flag_offset)
|
1999-11-12 02:05:46 +00:00
|
|
|
return GL_TRUE;
|
2003-07-03 02:15:06 +00:00
|
|
|
return *(base + default_extensions[i].flag_offset);
|
1999-11-12 02:05:46 +00:00
|
|
|
}
|
2003-07-03 02:15:06 +00:00
|
|
|
}
|
1999-11-12 02:05:46 +00:00
|
|
|
return GL_FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2009-06-08 10:52:16 -06:00
|
|
|
/**
|
|
|
|
* Append string 'b' onto string 'a'. Free 'a' and return new string.
|
|
|
|
*/
|
|
|
|
static char *
|
|
|
|
append(const char *a, const char *b)
|
|
|
|
{
|
|
|
|
const GLuint aLen = a ? _mesa_strlen(a) : 0;
|
|
|
|
const GLuint bLen = b ? _mesa_strlen(b) : 0;
|
|
|
|
char *s = _mesa_calloc(aLen + bLen + 1);
|
|
|
|
if (s) {
|
|
|
|
if (a)
|
|
|
|
_mesa_memcpy(s, a, aLen);
|
|
|
|
if (b)
|
|
|
|
_mesa_memcpy(s + aLen, b, bLen);
|
|
|
|
s[aLen + bLen] = '\0';
|
|
|
|
}
|
|
|
|
if (a)
|
|
|
|
_mesa_free((void *) a);
|
|
|
|
return s;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check the MESA_EXTENSION_OVERRIDE env var.
|
|
|
|
* For extension names that are recognized, turn them on. For extension
|
|
|
|
* names that are recognized and prefixed with '-', turn them off.
|
|
|
|
* Return a string of the unknown/leftover names.
|
|
|
|
*/
|
|
|
|
static const char *
|
|
|
|
get_extension_override( GLcontext *ctx )
|
|
|
|
{
|
|
|
|
const char *envExt = _mesa_getenv("MESA_EXTENSION_OVERRIDE");
|
|
|
|
char *extraExt = NULL;
|
|
|
|
char ext[1000];
|
|
|
|
GLuint extLen = 0;
|
|
|
|
GLuint i;
|
|
|
|
GLboolean disableExt = GL_FALSE;
|
|
|
|
|
|
|
|
if (!envExt)
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
for (i = 0; ; i++) {
|
|
|
|
if (envExt[i] == '\0' || envExt[i] == ' ') {
|
|
|
|
/* terminate/process 'ext' if extLen > 0 */
|
|
|
|
if (extLen > 0) {
|
|
|
|
assert(extLen < sizeof(ext));
|
|
|
|
/* enable extension named by 'ext' */
|
|
|
|
ext[extLen] = 0;
|
|
|
|
if (!set_extension(ctx, ext, !disableExt)) {
|
|
|
|
/* unknown extension name, append it to extraExt */
|
|
|
|
if (extraExt) {
|
|
|
|
extraExt = append(extraExt, " ");
|
|
|
|
}
|
|
|
|
extraExt = append(extraExt, ext);
|
|
|
|
}
|
|
|
|
extLen = 0;
|
|
|
|
disableExt = GL_FALSE;
|
|
|
|
}
|
|
|
|
if (envExt[i] == '\0')
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
else if (envExt[i] == '-') {
|
|
|
|
disableExt = GL_TRUE;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
/* accumulate this non-space character */
|
|
|
|
ext[extLen++] = envExt[i];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return extraExt;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-07-03 02:15:06 +00:00
|
|
|
/**
|
|
|
|
* Run through the default_extensions array above and set the
|
|
|
|
* ctx->Extensions.ARB/EXT_* flags accordingly.
|
|
|
|
* To be called during context initialization.
|
|
|
|
*/
|
2001-02-26 23:58:12 +00:00
|
|
|
void
|
2003-07-03 02:15:06 +00:00
|
|
|
_mesa_init_extensions( GLcontext *ctx )
|
1999-08-19 00:55:39 +00:00
|
|
|
{
|
2003-07-03 02:15:06 +00:00
|
|
|
GLboolean *base = (GLboolean *) &ctx->Extensions;
|
|
|
|
GLuint i;
|
1999-08-19 00:55:39 +00:00
|
|
|
|
2003-07-03 02:15:06 +00:00
|
|
|
for (i = 0 ; i < Elements(default_extensions) ; i++) {
|
|
|
|
if (default_extensions[i].enabled &&
|
|
|
|
default_extensions[i].flag_offset) {
|
|
|
|
*(base + default_extensions[i].flag_offset) = GL_TRUE;
|
1999-08-19 00:55:39 +00:00
|
|
|
}
|
2000-11-22 07:32:16 +00:00
|
|
|
}
|
1999-08-19 00:55:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-07-03 02:15:06 +00:00
|
|
|
/**
|
|
|
|
* Construct the GL_EXTENSIONS string. Called the first time that
|
|
|
|
* glGetString(GL_EXTENSIONS) is called.
|
|
|
|
*/
|
|
|
|
GLubyte *
|
|
|
|
_mesa_make_extension_string( GLcontext *ctx )
|
1999-08-19 00:55:39 +00:00
|
|
|
{
|
2003-07-03 02:15:06 +00:00
|
|
|
const GLboolean *base = (const GLboolean *) &ctx->Extensions;
|
2009-06-08 10:52:16 -06:00
|
|
|
const char *extraExt = get_extension_override(ctx);
|
2003-07-03 02:15:06 +00:00
|
|
|
GLuint extStrLen = 0;
|
2009-06-08 10:52:16 -06:00
|
|
|
char *s;
|
1999-08-19 00:55:39 +00:00
|
|
|
GLuint i;
|
|
|
|
|
2003-07-03 02:15:06 +00:00
|
|
|
/* first, compute length of the extension string */
|
1999-08-19 00:55:39 +00:00
|
|
|
for (i = 0 ; i < Elements(default_extensions) ; i++) {
|
2003-07-03 02:15:06 +00:00
|
|
|
if (!default_extensions[i].flag_offset ||
|
|
|
|
*(base + default_extensions[i].flag_offset)) {
|
2005-05-05 21:08:07 +00:00
|
|
|
extStrLen += (GLuint)_mesa_strlen(default_extensions[i].name) + 1;
|
2003-07-03 02:15:06 +00:00
|
|
|
}
|
1999-08-19 00:55:39 +00:00
|
|
|
}
|
2009-06-08 10:52:16 -06:00
|
|
|
|
|
|
|
if (extraExt)
|
|
|
|
extStrLen += _mesa_strlen(extraExt) + 1; /* +1 for space */
|
|
|
|
|
|
|
|
/* allocate the extension string */
|
|
|
|
s = (char *) _mesa_malloc(extStrLen);
|
|
|
|
if (!s)
|
|
|
|
return NULL;
|
1999-08-19 00:55:39 +00:00
|
|
|
|
2003-07-03 02:15:06 +00:00
|
|
|
/* second, build the extension string */
|
|
|
|
extStrLen = 0;
|
|
|
|
for (i = 0 ; i < Elements(default_extensions) ; i++) {
|
|
|
|
if (!default_extensions[i].flag_offset ||
|
|
|
|
*(base + default_extensions[i].flag_offset)) {
|
2005-05-05 21:08:07 +00:00
|
|
|
GLuint len = (GLuint)_mesa_strlen(default_extensions[i].name);
|
2003-07-03 02:15:06 +00:00
|
|
|
_mesa_memcpy(s + extStrLen, default_extensions[i].name, len);
|
|
|
|
extStrLen += len;
|
2009-06-08 10:52:16 -06:00
|
|
|
s[extStrLen] = ' ';
|
2003-07-03 02:15:06 +00:00
|
|
|
extStrLen++;
|
|
|
|
}
|
1999-08-19 00:55:39 +00:00
|
|
|
}
|
2003-07-03 02:15:06 +00:00
|
|
|
ASSERT(extStrLen > 0);
|
|
|
|
|
2009-06-08 10:52:16 -06:00
|
|
|
s[extStrLen - 1] = 0; /* -1 to overwrite trailing the ' ' */
|
2000-11-22 07:32:16 +00:00
|
|
|
|
2009-06-08 10:52:16 -06:00
|
|
|
if (extraExt) {
|
|
|
|
s = append(s, " ");
|
|
|
|
s = append(s, extraExt);
|
|
|
|
}
|
|
|
|
|
|
|
|
return (GLubyte *) s;
|
1999-08-19 00:55:39 +00:00
|
|
|
}
|