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