intel_extensions.c revision 425c803c039735aaaeb70f1613268fd4909862dc
14006c5e4526a1cdb910500764590e39d32750967Brian Paul/************************************************************************** 24006c5e4526a1cdb910500764590e39d32750967Brian Paul * 34006c5e4526a1cdb910500764590e39d32750967Brian Paul * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. 44006c5e4526a1cdb910500764590e39d32750967Brian Paul * All Rights Reserved. 54006c5e4526a1cdb910500764590e39d32750967Brian Paul * 64006c5e4526a1cdb910500764590e39d32750967Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a 74006c5e4526a1cdb910500764590e39d32750967Brian Paul * copy of this software and associated documentation files (the 84006c5e4526a1cdb910500764590e39d32750967Brian Paul * "Software"), to deal in the Software without restriction, including 94006c5e4526a1cdb910500764590e39d32750967Brian Paul * without limitation the rights to use, copy, modify, merge, publish, 104006c5e4526a1cdb910500764590e39d32750967Brian Paul * distribute, sub license, and/or sell copies of the Software, and to 114006c5e4526a1cdb910500764590e39d32750967Brian Paul * permit persons to whom the Software is furnished to do so, subject to 124006c5e4526a1cdb910500764590e39d32750967Brian Paul * the following conditions: 134006c5e4526a1cdb910500764590e39d32750967Brian Paul * 144006c5e4526a1cdb910500764590e39d32750967Brian Paul * The above copyright notice and this permission notice (including the 154006c5e4526a1cdb910500764590e39d32750967Brian Paul * next paragraph) shall be included in all copies or substantial portions 164006c5e4526a1cdb910500764590e39d32750967Brian Paul * of the Software. 174006c5e4526a1cdb910500764590e39d32750967Brian Paul * 184006c5e4526a1cdb910500764590e39d32750967Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 194006c5e4526a1cdb910500764590e39d32750967Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 204006c5e4526a1cdb910500764590e39d32750967Brian Paul * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 214006c5e4526a1cdb910500764590e39d32750967Brian Paul * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 224006c5e4526a1cdb910500764590e39d32750967Brian Paul * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 234006c5e4526a1cdb910500764590e39d32750967Brian Paul * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 244006c5e4526a1cdb910500764590e39d32750967Brian Paul * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 254006c5e4526a1cdb910500764590e39d32750967Brian Paul * 264006c5e4526a1cdb910500764590e39d32750967Brian Paul **************************************************************************/ 274006c5e4526a1cdb910500764590e39d32750967Brian Paul 284006c5e4526a1cdb910500764590e39d32750967Brian Paul#include "intel_chipset.h" 294006c5e4526a1cdb910500764590e39d32750967Brian Paul#include "intel_context.h" 304006c5e4526a1cdb910500764590e39d32750967Brian Paul#include "intel_extensions.h" 314006c5e4526a1cdb910500764590e39d32750967Brian Paul 324006c5e4526a1cdb910500764590e39d32750967Brian Paul 334006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_ARB_framebuffer_object 344006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_ARB_occlusion_query 354006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_ARB_point_parameters 364006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_ARB_shader_objects 374006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_ARB_vertex_program 384006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_ARB_vertex_shader 394006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_ARB_window_pos 404006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_blend_color 414006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_blend_equation_separate 424006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_blend_func_separate 434006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_blend_minmax 444006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_cull_vertex 454006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_fog_coord 464006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_framebuffer_object 474006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_framebuffer_blit 484006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_point_parameters 494006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_secondary_color 504006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_stencil_two_side 514006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_ATI_separate_stencil 524006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_NV_point_sprite 534006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_NV_vertex_program 544006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_VERSION_2_0 554006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_VERSION_2_1 564006c5e4526a1cdb910500764590e39d32750967Brian Paul 574006c5e4526a1cdb910500764590e39d32750967Brian Paul#include "extension_helper.h" 584006c5e4526a1cdb910500764590e39d32750967Brian Paul 594006c5e4526a1cdb910500764590e39d32750967Brian Paul 604006c5e4526a1cdb910500764590e39d32750967Brian Paul/** 614006c5e4526a1cdb910500764590e39d32750967Brian Paul * Extension strings exported by the intel driver. 624006c5e4526a1cdb910500764590e39d32750967Brian Paul * 634006c5e4526a1cdb910500764590e39d32750967Brian Paul * Extensions supported by all chips supported by i830_dri, i915_dri, or 644006c5e4526a1cdb910500764590e39d32750967Brian Paul * i965_dri. 654006c5e4526a1cdb910500764590e39d32750967Brian Paul */ 664006c5e4526a1cdb910500764590e39d32750967Brian Paulstatic const struct dri_extension card_extensions[] = { 674006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_multitexture", NULL }, 684006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_point_parameters", GL_ARB_point_parameters_functions }, 694006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_texture_border_clamp", NULL }, 704006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_texture_cube_map", NULL }, 714006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_texture_env_add", NULL }, 724006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_texture_env_combine", NULL }, 734006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_texture_env_crossbar", NULL }, 744006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_texture_env_dot3", NULL }, 754006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_texture_mirrored_repeat", NULL }, 764006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_texture_rectangle", NULL }, 774006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_vertex_program", GL_ARB_vertex_program_functions }, 784006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_window_pos", GL_ARB_window_pos_functions }, 794006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_blend_color", GL_EXT_blend_color_functions }, 804006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_blend_equation_separate", GL_EXT_blend_equation_separate_functions }, 814006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_blend_func_separate", GL_EXT_blend_func_separate_functions }, 824006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_blend_minmax", GL_EXT_blend_minmax_functions }, 834006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_blend_logic_op", NULL }, 844006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_blend_subtract", NULL }, 854006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_cull_vertex", GL_EXT_cull_vertex_functions }, 864006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_fog_coord", GL_EXT_fog_coord_functions }, 874006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_packed_depth_stencil", NULL }, 884006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_secondary_color", GL_EXT_secondary_color_functions }, 894006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_stencil_wrap", NULL }, 904006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_texture_edge_clamp", NULL }, 914006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_texture_env_combine", NULL }, 924006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_texture_env_dot3", NULL }, 934006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_texture_filter_anisotropic", NULL }, 944006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_texture_lod_bias", NULL }, 954006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_3DFX_texture_compression_FXT1", NULL }, 964006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_APPLE_client_storage", NULL }, 974006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_MESA_pack_invert", NULL }, 984006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_MESA_ycbcr_texture", NULL }, 994006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_NV_blend_square", NULL }, 1004006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_NV_point_sprite", GL_NV_point_sprite_functions }, 1014006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_NV_vertex_program", GL_NV_vertex_program_functions }, 1024006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_NV_vertex_program1_1", NULL }, 1034006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_SGIS_generate_mipmap", NULL }, 1044006c5e4526a1cdb910500764590e39d32750967Brian Paul { NULL, NULL } 1054006c5e4526a1cdb910500764590e39d32750967Brian Paul}; 1064006c5e4526a1cdb910500764590e39d32750967Brian Paul 1074006c5e4526a1cdb910500764590e39d32750967Brian Paul 108425c803c039735aaaeb70f1613268fd4909862dcIan Romanick/** i915 / i945-only extensions */ 109425c803c039735aaaeb70f1613268fd4909862dcIan Romanickstatic const struct dri_extension i915_extensions[] = { 110425c803c039735aaaeb70f1613268fd4909862dcIan Romanick { "GL_ARB_depth_texture", NULL }, 111425c803c039735aaaeb70f1613268fd4909862dcIan Romanick { "GL_ARB_fragment_program", NULL }, 112425c803c039735aaaeb70f1613268fd4909862dcIan Romanick { "GL_ARB_shadow", NULL }, 113425c803c039735aaaeb70f1613268fd4909862dcIan Romanick { "GL_ARB_texture_non_power_of_two", NULL }, 114425c803c039735aaaeb70f1613268fd4909862dcIan Romanick { "GL_ATI_texture_env_combine3", NULL }, 115425c803c039735aaaeb70f1613268fd4909862dcIan Romanick { "GL_EXT_shadow_funcs", NULL }, 116425c803c039735aaaeb70f1613268fd4909862dcIan Romanick { "GL_NV_texture_env_combine4", NULL }, 117425c803c039735aaaeb70f1613268fd4909862dcIan Romanick { NULL, NULL } 118425c803c039735aaaeb70f1613268fd4909862dcIan Romanick}; 119425c803c039735aaaeb70f1613268fd4909862dcIan Romanick 120425c803c039735aaaeb70f1613268fd4909862dcIan Romanick 1214006c5e4526a1cdb910500764590e39d32750967Brian Paul/** i965-only extensions */ 1224006c5e4526a1cdb910500764590e39d32750967Brian Paulstatic const struct dri_extension brw_extensions[] = { 1234006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_depth_texture", NULL }, 1244006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_fragment_program", NULL }, 1254006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_fragment_program_shadow", NULL }, 1264006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_fragment_shader", NULL }, 1274006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_framebuffer_object", GL_ARB_framebuffer_object_functions}, 1284006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_occlusion_query", GL_ARB_occlusion_query_functions }, 1294006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_point_sprite", NULL }, 1304006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_shader_objects", GL_ARB_shader_objects_functions }, 1314006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_shading_language_100", GL_VERSION_2_0_functions }, 1324006c5e4526a1cdb910500764590e39d32750967Brian Paul#if 0 1334006c5e4526a1cdb910500764590e39d32750967Brian Paul /* Support for GLSL 1.20 is currently broken in core Mesa. 1344006c5e4526a1cdb910500764590e39d32750967Brian Paul */ 1354006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_shading_language_120", GL_VERSION_2_1_functions }, 1364006c5e4526a1cdb910500764590e39d32750967Brian Paul#endif 1374006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_shadow", NULL }, 1384006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_texture_non_power_of_two", NULL }, 1394006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_vertex_shader", GL_ARB_vertex_shader_functions }, 1404006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_shadow_funcs", NULL }, 1414006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_stencil_two_side", GL_EXT_stencil_two_side_functions }, 1424006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_texture_sRGB", NULL }, 143c0d3b7679aa90e1a0dca2db152205efaec088b90Brian Paul { "GL_EXT_texture_swizzle", NULL }, 1444006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_vertex_array_bgra", NULL }, 1454006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ATI_separate_stencil", GL_ATI_separate_stencil_functions }, 1464006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ATI_texture_env_combine3", NULL }, 147425c803c039735aaaeb70f1613268fd4909862dcIan Romanick { "GL_NV_texture_env_combine4", NULL }, 1484006c5e4526a1cdb910500764590e39d32750967Brian Paul { NULL, NULL } 1494006c5e4526a1cdb910500764590e39d32750967Brian Paul}; 1504006c5e4526a1cdb910500764590e39d32750967Brian Paul 1514006c5e4526a1cdb910500764590e39d32750967Brian Paul 1524006c5e4526a1cdb910500764590e39d32750967Brian Paulstatic const struct dri_extension arb_oq_extensions[] = { 1534006c5e4526a1cdb910500764590e39d32750967Brian Paul { NULL, NULL } 1544006c5e4526a1cdb910500764590e39d32750967Brian Paul}; 1554006c5e4526a1cdb910500764590e39d32750967Brian Paul 1564006c5e4526a1cdb910500764590e39d32750967Brian Paul 1574006c5e4526a1cdb910500764590e39d32750967Brian Paulstatic const struct dri_extension ttm_extensions[] = { 1584006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_pixel_buffer_object", NULL }, 1594006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_framebuffer_blit", GL_EXT_framebuffer_blit_functions }, 1604006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_framebuffer_object", GL_EXT_framebuffer_object_functions }, 1614006c5e4526a1cdb910500764590e39d32750967Brian Paul { NULL, NULL } 1624006c5e4526a1cdb910500764590e39d32750967Brian Paul}; 1634006c5e4526a1cdb910500764590e39d32750967Brian Paul 1644006c5e4526a1cdb910500764590e39d32750967Brian Paul 1654006c5e4526a1cdb910500764590e39d32750967Brian Paul/** 1664006c5e4526a1cdb910500764590e39d32750967Brian Paul * Initializes potential list of extensions if ctx == NULL, or actually enables 1674006c5e4526a1cdb910500764590e39d32750967Brian Paul * extensions for a context. 1684006c5e4526a1cdb910500764590e39d32750967Brian Paul */ 1694006c5e4526a1cdb910500764590e39d32750967Brian Paulvoid 1704006c5e4526a1cdb910500764590e39d32750967Brian PaulintelInitExtensions(GLcontext *ctx, GLboolean enable_imaging) 1714006c5e4526a1cdb910500764590e39d32750967Brian Paul{ 1724006c5e4526a1cdb910500764590e39d32750967Brian Paul struct intel_context *intel = ctx?intel_context(ctx):NULL; 1734006c5e4526a1cdb910500764590e39d32750967Brian Paul 1744006c5e4526a1cdb910500764590e39d32750967Brian Paul /* Disable imaging extension until convolution is working in teximage paths. 1754006c5e4526a1cdb910500764590e39d32750967Brian Paul */ 1764006c5e4526a1cdb910500764590e39d32750967Brian Paul enable_imaging = GL_FALSE; 1774006c5e4526a1cdb910500764590e39d32750967Brian Paul 1784006c5e4526a1cdb910500764590e39d32750967Brian Paul driInitExtensions(ctx, card_extensions, enable_imaging); 1794006c5e4526a1cdb910500764590e39d32750967Brian Paul 1804006c5e4526a1cdb910500764590e39d32750967Brian Paul if (intel == NULL || intel->ttm) 1814006c5e4526a1cdb910500764590e39d32750967Brian Paul driInitExtensions(ctx, ttm_extensions, GL_FALSE); 1824006c5e4526a1cdb910500764590e39d32750967Brian Paul 1834006c5e4526a1cdb910500764590e39d32750967Brian Paul if (intel == NULL || IS_965(intel->intelScreen->deviceID)) 1844006c5e4526a1cdb910500764590e39d32750967Brian Paul driInitExtensions(ctx, brw_extensions, GL_FALSE); 185425c803c039735aaaeb70f1613268fd4909862dcIan Romanick 186425c803c039735aaaeb70f1613268fd4909862dcIan Romanick if (intel == NULL || IS_915(intel->intelScreen->deviceID) 187425c803c039735aaaeb70f1613268fd4909862dcIan Romanick || IS_945(intel->intelScreen->deviceID)) 188425c803c039735aaaeb70f1613268fd4909862dcIan Romanick driInitExtensions(ctx, i915_extensions, GL_FALSE); 1894006c5e4526a1cdb910500764590e39d32750967Brian Paul} 190