st_extensions.c revision 171be755223d99f8cc5cc1bdaf8bd7b4caa04b4f
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/macros.h" 32edc09358f72cd48cb2315daf23c82e7646aeaea3Vinson Lee#include "main/mfeatures.h" 333bb41e7b2d359e02f6a1ad8df6be52d9aea7d296Brian Paul#include "main/version.h" 34c6499a741c99394e81d1d86ffd066f3d9749875cBrian 35c6499a741c99394e81d1d86ffd066f3d9749875cBrian#include "pipe/p_context.h" 36c6499a741c99394e81d1d86ffd066f3d9749875cBrian#include "pipe/p_defines.h" 378383f798b41df9a305e0a33afe8afa028d5d5dfbBrian#include "pipe/p_screen.h" 38c6499a741c99394e81d1d86ffd066f3d9749875cBrian 39c6499a741c99394e81d1d86ffd066f3d9749875cBrian#include "st_context.h" 40c6499a741c99394e81d1d86ffd066f3d9749875cBrian#include "st_extensions.h" 41c6499a741c99394e81d1d86ffd066f3d9749875cBrian 42c6499a741c99394e81d1d86ffd066f3d9749875cBrian 4354507125e735ffa595e252282eaabf38095c21e1Alan Hourihanestatic int _min(int a, int b) 44e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian{ 45e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian return (a < b) ? a : b; 46e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian} 47e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian 4818ec140ef27b6488bea9d54e21b08b0a3afbcafeJosé Fonsecastatic float _maxf(float a, float b) 4944254b92480115e5c8a2d5cf78f99195c03701ebBrian{ 5044254b92480115e5c8a2d5cf78f99195c03701ebBrian return (a > b) ? a : b; 5144254b92480115e5c8a2d5cf78f99195c03701ebBrian} 5244254b92480115e5c8a2d5cf78f99195c03701ebBrian 5354507125e735ffa595e252282eaabf38095c21e1Alan Hourihanestatic int _clamp(int a, int min, int max) 54c6499a741c99394e81d1d86ffd066f3d9749875cBrian{ 55e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian if (a < min) 56e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian return min; 57e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian else if (a > max) 58e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian return max; 59e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian else 60e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian return a; 61c6499a741c99394e81d1d86ffd066f3d9749875cBrian} 62c6499a741c99394e81d1d86ffd066f3d9749875cBrian 63c6499a741c99394e81d1d86ffd066f3d9749875cBrian 64e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian/** 65e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian * Query driver to get implementation limits. 66e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian * Note that we have to limit/clamp against Mesa's internal limits too. 67e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian */ 68c6499a741c99394e81d1d86ffd066f3d9749875cBrianvoid st_init_limits(struct st_context *st) 69c6499a741c99394e81d1d86ffd066f3d9749875cBrian{ 708383f798b41df9a305e0a33afe8afa028d5d5dfbBrian struct pipe_screen *screen = st->pipe->screen; 71e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian struct gl_constants *c = &st->ctx->Const; 72c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul gl_shader_type sh; 73e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian 74e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian c->MaxTextureLevels 7554507125e735ffa595e252282eaabf38095c21e1Alan Hourihane = _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS), 76e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian MAX_TEXTURE_LEVELS); 77c6499a741c99394e81d1d86ffd066f3d9749875cBrian 78e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian c->Max3DTextureLevels 7954507125e735ffa595e252282eaabf38095c21e1Alan Hourihane = _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_3D_LEVELS), 80e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian MAX_3D_TEXTURE_LEVELS); 81c6499a741c99394e81d1d86ffd066f3d9749875cBrian 82e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian c->MaxCubeTextureLevels 8354507125e735ffa595e252282eaabf38095c21e1Alan Hourihane = _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS), 84e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian MAX_CUBE_TEXTURE_LEVELS); 85c6499a741c99394e81d1d86ffd066f3d9749875cBrian 86e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian c->MaxTextureRectSize 8754507125e735ffa595e252282eaabf38095c21e1Alan Hourihane = _min(1 << (c->MaxTextureLevels - 1), MAX_TEXTURE_RECT_SIZE); 88c6499a741c99394e81d1d86ffd066f3d9749875cBrian 89379429137238e79296b8222c0e13d7d961910633Marek Olšák c->MaxArrayTextureLayers 90379429137238e79296b8222c0e13d7d961910633Marek Olšák = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS); 91379429137238e79296b8222c0e13d7d961910633Marek Olšák 92d917ad5dbd17f2399a5a3590fe6c06a64d683771Brian Paul c->MaxTextureImageUnits 93f5bfe54a34d9c8cd5de2b096d0e8486fe0d990a7Marek Olšák = _min(screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT, 94f5bfe54a34d9c8cd5de2b096d0e8486fe0d990a7Marek Olšák PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS), 95e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian MAX_TEXTURE_IMAGE_UNITS); 96c6499a741c99394e81d1d86ffd066f3d9749875cBrian 971d9360b67829a37b369e32c894183db1cecf827bBrian c->MaxVertexTextureImageUnits 98f5bfe54a34d9c8cd5de2b096d0e8486fe0d990a7Marek Olšák = _min(screen->get_shader_param(screen, PIPE_SHADER_VERTEX, 99f5bfe54a34d9c8cd5de2b096d0e8486fe0d990a7Marek Olšák PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS), 10015a3fdb63e0511860ee84c168b84dd0bcfca6094Brian Paul MAX_VERTEX_TEXTURE_IMAGE_UNITS); 1011d9360b67829a37b369e32c894183db1cecf827bBrian 102853d4807fe220b17cf5af5a76b24f2466238013bMichal Krol c->MaxCombinedTextureImageUnits 103853d4807fe220b17cf5af5a76b24f2466238013bMichal Krol = _min(screen->get_param(screen, PIPE_CAP_MAX_COMBINED_SAMPLERS), 104853d4807fe220b17cf5af5a76b24f2466238013bMichal Krol MAX_COMBINED_TEXTURE_IMAGE_UNITS); 105853d4807fe220b17cf5af5a76b24f2466238013bMichal Krol 1066cbaa2226fa1237b9f314828fbbc1c8db6509de8Brian Paul c->MaxTextureCoordUnits 1076cbaa2226fa1237b9f314828fbbc1c8db6509de8Brian Paul = _min(c->MaxTextureImageUnits, MAX_TEXTURE_COORD_UNITS); 108d917ad5dbd17f2399a5a3590fe6c06a64d683771Brian Paul 1096cbaa2226fa1237b9f314828fbbc1c8db6509de8Brian Paul c->MaxTextureUnits = _min(c->MaxTextureImageUnits, c->MaxTextureCoordUnits); 110d917ad5dbd17f2399a5a3590fe6c06a64d683771Brian Paul 111e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian c->MaxDrawBuffers 11254507125e735ffa595e252282eaabf38095c21e1Alan Hourihane = _clamp(screen->get_param(screen, PIPE_CAP_MAX_RENDER_TARGETS), 113e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian 1, MAX_DRAW_BUFFERS); 11444254b92480115e5c8a2d5cf78f99195c03701ebBrian 11544254b92480115e5c8a2d5cf78f99195c03701ebBrian c->MaxLineWidth 116bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák = _maxf(1.0f, screen->get_paramf(screen, 117bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák PIPE_CAPF_MAX_LINE_WIDTH)); 11844254b92480115e5c8a2d5cf78f99195c03701ebBrian c->MaxLineWidthAA 119bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák = _maxf(1.0f, screen->get_paramf(screen, 120bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák PIPE_CAPF_MAX_LINE_WIDTH_AA)); 12144254b92480115e5c8a2d5cf78f99195c03701ebBrian 12244254b92480115e5c8a2d5cf78f99195c03701ebBrian c->MaxPointSize 123bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák = _maxf(1.0f, screen->get_paramf(screen, 124bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák PIPE_CAPF_MAX_POINT_WIDTH)); 12544254b92480115e5c8a2d5cf78f99195c03701ebBrian c->MaxPointSizeAA 126bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák = _maxf(1.0f, screen->get_paramf(screen, 127bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák PIPE_CAPF_MAX_POINT_WIDTH_AA)); 128dd7be07c9685012b3e9fdfbaa13dc638abf6a9d1Roland Scheidegger /* called after _mesa_create_context/_mesa_init_point, fix default user 129dd7be07c9685012b3e9fdfbaa13dc638abf6a9d1Roland Scheidegger * settable max point size up 130dd7be07c9685012b3e9fdfbaa13dc638abf6a9d1Roland Scheidegger */ 131dd7be07c9685012b3e9fdfbaa13dc638abf6a9d1Roland Scheidegger st->ctx->Point.MaxSize = MAX2(c->MaxPointSize, c->MaxPointSizeAA); 1322c326e72664e65166c68b027b26aaf373f3be36dRoland Scheidegger /* these are not queryable. Note that GL basically mandates a 1.0 minimum 1332c326e72664e65166c68b027b26aaf373f3be36dRoland Scheidegger * for non-aa sizes, but we can go down to 0.0 for aa points. 1342c326e72664e65166c68b027b26aaf373f3be36dRoland Scheidegger */ 1352c326e72664e65166c68b027b26aaf373f3be36dRoland Scheidegger c->MinPointSize = 1.0f; 1362c326e72664e65166c68b027b26aaf373f3be36dRoland Scheidegger c->MinPointSizeAA = 0.0f; 13744254b92480115e5c8a2d5cf78f99195c03701ebBrian 13844254b92480115e5c8a2d5cf78f99195c03701ebBrian c->MaxTextureMaxAnisotropy 139bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák = _maxf(2.0f, screen->get_paramf(screen, 140bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák PIPE_CAPF_MAX_TEXTURE_ANISOTROPY)); 14144254b92480115e5c8a2d5cf78f99195c03701ebBrian 14244254b92480115e5c8a2d5cf78f99195c03701ebBrian c->MaxTextureLodBias 143bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák = screen->get_paramf(screen, PIPE_CAPF_MAX_TEXTURE_LOD_BIAS); 1444650b35846e8e87fb0d74573a5f66452bb449b4bBrian 145b54225ccd6d3bc1b678e27c2f00ebddf5bf1046dBrian c->MaxDrawBuffers 146b54225ccd6d3bc1b678e27c2f00ebddf5bf1046dBrian = CLAMP(screen->get_param(screen, PIPE_CAP_MAX_RENDER_TARGETS), 147b54225ccd6d3bc1b678e27c2f00ebddf5bf1046dBrian 1, MAX_DRAW_BUFFERS); 14802edc8da36d6e01635bcfbb5073f0f718de96c37Brian Paul 149dd8f5c33f3a54212a0d7d072cd75b321f5abcda8Corbin Simpson /* Quads always follow GL provoking rules. */ 150dd8f5c33f3a54212a0d7d072cd75b321f5abcda8Corbin Simpson c->QuadsFollowProvokingVertexConvention = GL_FALSE; 151dad962bafe8ffd7fdb35c28cfb8bbd5a297c8083José Fonseca 152c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul for (sh = 0; sh < MESA_SHADER_TYPES; ++sh) { 153c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul struct gl_shader_compiler_options *options = 154c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul &st->ctx->ShaderCompilerOptions[sh]; 1559f7f7b3ff87e756a5d42eb4c6a953ec33e128f89Vinson Lee struct gl_program_constants *pc; 156c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul 157c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul switch (sh) { 158a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_FRAGMENT: 159a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri pc = &c->FragmentProgram; 160a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri break; 161a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_VERTEX: 162a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri pc = &c->VertexProgram; 163a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri break; 164a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri case PIPE_SHADER_GEOMETRY: 165a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri pc = &c->GeometryProgram; 166a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri break; 1679f7f7b3ff87e756a5d42eb4c6a953ec33e128f89Vinson Lee default: 1689f7f7b3ff87e756a5d42eb4c6a953ec33e128f89Vinson Lee assert(0); 1699f7f7b3ff87e756a5d42eb4c6a953ec33e128f89Vinson Lee continue; 170a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri } 171a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri 172c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul pc->MaxNativeInstructions = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INSTRUCTIONS); 173c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul pc->MaxNativeAluInstructions = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS); 174c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul pc->MaxNativeTexInstructions = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS); 175c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul pc->MaxNativeTexIndirections = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS); 176c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul pc->MaxNativeAttribs = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INPUTS); 177c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul pc->MaxNativeTemps = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_TEMPS); 178c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul pc->MaxNativeAddressRegs = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_ADDRS); 179c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul pc->MaxNativeParameters = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_CONSTS); 180e7c74a7dfab789496761226fe62a08f2d9fea5c7Marek Olšák pc->MaxUniformComponents = 4 * MIN2(pc->MaxNativeParameters, MAX_UNIFORMS); 181f9cc6acbfa6f6f91b29a0601436d91a330fdce79Brian Paul /* raise MaxParameters if native support is higher */ 182f9cc6acbfa6f6f91b29a0601436d91a330fdce79Brian Paul pc->MaxParameters = MAX2(pc->MaxParameters, pc->MaxNativeParameters); 183a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri 184b94a926f396d366b6bb5d24b32dd93ffb7609205Brian Paul /* Gallium doesn't really care about local vs. env parameters so use the 185b94a926f396d366b6bb5d24b32dd93ffb7609205Brian Paul * same limits. 186b94a926f396d366b6bb5d24b32dd93ffb7609205Brian Paul */ 187f37a5081b229b020553c45e32e9888af77cfd3d6Marek Olšák pc->MaxLocalParams = MIN2(pc->MaxParameters, MAX_PROGRAM_LOCAL_PARAMS); 188f37a5081b229b020553c45e32e9888af77cfd3d6Marek Olšák pc->MaxEnvParams = MIN2(pc->MaxParameters, MAX_PROGRAM_ENV_PARAMS); 189b94a926f396d366b6bb5d24b32dd93ffb7609205Brian Paul 190fbc7c9b7a9d9df979ea82136d2b74121e5d4346eLuca Barbieri options->EmitNoNoise = TRUE; 191fbc7c9b7a9d9df979ea82136d2b74121e5d4346eLuca Barbieri 192b37459388b22fb6a831d45bc08e51cdb7b9c610cLuca Barbieri /* TODO: make these more fine-grained if anyone needs it */ 193488fe51cf823ccd137c667f1e92dd86f8323b723Bryan Cain options->MaxIfDepth = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH); 194c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul options->EmitNoLoops = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH); 195c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul options->EmitNoFunctions = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_SUBROUTINES); 196c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul options->EmitNoMainReturn = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_SUBROUTINES); 197b37459388b22fb6a831d45bc08e51cdb7b9c610cLuca Barbieri 198c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul options->EmitNoCont = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED); 199b37459388b22fb6a831d45bc08e51cdb7b9c610cLuca Barbieri 200c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul options->EmitNoIndirectInput = !screen->get_shader_param(screen, sh, 201cbfdf262ccf8b573f1fa4c0065a8eb1fb87d93daMarek Olšák PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR); 202c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul options->EmitNoIndirectOutput = !screen->get_shader_param(screen, sh, 203cbfdf262ccf8b573f1fa4c0065a8eb1fb87d93daMarek Olšák PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR); 204c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul options->EmitNoIndirectTemp = !screen->get_shader_param(screen, sh, 205cbfdf262ccf8b573f1fa4c0065a8eb1fb87d93daMarek Olšák PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR); 206c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul options->EmitNoIndirectUniform = !screen->get_shader_param(screen, sh, 207cbfdf262ccf8b573f1fa4c0065a8eb1fb87d93daMarek Olšák PIPE_SHADER_CAP_INDIRECT_CONST_ADDR); 208cbfdf262ccf8b573f1fa4c0065a8eb1fb87d93daMarek Olšák 20948aa7725893ee75af10b8519e8a018e94334c7ccBrian Paul if (options->EmitNoLoops) 210c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul options->MaxUnrollIterations = MIN2(screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INSTRUCTIONS), 65536); 211a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri } 212007bac83312b29061753e625edfd45ccab9ecc9cMarek Olšák 2131ded658ce074a85bc08c989ff17840b840ff3051Marek Olšák /* PIPE_SHADER_CAP_MAX_INPUTS for the FS specifies the maximum number 2141ded658ce074a85bc08c989ff17840b840ff3051Marek Olšák * of inputs. It's always 2 colors + N generic inputs. */ 2151ded658ce074a85bc08c989ff17840b840ff3051Marek Olšák c->MaxVarying = screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT, 2161ded658ce074a85bc08c989ff17840b840ff3051Marek Olšák PIPE_SHADER_CAP_MAX_INPUTS); 217e746a6bb9a6c9f797d1b40ed22b2f296f8fa5aacBrian Paul c->MaxVarying = MIN2(c->MaxVarying, MAX_VARYING); 218e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul 2192a0126932b320806e030c1c085791e257516e0cdMarek Olšák c->MinProgramTexelOffset = screen->get_param(screen, PIPE_CAP_MIN_TEXEL_OFFSET); 2202a0126932b320806e030c1c085791e257516e0cdMarek Olšák c->MaxProgramTexelOffset = screen->get_param(screen, PIPE_CAP_MAX_TEXEL_OFFSET); 2212a0126932b320806e030c1c085791e257516e0cdMarek Olšák 2222a0126932b320806e030c1c085791e257516e0cdMarek Olšák c->UniformBooleanTrue = ~0; 2239c4b02528752eb6392009e41025202fc9f9ca5b3Eric Anholt 224c05fafa4a0fd93d4264c46578e23a83ecf2b481eMarek Olšák c->MaxTransformFeedbackSeparateAttribs = 2251b9577b833db28651e89e5c12559c7af5dde8822Marek Olšák screen->get_param(screen, PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS); 226c05fafa4a0fd93d4264c46578e23a83ecf2b481eMarek Olšák c->MaxTransformFeedbackSeparateComponents = 227c05fafa4a0fd93d4264c46578e23a83ecf2b481eMarek Olšák screen->get_param(screen, PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS); 228c05fafa4a0fd93d4264c46578e23a83ecf2b481eMarek Olšák c->MaxTransformFeedbackInterleavedComponents = 229c05fafa4a0fd93d4264c46578e23a83ecf2b481eMarek Olšák screen->get_param(screen, PIPE_CAP_MAX_STREAM_OUTPUT_INTERLEAVED_COMPONENTS); 230c05fafa4a0fd93d4264c46578e23a83ecf2b481eMarek Olšák 2319c4b02528752eb6392009e41025202fc9f9ca5b3Eric Anholt c->StripTextureBorder = GL_TRUE; 232df809ae92343bb83c162ea4c807cefb67686717dMarek Olšák 233df809ae92343bb83c162ea4c807cefb67686717dMarek Olšák c->GLSLSkipStrictMaxUniformLimitCheck = 234df809ae92343bb83c162ea4c807cefb67686717dMarek Olšák screen->get_param(screen, PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS); 235df809ae92343bb83c162ea4c807cefb67686717dMarek Olšák 236df809ae92343bb83c162ea4c807cefb67686717dMarek Olšák c->GLSLSkipStrictMaxVaryingLimitCheck = 237df809ae92343bb83c162ea4c807cefb67686717dMarek Olšák screen->get_param(screen, PIPE_CAP_TGSI_CAN_COMPACT_VARYINGS); 238c6499a741c99394e81d1d86ffd066f3d9749875cBrian} 239c6499a741c99394e81d1d86ffd066f3d9749875cBrian 240c6499a741c99394e81d1d86ffd066f3d9749875cBrian 24195739f19ccc8d3915c437238ca057ddbecd193c6Bryan Cainstatic GLboolean st_get_s3tc_override(void) 24295739f19ccc8d3915c437238ca057ddbecd193c6Bryan Cain{ 24395739f19ccc8d3915c437238ca057ddbecd193c6Bryan Cain const char *override = _mesa_getenv("force_s3tc_enable"); 24495739f19ccc8d3915c437238ca057ddbecd193c6Bryan Cain if (override && !strcmp(override, "true")) 24595739f19ccc8d3915c437238ca057ddbecd193c6Bryan Cain return GL_TRUE; 24695739f19ccc8d3915c437238ca057ddbecd193c6Bryan Cain return GL_FALSE; 24795739f19ccc8d3915c437238ca057ddbecd193c6Bryan Cain} 24895739f19ccc8d3915c437238ca057ddbecd193c6Bryan Cain 24995739f19ccc8d3915c437238ca057ddbecd193c6Bryan Cain 250c6499a741c99394e81d1d86ffd066f3d9749875cBrian/** 2516b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul * Use pipe_screen::get_param() to query PIPE_CAP_ values to determine 2526b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul * which GL extensions are supported. 2536b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul * Quite a few extensions are always supported because they are standard 2546b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul * features or can be built on top of other gallium features. 2556b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul * Some fine tuning may still be needed. 256c6499a741c99394e81d1d86ffd066f3d9749875cBrian */ 257c6499a741c99394e81d1d86ffd066f3d9749875cBrianvoid st_init_extensions(struct st_context *st) 258c6499a741c99394e81d1d86ffd066f3d9749875cBrian{ 2598383f798b41df9a305e0a33afe8afa028d5d5dfbBrian struct pipe_screen *screen = st->pipe->screen; 260f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg struct gl_context *ctx = st->ctx; 261171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák int i, glsl_feature_level; 2622a0126932b320806e030c1c085791e257516e0cdMarek Olšák 263c6499a741c99394e81d1d86ffd066f3d9749875cBrian /* 264c6499a741c99394e81d1d86ffd066f3d9749875cBrian * Extensions that are supported by all Gallium drivers: 265c6499a741c99394e81d1d86ffd066f3d9749875cBrian */ 266dd174ea2155ded567494448ffc5de7e022eabc5aBrian Paul ctx->Extensions.ARB_copy_buffer = GL_TRUE; 2675ed6627ceb82845a7b578419b3cd4168ad0106d3Marek Olšák ctx->Extensions.ARB_draw_elements_base_vertex = GL_TRUE; 2682a0126932b320806e030c1c085791e257516e0cdMarek Olšák ctx->Extensions.ARB_explicit_attrib_location = GL_TRUE; 26962c673b6ac65d27ed83acc92434874b45f75db5cLuca Barbieri ctx->Extensions.ARB_fragment_coord_conventions = GL_TRUE; 270cb0ea416bda30a7f7bced78e1edde806fbcb7577Brian Paul ctx->Extensions.ARB_fragment_program = GL_TRUE; 2712a0126932b320806e030c1c085791e257516e0cdMarek Olšák ctx->Extensions.ARB_fragment_shader = GL_TRUE; 27273e8a2738743035e1347571ba630747d2ec33a2dMarek Olšák ctx->Extensions.ARB_half_float_pixel = GL_TRUE; 2738d0f72e8f901e12841408b95963d43684fb6ce48Brian Paul ctx->Extensions.ARB_map_buffer_range = GL_TRUE; 27434a5d3b9f4740601708c82093e2114356d749e65Brian Paul ctx->Extensions.ARB_sampler_objects = GL_TRUE; 2752a0126932b320806e030c1c085791e257516e0cdMarek Olšák ctx->Extensions.ARB_shader_objects = GL_TRUE; 2762a0126932b320806e030c1c085791e257516e0cdMarek Olšák ctx->Extensions.ARB_shading_language_100 = GL_TRUE; 2776c4447e6a8ecfcfb094ab2ad8b7371dfa2b7d7bbBrian ctx->Extensions.ARB_texture_border_clamp = GL_TRUE; /* XXX temp */ 278c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_texture_cube_map = GL_TRUE; 279c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_texture_env_combine = GL_TRUE; 280c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_texture_env_crossbar = GL_TRUE; 281c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_texture_env_dot3 = GL_TRUE; 282e0a0496971dfd6c0f22b3870e6320128fa895d4dBrian Paul ctx->Extensions.ARB_texture_storage = GL_TRUE; 28332220c48ad8da199ed6a3d419183fd12bb4fc83eBrian Paul ctx->Extensions.ARB_vertex_array_object = GL_TRUE; 2842a795ad5227f7b311c2b32afb77ba11068733283Brian Paul ctx->Extensions.ARB_vertex_program = GL_TRUE; 2852a0126932b320806e030c1c085791e257516e0cdMarek Olšák ctx->Extensions.ARB_vertex_shader = GL_TRUE; 286a0ae2ca033ec2024da1e01d1c11c0437837c031bMarek Olšák ctx->Extensions.ARB_window_pos = GL_TRUE; 287c6499a741c99394e81d1d86ffd066f3d9749875cBrian 288c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_blend_color = GL_TRUE; 289c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_blend_func_separate = GL_TRUE; 290c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_blend_minmax = GL_TRUE; 2910df877a0ee68359d106ba84e3dd3b7c42ae20d5aBrian ctx->Extensions.EXT_framebuffer_blit = GL_TRUE; 292c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_framebuffer_object = GL_TRUE; 293cd232ae22f9590976d0fabd1eb0e75c4d58d96bfMarek Olšák ctx->Extensions.EXT_framebuffer_multisample = GL_TRUE; 294c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_fog_coord = GL_TRUE; 29550074ecd3a360d3479d789624a268847a644add8Marek Olšák ctx->Extensions.EXT_gpu_program_parameters = GL_TRUE; 296c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_pixel_buffer_object = GL_TRUE; 297c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_point_parameters = GL_TRUE; 298ded8eb25ef149cf7d2cde4169d36f528cf74d22dBrian Paul ctx->Extensions.EXT_provoking_vertex = GL_TRUE; 299c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_secondary_color = GL_TRUE; 3002a0126932b320806e030c1c085791e257516e0cdMarek Olšák ctx->Extensions.EXT_separate_shader_objects = GL_TRUE; 301c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_texture_env_dot3 = GL_TRUE; 3025b27b4ad37bd992d2d3a6fd9d407277113544f30Brian Paul ctx->Extensions.EXT_vertex_array_bgra = GL_TRUE; 303c6499a741c99394e81d1d86ffd066f3d9749875cBrian 304a892acef982bd17df81ae16131381a558208c112Brian Paul ctx->Extensions.APPLE_vertex_array_object = GL_TRUE; 305a892acef982bd17df81ae16131381a558208c112Brian Paul 30631a74a6df77daea9084c34b86f217f23a55e6b91Marek Olšák ctx->Extensions.ATI_texture_env_combine3 = GL_TRUE; 30731a74a6df77daea9084c34b86f217f23a55e6b91Marek Olšák 308a0ae2ca033ec2024da1e01d1c11c0437837c031bMarek Olšák ctx->Extensions.MESA_pack_invert = GL_TRUE; 309a0ae2ca033ec2024da1e01d1c11c0437837c031bMarek Olšák 310c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.NV_blend_square = GL_TRUE; 31164cebb6c8339f515ff8acb7c34fd0615b0e34a19Nicholas Miell ctx->Extensions.NV_fog_distance = GL_TRUE; 312c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.NV_texgen_reflection = GL_TRUE; 313d0b0df380ac6a9b421dc63531a180b3fd3017621Brian Paul ctx->Extensions.NV_texture_env_combine4 = GL_TRUE; 31440adcd611fe6939895c83e6ae945348437b3e7adMarek Olšák ctx->Extensions.NV_texture_rectangle = GL_TRUE; 315ed1c69710c5046a80a86a9e8b51a1cb15b1b92ebRoland Scheidegger#if 0 316ed1c69710c5046a80a86a9e8b51a1cb15b1b92ebRoland Scheidegger /* possibly could support the following two */ 317a0ae2ca033ec2024da1e01d1c11c0437837c031bMarek Olšák ctx->Extensions.NV_vertex_program = GL_TRUE; 318a0ae2ca033ec2024da1e01d1c11c0437837c031bMarek Olšák ctx->Extensions.NV_vertex_program1_1 = GL_TRUE; 319ed1c69710c5046a80a86a9e8b51a1cb15b1b92ebRoland Scheidegger#endif 320c6499a741c99394e81d1d86ffd066f3d9749875cBrian 3212002e4d06e2627241cd4af88f65b54d2101ef151Chia-I Wu#if FEATURE_OES_EGL_image 3222002e4d06e2627241cd4af88f65b54d2101ef151Chia-I Wu ctx->Extensions.OES_EGL_image = GL_TRUE; 3238cd0873d319cefce74164147c9855e81f051d1e1Chia-I Wu if (ctx->API != API_OPENGL) 3248cd0873d319cefce74164147c9855e81f051d1e1Chia-I Wu ctx->Extensions.OES_EGL_image_external = GL_TRUE; 3252002e4d06e2627241cd4af88f65b54d2101ef151Chia-I Wu#endif 32634064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu#if FEATURE_OES_draw_texture 32734064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu ctx->Extensions.OES_draw_texture = GL_TRUE; 32834064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu#endif 32934064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu 330171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák /* Figure out GLSL support. */ 331171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák glsl_feature_level = screen->get_param(screen, PIPE_CAP_GLSL_FEATURE_LEVEL); 332171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák 333171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák if (glsl_feature_level >= 130) { 334171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák ctx->Const.GLSLVersion = 130; 335171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák } else { 336171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák ctx->Const.GLSLVersion = 120; 337171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák } 338171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák 339171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák _mesa_override_glsl_version(st->ctx); 340171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák 341171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák if (ctx->Const.GLSLVersion >= 130) { 342171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák ctx->Const.NativeIntegers = GL_TRUE; 343171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák ctx->Const.MaxClipPlanes = 8; 344171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák 345171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák /* Extensions that only depend on GLSL 1.3. */ 346171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák ctx->Extensions.ARB_conservative_depth = GL_TRUE; 347171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák } else { 348171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák /* Optional integer support for GLSL 1.2. */ 349171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák if (screen->get_shader_param(screen, PIPE_SHADER_VERTEX, 350171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák PIPE_SHADER_CAP_INTEGERS) && 351171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT, 352171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák PIPE_SHADER_CAP_INTEGERS)) { 353171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák ctx->Const.NativeIntegers = GL_TRUE; 354171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák } 355171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák } 356171be755223d99f8cc5cc1bdaf8bd7b4caa04b4fMarek Olšák 357c6499a741c99394e81d1d86ffd066f3d9749875cBrian /* 358c6499a741c99394e81d1d86ffd066f3d9749875cBrian * Extensions that depend on the driver/hardware: 359c6499a741c99394e81d1d86ffd066f3d9749875cBrian */ 36042ebe3dfd9b0803913e0d932909ca5872d937c20Dave Airlie if (screen->get_param(screen, PIPE_CAP_TEXTURE_SWIZZLE) > 0) { 36142ebe3dfd9b0803913e0d932909ca5872d937c20Dave Airlie ctx->Extensions.EXT_texture_swizzle = GL_TRUE; 36242ebe3dfd9b0803913e0d932909ca5872d937c20Dave Airlie } 36342ebe3dfd9b0803913e0d932909ca5872d937c20Dave Airlie 36454cf63278ff28eb03503f649c46bf24437a1cbf8Patrice Mandin if (screen->get_param(screen, PIPE_CAP_BLEND_EQUATION_SEPARATE)) { 36554cf63278ff28eb03503f649c46bf24437a1cbf8Patrice Mandin ctx->Extensions.EXT_blend_equation_separate = GL_TRUE; 36654cf63278ff28eb03503f649c46bf24437a1cbf8Patrice Mandin } 36754cf63278ff28eb03503f649c46bf24437a1cbf8Patrice Mandin 368be66a8f43172327e3cdde27281e40377cacbb121Brian Paul if (screen->get_param(screen, PIPE_CAP_TEXTURE_MIRROR_CLAMP) > 0) { 369be66a8f43172327e3cdde27281e40377cacbb121Brian Paul ctx->Extensions.EXT_texture_mirror_clamp = GL_TRUE; 370116c863892bdb55d1f82c4569b27d42bd9826798Marek Olšák ctx->Extensions.ATI_texture_mirror_once = GL_TRUE; 371be66a8f43172327e3cdde27281e40377cacbb121Brian Paul } 372be66a8f43172327e3cdde27281e40377cacbb121Brian Paul 3738383f798b41df9a305e0a33afe8afa028d5d5dfbBrian if (screen->get_param(screen, PIPE_CAP_NPOT_TEXTURES)) { 374c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_texture_non_power_of_two = GL_TRUE; 375c6499a741c99394e81d1d86ffd066f3d9749875cBrian } 376c6499a741c99394e81d1d86ffd066f3d9749875cBrian 3778383f798b41df9a305e0a33afe8afa028d5d5dfbBrian if (screen->get_param(screen, PIPE_CAP_TWO_SIDED_STENCIL)) { 378c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ATI_separate_stencil = GL_TRUE; 3792b32c7dff51fa9853ba528744bd191400aa4b206Brian Paul ctx->Extensions.EXT_stencil_two_side = GL_TRUE; 380c6499a741c99394e81d1d86ffd066f3d9749875cBrian } 381c6499a741c99394e81d1d86ffd066f3d9749875cBrian 3828383f798b41df9a305e0a33afe8afa028d5d5dfbBrian if (screen->get_param(screen, PIPE_CAP_ANISOTROPIC_FILTER)) { 383c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.EXT_texture_filter_anisotropic = GL_TRUE; 384c6499a741c99394e81d1d86ffd066f3d9749875cBrian } 385c6499a741c99394e81d1d86ffd066f3d9749875cBrian 3868383f798b41df9a305e0a33afe8afa028d5d5dfbBrian if (screen->get_param(screen, PIPE_CAP_POINT_SPRITE)) { 387c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_point_sprite = GL_TRUE; 388ed6125fe9b2a806103cc58a60027aa2aba64dd2fBrian Paul /* GL_NV_point_sprite is not supported by gallium because we don't 389ed6125fe9b2a806103cc58a60027aa2aba64dd2fBrian Paul * support the GL_POINT_SPRITE_R_MODE_NV option. 390ed6125fe9b2a806103cc58a60027aa2aba64dd2fBrian Paul */ 391c6499a741c99394e81d1d86ffd066f3d9749875cBrian } 392c6499a741c99394e81d1d86ffd066f3d9749875cBrian 3938383f798b41df9a305e0a33afe8afa028d5d5dfbBrian if (screen->get_param(screen, PIPE_CAP_OCCLUSION_QUERY)) { 394c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_occlusion_query = GL_TRUE; 395ff7aa554a11863de2c4c0b4b6d1ec7b07c819739Dave Airlie ctx->Extensions.ARB_occlusion_query2 = GL_TRUE; 396c6499a741c99394e81d1d86ffd066f3d9749875cBrian } 397cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich if (screen->get_param(screen, PIPE_CAP_TIMER_QUERY)) { 39815245cbad47c6a96487b1b54d97f3a1506a9c203Brian Paul ctx->Extensions.EXT_timer_query = GL_TRUE; 399cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich } 400c6499a741c99394e81d1d86ffd066f3d9749875cBrian 4018383f798b41df9a305e0a33afe8afa028d5d5dfbBrian if (screen->get_param(screen, PIPE_CAP_TEXTURE_SHADOW_MAP)) { 402c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_depth_texture = GL_TRUE; 403aeffba454f8f5bc63bf97c1a0925cfef51af13c2Marek Olšák ctx->Extensions.ARB_fragment_program_shadow = GL_TRUE; 404c6499a741c99394e81d1d86ffd066f3d9749875cBrian ctx->Extensions.ARB_shadow = GL_TRUE; 4058ce6d6b97e6e90451e7372fe3d94e7e31b0ea569Brian ctx->Extensions.EXT_shadow_funcs = GL_TRUE; 406c6499a741c99394e81d1d86ffd066f3d9749875cBrian /*ctx->Extensions.ARB_shadow_ambient = GL_TRUE;*/ 407c6499a741c99394e81d1d86ffd066f3d9749875cBrian } 408c6499a741c99394e81d1d86ffd066f3d9749875cBrian 4096c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul /* GL_EXT_packed_depth_stencil requires both the ability to render to 4106c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul * a depth/stencil buffer and texture from depth/stencil source. 4116c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul */ 412866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie if (screen->is_format_supported(screen, PIPE_FORMAT_S8_UINT_Z24_UNORM, 413127328bfadaa5f080730fd41f404f1bc74f490d3Roland Scheidegger PIPE_TEXTURE_2D, 0, 414925fd2e1ddf9fbeb1d21a9b1223fe6fc13192dc7Marek Olšák PIPE_BIND_DEPTH_STENCIL | 415925fd2e1ddf9fbeb1d21a9b1223fe6fc13192dc7Marek Olšák PIPE_BIND_SAMPLER_VIEW) || 416925fd2e1ddf9fbeb1d21a9b1223fe6fc13192dc7Marek Olšák screen->is_format_supported(screen, PIPE_FORMAT_Z24_UNORM_S8_UINT, 417127328bfadaa5f080730fd41f404f1bc74f490d3Roland Scheidegger PIPE_TEXTURE_2D, 0, 418925fd2e1ddf9fbeb1d21a9b1223fe6fc13192dc7Marek Olšák PIPE_BIND_DEPTH_STENCIL | 419e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_SAMPLER_VIEW)) { 4206c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul ctx->Extensions.EXT_packed_depth_stencil = GL_TRUE; 421925fd2e1ddf9fbeb1d21a9b1223fe6fc13192dc7Marek Olšák ctx->Extensions.ARB_framebuffer_object = GL_TRUE; 4226c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul } 4236c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul 4248e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák /* float support - assume nothing exclusively supports 64-bit floats */ 4258e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák if (screen->is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_FLOAT, 4268e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák PIPE_TEXTURE_2D, 0, 4278e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák PIPE_BIND_SAMPLER_VIEW | 4288e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák PIPE_BIND_RENDER_TARGET) && 4298e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák screen->is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_FLOAT, 4308e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák PIPE_TEXTURE_2D, 0, 4318e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák PIPE_BIND_SAMPLER_VIEW | 4328e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák PIPE_BIND_RENDER_TARGET)) { 4338e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák ctx->Extensions.ARB_texture_float = GL_TRUE; 4348e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák } 4358e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák 4366b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul /* sRGB support */ 4377d1a79a04eb1266649956f6924f25071d85e20feJosé Fonseca if (screen->is_format_supported(screen, PIPE_FORMAT_A8B8G8R8_SRGB, 438127328bfadaa5f080730fd41f404f1bc74f490d3Roland Scheidegger PIPE_TEXTURE_2D, 0, 439e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_SAMPLER_VIEW) || 4407d1a79a04eb1266649956f6924f25071d85e20feJosé Fonseca screen->is_format_supported(screen, PIPE_FORMAT_B8G8R8A8_SRGB, 441127328bfadaa5f080730fd41f404f1bc74f490d3Roland Scheidegger PIPE_TEXTURE_2D, 0, 442e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_SAMPLER_VIEW)) { 44313540d38d9d4ac4f71533ce239f0d9a2b950e6dbBrian Paul ctx->Extensions.EXT_texture_sRGB = GL_TRUE; 444527bf67682db70091abf9c5395433bf9b8b98aabDave Airlie ctx->Extensions.EXT_texture_sRGB_decode = GL_TRUE; 44521b0996dfcbe62c55dd31cc316cd47f2b8531d2eDave Airlie if (screen->is_format_supported(screen, PIPE_FORMAT_A8B8G8R8_SRGB, 44621b0996dfcbe62c55dd31cc316cd47f2b8531d2eDave Airlie PIPE_TEXTURE_2D, 0, 447e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_RENDER_TARGET) || 44821b0996dfcbe62c55dd31cc316cd47f2b8531d2eDave Airlie screen->is_format_supported(screen, PIPE_FORMAT_B8G8R8A8_SRGB, 44921b0996dfcbe62c55dd31cc316cd47f2b8531d2eDave Airlie PIPE_TEXTURE_2D, 0, 450e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_RENDER_TARGET)) { 45121b0996dfcbe62c55dd31cc316cd47f2b8531d2eDave Airlie ctx->Extensions.EXT_framebuffer_sRGB = GL_TRUE; 45221b0996dfcbe62c55dd31cc316cd47f2b8531d2eDave Airlie } 45313540d38d9d4ac4f71533ce239f0d9a2b950e6dbBrian Paul } 4543600e7402c2a1824c8e5e2cc6ea189bcdeb4db6bBrian Paul 45571a079fb4ecbd17703ac9b5e6d5ef622fd7bc50fDave Airlie if (screen->is_format_supported(screen, PIPE_FORMAT_R8G8_UNORM, 45671a079fb4ecbd17703ac9b5e6d5ef622fd7bc50fDave Airlie PIPE_TEXTURE_2D, 0, 457e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_SAMPLER_VIEW)) { 45871a079fb4ecbd17703ac9b5e6d5ef622fd7bc50fDave Airlie ctx->Extensions.ARB_texture_rg = GL_TRUE; 45971a079fb4ecbd17703ac9b5e6d5ef622fd7bc50fDave Airlie } 46071a079fb4ecbd17703ac9b5e6d5ef622fd7bc50fDave Airlie 4616b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul /* s3tc support */ 4620cf04183633ad4f8140cdb1219235761c402a594Marek Olšák if (screen->is_format_supported(screen, PIPE_FORMAT_DXT1_RGB, 4630cf04183633ad4f8140cdb1219235761c402a594Marek Olšák PIPE_TEXTURE_2D, 0, 4640cf04183633ad4f8140cdb1219235761c402a594Marek Olšák PIPE_BIND_SAMPLER_VIEW) && 4650cf04183633ad4f8140cdb1219235761c402a594Marek Olšák screen->is_format_supported(screen, PIPE_FORMAT_DXT1_RGBA, 4660cf04183633ad4f8140cdb1219235761c402a594Marek Olšák PIPE_TEXTURE_2D, 0, 4670cf04183633ad4f8140cdb1219235761c402a594Marek Olšák PIPE_BIND_SAMPLER_VIEW) && 4680cf04183633ad4f8140cdb1219235761c402a594Marek Olšák screen->is_format_supported(screen, PIPE_FORMAT_DXT3_RGBA, 4690cf04183633ad4f8140cdb1219235761c402a594Marek Olšák PIPE_TEXTURE_2D, 0, 4700cf04183633ad4f8140cdb1219235761c402a594Marek Olšák PIPE_BIND_SAMPLER_VIEW) && 4710cf04183633ad4f8140cdb1219235761c402a594Marek Olšák screen->is_format_supported(screen, PIPE_FORMAT_DXT5_RGBA, 472127328bfadaa5f080730fd41f404f1bc74f490d3Roland Scheidegger PIPE_TEXTURE_2D, 0, 473e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_SAMPLER_VIEW) && 47495739f19ccc8d3915c437238ca057ddbecd193c6Bryan Cain (ctx->Mesa_DXTn || st_get_s3tc_override())) { 4753600e7402c2a1824c8e5e2cc6ea189bcdeb4db6bBrian Paul ctx->Extensions.EXT_texture_compression_s3tc = GL_TRUE; 476577a598dc905d435a31422bb6135ee9d4352f6b6José Fonseca ctx->Extensions.S3_s3tc = GL_TRUE; 4773600e7402c2a1824c8e5e2cc6ea189bcdeb4db6bBrian Paul } 4786b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul 47983ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie if (screen->is_format_supported(screen, PIPE_FORMAT_RGTC1_UNORM, 48083ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie PIPE_TEXTURE_2D, 0, 481e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_SAMPLER_VIEW) && 48283ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie screen->is_format_supported(screen, PIPE_FORMAT_RGTC1_SNORM, 48383ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie PIPE_TEXTURE_2D, 0, 484e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_SAMPLER_VIEW) && 48583ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie screen->is_format_supported(screen, PIPE_FORMAT_RGTC2_UNORM, 48683ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie PIPE_TEXTURE_2D, 0, 487e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_SAMPLER_VIEW) && 48883ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie screen->is_format_supported(screen, PIPE_FORMAT_RGTC2_SNORM, 48983ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie PIPE_TEXTURE_2D, 0, 490e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_SAMPLER_VIEW) 49183ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie ) { 49283ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie ctx->Extensions.ARB_texture_compression_rgtc = GL_TRUE; 49383ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie } 49483ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie 495384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák if (screen->is_format_supported(screen, PIPE_FORMAT_LATC1_UNORM, 496384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák PIPE_TEXTURE_2D, 0, 497e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_SAMPLER_VIEW) && 498384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák screen->is_format_supported(screen, PIPE_FORMAT_LATC1_SNORM, 499384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák PIPE_TEXTURE_2D, 0, 500e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_SAMPLER_VIEW) && 501384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák screen->is_format_supported(screen, PIPE_FORMAT_LATC2_UNORM, 502384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák PIPE_TEXTURE_2D, 0, 503e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_SAMPLER_VIEW) && 504384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák screen->is_format_supported(screen, PIPE_FORMAT_LATC2_SNORM, 505384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák PIPE_TEXTURE_2D, 0, 506e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_SAMPLER_VIEW)) { 507384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák ctx->Extensions.EXT_texture_compression_latc = GL_TRUE; 508384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák } 509384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák 510384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák if (screen->is_format_supported(screen, PIPE_FORMAT_LATC2_UNORM, 511384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák PIPE_TEXTURE_2D, 0, 512e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_SAMPLER_VIEW)) { 513384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák ctx->Extensions.ATI_texture_compression_3dc = GL_TRUE; 514384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák } 515384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák 516cde6c91fd52ab52a2989ab402239d9d10cedf16fChia-I Wu if (ctx->API != API_OPENGL) { 517cde6c91fd52ab52a2989ab402239d9d10cedf16fChia-I Wu if (screen->is_format_supported(screen, PIPE_FORMAT_ETC1_RGB8, 518cde6c91fd52ab52a2989ab402239d9d10cedf16fChia-I Wu PIPE_TEXTURE_2D, 0, 519cde6c91fd52ab52a2989ab402239d9d10cedf16fChia-I Wu PIPE_BIND_SAMPLER_VIEW)) { 520cde6c91fd52ab52a2989ab402239d9d10cedf16fChia-I Wu ctx->Extensions.OES_compressed_ETC1_RGB8_texture = GL_TRUE; 521cde6c91fd52ab52a2989ab402239d9d10cedf16fChia-I Wu } 522cde6c91fd52ab52a2989ab402239d9d10cedf16fChia-I Wu } 523cde6c91fd52ab52a2989ab402239d9d10cedf16fChia-I Wu 5242af1da15468d06d3ce9d89bcc706276ecc66f761Marek Olšák if (screen->is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_SNORM, 5252af1da15468d06d3ce9d89bcc706276ecc66f761Marek Olšák PIPE_TEXTURE_2D, 0, 5262af1da15468d06d3ce9d89bcc706276ecc66f761Marek Olšák PIPE_BIND_SAMPLER_VIEW)) { 5272af1da15468d06d3ce9d89bcc706276ecc66f761Marek Olšák ctx->Extensions.EXT_texture_snorm = GL_TRUE; 5282af1da15468d06d3ce9d89bcc706276ecc66f761Marek Olšák } 5292af1da15468d06d3ce9d89bcc706276ecc66f761Marek Olšák 5306b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul /* ycbcr support */ 5317d1a79a04eb1266649956f6924f25071d85e20feJosé Fonseca if (screen->is_format_supported(screen, PIPE_FORMAT_UYVY, 532127328bfadaa5f080730fd41f404f1bc74f490d3Roland Scheidegger PIPE_TEXTURE_2D, 0, 533e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_SAMPLER_VIEW) || 5347d1a79a04eb1266649956f6924f25071d85e20feJosé Fonseca screen->is_format_supported(screen, PIPE_FORMAT_YUYV, 535127328bfadaa5f080730fd41f404f1bc74f490d3Roland Scheidegger PIPE_TEXTURE_2D, 0, 536e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_SAMPLER_VIEW)) { 5371307eebfa07e3440554eb2871e5dbd94e98ed7a8Brian ctx->Extensions.MESA_ycbcr_texture = GL_TRUE; 5381307eebfa07e3440554eb2871e5dbd94e98ed7a8Brian } 5395c06c52116890342c3988325760a73fd84e2be30Brian Paul 5409b56a2cb626b254bcb7b7202e6babd1b5570208fBrian Paul /* GL_EXT_texture_array */ 541379429137238e79296b8222c0e13d7d961910633Marek Olšák if (screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS) > 1) { 5429b56a2cb626b254bcb7b7202e6babd1b5570208fBrian Paul ctx->Extensions.EXT_texture_array = GL_TRUE; 5439b56a2cb626b254bcb7b7202e6babd1b5570208fBrian Paul ctx->Extensions.MESA_texture_array = GL_TRUE; 5449b56a2cb626b254bcb7b7202e6babd1b5570208fBrian Paul } 5459b56a2cb626b254bcb7b7202e6babd1b5570208fBrian Paul 5463d13b081c72626acba6b9a25baec740c60dfafe1Marek Olšák if (screen->get_param(screen, PIPE_CAP_CONDITIONAL_RENDER)) { 547c9b558351847133dced0c9daaeb84d57d550afc9Brian Paul ctx->Extensions.NV_conditional_render = GL_TRUE; 548c9b558351847133dced0c9daaeb84d57d550afc9Brian Paul } 5495fae36147e1067ac8b1eb5bcade2f9b1dbf29aa4Roland Scheidegger 5505fae36147e1067ac8b1eb5bcade2f9b1dbf29aa4Roland Scheidegger if (screen->get_param(screen, PIPE_CAP_INDEP_BLEND_ENABLE)) { 5515fae36147e1067ac8b1eb5bcade2f9b1dbf29aa4Roland Scheidegger ctx->Extensions.EXT_draw_buffers2 = GL_TRUE; 5525fae36147e1067ac8b1eb5bcade2f9b1dbf29aa4Roland Scheidegger } 5535fae36147e1067ac8b1eb5bcade2f9b1dbf29aa4Roland Scheidegger 554afeebecd95b43860c8320f18b50863958de4f765Brian Paul if (screen->get_param(screen, PIPE_CAP_INDEP_BLEND_FUNC)) { 555afeebecd95b43860c8320f18b50863958de4f765Brian Paul ctx->Extensions.ARB_draw_buffers_blend = GL_TRUE; 556afeebecd95b43860c8320f18b50863958de4f765Brian Paul } 557afeebecd95b43860c8320f18b50863958de4f765Brian Paul 558f2e05acac931889e0820e1cc5d7ea810048a6b5fMarek Olšák /* GL_ARB_half_float_vertex */ 559f2e05acac931889e0820e1cc5d7ea810048a6b5fMarek Olšák if (screen->is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_FLOAT, 560f2e05acac931889e0820e1cc5d7ea810048a6b5fMarek Olšák PIPE_BUFFER, 0, 561e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák PIPE_BIND_VERTEX_BUFFER)) { 562f2e05acac931889e0820e1cc5d7ea810048a6b5fMarek Olšák ctx->Extensions.ARB_half_float_vertex = GL_TRUE; 563f2e05acac931889e0820e1cc5d7ea810048a6b5fMarek Olšák } 564f2e05acac931889e0820e1cc5d7ea810048a6b5fMarek Olšák 565fdff7e635b91988f9c926a91f89f47bc24e81aa1Marek Olšák if (screen->is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_FIXED, 566fdff7e635b91988f9c926a91f89f47bc24e81aa1Marek Olšák PIPE_BUFFER, 0, 567fdff7e635b91988f9c926a91f89f47bc24e81aa1Marek Olšák PIPE_BIND_VERTEX_BUFFER)) { 568fdff7e635b91988f9c926a91f89f47bc24e81aa1Marek Olšák ctx->Extensions.ARB_ES2_compatibility = GL_TRUE; 569fdff7e635b91988f9c926a91f89f47bc24e81aa1Marek Olšák } 570fdff7e635b91988f9c926a91f89f47bc24e81aa1Marek Olšák 571f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie if (screen->is_format_supported(screen, PIPE_FORMAT_R10G10B10A2_UNORM, 572f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie PIPE_BUFFER, 0, 573f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie PIPE_BIND_VERTEX_BUFFER) && 574f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie screen->is_format_supported(screen, PIPE_FORMAT_B10G10R10A2_UNORM, 575f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie PIPE_BUFFER, 0, 576f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie PIPE_BIND_VERTEX_BUFFER) && 577f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie screen->is_format_supported(screen, PIPE_FORMAT_R10G10B10A2_SNORM, 578f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie PIPE_BUFFER, 0, 579f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie PIPE_BIND_VERTEX_BUFFER) && 580f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie screen->is_format_supported(screen, PIPE_FORMAT_B10G10R10A2_SNORM, 581f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie PIPE_BUFFER, 0, 582f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie PIPE_BIND_VERTEX_BUFFER) && 583f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie screen->is_format_supported(screen, PIPE_FORMAT_R10G10B10A2_USCALED, 584f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie PIPE_BUFFER, 0, 585f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie PIPE_BIND_VERTEX_BUFFER) && 586f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie screen->is_format_supported(screen, PIPE_FORMAT_B10G10R10A2_USCALED, 587f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie PIPE_BUFFER, 0, 588f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie PIPE_BIND_VERTEX_BUFFER) && 589f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie screen->is_format_supported(screen, PIPE_FORMAT_R10G10B10A2_SSCALED, 590f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie PIPE_BUFFER, 0, 591f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie PIPE_BIND_VERTEX_BUFFER) && 592f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie screen->is_format_supported(screen, PIPE_FORMAT_B10G10R10A2_SSCALED, 593f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie PIPE_BUFFER, 0, 594f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie PIPE_BIND_VERTEX_BUFFER)) { 595f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie ctx->Extensions.ARB_vertex_type_2_10_10_10_rev = GL_TRUE; 596f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie } 597f154ac9cc251c9c5f527a09819a7fb9c5595267fDave Airlie 598d2633af696f2e4ff98f669061e4e222e8643312cMarek Olšák if (screen->get_shader_param(screen, PIPE_SHADER_GEOMETRY, 599d2633af696f2e4ff98f669061e4e222e8643312cMarek Olšák PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0) { 600bb7c2691d25b6aaea2663f85a5b6723edbf56938Brian Paul#if 0 /* XXX re-enable when GLSL compiler again supports geometry shaders */ 601da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin ctx->Extensions.ARB_geometry_shader4 = GL_TRUE; 602bb7c2691d25b6aaea2663f85a5b6723edbf56938Brian Paul#endif 603da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin } 604c304869ec02793f2d8bf363d1e3b37c3d121cca7Marek Olšák 60572bd2b603bc400371a92d34ab59dbb2d2ef7a123Jakob Bornecrantz ctx->Extensions.NV_primitive_restart = GL_TRUE; 60672bd2b603bc400371a92d34ab59dbb2d2ef7a123Jakob Bornecrantz if (!screen->get_param(screen, PIPE_CAP_PRIMITIVE_RESTART)) { 60772bd2b603bc400371a92d34ab59dbb2d2ef7a123Jakob Bornecrantz st->sw_primitive_restart = GL_TRUE; 608053875a8b193481a7b1c209d9adf9d3d85788884Brian Paul } 609053875a8b193481a7b1c209d9adf9d3d85788884Brian Paul 610dc4c821f0817a3db716f965692fb701079f66340Marek Olšák if (screen->get_param(screen, PIPE_CAP_DEPTH_CLIP_DISABLE)) { 611c304869ec02793f2d8bf363d1e3b37c3d121cca7Marek Olšák ctx->Extensions.ARB_depth_clamp = GL_TRUE; 612c304869ec02793f2d8bf363d1e3b37c3d121cca7Marek Olšák } 6135f612f5c006ff006ad1d2b90fbfdcdbee271771eDave Airlie 614bc1c8369384b5e16547c5bf9728aa78f8dfd66ccMarek Olšák if (screen->get_param(screen, PIPE_CAP_VERTEX_COLOR_UNCLAMPED)) { 61547e3896dfd89a26abbe4ca2469c2480f3982b204Luca Barbieri ctx->Extensions.ARB_color_buffer_float = GL_TRUE; 616bc1c8369384b5e16547c5bf9728aa78f8dfd66ccMarek Olšák 617bc1c8369384b5e16547c5bf9728aa78f8dfd66ccMarek Olšák if (!screen->get_param(screen, PIPE_CAP_VERTEX_COLOR_CLAMPED)) { 618bc1c8369384b5e16547c5bf9728aa78f8dfd66ccMarek Olšák st->clamp_vert_color_in_shader = TRUE; 619bc1c8369384b5e16547c5bf9728aa78f8dfd66ccMarek Olšák } 620bc1c8369384b5e16547c5bf9728aa78f8dfd66ccMarek Olšák 621bc1c8369384b5e16547c5bf9728aa78f8dfd66ccMarek Olšák if (!screen->get_param(screen, PIPE_CAP_FRAGMENT_COLOR_CLAMPED)) { 622bc1c8369384b5e16547c5bf9728aa78f8dfd66ccMarek Olšák st->clamp_frag_color_in_shader = TRUE; 623bc1c8369384b5e16547c5bf9728aa78f8dfd66ccMarek Olšák } 6248d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák } 62547e3896dfd89a26abbe4ca2469c2480f3982b204Luca Barbieri 6265f612f5c006ff006ad1d2b90fbfdcdbee271771eDave Airlie if (screen->get_param(screen, PIPE_CAP_SHADER_STENCIL_EXPORT)) { 6275f612f5c006ff006ad1d2b90fbfdcdbee271771eDave Airlie ctx->Extensions.ARB_shader_stencil_export = GL_TRUE; 6285f612f5c006ff006ad1d2b90fbfdcdbee271771eDave Airlie } 6299cd277684db5a266b451a719a963556664838d6eBrian Paul 63095c7881ac8240fa369e33db411bbd165d0f61948Marek Olšák if (screen->get_param(screen, PIPE_CAP_TGSI_INSTANCEID)) { 6319cd277684db5a266b451a719a963556664838d6eBrian Paul ctx->Extensions.ARB_draw_instanced = GL_TRUE; 63295c7881ac8240fa369e33db411bbd165d0f61948Marek Olšák } 63395c7881ac8240fa369e33db411bbd165d0f61948Marek Olšák if (screen->get_param(screen, PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR)) { 634a6860f0913d5d4be0c73da963e84e97fc926225fBrian Paul ctx->Extensions.ARB_instanced_arrays = GL_TRUE; 6359cd277684db5a266b451a719a963556664838d6eBrian Paul } 6365257a6dbc65d742e6d0fcf4278a4157b2f39fdf7Marek Olšák 6375257a6dbc65d742e6d0fcf4278a4157b2f39fdf7Marek Olšák if (screen->fence_finish) { 6385257a6dbc65d742e6d0fcf4278a4157b2f39fdf7Marek Olšák ctx->Extensions.ARB_sync = GL_TRUE; 6395257a6dbc65d742e6d0fcf4278a4157b2f39fdf7Marek Olšák } 640aea4ed41ed9b4d0442d1090ac1f01231a9859796Marek Olšák 641ba89086e79b22bd9578ea642846108de624c91e9Marek Olšák if (screen->get_param(screen, PIPE_CAP_TEXTURE_BARRIER)) { 642aea4ed41ed9b4d0442d1090ac1f01231a9859796Marek Olšák ctx->Extensions.NV_texture_barrier = GL_TRUE; 643aea4ed41ed9b4d0442d1090ac1f01231a9859796Marek Olšák } 6441da44f5923c5715d78a48dc300bbc6cbd3f3ea99Marek Olšák 6451da44f5923c5715d78a48dc300bbc6cbd3f3ea99Marek Olšák if (screen->is_format_supported(screen, PIPE_FORMAT_R9G9B9E5_FLOAT, 6461da44f5923c5715d78a48dc300bbc6cbd3f3ea99Marek Olšák PIPE_TEXTURE_2D, 0, 6471da44f5923c5715d78a48dc300bbc6cbd3f3ea99Marek Olšák PIPE_BIND_SAMPLER_VIEW)) { 6481da44f5923c5715d78a48dc300bbc6cbd3f3ea99Marek Olšák ctx->Extensions.EXT_texture_shared_exponent = GL_TRUE; 6491da44f5923c5715d78a48dc300bbc6cbd3f3ea99Marek Olšák } 650e62530a6c00da71c0f7bf1f4c425fe6c5b452df6Marek Olšák 651e62530a6c00da71c0f7bf1f4c425fe6c5b452df6Marek Olšák if (screen->is_format_supported(screen, PIPE_FORMAT_R11G11B10_FLOAT, 652e62530a6c00da71c0f7bf1f4c425fe6c5b452df6Marek Olšák PIPE_TEXTURE_2D, 0, 653e62530a6c00da71c0f7bf1f4c425fe6c5b452df6Marek Olšák PIPE_BIND_RENDER_TARGET | 654e62530a6c00da71c0f7bf1f4c425fe6c5b452df6Marek Olšák PIPE_BIND_SAMPLER_VIEW)) { 655e62530a6c00da71c0f7bf1f4c425fe6c5b452df6Marek Olšák ctx->Extensions.EXT_packed_float = GL_TRUE; 656e62530a6c00da71c0f7bf1f4c425fe6c5b452df6Marek Olšák } 657a5f0a11477ae90f47f3adb59a93c5576dc8c7325Marek Olšák 65857590e173b6f421b1015190aa3c0011ea55f31d8Christoph Bumiller /* Maximum sample count. */ 65957590e173b6f421b1015190aa3c0011ea55f31d8Christoph Bumiller for (i = 16; i > 0; --i) { 66057590e173b6f421b1015190aa3c0011ea55f31d8Christoph Bumiller if (screen->is_format_supported(screen, PIPE_FORMAT_B8G8R8A8_UNORM, 66157590e173b6f421b1015190aa3c0011ea55f31d8Christoph Bumiller PIPE_TEXTURE_2D, i, 66257590e173b6f421b1015190aa3c0011ea55f31d8Christoph Bumiller PIPE_BIND_RENDER_TARGET)) { 66357590e173b6f421b1015190aa3c0011ea55f31d8Christoph Bumiller ctx->Const.MaxSamples = i; 66457590e173b6f421b1015190aa3c0011ea55f31d8Christoph Bumiller break; 66557590e173b6f421b1015190aa3c0011ea55f31d8Christoph Bumiller } 66657590e173b6f421b1015190aa3c0011ea55f31d8Christoph Bumiller } 66757590e173b6f421b1015190aa3c0011ea55f31d8Christoph Bumiller 668a5f0a11477ae90f47f3adb59a93c5576dc8c7325Marek Olšák if (screen->get_param(screen, PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE)) { 669a5f0a11477ae90f47f3adb59a93c5576dc8c7325Marek Olšák ctx->Extensions.ARB_seamless_cube_map = GL_TRUE; 670a5f0a11477ae90f47f3adb59a93c5576dc8c7325Marek Olšák ctx->Extensions.AMD_seamless_cubemap_per_texture = GL_TRUE; 671a5f0a11477ae90f47f3adb59a93c5576dc8c7325Marek Olšák } 672a5f0a11477ae90f47f3adb59a93c5576dc8c7325Marek Olšák else if (screen->get_param(screen, PIPE_CAP_SEAMLESS_CUBE_MAP)) { 673a5f0a11477ae90f47f3adb59a93c5576dc8c7325Marek Olšák ctx->Extensions.ARB_seamless_cube_map = GL_TRUE; 674a5f0a11477ae90f47f3adb59a93c5576dc8c7325Marek Olšák } 675e28e3a774c0a32201d0f78a236db8c19f85b311cMarek Olšák 676e28e3a774c0a32201d0f78a236db8c19f85b311cMarek Olšák if (screen->get_param(screen, PIPE_CAP_SM3)) { 677e28e3a774c0a32201d0f78a236db8c19f85b311cMarek Olšák ctx->Extensions.ARB_shader_texture_lod = GL_TRUE; 678e28e3a774c0a32201d0f78a236db8c19f85b311cMarek Olšák } 679adea7ea0bc2683c0ee544e20074062df9ae5a72bMarek Olšák 680adea7ea0bc2683c0ee544e20074062df9ae5a72bMarek Olšák if (screen->is_format_supported(screen, PIPE_FORMAT_Z32_FLOAT, 681adea7ea0bc2683c0ee544e20074062df9ae5a72bMarek Olšák PIPE_TEXTURE_2D, 0, 682adea7ea0bc2683c0ee544e20074062df9ae5a72bMarek Olšák PIPE_BIND_DEPTH_STENCIL | 683adea7ea0bc2683c0ee544e20074062df9ae5a72bMarek Olšák PIPE_BIND_SAMPLER_VIEW) && 684866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie screen->is_format_supported(screen, PIPE_FORMAT_Z32_FLOAT_S8X24_UINT, 685adea7ea0bc2683c0ee544e20074062df9ae5a72bMarek Olšák PIPE_TEXTURE_2D, 0, 686adea7ea0bc2683c0ee544e20074062df9ae5a72bMarek Olšák PIPE_BIND_DEPTH_STENCIL | 687adea7ea0bc2683c0ee544e20074062df9ae5a72bMarek Olšák PIPE_BIND_SAMPLER_VIEW)) { 688adea7ea0bc2683c0ee544e20074062df9ae5a72bMarek Olšák ctx->Extensions.ARB_depth_buffer_float = GL_TRUE; 689adea7ea0bc2683c0ee544e20074062df9ae5a72bMarek Olšák } 6909f9c8592e692f1c682779f39675be0f3857cae9dDave Airlie 6919f9c8592e692f1c682779f39675be0f3857cae9dDave Airlie if (screen->is_format_supported(screen, PIPE_FORMAT_B10G10R10A2_UINT, 6929f9c8592e692f1c682779f39675be0f3857cae9dDave Airlie PIPE_TEXTURE_2D, 0, 6939f9c8592e692f1c682779f39675be0f3857cae9dDave Airlie PIPE_BIND_SAMPLER_VIEW)) 6949f9c8592e692f1c682779f39675be0f3857cae9dDave Airlie ctx->Extensions.ARB_texture_rgb10_a2ui = GL_TRUE; 6959f9c8592e692f1c682779f39675be0f3857cae9dDave Airlie 696c05fafa4a0fd93d4264c46578e23a83ecf2b481eMarek Olšák if (screen->get_param(screen, PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS) != 0) { 697c05fafa4a0fd93d4264c46578e23a83ecf2b481eMarek Olšák ctx->Extensions.EXT_transform_feedback = GL_TRUE; 698c05fafa4a0fd93d4264c46578e23a83ecf2b481eMarek Olšák 699c05fafa4a0fd93d4264c46578e23a83ecf2b481eMarek Olšák if (screen->get_param(screen, 700c05fafa4a0fd93d4264c46578e23a83ecf2b481eMarek Olšák PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME) != 0) { 701c05fafa4a0fd93d4264c46578e23a83ecf2b481eMarek Olšák ctx->Extensions.ARB_transform_feedback2 = GL_TRUE; 702c05fafa4a0fd93d4264c46578e23a83ecf2b481eMarek Olšák } 703c05fafa4a0fd93d4264c46578e23a83ecf2b481eMarek Olšák } 704c62e02000d11e29e70a1000d32cb08d9a450485fDave Airlie 705c62e02000d11e29e70a1000d32cb08d9a450485fDave Airlie if (ctx->Const.NativeIntegers && 706c62e02000d11e29e70a1000d32cb08d9a450485fDave Airlie screen->is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_UINT, PIPE_TEXTURE_2D, 0, 707c62e02000d11e29e70a1000d32cb08d9a450485fDave Airlie PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_RENDER_TARGET) && 708c62e02000d11e29e70a1000d32cb08d9a450485fDave Airlie screen->is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_SINT, PIPE_TEXTURE_2D, 0, 709c62e02000d11e29e70a1000d32cb08d9a450485fDave Airlie PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_RENDER_TARGET)) 710c62e02000d11e29e70a1000d32cb08d9a450485fDave Airlie ctx->Extensions.EXT_texture_integer = GL_TRUE; 711c62e02000d11e29e70a1000d32cb08d9a450485fDave Airlie 712c6499a741c99394e81d1d86ffd066f3d9749875cBrian} 713