st_extensions.c revision 6b1b8e4ca1c911105c42154c9e794262d74652e5
1c6499a741c99394e81d1d86ffd066f3d9749875cBrian/************************************************************************** 2c6499a741c99394e81d1d86ffd066f3d9749875cBrian * 3c6499a741c99394e81d1d86ffd066f3d9749875cBrian * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 4fd2492d24447e461f36982da268caf0317885967Roland Scheidegger * Copyright (c) 2008 VMware, Inc. 5c6499a741c99394e81d1d86ffd066f3d9749875cBrian * All Rights Reserved. 6c6499a741c99394e81d1d86ffd066f3d9749875cBrian * 7c6499a741c99394e81d1d86ffd066f3d9749875cBrian * Permission is hereby granted, free of charge, to any person obtaining a 8c6499a741c99394e81d1d86ffd066f3d9749875cBrian * copy of this software and associated documentation files (the 9c6499a741c99394e81d1d86ffd066f3d9749875cBrian * "Software"), to deal in the Software without restriction, including 10c6499a741c99394e81d1d86ffd066f3d9749875cBrian * without limitation the rights to use, copy, modify, merge, publish, 11c6499a741c99394e81d1d86ffd066f3d9749875cBrian * distribute, sub license, and/or sell copies of the Software, and to 12c6499a741c99394e81d1d86ffd066f3d9749875cBrian * permit persons to whom the Software is furnished to do so, subject to 13c6499a741c99394e81d1d86ffd066f3d9749875cBrian * the following conditions: 14c6499a741c99394e81d1d86ffd066f3d9749875cBrian * 15c6499a741c99394e81d1d86ffd066f3d9749875cBrian * The above copyright notice and this permission notice (including the 16c6499a741c99394e81d1d86ffd066f3d9749875cBrian * next paragraph) shall be included in all copies or substantial portions 17c6499a741c99394e81d1d86ffd066f3d9749875cBrian * of the Software. 18c6499a741c99394e81d1d86ffd066f3d9749875cBrian * 19c6499a741c99394e81d1d86ffd066f3d9749875cBrian * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 20c6499a741c99394e81d1d86ffd066f3d9749875cBrian * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 21c6499a741c99394e81d1d86ffd066f3d9749875cBrian * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 22c6499a741c99394e81d1d86ffd066f3d9749875cBrian * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 23c6499a741c99394e81d1d86ffd066f3d9749875cBrian * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 24c6499a741c99394e81d1d86ffd066f3d9749875cBrian * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 25c6499a741c99394e81d1d86ffd066f3d9749875cBrian * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 26c6499a741c99394e81d1d86ffd066f3d9749875cBrian * 27c6499a741c99394e81d1d86ffd066f3d9749875cBrian **************************************************************************/ 28c6499a741c99394e81d1d86ffd066f3d9749875cBrian 29c6499a741c99394e81d1d86ffd066f3d9749875cBrian#include "main/imports.h" 30c6499a741c99394e81d1d86ffd066f3d9749875cBrian#include "main/context.h" 31c6499a741c99394e81d1d86ffd066f3d9749875cBrian#include "main/extensions.h" 32c6499a741c99394e81d1d86ffd066f3d9749875cBrian#include "main/macros.h" 33c6499a741c99394e81d1d86ffd066f3d9749875cBrian 34c6499a741c99394e81d1d86ffd066f3d9749875cBrian#include "pipe/p_context.h" 35c6499a741c99394e81d1d86ffd066f3d9749875cBrian#include "pipe/p_defines.h" 368383f798b41df9a305e0a33afe8afa028d5d5dfbBrian#include "pipe/p_screen.h" 37c6499a741c99394e81d1d86ffd066f3d9749875cBrian 38c6499a741c99394e81d1d86ffd066f3d9749875cBrian#include "st_context.h" 39c6499a741c99394e81d1d86ffd066f3d9749875cBrian#include "st_extensions.h" 40c6499a741c99394e81d1d86ffd066f3d9749875cBrian 41c6499a741c99394e81d1d86ffd066f3d9749875cBrian 4254507125e735ffa595e252282eaabf38095c21e1Alan Hourihanestatic int _min(int a, int b) 43e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian{ 44e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian return (a < b) ? a : b; 45e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian} 46e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian 4718ec140ef27b6488bea9d54e21b08b0a3afbcafeJosé Fonsecastatic float _maxf(float a, float b) 4844254b92480115e5c8a2d5cf78f99195c03701ebBrian{ 4944254b92480115e5c8a2d5cf78f99195c03701ebBrian return (a > b) ? a : b; 5044254b92480115e5c8a2d5cf78f99195c03701ebBrian} 5144254b92480115e5c8a2d5cf78f99195c03701ebBrian 5254507125e735ffa595e252282eaabf38095c21e1Alan Hourihanestatic int _clamp(int a, int min, int max) 53c6499a741c99394e81d1d86ffd066f3d9749875cBrian{ 54e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian if (a < min) 55e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian return min; 56e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian else if (a > max) 57e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian return max; 58e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian else 59e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian return a; 60c6499a741c99394e81d1d86ffd066f3d9749875cBrian} 61c6499a741c99394e81d1d86ffd066f3d9749875cBrian 62c6499a741c99394e81d1d86ffd066f3d9749875cBrian 63e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian/** 64e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian * Query driver to get implementation limits. 65e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian * Note that we have to limit/clamp against Mesa's internal limits too. 66e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian */ 67c6499a741c99394e81d1d86ffd066f3d9749875cBrianvoid st_init_limits(struct st_context *st) 68c6499a741c99394e81d1d86ffd066f3d9749875cBrian{ 698383f798b41df9a305e0a33afe8afa028d5d5dfbBrian struct pipe_screen *screen = st->pipe->screen; 70e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian struct gl_constants *c = &st->ctx->Const; 71e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian 72e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian c->MaxTextureLevels 7354507125e735ffa595e252282eaabf38095c21e1Alan Hourihane = _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS), 74e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian MAX_TEXTURE_LEVELS); 75c6499a741c99394e81d1d86ffd066f3d9749875cBrian 76e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian c->Max3DTextureLevels 7754507125e735ffa595e252282eaabf38095c21e1Alan Hourihane = _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_3D_LEVELS), 78e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian MAX_3D_TEXTURE_LEVELS); 79c6499a741c99394e81d1d86ffd066f3d9749875cBrian 80e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian c->MaxCubeTextureLevels 8154507125e735ffa595e252282eaabf38095c21e1Alan Hourihane = _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS), 82e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian MAX_CUBE_TEXTURE_LEVELS); 83c6499a741c99394e81d1d86ffd066f3d9749875cBrian 84e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian c->MaxTextureRectSize 8554507125e735ffa595e252282eaabf38095c21e1Alan Hourihane = _min(1 << (c->MaxTextureLevels - 1), MAX_TEXTURE_RECT_SIZE); 86c6499a741c99394e81d1d86ffd066f3d9749875cBrian 87d917ad5dbd17f2399a5a3590fe6c06a64d683771Brian Paul c->MaxTextureImageUnits 8854507125e735ffa595e252282eaabf38095c21e1Alan Hourihane = _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS), 89e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian MAX_TEXTURE_IMAGE_UNITS); 90c6499a741c99394e81d1d86ffd066f3d9749875cBrian 911d9360b67829a37b369e32c894183db1cecf827bBrian c->MaxVertexTextureImageUnits 9215a3fdb63e0511860ee84c168b84dd0bcfca6094Brian Paul = _min(screen->get_param(screen, PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS), 9315a3fdb63e0511860ee84c168b84dd0bcfca6094Brian Paul MAX_VERTEX_TEXTURE_IMAGE_UNITS); 941d9360b67829a37b369e32c894183db1cecf827bBrian 956cbaa2226fa1237b9f314828fbbc1c8db6509de8Brian Paul c->MaxTextureCoordUnits 966cbaa2226fa1237b9f314828fbbc1c8db6509de8Brian Paul = _min(c->MaxTextureImageUnits, MAX_TEXTURE_COORD_UNITS); 97d917ad5dbd17f2399a5a3590fe6c06a64d683771Brian Paul 986cbaa2226fa1237b9f314828fbbc1c8db6509de8Brian Paul c->MaxTextureUnits = _min(c->MaxTextureImageUnits, c->MaxTextureCoordUnits); 99d917ad5dbd17f2399a5a3590fe6c06a64d683771Brian Paul 100e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian c->MaxDrawBuffers 10154507125e735ffa595e252282eaabf38095c21e1Alan Hourihane = _clamp(screen->get_param(screen, PIPE_CAP_MAX_RENDER_TARGETS), 102e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian 1, MAX_DRAW_BUFFERS); 10344254b92480115e5c8a2d5cf78f99195c03701ebBrian 10444254b92480115e5c8a2d5cf78f99195c03701ebBrian c->MaxLineWidth 10518ec140ef27b6488bea9d54e21b08b0a3afbcafeJosé Fonseca = _maxf(1.0f, screen->get_paramf(screen, PIPE_CAP_MAX_LINE_WIDTH)); 10644254b92480115e5c8a2d5cf78f99195c03701ebBrian c->MaxLineWidthAA 10718ec140ef27b6488bea9d54e21b08b0a3afbcafeJosé Fonseca = _maxf(1.0f, screen->get_paramf(screen, PIPE_CAP_MAX_LINE_WIDTH_AA)); 10844254b92480115e5c8a2d5cf78f99195c03701ebBrian 10944254b92480115e5c8a2d5cf78f99195c03701ebBrian c->MaxPointSize 11018ec140ef27b6488bea9d54e21b08b0a3afbcafeJosé Fonseca = _maxf(1.0f, screen->get_paramf(screen, PIPE_CAP_MAX_POINT_WIDTH)); 11144254b92480115e5c8a2d5cf78f99195c03701ebBrian c->MaxPointSizeAA 11218ec140ef27b6488bea9d54e21b08b0a3afbcafeJosé Fonseca = _maxf(1.0f, screen->get_paramf(screen, PIPE_CAP_MAX_POINT_WIDTH_AA)); 11344254b92480115e5c8a2d5cf78f99195c03701ebBrian 11444254b92480115e5c8a2d5cf78f99195c03701ebBrian c->MaxTextureMaxAnisotropy 11518ec140ef27b6488bea9d54e21b08b0a3afbcafeJosé Fonseca = _maxf(2.0f, screen->get_paramf(screen, PIPE_CAP_MAX_TEXTURE_ANISOTROPY)); 11644254b92480115e5c8a2d5cf78f99195c03701ebBrian 11744254b92480115e5c8a2d5cf78f99195c03701ebBrian c->MaxTextureLodBias 1188383f798b41df9a305e0a33afe8afa028d5d5dfbBrian = screen->get_paramf(screen, PIPE_CAP_MAX_TEXTURE_LOD_BIAS); 1194650b35846e8e87fb0d74573a5f66452bb449b4bBrian 120b54225ccd6d3bc1b678e27c2f00ebddf5bf1046dBrian c->MaxDrawBuffers 121b54225ccd6d3bc1b678e27c2f00ebddf5bf1046dBrian = CLAMP(screen->get_param(screen, PIPE_CAP_MAX_RENDER_TARGETS), 122b54225ccd6d3bc1b678e27c2f00ebddf5bf1046dBrian 1, MAX_DRAW_BUFFERS); 123c6499a741c99394e81d1d86ffd066f3d9749875cBrian} 124c6499a741c99394e81d1d86ffd066f3d9749875cBrian 125c6499a741c99394e81d1d86ffd066f3d9749875cBrian 126c6499a741c99394e81d1d86ffd066f3d9749875cBrian/** 1276b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul * Use pipe_screen::get_param() to query PIPE_CAP_ values to determine 1286b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul * which GL extensions are supported. 1296b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul * Quite a few extensions are always supported because they are standard 1306b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul * features or can be built on top of other gallium features. 1316b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul * Some fine tuning may still be needed. 132c6499a741c99394e81d1d86ffd066f3d9749875cBrian */ 133c6499a741c99394e81d1d86ffd066f3d9749875cBrianvoid st_init_extensions(struct st_context *st) 134c6499a741c99394e81d1d86ffd066f3d9749875cBrian{ 1358383f798b41df9a305e0a33afe8afa028d5d5dfbBrian struct pipe_screen *screen = st->pipe->screen; 136c6499a741c99394e81d1d86ffd066f3d9749875cBrian GLcontext *ctx = st->ctx; 137c6499a741c99394e81d1d86ffd066f3d9749875cBrian 138c6499a741c99394e81d1d86ffd066f3d9749875cBrian /* 139c6499a741c99394e81d1d86ffd066f3d9749875cBrian * Extensions that are supported by all Gallium drivers: 140c6499a741c99394e81d1d86ffd066f3d9749875cBrian */ 1416b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul ctx->Extensions.ARB_multisample = GL_TRUE; 142c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_fragment_program = GL_TRUE; 1436c4447e6a8ecfcfb094ab2ad8b7371dfa2b7d7bbBrian ctx->Extensions.ARB_texture_border_clamp = GL_TRUE; /* XXX temp */ 1446b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul ctx->Extensions.ARB_texture_compression = GL_TRUE; 145c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_texture_cube_map = GL_TRUE; 146c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_texture_env_combine = GL_TRUE; 147c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_texture_env_crossbar = GL_TRUE; 148c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_texture_env_dot3 = GL_TRUE; 149c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_vertex_program = GL_TRUE; 150c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_vertex_buffer_object = GL_TRUE; 151c6499a741c99394e81d1d86ffd066f3d9749875cBrian 152c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_blend_color = GL_TRUE; 153c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_blend_equation_separate = GL_TRUE; 154c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_blend_func_separate = GL_TRUE; 155c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_blend_logic_op = GL_TRUE; 156c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_blend_minmax = GL_TRUE; 157c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_blend_subtract = GL_TRUE; 1580df877a0ee68359d106ba84e3dd3b7c42ae20d5aBrian ctx->Extensions.EXT_framebuffer_blit = GL_TRUE; 159c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_framebuffer_object = GL_TRUE; 160c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_fog_coord = GL_TRUE; 161c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_multi_draw_arrays = GL_TRUE; 162c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_pixel_buffer_object = GL_TRUE; 163c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_point_parameters = GL_TRUE; 164c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_secondary_color = GL_TRUE; 165c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_stencil_wrap = GL_TRUE; 166c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_texture_env_add = GL_TRUE; 167c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_texture_env_combine = GL_TRUE; 168c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_texture_env_dot3 = GL_TRUE; 169c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_texture_lod_bias = GL_TRUE; 170c6499a741c99394e81d1d86ffd066f3d9749875cBrian 171c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.NV_blend_square = GL_TRUE; 172c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.NV_texgen_reflection = GL_TRUE; 173c6499a741c99394e81d1d86ffd066f3d9749875cBrian 174e38f677e8f5596d92a6756e13f41f6523de737c2Brian Paul ctx->Extensions.SGI_color_matrix = GL_TRUE; 1756b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul ctx->Extensions.SGIS_generate_mipmap = GL_TRUE; 176c6499a741c99394e81d1d86ffd066f3d9749875cBrian 177c6499a741c99394e81d1d86ffd066f3d9749875cBrian /* 178c6499a741c99394e81d1d86ffd066f3d9749875cBrian * Extensions that depend on the driver/hardware: 179c6499a741c99394e81d1d86ffd066f3d9749875cBrian */ 1808383f798b41df9a305e0a33afe8afa028d5d5dfbBrian if (screen->get_param(screen, PIPE_CAP_MAX_RENDER_TARGETS) > 0) { 181c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_draw_buffers = GL_TRUE; 182c6499a741c99394e81d1d86ffd066f3d9749875cBrian } 183c6499a741c99394e81d1d86ffd066f3d9749875cBrian 1848383f798b41df9a305e0a33afe8afa028d5d5dfbBrian if (screen->get_param(screen, PIPE_CAP_GLSL)) { 185c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_fragment_shader = GL_TRUE; 186c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_vertex_shader = GL_TRUE; 187c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_shader_objects = GL_TRUE; 188c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_shading_language_100 = GL_TRUE; 189c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_shading_language_120 = GL_TRUE; 190c6499a741c99394e81d1d86ffd066f3d9749875cBrian } 191c6499a741c99394e81d1d86ffd066f3d9749875cBrian 192be66a8f43172327e3cdde27281e40377cacbb121Brian Paul if (screen->get_param(screen, PIPE_CAP_TEXTURE_MIRROR_REPEAT) > 0) { 193be66a8f43172327e3cdde27281e40377cacbb121Brian Paul ctx->Extensions.ARB_texture_mirrored_repeat = GL_TRUE; 194be66a8f43172327e3cdde27281e40377cacbb121Brian Paul } 195be66a8f43172327e3cdde27281e40377cacbb121Brian Paul 196be66a8f43172327e3cdde27281e40377cacbb121Brian Paul if (screen->get_param(screen, PIPE_CAP_TEXTURE_MIRROR_CLAMP) > 0) { 197be66a8f43172327e3cdde27281e40377cacbb121Brian Paul ctx->Extensions.EXT_texture_mirror_clamp = GL_TRUE; 198be66a8f43172327e3cdde27281e40377cacbb121Brian Paul } 199be66a8f43172327e3cdde27281e40377cacbb121Brian Paul 2008383f798b41df9a305e0a33afe8afa028d5d5dfbBrian if (screen->get_param(screen, PIPE_CAP_NPOT_TEXTURES)) { 201c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_texture_non_power_of_two = GL_TRUE; 202c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.NV_texture_rectangle = GL_TRUE; 203c6499a741c99394e81d1d86ffd066f3d9749875cBrian } 204c6499a741c99394e81d1d86ffd066f3d9749875cBrian 2058383f798b41df9a305e0a33afe8afa028d5d5dfbBrian if (screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS) > 1) { 206c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_multitexture = GL_TRUE; 207c6499a741c99394e81d1d86ffd066f3d9749875cBrian } 208c6499a741c99394e81d1d86ffd066f3d9749875cBrian 2098383f798b41df9a305e0a33afe8afa028d5d5dfbBrian if (screen->get_param(screen, PIPE_CAP_TWO_SIDED_STENCIL)) { 210c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ATI_separate_stencil = GL_TRUE; 211c6499a741c99394e81d1d86ffd066f3d9749875cBrian } 212c6499a741c99394e81d1d86ffd066f3d9749875cBrian 2138383f798b41df9a305e0a33afe8afa028d5d5dfbBrian if (screen->get_param(screen, PIPE_CAP_ANISOTROPIC_FILTER)) { 214c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_texture_filter_anisotropic = GL_TRUE; 215c6499a741c99394e81d1d86ffd066f3d9749875cBrian } 216c6499a741c99394e81d1d86ffd066f3d9749875cBrian 2178383f798b41df9a305e0a33afe8afa028d5d5dfbBrian if (screen->get_param(screen, PIPE_CAP_POINT_SPRITE)) { 218c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_point_sprite = GL_TRUE; 21903cfeb31af7834c2b2701ad25ec39f8375df6c96Brian ctx->Extensions.NV_point_sprite = GL_TRUE; 220c6499a741c99394e81d1d86ffd066f3d9749875cBrian } 221c6499a741c99394e81d1d86ffd066f3d9749875cBrian 2228383f798b41df9a305e0a33afe8afa028d5d5dfbBrian if (screen->get_param(screen, PIPE_CAP_OCCLUSION_QUERY)) { 223c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_occlusion_query = GL_TRUE; 224c6499a741c99394e81d1d86ffd066f3d9749875cBrian } 225c6499a741c99394e81d1d86ffd066f3d9749875cBrian 2268383f798b41df9a305e0a33afe8afa028d5d5dfbBrian if (screen->get_param(screen, PIPE_CAP_TEXTURE_SHADOW_MAP)) { 227c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_depth_texture = GL_TRUE; 228c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_shadow = GL_TRUE; 2298ce6d6b97e6e90451e7372fe3d94e7e31b0ea569Brian ctx->Extensions.EXT_shadow_funcs = GL_TRUE; 230c6499a741c99394e81d1d86ffd066f3d9749875cBrian /*ctx->Extensions.ARB_shadow_ambient = GL_TRUE;*/ 231c6499a741c99394e81d1d86ffd066f3d9749875cBrian } 232c6499a741c99394e81d1d86ffd066f3d9749875cBrian 2336c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul /* GL_EXT_packed_depth_stencil requires both the ability to render to 2346c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul * a depth/stencil buffer and texture from depth/stencil source. 2356c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul */ 2366c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul if (screen->is_format_supported(screen, PIPE_FORMAT_Z24S8_UNORM, 2376c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul PIPE_TEXTURE_2D, 2386c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0) && 2396c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul screen->is_format_supported(screen, PIPE_FORMAT_Z24S8_UNORM, 2406c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul PIPE_TEXTURE_2D, 2416c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul PIPE_TEXTURE_USAGE_SAMPLER, 0)) { 2426c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul ctx->Extensions.EXT_packed_depth_stencil = GL_TRUE; 2436c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul } 2446c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul else if (screen->is_format_supported(screen, PIPE_FORMAT_S8Z24_UNORM, 2456c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul PIPE_TEXTURE_2D, 2466c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0) && 2476c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul screen->is_format_supported(screen, PIPE_FORMAT_S8Z24_UNORM, 2486c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul PIPE_TEXTURE_2D, 2496c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul PIPE_TEXTURE_USAGE_SAMPLER, 0)) { 2506c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul ctx->Extensions.EXT_packed_depth_stencil = GL_TRUE; 2516c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul } 2526c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul 2536b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul /* sRGB support */ 25413540d38d9d4ac4f71533ce239f0d9a2b950e6dbBrian Paul if (screen->is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_SRGB, 2558aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca PIPE_TEXTURE_2D, 256fd2492d24447e461f36982da268caf0317885967Roland Scheidegger PIPE_TEXTURE_USAGE_SAMPLER, 0) || 257fd2492d24447e461f36982da268caf0317885967Roland Scheidegger screen->is_format_supported(screen, PIPE_FORMAT_A8R8G8B8_SRGB, 258fd2492d24447e461f36982da268caf0317885967Roland Scheidegger PIPE_TEXTURE_2D, 2598aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca PIPE_TEXTURE_USAGE_SAMPLER, 0)) { 26013540d38d9d4ac4f71533ce239f0d9a2b950e6dbBrian Paul ctx->Extensions.EXT_texture_sRGB = GL_TRUE; 26113540d38d9d4ac4f71533ce239f0d9a2b950e6dbBrian Paul } 2623600e7402c2a1824c8e5e2cc6ea189bcdeb4db6bBrian Paul 2636b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul /* s3tc support */ 2643600e7402c2a1824c8e5e2cc6ea189bcdeb4db6bBrian Paul if (screen->is_format_supported(screen, PIPE_FORMAT_DXT5_RGBA, 2658aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca PIPE_TEXTURE_2D, 2668aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca PIPE_TEXTURE_USAGE_SAMPLER, 0)) { 2673600e7402c2a1824c8e5e2cc6ea189bcdeb4db6bBrian Paul ctx->Extensions.EXT_texture_compression_s3tc = GL_TRUE; 2683600e7402c2a1824c8e5e2cc6ea189bcdeb4db6bBrian Paul } 2696b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul 2706b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul /* ycbcr support */ 2718aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca if (screen->is_format_supported(screen, PIPE_FORMAT_YCBCR, 2728aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca PIPE_TEXTURE_2D, 2738aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca PIPE_TEXTURE_USAGE_SAMPLER, 0) || 2748aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca screen->is_format_supported(screen, PIPE_FORMAT_YCBCR_REV, 2758aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca PIPE_TEXTURE_2D, 2768aafc03b260ab8923f1b373f7effa75bcdb40a72José Fonseca PIPE_TEXTURE_USAGE_SAMPLER, 0)) { 2771307eebfa07e3440554eb2871e5dbd94e98ed7a8Brian ctx->Extensions.MESA_ycbcr_texture = GL_TRUE; 2781307eebfa07e3440554eb2871e5dbd94e98ed7a8Brian } 279c6499a741c99394e81d1d86ffd066f3d9749875cBrian} 280