intel_extensions.c revision 927f572c27f0e734896fa2b4f93210c7daf1a62a
191037db265ecdd914a26e056cf69207b4f50924ehkuang/************************************************************************** 291037db265ecdd914a26e056cf69207b4f50924ehkuang * 391037db265ecdd914a26e056cf69207b4f50924ehkuang * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. 491037db265ecdd914a26e056cf69207b4f50924ehkuang * All Rights Reserved. 591037db265ecdd914a26e056cf69207b4f50924ehkuang * 691037db265ecdd914a26e056cf69207b4f50924ehkuang * Permission is hereby granted, free of charge, to any person obtaining a 791037db265ecdd914a26e056cf69207b4f50924ehkuang * copy of this software and associated documentation files (the 891037db265ecdd914a26e056cf69207b4f50924ehkuang * "Software"), to deal in the Software without restriction, including 991037db265ecdd914a26e056cf69207b4f50924ehkuang * without limitation the rights to use, copy, modify, merge, publish, 1091037db265ecdd914a26e056cf69207b4f50924ehkuang * distribute, sub license, and/or sell copies of the Software, and to 1191037db265ecdd914a26e056cf69207b4f50924ehkuang * permit persons to whom the Software is furnished to do so, subject to 1291037db265ecdd914a26e056cf69207b4f50924ehkuang * the following conditions: 1391037db265ecdd914a26e056cf69207b4f50924ehkuang * 1491037db265ecdd914a26e056cf69207b4f50924ehkuang * The above copyright notice and this permission notice (including the 1591037db265ecdd914a26e056cf69207b4f50924ehkuang * next paragraph) shall be included in all copies or substantial portions 1691037db265ecdd914a26e056cf69207b4f50924ehkuang * of the Software. 1791037db265ecdd914a26e056cf69207b4f50924ehkuang * 1891037db265ecdd914a26e056cf69207b4f50924ehkuang * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 1991037db265ecdd914a26e056cf69207b4f50924ehkuang * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 2091037db265ecdd914a26e056cf69207b4f50924ehkuang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 2191037db265ecdd914a26e056cf69207b4f50924ehkuang * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 2291037db265ecdd914a26e056cf69207b4f50924ehkuang * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 2391037db265ecdd914a26e056cf69207b4f50924ehkuang * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 2491037db265ecdd914a26e056cf69207b4f50924ehkuang * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2591037db265ecdd914a26e056cf69207b4f50924ehkuang * 2691037db265ecdd914a26e056cf69207b4f50924ehkuang **************************************************************************/ 2791037db265ecdd914a26e056cf69207b4f50924ehkuang 2891037db265ecdd914a26e056cf69207b4f50924ehkuang#include "main/version.h" 2991037db265ecdd914a26e056cf69207b4f50924ehkuang 3091037db265ecdd914a26e056cf69207b4f50924ehkuang#include "intel_chipset.h" 3191037db265ecdd914a26e056cf69207b4f50924ehkuang#include "intel_context.h" 3291037db265ecdd914a26e056cf69207b4f50924ehkuang#include "intel_extensions.h" 3391037db265ecdd914a26e056cf69207b4f50924ehkuang#include "intel_reg.h" 3491037db265ecdd914a26e056cf69207b4f50924ehkuang#include "utils.h" 3591037db265ecdd914a26e056cf69207b4f50924ehkuang 3691037db265ecdd914a26e056cf69207b4f50924ehkuang/** 3791037db265ecdd914a26e056cf69207b4f50924ehkuang * Initializes potential list of extensions if ctx == NULL, or actually enables 3891037db265ecdd914a26e056cf69207b4f50924ehkuang * extensions for a context. 3991037db265ecdd914a26e056cf69207b4f50924ehkuang */ 4091037db265ecdd914a26e056cf69207b4f50924ehkuangvoid 4191037db265ecdd914a26e056cf69207b4f50924ehkuangintelInitExtensions(struct gl_context *ctx) 4291037db265ecdd914a26e056cf69207b4f50924ehkuang{ 4391037db265ecdd914a26e056cf69207b4f50924ehkuang struct intel_context *intel = intel_context(ctx); 4491037db265ecdd914a26e056cf69207b4f50924ehkuang 4591037db265ecdd914a26e056cf69207b4f50924ehkuang assert(intel->gen >= 4); 4691037db265ecdd914a26e056cf69207b4f50924ehkuang 4791037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_depth_buffer_float = true; 4891037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_depth_clamp = true; 4991037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_depth_texture = true; 5091037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_draw_elements_base_vertex = true; 5191037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_draw_instanced = true; 5291037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_ES2_compatibility = true; 5391037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_explicit_attrib_location = true; 5491037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_fragment_coord_conventions = true; 5591037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_fragment_program = true; 5691037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_fragment_program_shadow = true; 5791037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_fragment_shader = true; 5891037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_framebuffer_object = true; 5991037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_half_float_pixel = true; 6091037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_half_float_vertex = true; 6191037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_instanced_arrays = true; 6291037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_internalformat_query = true; 6391037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_map_buffer_range = true; 6491037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_occlusion_query = true; 6591037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_occlusion_query2 = true; 6691037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_point_sprite = true; 6791037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_seamless_cube_map = true; 6891037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_shader_bit_encoding = true; 6991037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_shader_texture_lod = true; 7091037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_shadow = true; 7191037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_sync = true; 7291037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_texture_border_clamp = true; 7391037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_texture_compression_rgtc = true; 7491037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_texture_cube_map = true; 7591037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_texture_env_combine = true; 7691037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_texture_env_crossbar = true; 7791037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_texture_env_dot3 = true; 7891037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_texture_float = true; 7991037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_texture_non_power_of_two = true; 8091037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_texture_rg = true; 8191037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_texture_rgb10_a2ui = true; 8291037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_vertex_program = true; 8391037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_vertex_shader = true; 8491037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_vertex_type_2_10_10_10_rev = true; 8591037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_blend_color = true; 8691037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_blend_equation_separate = true; 8791037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_blend_func_separate = true; 8891037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_blend_minmax = true; 8991037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_draw_buffers2 = true; 9091037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_framebuffer_blit = true; 9191037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_framebuffer_sRGB = true; 9291037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_gpu_program_parameters = true; 9391037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_packed_depth_stencil = true; 9491037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_packed_float = true; 9591037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_pixel_buffer_object = true; 9691037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_point_parameters = true; 9791037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_provoking_vertex = true; 9891037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_separate_shader_objects = true; 9991037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_texture_array = true; 10091037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_texture_env_dot3 = true; 10191037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_texture_filter_anisotropic = true; 10291037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_texture_integer = true; 10391037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_texture_shared_exponent = true; 10491037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_texture_snorm = true; 10591037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_texture_sRGB = true; 10691037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_texture_sRGB_decode = true; 10791037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_texture_swizzle = true; 10891037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_stencil_two_side = true; 10991037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_vertex_array_bgra = true; 11091037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.APPLE_object_purgeable = true; 11191037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ATI_envmap_bumpmap = true; 11291037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ATI_separate_stencil = true; 11391037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ATI_texture_env_combine3 = true; 11491037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.MESA_pack_invert = true; 11591037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.MESA_texture_array = true; 11691037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.MESA_ycbcr_texture = true; 11791037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.NV_conditional_render = true; 11891037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.NV_primitive_restart = true; 11991037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.NV_texture_env_combine4 = true; 12091037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.NV_texture_rectangle = true; 12191037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.TDFX_texture_compression_FXT1 = true; 12291037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.OES_compressed_ETC1_RGB8_texture = true; 12391037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.OES_EGL_image = true; 12491037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.OES_draw_texture = true; 12591037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.OES_standard_derivatives = true; 12691037db265ecdd914a26e056cf69207b4f50924ehkuang 12791037db265ecdd914a26e056cf69207b4f50924ehkuang if (intel->gen >= 6) 12891037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Const.GLSLVersion = 140; 12991037db265ecdd914a26e056cf69207b4f50924ehkuang else 13091037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Const.GLSLVersion = 120; 13191037db265ecdd914a26e056cf69207b4f50924ehkuang _mesa_override_glsl_version(ctx); 13291037db265ecdd914a26e056cf69207b4f50924ehkuang 13391037db265ecdd914a26e056cf69207b4f50924ehkuang if (intel->gen >= 6) { 13491037db265ecdd914a26e056cf69207b4f50924ehkuang uint64_t dummy; 13591037db265ecdd914a26e056cf69207b4f50924ehkuang 13691037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_framebuffer_multisample = true; 13791037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_transform_feedback = true; 13891037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_blend_func_extended = !driQueryOptionb(&intel->optionCache, "disable_blend_func_extended"); 13991037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_draw_buffers_blend = true; 14091037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_ES3_compatibility = true; 14191037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_uniform_buffer_object = true; 14291037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_texture_buffer_object = true; 14391037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_texture_buffer_object_rgb32 = true; 14491037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_texture_cube_map_array = true; 14591037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.OES_depth_texture_cube_map = true; 14691037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_shading_language_packing = true; 14791037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_texture_multisample = true; 14891037db265ecdd914a26e056cf69207b4f50924ehkuang 14991037db265ecdd914a26e056cf69207b4f50924ehkuang /* Test if the kernel has the ioctl. */ 15091037db265ecdd914a26e056cf69207b4f50924ehkuang if (drm_intel_reg_read(intel->bufmgr, TIMESTAMP, &dummy) == 0) 15191037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_timer_query = true; 15291037db265ecdd914a26e056cf69207b4f50924ehkuang } 15391037db265ecdd914a26e056cf69207b4f50924ehkuang 15491037db265ecdd914a26e056cf69207b4f50924ehkuang if (intel->gen >= 5) { 15591037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_texture_query_lod = true; 15691037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_timer_query = true; 15791037db265ecdd914a26e056cf69207b4f50924ehkuang } 15891037db265ecdd914a26e056cf69207b4f50924ehkuang 15991037db265ecdd914a26e056cf69207b4f50924ehkuang if (ctx->API == API_OPENGL_CORE) 16091037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_base_instance = true; 16191037db265ecdd914a26e056cf69207b4f50924ehkuang if (ctx->API != API_OPENGL_CORE) 16291037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ARB_color_buffer_float = true; 16391037db265ecdd914a26e056cf69207b4f50924ehkuang 16491037db265ecdd914a26e056cf69207b4f50924ehkuang if (intel->ctx.Mesa_DXTn 16591037db265ecdd914a26e056cf69207b4f50924ehkuang || driQueryOptionb(&intel->optionCache, "force_s3tc_enable")) 16691037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.EXT_texture_compression_s3tc = true; 16791037db265ecdd914a26e056cf69207b4f50924ehkuang 16891037db265ecdd914a26e056cf69207b4f50924ehkuang ctx->Extensions.ANGLE_texture_compression_dxt = true; 16991037db265ecdd914a26e056cf69207b4f50924ehkuang} 17091037db265ecdd914a26e056cf69207b4f50924ehkuang