intel_extensions.c revision 03e623a27b95ef228fb4fca71c6d7c7a21630033
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 2845a56e4730a74a012ad712fd9b6013d900b04742Vinson Lee#include "main/mfeatures.h" 2945a56e4730a74a012ad712fd9b6013d900b04742Vinson Lee 304006c5e4526a1cdb910500764590e39d32750967Brian Paul#include "intel_chipset.h" 314006c5e4526a1cdb910500764590e39d32750967Brian Paul#include "intel_context.h" 324006c5e4526a1cdb910500764590e39d32750967Brian Paul#include "intel_extensions.h" 3317ef1f6074d6107c167f1956a5c60993904c0b72Chia-I Wu#include "utils.h" 344006c5e4526a1cdb910500764590e39d32750967Brian Paul 354006c5e4526a1cdb910500764590e39d32750967Brian Paul/** 36a34817917bd8c408d8f732c24b4eb586f666d6c1Chad Versace * \brief Get GLSL version from the environment. 37a34817917bd8c408d8f732c24b4eb586f666d6c1Chad Versace * 38a34817917bd8c408d8f732c24b4eb586f666d6c1Chad Versace * If the environment variable INTEL_GLSL_VERSION is set, convert its value 39a34817917bd8c408d8f732c24b4eb586f666d6c1Chad Versace * to an integer and return it. Otherwise, return the default version, 120. 40a34817917bd8c408d8f732c24b4eb586f666d6c1Chad Versace */ 41a34817917bd8c408d8f732c24b4eb586f666d6c1Chad Versacestatic GLuint 42a34817917bd8c408d8f732c24b4eb586f666d6c1Chad Versaceget_glsl_version() 43a34817917bd8c408d8f732c24b4eb586f666d6c1Chad Versace{ 44a34817917bd8c408d8f732c24b4eb586f666d6c1Chad Versace const char * s = getenv("INTEL_GLSL_VERSION"); 45a34817917bd8c408d8f732c24b4eb586f666d6c1Chad Versace if (s == NULL) 46a34817917bd8c408d8f732c24b4eb586f666d6c1Chad Versace return 120; 47a34817917bd8c408d8f732c24b4eb586f666d6c1Chad Versace else 48a34817917bd8c408d8f732c24b4eb586f666d6c1Chad Versace return (GLuint) atoi(s); 49a34817917bd8c408d8f732c24b4eb586f666d6c1Chad Versace} 50a34817917bd8c408d8f732c24b4eb586f666d6c1Chad Versace 51a34817917bd8c408d8f732c24b4eb586f666d6c1Chad Versace/** 524006c5e4526a1cdb910500764590e39d32750967Brian Paul * Initializes potential list of extensions if ctx == NULL, or actually enables 534006c5e4526a1cdb910500764590e39d32750967Brian Paul * extensions for a context. 544006c5e4526a1cdb910500764590e39d32750967Brian Paul */ 554006c5e4526a1cdb910500764590e39d32750967Brian Paulvoid 56f9995b30756140724f41daf963fa06167912be7fKristian HøgsbergintelInitExtensions(struct gl_context *ctx) 574006c5e4526a1cdb910500764590e39d32750967Brian Paul{ 58b6b753f72728b734fc9886f4ec513ae09e6b269dIan Romanick struct intel_context *intel = intel_context(ctx); 594006c5e4526a1cdb910500764590e39d32750967Brian Paul 6071ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_draw_elements_base_vertex = true; 6171ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_explicit_attrib_location = true; 6271ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_framebuffer_object = true; 6371ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_half_float_pixel = true; 6471ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_map_buffer_range = true; 6571ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_multitexture = true; 6671ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_point_sprite = true; 6771ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_sampler_objects = true; 6871ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_shader_objects = true; 6971ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_shading_language_100 = true; 7071ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_sync = true; 7171ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_texture_border_clamp = true; 7271ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_texture_cube_map = true; 7371ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_texture_env_combine = true; 7471ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_texture_env_crossbar = true; 7571ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_texture_env_dot3 = true; 7671ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_texture_mirrored_repeat = true; 7771ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_vertex_array_object = true; 7871ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_vertex_program = true; 7971ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_vertex_shader = true; 8071ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_window_pos = true; 8171ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_blend_color = true; 8271ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_blend_equation_separate = true; 8371ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_blend_func_separate = true; 8471ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_blend_minmax = true; 8571ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_blend_subtract = true; 8671ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_framebuffer_blit = true; 8771ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_framebuffer_object = true; 8871ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_framebuffer_multisample = true; 8971ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_fog_coord = true; 9071ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_gpu_program_parameters = true; 9171ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_packed_depth_stencil = true; 9271ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_pixel_buffer_object = true; 9371ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_point_parameters = true; 9471ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_provoking_vertex = true; 9571ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_secondary_color = true; 9671ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_separate_shader_objects = true; 9771ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_stencil_wrap = true; 9871ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_texture_env_add = true; 9971ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_texture_env_combine = true; 10071ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_texture_env_dot3 = true; 10171ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_texture_filter_anisotropic = true; 10271ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_texture_lod_bias = true; 10371ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.APPLE_object_purgeable = true; 10471ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.APPLE_vertex_array_object = true; 10571ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.MESA_pack_invert = true; 10671ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.MESA_ycbcr_texture = true; 10771ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.NV_blend_square = true; 10871ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.NV_texture_rectangle = true; 10971ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.NV_vertex_program = true; 11071ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.NV_vertex_program1_1 = true; 11171ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.SGIS_texture_edge_clamp = true; 11271ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.TDFX_texture_compression_FXT1 = true; 11371ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick#if FEATURE_OES_EGL_image 11471ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.OES_EGL_image = true; 11571ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick#endif 116a34817917bd8c408d8f732c24b4eb586f666d6c1Chad Versace 117a34817917bd8c408d8f732c24b4eb586f666d6c1Chad Versace ctx->Const.GLSLVersion = get_glsl_version(); 118b91dba49e0b08b18dbd6c477facdcc7b5472c8c7Kristian Høgsberg 1193b68b6c83e491d7f85baff6a31dcceee28622ae0Eric Anholt if (intel->gen >= 5) 12071ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_timer_query = true; 12171ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick 12271ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick if (intel->gen >= 4) { 12371ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_color_buffer_float = true; 12471ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_depth_clamp = true; 12571ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_fragment_coord_conventions = true; 12671ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_fragment_program_shadow = true; 12771ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_fragment_shader = true; 12871ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_half_float_vertex = true; 12971ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_occlusion_query = true; 13071ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_point_sprite = true; 13171ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_seamless_cube_map = true; 13271ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_shader_texture_lod = true; 13371ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick#ifdef TEXTURE_FLOAT_ENABLED 13471ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_texture_float = true; 1352fd8c4e3edf989c6f7dd1261a67b01f06979feabEric Anholt ctx->Extensions.EXT_texture_shared_exponent = true; 13603e623a27b95ef228fb4fca71c6d7c7a21630033Eric Anholt ctx->Extensions.EXT_packed_float = true; 13771ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick#endif 13871ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_texture_compression_rgtc = true; 13971ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_texture_rg = true; 14071ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_draw_buffers2 = true; 14171ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_framebuffer_sRGB = true; 14271ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_texture_snorm = true; 14371ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_texture_sRGB = true; 14471ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_texture_sRGB_decode = true; 14571ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_texture_swizzle = true; 14671ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_vertex_array_bgra = true; 14771ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ATI_envmap_bumpmap = true; 14871ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.NV_conditional_render = true; 14971ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick } 150425c803c039735aaaeb70f1613268fd4909862dcIan Romanick 15171ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick if (intel->gen >= 3) { 15271ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_ES2_compatibility = true; 15371ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_depth_texture = true; 15471ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_fragment_program = true; 15571ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_shadow = true; 15671ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_texture_non_power_of_two = true; 15771ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_shadow_funcs = true; 15871ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.EXT_stencil_two_side = true; 15971ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ATI_separate_stencil = true; 16071ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ATI_texture_env_combine3 = true; 16171ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.NV_texture_env_combine4 = true; 162862a2a55b35d1dec9224b025a6e7a0cf8593a6a7Eric Anholt 163b6b753f72728b734fc9886f4ec513ae09e6b269dIan Romanick if (driQueryOptionb(&intel->optionCache, "fragment_shader")) 16471ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_fragment_shader = true; 16581aa5d717bd0098608e9cc292b316293800c7e11Eric Anholt 166b6b753f72728b734fc9886f4ec513ae09e6b269dIan Romanick if (driQueryOptionb(&intel->optionCache, "stub_occlusion_query")) 16771ceccad7e36f23e33d340fa0da157e2e0d2b6acIan Romanick ctx->Extensions.ARB_occlusion_query = true; 168862a2a55b35d1dec9224b025a6e7a0cf8593a6a7Eric Anholt } 1690a5478c1d9f9a892371d9ff004976e783a086694Ian Romanick 1700a5478c1d9f9a892371d9ff004976e783a086694Ian Romanick if (intel->ctx.Mesa_DXTn) { 1710a5478c1d9f9a892371d9ff004976e783a086694Ian Romanick ctx->Extensions.EXT_texture_compression_s3tc = true; 1720a5478c1d9f9a892371d9ff004976e783a086694Ian Romanick ctx->Extensions.S3_s3tc = true; 1730a5478c1d9f9a892371d9ff004976e783a086694Ian Romanick } 1740a5478c1d9f9a892371d9ff004976e783a086694Ian Romanick else if (driQueryOptionb(&intel->optionCache, "force_s3tc_enable")) { 1750a5478c1d9f9a892371d9ff004976e783a086694Ian Romanick ctx->Extensions.EXT_texture_compression_s3tc = true; 1760a5478c1d9f9a892371d9ff004976e783a086694Ian Romanick } 1774006c5e4526a1cdb910500764590e39d32750967Brian Paul} 178