intel_extensions.c revision 60b072d49fd2a1b2bf59442ae7209379152b1500
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 3360b072d49fd2a1b2bf59442ae7209379152b1500Eric Anholt#define need_GL_ARB_copy_buffer 344006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_ARB_framebuffer_object 354006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_ARB_occlusion_query 364006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_ARB_point_parameters 374006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_ARB_shader_objects 388affcd364bd99b7da44e565db91c6c0afbf9ce77Brian Paul#define need_GL_ARB_vertex_array_object 394006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_ARB_vertex_program 404006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_ARB_vertex_shader 414006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_ARB_window_pos 424006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_blend_color 434006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_blend_equation_separate 444006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_blend_func_separate 454006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_blend_minmax 464006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_cull_vertex 474006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_fog_coord 484006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_framebuffer_object 494006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_framebuffer_blit 501f070125e365dadf97797785fdeef1ccb1431f21Eric Anholt#define need_GL_EXT_gpu_program_parameters 514006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_point_parameters 52de80eeea0eebf00ee678b1a0fbd5fe67b00a8636Eric Anholt#define need_GL_EXT_provoking_vertex 534006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_secondary_color 544006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_EXT_stencil_two_side 55a566b6d8ffa45728231f9040b15f86d403304c87Brian Paul#define need_GL_APPLE_vertex_array_object 564006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_ATI_separate_stencil 573327cc64e7fdc13d3843ccb17763f68dd381185fRoland Scheidegger#define need_GL_ATI_envmap_bumpmap 584006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_NV_point_sprite 594006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_NV_vertex_program 604006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_VERSION_2_0 614006c5e4526a1cdb910500764590e39d32750967Brian Paul#define need_GL_VERSION_2_1 624006c5e4526a1cdb910500764590e39d32750967Brian Paul 634006c5e4526a1cdb910500764590e39d32750967Brian Paul#include "extension_helper.h" 644006c5e4526a1cdb910500764590e39d32750967Brian Paul 654006c5e4526a1cdb910500764590e39d32750967Brian Paul 664006c5e4526a1cdb910500764590e39d32750967Brian Paul/** 674006c5e4526a1cdb910500764590e39d32750967Brian Paul * Extension strings exported by the intel driver. 684006c5e4526a1cdb910500764590e39d32750967Brian Paul * 694006c5e4526a1cdb910500764590e39d32750967Brian Paul * Extensions supported by all chips supported by i830_dri, i915_dri, or 704006c5e4526a1cdb910500764590e39d32750967Brian Paul * i965_dri. 714006c5e4526a1cdb910500764590e39d32750967Brian Paul */ 724006c5e4526a1cdb910500764590e39d32750967Brian Paulstatic const struct dri_extension card_extensions[] = { 7360b072d49fd2a1b2bf59442ae7209379152b1500Eric Anholt { "GL_ARB_copy_buffer", GL_ARB_copy_buffer_functions }, 7463c407db3ef28862588660478a94102860480731Roland Scheidegger { "GL_ARB_half_float_pixel", NULL }, 754006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_multitexture", NULL }, 764006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_point_parameters", GL_ARB_point_parameters_functions }, 7792b9aa1646daa7d9e6470e9d1dbb3460eeae8941Eric Anholt { "GL_ARB_point_sprite", NULL }, 784006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_texture_border_clamp", NULL }, 794006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_texture_cube_map", NULL }, 804006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_texture_env_add", NULL }, 814006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_texture_env_combine", NULL }, 824006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_texture_env_crossbar", NULL }, 834006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_texture_env_dot3", NULL }, 844006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_texture_mirrored_repeat", NULL }, 854006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_texture_rectangle", NULL }, 868affcd364bd99b7da44e565db91c6c0afbf9ce77Brian Paul { "GL_ARB_vertex_array_object", GL_ARB_vertex_array_object_functions}, 874006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_vertex_program", GL_ARB_vertex_program_functions }, 884006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_window_pos", GL_ARB_window_pos_functions }, 894006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_blend_color", GL_EXT_blend_color_functions }, 904006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_blend_equation_separate", GL_EXT_blend_equation_separate_functions }, 914006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_blend_func_separate", GL_EXT_blend_func_separate_functions }, 924006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_blend_minmax", GL_EXT_blend_minmax_functions }, 934006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_blend_logic_op", NULL }, 944006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_blend_subtract", NULL }, 954006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_cull_vertex", GL_EXT_cull_vertex_functions }, 964006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_fog_coord", GL_EXT_fog_coord_functions }, 971f070125e365dadf97797785fdeef1ccb1431f21Eric Anholt { "GL_EXT_gpu_program_parameters", GL_EXT_gpu_program_parameters_functions }, 984006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_packed_depth_stencil", NULL }, 99de80eeea0eebf00ee678b1a0fbd5fe67b00a8636Eric Anholt { "GL_EXT_provoking_vertex", GL_EXT_provoking_vertex_functions }, 1004006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_secondary_color", GL_EXT_secondary_color_functions }, 1014006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_stencil_wrap", NULL }, 1024006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_texture_edge_clamp", NULL }, 1034006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_texture_env_combine", NULL }, 1044006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_texture_env_dot3", NULL }, 1054006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_texture_filter_anisotropic", NULL }, 1064006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_texture_lod_bias", NULL }, 1074006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_3DFX_texture_compression_FXT1", NULL }, 1084006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_APPLE_client_storage", NULL }, 109a566b6d8ffa45728231f9040b15f86d403304c87Brian Paul { "GL_APPLE_vertex_array_object", GL_APPLE_vertex_array_object_functions}, 1104006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_MESA_pack_invert", NULL }, 1114006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_MESA_ycbcr_texture", NULL }, 1124006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_NV_blend_square", NULL }, 1134006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_NV_point_sprite", GL_NV_point_sprite_functions }, 1144006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_NV_vertex_program", GL_NV_vertex_program_functions }, 1154006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_NV_vertex_program1_1", NULL }, 1164006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_SGIS_generate_mipmap", NULL }, 1174006c5e4526a1cdb910500764590e39d32750967Brian Paul { NULL, NULL } 1184006c5e4526a1cdb910500764590e39d32750967Brian Paul}; 1194006c5e4526a1cdb910500764590e39d32750967Brian Paul 1204006c5e4526a1cdb910500764590e39d32750967Brian Paul 121425c803c039735aaaeb70f1613268fd4909862dcIan Romanick/** i915 / i945-only extensions */ 122425c803c039735aaaeb70f1613268fd4909862dcIan Romanickstatic const struct dri_extension i915_extensions[] = { 123425c803c039735aaaeb70f1613268fd4909862dcIan Romanick { "GL_ARB_depth_texture", NULL }, 124425c803c039735aaaeb70f1613268fd4909862dcIan Romanick { "GL_ARB_fragment_program", NULL }, 125425c803c039735aaaeb70f1613268fd4909862dcIan Romanick { "GL_ARB_shadow", NULL }, 126425c803c039735aaaeb70f1613268fd4909862dcIan Romanick { "GL_ARB_texture_non_power_of_two", NULL }, 127246729162ccc7e2672aa6cc957053ce3a8975a2cEric Anholt { "GL_ATI_separate_stencil", GL_ATI_separate_stencil_functions }, 128425c803c039735aaaeb70f1613268fd4909862dcIan Romanick { "GL_ATI_texture_env_combine3", NULL }, 129425c803c039735aaaeb70f1613268fd4909862dcIan Romanick { "GL_EXT_shadow_funcs", NULL }, 130246729162ccc7e2672aa6cc957053ce3a8975a2cEric Anholt { "GL_EXT_stencil_two_side", GL_EXT_stencil_two_side_functions }, 131425c803c039735aaaeb70f1613268fd4909862dcIan Romanick { "GL_NV_texture_env_combine4", NULL }, 132425c803c039735aaaeb70f1613268fd4909862dcIan Romanick { NULL, NULL } 133425c803c039735aaaeb70f1613268fd4909862dcIan Romanick}; 134425c803c039735aaaeb70f1613268fd4909862dcIan Romanick 135425c803c039735aaaeb70f1613268fd4909862dcIan Romanick 1364006c5e4526a1cdb910500764590e39d32750967Brian Paul/** i965-only extensions */ 1374006c5e4526a1cdb910500764590e39d32750967Brian Paulstatic const struct dri_extension brw_extensions[] = { 1384006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_depth_texture", NULL }, 1394006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_fragment_program", NULL }, 1404006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_fragment_program_shadow", NULL }, 1414006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_fragment_shader", NULL }, 1424006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_framebuffer_object", GL_ARB_framebuffer_object_functions}, 1434006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_occlusion_query", GL_ARB_occlusion_query_functions }, 1444006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_point_sprite", NULL }, 145e304c65a2b9c1005d6216e91d90a99001549a63dIan Romanick { "GL_ARB_seamless_cube_map", NULL }, 1464006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_shader_objects", GL_ARB_shader_objects_functions }, 1474006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_shading_language_100", GL_VERSION_2_0_functions }, 1484006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_shading_language_120", GL_VERSION_2_1_functions }, 1494006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_shadow", NULL }, 15079e2df63af4d231a1223887e79a819b3baac9a6cRoland Scheidegger { "GL_MESA_texture_signed_rgba", NULL }, 1514006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_texture_non_power_of_two", NULL }, 1524006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_vertex_shader", GL_ARB_vertex_shader_functions }, 1534006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_shadow_funcs", NULL }, 1544006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_stencil_two_side", GL_EXT_stencil_two_side_functions }, 1554006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_texture_sRGB", NULL }, 156c0d3b7679aa90e1a0dca2db152205efaec088b90Brian Paul { "GL_EXT_texture_swizzle", NULL }, 1574006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_vertex_array_bgra", NULL }, 1583327cc64e7fdc13d3843ccb17763f68dd381185fRoland Scheidegger { "GL_ATI_envmap_bumpmap", GL_ATI_envmap_bumpmap_functions }, 1594006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ATI_separate_stencil", GL_ATI_separate_stencil_functions }, 1604006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ATI_texture_env_combine3", NULL }, 161425c803c039735aaaeb70f1613268fd4909862dcIan Romanick { "GL_NV_texture_env_combine4", NULL }, 1624006c5e4526a1cdb910500764590e39d32750967Brian Paul { NULL, NULL } 1634006c5e4526a1cdb910500764590e39d32750967Brian Paul}; 1644006c5e4526a1cdb910500764590e39d32750967Brian Paul 1654006c5e4526a1cdb910500764590e39d32750967Brian Paul 1664006c5e4526a1cdb910500764590e39d32750967Brian Paulstatic const struct dri_extension arb_oq_extensions[] = { 1674006c5e4526a1cdb910500764590e39d32750967Brian Paul { NULL, NULL } 1684006c5e4526a1cdb910500764590e39d32750967Brian Paul}; 1694006c5e4526a1cdb910500764590e39d32750967Brian Paul 1704006c5e4526a1cdb910500764590e39d32750967Brian Paul 1714006c5e4526a1cdb910500764590e39d32750967Brian Paulstatic const struct dri_extension ttm_extensions[] = { 1724006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_ARB_pixel_buffer_object", NULL }, 1734006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_framebuffer_blit", GL_EXT_framebuffer_blit_functions }, 1744006c5e4526a1cdb910500764590e39d32750967Brian Paul { "GL_EXT_framebuffer_object", GL_EXT_framebuffer_object_functions }, 1754006c5e4526a1cdb910500764590e39d32750967Brian Paul { NULL, NULL } 1764006c5e4526a1cdb910500764590e39d32750967Brian Paul}; 1774006c5e4526a1cdb910500764590e39d32750967Brian Paul 1784006c5e4526a1cdb910500764590e39d32750967Brian Paul 1794006c5e4526a1cdb910500764590e39d32750967Brian Paul/** 1804006c5e4526a1cdb910500764590e39d32750967Brian Paul * Initializes potential list of extensions if ctx == NULL, or actually enables 1814006c5e4526a1cdb910500764590e39d32750967Brian Paul * extensions for a context. 1824006c5e4526a1cdb910500764590e39d32750967Brian Paul */ 1834006c5e4526a1cdb910500764590e39d32750967Brian Paulvoid 1844006c5e4526a1cdb910500764590e39d32750967Brian PaulintelInitExtensions(GLcontext *ctx, GLboolean enable_imaging) 1854006c5e4526a1cdb910500764590e39d32750967Brian Paul{ 1864006c5e4526a1cdb910500764590e39d32750967Brian Paul struct intel_context *intel = ctx?intel_context(ctx):NULL; 1874006c5e4526a1cdb910500764590e39d32750967Brian Paul 1884006c5e4526a1cdb910500764590e39d32750967Brian Paul /* Disable imaging extension until convolution is working in teximage paths. 1894006c5e4526a1cdb910500764590e39d32750967Brian Paul */ 1904006c5e4526a1cdb910500764590e39d32750967Brian Paul enable_imaging = GL_FALSE; 1914006c5e4526a1cdb910500764590e39d32750967Brian Paul 1924006c5e4526a1cdb910500764590e39d32750967Brian Paul driInitExtensions(ctx, card_extensions, enable_imaging); 1934006c5e4526a1cdb910500764590e39d32750967Brian Paul 1944006c5e4526a1cdb910500764590e39d32750967Brian Paul if (intel == NULL || intel->ttm) 1954006c5e4526a1cdb910500764590e39d32750967Brian Paul driInitExtensions(ctx, ttm_extensions, GL_FALSE); 1964006c5e4526a1cdb910500764590e39d32750967Brian Paul 1974006c5e4526a1cdb910500764590e39d32750967Brian Paul if (intel == NULL || IS_965(intel->intelScreen->deviceID)) 1984006c5e4526a1cdb910500764590e39d32750967Brian Paul driInitExtensions(ctx, brw_extensions, GL_FALSE); 199425c803c039735aaaeb70f1613268fd4909862dcIan Romanick 200425c803c039735aaaeb70f1613268fd4909862dcIan Romanick if (intel == NULL || IS_915(intel->intelScreen->deviceID) 201425c803c039735aaaeb70f1613268fd4909862dcIan Romanick || IS_945(intel->intelScreen->deviceID)) 202425c803c039735aaaeb70f1613268fd4909862dcIan Romanick driInitExtensions(ctx, i915_extensions, GL_FALSE); 2034006c5e4526a1cdb910500764590e39d32750967Brian Paul} 204