st_extensions.c revision fdff7e635b91988f9c926a91f89f47bc24e81aa1
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"
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;
71c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul   gl_shader_type sh;
72e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian
73e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian   c->MaxTextureLevels
7454507125e735ffa595e252282eaabf38095c21e1Alan Hourihane      = _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS),
75e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian            MAX_TEXTURE_LEVELS);
76c6499a741c99394e81d1d86ffd066f3d9749875cBrian
77e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian   c->Max3DTextureLevels
7854507125e735ffa595e252282eaabf38095c21e1Alan Hourihane      = _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_3D_LEVELS),
79e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian            MAX_3D_TEXTURE_LEVELS);
80c6499a741c99394e81d1d86ffd066f3d9749875cBrian
81e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian   c->MaxCubeTextureLevels
8254507125e735ffa595e252282eaabf38095c21e1Alan Hourihane      = _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS),
83e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian            MAX_CUBE_TEXTURE_LEVELS);
84c6499a741c99394e81d1d86ffd066f3d9749875cBrian
85e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian   c->MaxTextureRectSize
8654507125e735ffa595e252282eaabf38095c21e1Alan Hourihane      = _min(1 << (c->MaxTextureLevels - 1), MAX_TEXTURE_RECT_SIZE);
87c6499a741c99394e81d1d86ffd066f3d9749875cBrian
88d917ad5dbd17f2399a5a3590fe6c06a64d683771Brian Paul   c->MaxTextureImageUnits
8954507125e735ffa595e252282eaabf38095c21e1Alan Hourihane      = _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS),
90e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian            MAX_TEXTURE_IMAGE_UNITS);
91c6499a741c99394e81d1d86ffd066f3d9749875cBrian
921d9360b67829a37b369e32c894183db1cecf827bBrian   c->MaxVertexTextureImageUnits
9315a3fdb63e0511860ee84c168b84dd0bcfca6094Brian Paul      = _min(screen->get_param(screen, PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS),
9415a3fdb63e0511860ee84c168b84dd0bcfca6094Brian Paul             MAX_VERTEX_TEXTURE_IMAGE_UNITS);
951d9360b67829a37b369e32c894183db1cecf827bBrian
96853d4807fe220b17cf5af5a76b24f2466238013bMichal Krol   c->MaxCombinedTextureImageUnits
97853d4807fe220b17cf5af5a76b24f2466238013bMichal Krol      = _min(screen->get_param(screen, PIPE_CAP_MAX_COMBINED_SAMPLERS),
98853d4807fe220b17cf5af5a76b24f2466238013bMichal Krol             MAX_COMBINED_TEXTURE_IMAGE_UNITS);
99853d4807fe220b17cf5af5a76b24f2466238013bMichal Krol
1006cbaa2226fa1237b9f314828fbbc1c8db6509de8Brian Paul   c->MaxTextureCoordUnits
1016cbaa2226fa1237b9f314828fbbc1c8db6509de8Brian Paul      = _min(c->MaxTextureImageUnits, MAX_TEXTURE_COORD_UNITS);
102d917ad5dbd17f2399a5a3590fe6c06a64d683771Brian Paul
1036cbaa2226fa1237b9f314828fbbc1c8db6509de8Brian Paul   c->MaxTextureUnits = _min(c->MaxTextureImageUnits, c->MaxTextureCoordUnits);
104d917ad5dbd17f2399a5a3590fe6c06a64d683771Brian Paul
105e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian   c->MaxDrawBuffers
10654507125e735ffa595e252282eaabf38095c21e1Alan Hourihane      = _clamp(screen->get_param(screen, PIPE_CAP_MAX_RENDER_TARGETS),
107e2feb80a90f3e9300c70a4a4eb3e966131f5c313Brian              1, MAX_DRAW_BUFFERS);
10844254b92480115e5c8a2d5cf78f99195c03701ebBrian
10944254b92480115e5c8a2d5cf78f99195c03701ebBrian   c->MaxLineWidth
11018ec140ef27b6488bea9d54e21b08b0a3afbcafeJosé Fonseca      = _maxf(1.0f, screen->get_paramf(screen, PIPE_CAP_MAX_LINE_WIDTH));
11144254b92480115e5c8a2d5cf78f99195c03701ebBrian   c->MaxLineWidthAA
11218ec140ef27b6488bea9d54e21b08b0a3afbcafeJosé Fonseca      = _maxf(1.0f, screen->get_paramf(screen, PIPE_CAP_MAX_LINE_WIDTH_AA));
11344254b92480115e5c8a2d5cf78f99195c03701ebBrian
11444254b92480115e5c8a2d5cf78f99195c03701ebBrian   c->MaxPointSize
11518ec140ef27b6488bea9d54e21b08b0a3afbcafeJosé Fonseca      = _maxf(1.0f, screen->get_paramf(screen, PIPE_CAP_MAX_POINT_WIDTH));
11644254b92480115e5c8a2d5cf78f99195c03701ebBrian   c->MaxPointSizeAA
11718ec140ef27b6488bea9d54e21b08b0a3afbcafeJosé Fonseca      = _maxf(1.0f, screen->get_paramf(screen, PIPE_CAP_MAX_POINT_WIDTH_AA));
118dd7be07c9685012b3e9fdfbaa13dc638abf6a9d1Roland Scheidegger   /* called after _mesa_create_context/_mesa_init_point, fix default user
119dd7be07c9685012b3e9fdfbaa13dc638abf6a9d1Roland Scheidegger    * settable max point size up
120dd7be07c9685012b3e9fdfbaa13dc638abf6a9d1Roland Scheidegger    */
121dd7be07c9685012b3e9fdfbaa13dc638abf6a9d1Roland Scheidegger   st->ctx->Point.MaxSize = MAX2(c->MaxPointSize, c->MaxPointSizeAA);
1222c326e72664e65166c68b027b26aaf373f3be36dRoland Scheidegger   /* these are not queryable. Note that GL basically mandates a 1.0 minimum
1232c326e72664e65166c68b027b26aaf373f3be36dRoland Scheidegger    * for non-aa sizes, but we can go down to 0.0 for aa points.
1242c326e72664e65166c68b027b26aaf373f3be36dRoland Scheidegger    */
1252c326e72664e65166c68b027b26aaf373f3be36dRoland Scheidegger   c->MinPointSize = 1.0f;
1262c326e72664e65166c68b027b26aaf373f3be36dRoland Scheidegger   c->MinPointSizeAA = 0.0f;
12744254b92480115e5c8a2d5cf78f99195c03701ebBrian
12844254b92480115e5c8a2d5cf78f99195c03701ebBrian   c->MaxTextureMaxAnisotropy
12918ec140ef27b6488bea9d54e21b08b0a3afbcafeJosé Fonseca      = _maxf(2.0f, screen->get_paramf(screen, PIPE_CAP_MAX_TEXTURE_ANISOTROPY));
13044254b92480115e5c8a2d5cf78f99195c03701ebBrian
13144254b92480115e5c8a2d5cf78f99195c03701ebBrian   c->MaxTextureLodBias
1328383f798b41df9a305e0a33afe8afa028d5d5dfbBrian      = screen->get_paramf(screen, PIPE_CAP_MAX_TEXTURE_LOD_BIAS);
1334650b35846e8e87fb0d74573a5f66452bb449b4bBrian
134b54225ccd6d3bc1b678e27c2f00ebddf5bf1046dBrian   c->MaxDrawBuffers
135b54225ccd6d3bc1b678e27c2f00ebddf5bf1046dBrian      = CLAMP(screen->get_param(screen, PIPE_CAP_MAX_RENDER_TARGETS),
136b54225ccd6d3bc1b678e27c2f00ebddf5bf1046dBrian              1, MAX_DRAW_BUFFERS);
13702edc8da36d6e01635bcfbb5073f0f718de96c37Brian Paul
138dd8f5c33f3a54212a0d7d072cd75b321f5abcda8Corbin Simpson   /* Quads always follow GL provoking rules. */
139dd8f5c33f3a54212a0d7d072cd75b321f5abcda8Corbin Simpson   c->QuadsFollowProvokingVertexConvention = GL_FALSE;
140dad962bafe8ffd7fdb35c28cfb8bbd5a297c8083José Fonseca
141c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul   for (sh = 0; sh < MESA_SHADER_TYPES; ++sh) {
142c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      struct gl_shader_compiler_options *options =
143c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul         &st->ctx->ShaderCompilerOptions[sh];
1449f7f7b3ff87e756a5d42eb4c6a953ec33e128f89Vinson Lee      struct gl_program_constants *pc;
145c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul
146c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      switch (sh) {
147a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_FRAGMENT:
148a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         pc = &c->FragmentProgram;
149a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         break;
150a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_VERTEX:
151a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         pc = &c->VertexProgram;
152a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         break;
153a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      case PIPE_SHADER_GEOMETRY:
154a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         pc = &c->GeometryProgram;
155a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri         break;
1569f7f7b3ff87e756a5d42eb4c6a953ec33e128f89Vinson Lee      default:
1579f7f7b3ff87e756a5d42eb4c6a953ec33e128f89Vinson Lee         assert(0);
1589f7f7b3ff87e756a5d42eb4c6a953ec33e128f89Vinson Lee         continue;
159a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri      }
160a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri
161c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      pc->MaxNativeInstructions    = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INSTRUCTIONS);
162c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      pc->MaxNativeAluInstructions = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS);
163c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      pc->MaxNativeTexInstructions = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS);
164c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      pc->MaxNativeTexIndirections = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS);
165c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      pc->MaxNativeAttribs         = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INPUTS);
166c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      pc->MaxNativeTemps           = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_TEMPS);
167c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      pc->MaxNativeAddressRegs     = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_ADDRS);
168c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      pc->MaxNativeParameters      = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_CONSTS);
169e7c74a7dfab789496761226fe62a08f2d9fea5c7Marek Olšák      pc->MaxUniformComponents     = 4 * MIN2(pc->MaxNativeParameters, MAX_UNIFORMS);
170f9cc6acbfa6f6f91b29a0601436d91a330fdce79Brian Paul      /* raise MaxParameters if native support is higher */
171f9cc6acbfa6f6f91b29a0601436d91a330fdce79Brian Paul      pc->MaxParameters            = MAX2(pc->MaxParameters, pc->MaxNativeParameters);
172a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri
173fbc7c9b7a9d9df979ea82136d2b74121e5d4346eLuca Barbieri      options->EmitNoNoise = TRUE;
174fbc7c9b7a9d9df979ea82136d2b74121e5d4346eLuca Barbieri
175b37459388b22fb6a831d45bc08e51cdb7b9c610cLuca Barbieri      /* TODO: make these more fine-grained if anyone needs it */
176c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      options->EmitNoIfs = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH);
177c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      options->EmitNoLoops = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH);
178c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      options->EmitNoFunctions = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_SUBROUTINES);
179c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      options->EmitNoMainReturn = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_SUBROUTINES);
180b37459388b22fb6a831d45bc08e51cdb7b9c610cLuca Barbieri
181c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      options->EmitNoCont = !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED);
182b37459388b22fb6a831d45bc08e51cdb7b9c610cLuca Barbieri
183c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      options->EmitNoIndirectInput = !screen->get_shader_param(screen, sh,
184cbfdf262ccf8b573f1fa4c0065a8eb1fb87d93daMarek Olšák                                        PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR);
185c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      options->EmitNoIndirectOutput = !screen->get_shader_param(screen, sh,
186cbfdf262ccf8b573f1fa4c0065a8eb1fb87d93daMarek Olšák                                        PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR);
187c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      options->EmitNoIndirectTemp = !screen->get_shader_param(screen, sh,
188cbfdf262ccf8b573f1fa4c0065a8eb1fb87d93daMarek Olšák                                        PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR);
189c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul      options->EmitNoIndirectUniform = !screen->get_shader_param(screen, sh,
190cbfdf262ccf8b573f1fa4c0065a8eb1fb87d93daMarek Olšák                                        PIPE_SHADER_CAP_INDIRECT_CONST_ADDR);
191cbfdf262ccf8b573f1fa4c0065a8eb1fb87d93daMarek Olšák
19248aa7725893ee75af10b8519e8a018e94334c7ccBrian Paul      if (options->EmitNoLoops)
193c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul         options->MaxUnrollIterations = MIN2(screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_MAX_INSTRUCTIONS), 65536);
194a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   }
195007bac83312b29061753e625edfd45ccab9ecc9cMarek Olšák
196007bac83312b29061753e625edfd45ccab9ecc9cMarek Olšák   /* PIPE_CAP_MAX_FS_INPUTS specifies the number of COLORn + GENERICn inputs
197007bac83312b29061753e625edfd45ccab9ecc9cMarek Olšák    * and is set in MaxNativeAttribs. It's always 2 colors + N generic
198007bac83312b29061753e625edfd45ccab9ecc9cMarek Olšák    * attributes. The GLSL compiler never uses COLORn for varyings, so we
199007bac83312b29061753e625edfd45ccab9ecc9cMarek Olšák    * subtract the 2 colors to get the maximum number of varyings (generic
200007bac83312b29061753e625edfd45ccab9ecc9cMarek Olšák    * attributes) supported by a driver. */
201a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   c->MaxVarying = screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT, PIPE_SHADER_CAP_MAX_INPUTS) - 2;
202e746a6bb9a6c9f797d1b40ed22b2f296f8fa5aacBrian Paul   c->MaxVarying = MIN2(c->MaxVarying, MAX_VARYING);
203e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul
204e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul   /* XXX we'll need a better query here someday */
205e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul   if (screen->get_param(screen, PIPE_CAP_GLSL)) {
206e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul      c->GLSLVersion = 120;
207e7087175f8a04f777403366fb34b58edd00f4d60Brian Paul   }
208c6499a741c99394e81d1d86ffd066f3d9749875cBrian}
209c6499a741c99394e81d1d86ffd066f3d9749875cBrian
210c6499a741c99394e81d1d86ffd066f3d9749875cBrian
211c6499a741c99394e81d1d86ffd066f3d9749875cBrian/**
2126b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul * Use pipe_screen::get_param() to query PIPE_CAP_ values to determine
2136b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul * which GL extensions are supported.
2146b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul * Quite a few extensions are always supported because they are standard
2156b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul * features or can be built on top of other gallium features.
2166b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul * Some fine tuning may still be needed.
217c6499a741c99394e81d1d86ffd066f3d9749875cBrian */
218c6499a741c99394e81d1d86ffd066f3d9749875cBrianvoid st_init_extensions(struct st_context *st)
219c6499a741c99394e81d1d86ffd066f3d9749875cBrian{
2208383f798b41df9a305e0a33afe8afa028d5d5dfbBrian   struct pipe_screen *screen = st->pipe->screen;
221f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg   struct gl_context *ctx = st->ctx;
222c6499a741c99394e81d1d86ffd066f3d9749875cBrian
223c6499a741c99394e81d1d86ffd066f3d9749875cBrian   /*
224c6499a741c99394e81d1d86ffd066f3d9749875cBrian    * Extensions that are supported by all Gallium drivers:
225c6499a741c99394e81d1d86ffd066f3d9749875cBrian    */
226dd174ea2155ded567494448ffc5de7e022eabc5aBrian Paul   ctx->Extensions.ARB_copy_buffer = GL_TRUE;
2275ed6627ceb82845a7b578419b3cd4168ad0106d3Marek Olšák   ctx->Extensions.ARB_draw_elements_base_vertex = GL_TRUE;
22862c673b6ac65d27ed83acc92434874b45f75db5cLuca Barbieri   ctx->Extensions.ARB_fragment_coord_conventions = GL_TRUE;
229cb0ea416bda30a7f7bced78e1edde806fbcb7577Brian Paul   ctx->Extensions.ARB_fragment_program = GL_TRUE;
23073e8a2738743035e1347571ba630747d2ec33a2dMarek Olšák   ctx->Extensions.ARB_half_float_pixel = GL_TRUE;
2318d0f72e8f901e12841408b95963d43684fb6ce48Brian Paul   ctx->Extensions.ARB_map_buffer_range = GL_TRUE;
2326b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul   ctx->Extensions.ARB_multisample = GL_TRUE;
23334a5d3b9f4740601708c82093e2114356d749e65Brian Paul   ctx->Extensions.ARB_sampler_objects = GL_TRUE;
2346c4447e6a8ecfcfb094ab2ad8b7371dfa2b7d7bbBrian   ctx->Extensions.ARB_texture_border_clamp = GL_TRUE; /* XXX temp */
2356b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul   ctx->Extensions.ARB_texture_compression = GL_TRUE;
236c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.ARB_texture_cube_map = GL_TRUE;
237c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.ARB_texture_env_combine = GL_TRUE;
238c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.ARB_texture_env_crossbar = GL_TRUE;
239c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.ARB_texture_env_dot3 = GL_TRUE;
24032220c48ad8da199ed6a3d419183fd12bb4fc83eBrian Paul   ctx->Extensions.ARB_vertex_array_object = GL_TRUE;
241c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.ARB_vertex_buffer_object = GL_TRUE;
2422a795ad5227f7b311c2b32afb77ba11068733283Brian Paul   ctx->Extensions.ARB_vertex_program = GL_TRUE;
243a0ae2ca033ec2024da1e01d1c11c0437837c031bMarek Olšák   ctx->Extensions.ARB_window_pos = GL_TRUE;
244c6499a741c99394e81d1d86ffd066f3d9749875cBrian
245c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.EXT_blend_color = GL_TRUE;
246c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.EXT_blend_func_separate = GL_TRUE;
247c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.EXT_blend_logic_op = GL_TRUE;
248c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.EXT_blend_minmax = GL_TRUE;
249c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.EXT_blend_subtract = GL_TRUE;
2500df877a0ee68359d106ba84e3dd3b7c42ae20d5aBrian   ctx->Extensions.EXT_framebuffer_blit = GL_TRUE;
251c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.EXT_framebuffer_object = GL_TRUE;
252cd232ae22f9590976d0fabd1eb0e75c4d58d96bfMarek Olšák   ctx->Extensions.EXT_framebuffer_multisample = GL_TRUE;
253c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.EXT_fog_coord = GL_TRUE;
25450074ecd3a360d3479d789624a268847a644add8Marek Olšák   ctx->Extensions.EXT_gpu_program_parameters = GL_TRUE;
255c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.EXT_multi_draw_arrays = GL_TRUE;
256c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.EXT_pixel_buffer_object = GL_TRUE;
257c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.EXT_point_parameters = GL_TRUE;
258ded8eb25ef149cf7d2cde4169d36f528cf74d22dBrian Paul   ctx->Extensions.EXT_provoking_vertex = GL_TRUE;
259c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.EXT_secondary_color = GL_TRUE;
260c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.EXT_stencil_wrap = GL_TRUE;
261c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.EXT_texture_env_add = GL_TRUE;
262c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.EXT_texture_env_combine = GL_TRUE;
263c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.EXT_texture_env_dot3 = GL_TRUE;
264c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.EXT_texture_lod_bias = GL_TRUE;
2655b27b4ad37bd992d2d3a6fd9d407277113544f30Brian Paul   ctx->Extensions.EXT_vertex_array_bgra = GL_TRUE;
266b0669837808dee576dd05c8c335ca78264dd8e80Benjamin Franzke   if (ctx->API == API_OPENGLES || ctx->API == API_OPENGLES2)
267b0669837808dee576dd05c8c335ca78264dd8e80Benjamin Franzke	   ctx->Extensions.EXT_texture_format_BGRA8888 = GL_TRUE;
268c6499a741c99394e81d1d86ffd066f3d9749875cBrian
269a892acef982bd17df81ae16131381a558208c112Brian Paul   ctx->Extensions.APPLE_vertex_array_object = GL_TRUE;
270a892acef982bd17df81ae16131381a558208c112Brian Paul
27131a74a6df77daea9084c34b86f217f23a55e6b91Marek Olšák   ctx->Extensions.ATI_texture_env_combine3 = GL_TRUE;
27231a74a6df77daea9084c34b86f217f23a55e6b91Marek Olšák
273a0ae2ca033ec2024da1e01d1c11c0437837c031bMarek Olšák   ctx->Extensions.MESA_pack_invert = GL_TRUE;
274a0ae2ca033ec2024da1e01d1c11c0437837c031bMarek Olšák
275c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.NV_blend_square = GL_TRUE;
276c6499a741c99394e81d1d86ffd066f3d9749875cBrian   ctx->Extensions.NV_texgen_reflection = GL_TRUE;
277d0b0df380ac6a9b421dc63531a180b3fd3017621Brian Paul   ctx->Extensions.NV_texture_env_combine4 = GL_TRUE;
27840adcd611fe6939895c83e6ae945348437b3e7adMarek Olšák   ctx->Extensions.NV_texture_rectangle = GL_TRUE;
279ed1c69710c5046a80a86a9e8b51a1cb15b1b92ebRoland Scheidegger#if 0
280ed1c69710c5046a80a86a9e8b51a1cb15b1b92ebRoland Scheidegger   /* possibly could support the following two */
281a0ae2ca033ec2024da1e01d1c11c0437837c031bMarek Olšák   ctx->Extensions.NV_vertex_program = GL_TRUE;
282a0ae2ca033ec2024da1e01d1c11c0437837c031bMarek Olšák   ctx->Extensions.NV_vertex_program1_1 = GL_TRUE;
283ed1c69710c5046a80a86a9e8b51a1cb15b1b92ebRoland Scheidegger#endif
284c6499a741c99394e81d1d86ffd066f3d9749875cBrian
2852002e4d06e2627241cd4af88f65b54d2101ef151Chia-I Wu#if FEATURE_OES_EGL_image
2862002e4d06e2627241cd4af88f65b54d2101ef151Chia-I Wu   ctx->Extensions.OES_EGL_image = GL_TRUE;
2872002e4d06e2627241cd4af88f65b54d2101ef151Chia-I Wu#endif
28834064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu#if FEATURE_OES_draw_texture
28934064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu   ctx->Extensions.OES_draw_texture = GL_TRUE;
29034064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu#endif
29134064756a5e2c8952c9de26eaebafddabd562540Chia-I Wu
2926b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul   ctx->Extensions.SGIS_generate_mipmap = GL_TRUE;
293c6499a741c99394e81d1d86ffd066f3d9749875cBrian
294c6499a741c99394e81d1d86ffd066f3d9749875cBrian   /*
295c6499a741c99394e81d1d86ffd066f3d9749875cBrian    * Extensions that depend on the driver/hardware:
296c6499a741c99394e81d1d86ffd066f3d9749875cBrian    */
2978383f798b41df9a305e0a33afe8afa028d5d5dfbBrian   if (screen->get_param(screen, PIPE_CAP_MAX_RENDER_TARGETS) > 0) {
298c6499a741c99394e81d1d86ffd066f3d9749875cBrian      ctx->Extensions.ARB_draw_buffers = GL_TRUE;
299c6499a741c99394e81d1d86ffd066f3d9749875cBrian   }
300c6499a741c99394e81d1d86ffd066f3d9749875cBrian
30142ebe3dfd9b0803913e0d932909ca5872d937c20Dave Airlie   if (screen->get_param(screen, PIPE_CAP_TEXTURE_SWIZZLE) > 0) {
30242ebe3dfd9b0803913e0d932909ca5872d937c20Dave Airlie      ctx->Extensions.EXT_texture_swizzle = GL_TRUE;
30342ebe3dfd9b0803913e0d932909ca5872d937c20Dave Airlie   }
30442ebe3dfd9b0803913e0d932909ca5872d937c20Dave Airlie
3058383f798b41df9a305e0a33afe8afa028d5d5dfbBrian   if (screen->get_param(screen, PIPE_CAP_GLSL)) {
306c6499a741c99394e81d1d86ffd066f3d9749875cBrian      ctx->Extensions.ARB_fragment_shader = GL_TRUE;
307c6499a741c99394e81d1d86ffd066f3d9749875cBrian      ctx->Extensions.ARB_vertex_shader = GL_TRUE;
308c6499a741c99394e81d1d86ffd066f3d9749875cBrian      ctx->Extensions.ARB_shader_objects = GL_TRUE;
309c6499a741c99394e81d1d86ffd066f3d9749875cBrian      ctx->Extensions.ARB_shading_language_100 = GL_TRUE;
310e40a58b7f8ef8079d216932aedf321f7afdf3f3fMarek Olšák      ctx->Extensions.ARB_explicit_attrib_location = GL_TRUE;
311e40a58b7f8ef8079d216932aedf321f7afdf3f3fMarek Olšák      ctx->Extensions.EXT_separate_shader_objects = GL_TRUE;
312c6499a741c99394e81d1d86ffd066f3d9749875cBrian   }
313c6499a741c99394e81d1d86ffd066f3d9749875cBrian
314be66a8f43172327e3cdde27281e40377cacbb121Brian Paul   if (screen->get_param(screen, PIPE_CAP_TEXTURE_MIRROR_REPEAT) > 0) {
315be66a8f43172327e3cdde27281e40377cacbb121Brian Paul      ctx->Extensions.ARB_texture_mirrored_repeat = GL_TRUE;
316be66a8f43172327e3cdde27281e40377cacbb121Brian Paul   }
317be66a8f43172327e3cdde27281e40377cacbb121Brian Paul
31854cf63278ff28eb03503f649c46bf24437a1cbf8Patrice Mandin   if (screen->get_param(screen, PIPE_CAP_BLEND_EQUATION_SEPARATE)) {
31954cf63278ff28eb03503f649c46bf24437a1cbf8Patrice Mandin      ctx->Extensions.EXT_blend_equation_separate = GL_TRUE;
32054cf63278ff28eb03503f649c46bf24437a1cbf8Patrice Mandin   }
32154cf63278ff28eb03503f649c46bf24437a1cbf8Patrice Mandin
322be66a8f43172327e3cdde27281e40377cacbb121Brian Paul   if (screen->get_param(screen, PIPE_CAP_TEXTURE_MIRROR_CLAMP) > 0) {
323be66a8f43172327e3cdde27281e40377cacbb121Brian Paul      ctx->Extensions.EXT_texture_mirror_clamp = GL_TRUE;
324116c863892bdb55d1f82c4569b27d42bd9826798Marek Olšák      ctx->Extensions.ATI_texture_mirror_once = GL_TRUE;
325be66a8f43172327e3cdde27281e40377cacbb121Brian Paul   }
326be66a8f43172327e3cdde27281e40377cacbb121Brian Paul
3278383f798b41df9a305e0a33afe8afa028d5d5dfbBrian   if (screen->get_param(screen, PIPE_CAP_NPOT_TEXTURES)) {
328c6499a741c99394e81d1d86ffd066f3d9749875cBrian      ctx->Extensions.ARB_texture_non_power_of_two = GL_TRUE;
329c6499a741c99394e81d1d86ffd066f3d9749875cBrian   }
330c6499a741c99394e81d1d86ffd066f3d9749875cBrian
3318383f798b41df9a305e0a33afe8afa028d5d5dfbBrian   if (screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS) > 1) {
332c6499a741c99394e81d1d86ffd066f3d9749875cBrian      ctx->Extensions.ARB_multitexture = GL_TRUE;
333c6499a741c99394e81d1d86ffd066f3d9749875cBrian   }
334c6499a741c99394e81d1d86ffd066f3d9749875cBrian
3358383f798b41df9a305e0a33afe8afa028d5d5dfbBrian   if (screen->get_param(screen, PIPE_CAP_TWO_SIDED_STENCIL)) {
336c6499a741c99394e81d1d86ffd066f3d9749875cBrian      ctx->Extensions.ATI_separate_stencil = GL_TRUE;
3372b32c7dff51fa9853ba528744bd191400aa4b206Brian Paul      ctx->Extensions.EXT_stencil_two_side = GL_TRUE;
338c6499a741c99394e81d1d86ffd066f3d9749875cBrian   }
339c6499a741c99394e81d1d86ffd066f3d9749875cBrian
3408383f798b41df9a305e0a33afe8afa028d5d5dfbBrian   if (screen->get_param(screen, PIPE_CAP_ANISOTROPIC_FILTER)) {
341c6499a741c99394e81d1d86ffd066f3d9749875cBrian      ctx->Extensions.EXT_texture_filter_anisotropic = GL_TRUE;
342c6499a741c99394e81d1d86ffd066f3d9749875cBrian   }
343c6499a741c99394e81d1d86ffd066f3d9749875cBrian
3448383f798b41df9a305e0a33afe8afa028d5d5dfbBrian   if (screen->get_param(screen, PIPE_CAP_POINT_SPRITE)) {
345c6499a741c99394e81d1d86ffd066f3d9749875cBrian      ctx->Extensions.ARB_point_sprite = GL_TRUE;
346ed6125fe9b2a806103cc58a60027aa2aba64dd2fBrian Paul      /* GL_NV_point_sprite is not supported by gallium because we don't
347ed6125fe9b2a806103cc58a60027aa2aba64dd2fBrian Paul       * support the GL_POINT_SPRITE_R_MODE_NV option.
348ed6125fe9b2a806103cc58a60027aa2aba64dd2fBrian Paul       */
349c6499a741c99394e81d1d86ffd066f3d9749875cBrian   }
350c6499a741c99394e81d1d86ffd066f3d9749875cBrian
3518383f798b41df9a305e0a33afe8afa028d5d5dfbBrian   if (screen->get_param(screen, PIPE_CAP_OCCLUSION_QUERY)) {
352c6499a741c99394e81d1d86ffd066f3d9749875cBrian      ctx->Extensions.ARB_occlusion_query = GL_TRUE;
353ff7aa554a11863de2c4c0b4b6d1ec7b07c819739Dave Airlie      ctx->Extensions.ARB_occlusion_query2 = GL_TRUE;
354c6499a741c99394e81d1d86ffd066f3d9749875cBrian   }
355cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich   if (screen->get_param(screen, PIPE_CAP_TIMER_QUERY)) {
356cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich     ctx->Extensions.EXT_timer_query = GL_TRUE;
357cdbd5f4203391ee7eb12911bc86fea34dc61c957Mathias Fröhlich   }
358c6499a741c99394e81d1d86ffd066f3d9749875cBrian
3598383f798b41df9a305e0a33afe8afa028d5d5dfbBrian   if (screen->get_param(screen, PIPE_CAP_TEXTURE_SHADOW_MAP)) {
360c6499a741c99394e81d1d86ffd066f3d9749875cBrian      ctx->Extensions.ARB_depth_texture = GL_TRUE;
361aeffba454f8f5bc63bf97c1a0925cfef51af13c2Marek Olšák      ctx->Extensions.ARB_fragment_program_shadow = GL_TRUE;
362c6499a741c99394e81d1d86ffd066f3d9749875cBrian      ctx->Extensions.ARB_shadow = GL_TRUE;
3638ce6d6b97e6e90451e7372fe3d94e7e31b0ea569Brian      ctx->Extensions.EXT_shadow_funcs = GL_TRUE;
364c6499a741c99394e81d1d86ffd066f3d9749875cBrian      /*ctx->Extensions.ARB_shadow_ambient = GL_TRUE;*/
365c6499a741c99394e81d1d86ffd066f3d9749875cBrian   }
366c6499a741c99394e81d1d86ffd066f3d9749875cBrian
3676c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul   /* GL_EXT_packed_depth_stencil requires both the ability to render to
3686c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul    * a depth/stencil buffer and texture from depth/stencil source.
3696c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul    */
3706fb364a1717858d8201b2caf234076ce5d4832acRoland Scheidegger   if (screen->is_format_supported(screen, PIPE_FORMAT_S8_USCALED_Z24_UNORM,
371127328bfadaa5f080730fd41f404f1bc74f490d3Roland Scheidegger                                   PIPE_TEXTURE_2D, 0,
372e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_DEPTH_STENCIL) &&
3736fb364a1717858d8201b2caf234076ce5d4832acRoland Scheidegger       screen->is_format_supported(screen, PIPE_FORMAT_S8_USCALED_Z24_UNORM,
374127328bfadaa5f080730fd41f404f1bc74f490d3Roland Scheidegger                                   PIPE_TEXTURE_2D, 0,
375e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW)) {
3766c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul      ctx->Extensions.EXT_packed_depth_stencil = GL_TRUE;
3776c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul   }
3786fb364a1717858d8201b2caf234076ce5d4832acRoland Scheidegger   else if (screen->is_format_supported(screen, PIPE_FORMAT_Z24_UNORM_S8_USCALED,
379127328bfadaa5f080730fd41f404f1bc74f490d3Roland Scheidegger                                        PIPE_TEXTURE_2D, 0,
380e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                        PIPE_BIND_DEPTH_STENCIL) &&
3816fb364a1717858d8201b2caf234076ce5d4832acRoland Scheidegger            screen->is_format_supported(screen, PIPE_FORMAT_Z24_UNORM_S8_USCALED,
382127328bfadaa5f080730fd41f404f1bc74f490d3Roland Scheidegger                                        PIPE_TEXTURE_2D, 0,
383e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                        PIPE_BIND_SAMPLER_VIEW)) {
3846c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul      ctx->Extensions.EXT_packed_depth_stencil = GL_TRUE;
3856c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul   }
3866c46b49d12b33b04546bee137f75ca7649e9a4efBrian Paul
3878e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák   /* float support - assume nothing exclusively supports 64-bit floats */
3888e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák   if (screen->is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_FLOAT,
3898e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák                                   PIPE_TEXTURE_2D, 0,
3908e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW |
3918e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák                                   PIPE_BIND_RENDER_TARGET) &&
3928e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák      screen->is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_FLOAT,
3938e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák                                   PIPE_TEXTURE_2D, 0,
3948e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW |
3958e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák                                   PIPE_BIND_RENDER_TARGET)) {
3968e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák      ctx->Extensions.ARB_texture_float = GL_TRUE;
3978e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák   }
3988e28d842d192e69ba8cae4f9754766a26ae8c739Marek Olšák
3996b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul   /* sRGB support */
4007d1a79a04eb1266649956f6924f25071d85e20feJosé Fonseca   if (screen->is_format_supported(screen, PIPE_FORMAT_A8B8G8R8_SRGB,
401127328bfadaa5f080730fd41f404f1bc74f490d3Roland Scheidegger                                   PIPE_TEXTURE_2D, 0,
402e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW) ||
4037d1a79a04eb1266649956f6924f25071d85e20feJosé Fonseca      screen->is_format_supported(screen, PIPE_FORMAT_B8G8R8A8_SRGB,
404127328bfadaa5f080730fd41f404f1bc74f490d3Roland Scheidegger                                   PIPE_TEXTURE_2D, 0,
405e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW)) {
40613540d38d9d4ac4f71533ce239f0d9a2b950e6dbBrian Paul      ctx->Extensions.EXT_texture_sRGB = GL_TRUE;
407527bf67682db70091abf9c5395433bf9b8b98aabDave Airlie      ctx->Extensions.EXT_texture_sRGB_decode = GL_TRUE;
40821b0996dfcbe62c55dd31cc316cd47f2b8531d2eDave Airlie      if (screen->is_format_supported(screen, PIPE_FORMAT_A8B8G8R8_SRGB,
40921b0996dfcbe62c55dd31cc316cd47f2b8531d2eDave Airlie                                   PIPE_TEXTURE_2D, 0,
410e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_RENDER_TARGET) ||
41121b0996dfcbe62c55dd31cc316cd47f2b8531d2eDave Airlie          screen->is_format_supported(screen, PIPE_FORMAT_B8G8R8A8_SRGB,
41221b0996dfcbe62c55dd31cc316cd47f2b8531d2eDave Airlie                                   PIPE_TEXTURE_2D, 0,
413e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_RENDER_TARGET)) {
41421b0996dfcbe62c55dd31cc316cd47f2b8531d2eDave Airlie         ctx->Extensions.EXT_framebuffer_sRGB = GL_TRUE;
41521b0996dfcbe62c55dd31cc316cd47f2b8531d2eDave Airlie         ctx->Const.sRGBCapable = GL_TRUE;
41621b0996dfcbe62c55dd31cc316cd47f2b8531d2eDave Airlie      }
41713540d38d9d4ac4f71533ce239f0d9a2b950e6dbBrian Paul   }
4183600e7402c2a1824c8e5e2cc6ea189bcdeb4db6bBrian Paul
41971a079fb4ecbd17703ac9b5e6d5ef622fd7bc50fDave Airlie   if (screen->is_format_supported(screen, PIPE_FORMAT_R8G8_UNORM,
42071a079fb4ecbd17703ac9b5e6d5ef622fd7bc50fDave Airlie                                   PIPE_TEXTURE_2D, 0,
421e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW)) {
42271a079fb4ecbd17703ac9b5e6d5ef622fd7bc50fDave Airlie      ctx->Extensions.ARB_texture_rg = GL_TRUE;
42371a079fb4ecbd17703ac9b5e6d5ef622fd7bc50fDave Airlie   }
42471a079fb4ecbd17703ac9b5e6d5ef622fd7bc50fDave Airlie
4256b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul   /* s3tc support */
4263600e7402c2a1824c8e5e2cc6ea189bcdeb4db6bBrian Paul   if (screen->is_format_supported(screen, PIPE_FORMAT_DXT5_RGBA,
427127328bfadaa5f080730fd41f404f1bc74f490d3Roland Scheidegger                                   PIPE_TEXTURE_2D, 0,
428e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW) &&
4292a2b156ea5ec40110b9e66ba9ccc7d6f3a314723José Fonseca       ctx->Mesa_DXTn) {
4303600e7402c2a1824c8e5e2cc6ea189bcdeb4db6bBrian Paul      ctx->Extensions.EXT_texture_compression_s3tc = GL_TRUE;
431577a598dc905d435a31422bb6135ee9d4352f6b6José Fonseca      ctx->Extensions.S3_s3tc = GL_TRUE;
4323600e7402c2a1824c8e5e2cc6ea189bcdeb4db6bBrian Paul   }
4336b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul
43483ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie   if (screen->is_format_supported(screen, PIPE_FORMAT_RGTC1_UNORM,
43583ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie                                   PIPE_TEXTURE_2D, 0,
436e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW) &&
43783ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie       screen->is_format_supported(screen, PIPE_FORMAT_RGTC1_SNORM,
43883ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie				   PIPE_TEXTURE_2D, 0,
439e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW) &&
44083ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie       screen->is_format_supported(screen, PIPE_FORMAT_RGTC2_UNORM,
44183ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie                                   PIPE_TEXTURE_2D, 0,
442e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW) &&
44383ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie       screen->is_format_supported(screen, PIPE_FORMAT_RGTC2_SNORM,
44483ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie                                   PIPE_TEXTURE_2D, 0,
445e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW)
44683ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie       ) {
44783ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie     ctx->Extensions.ARB_texture_compression_rgtc = GL_TRUE;
44883ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie   }
44983ebc01c1dd1cd8a960a2a61fc7203f8312644d5Dave Airlie
450384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák   if (screen->is_format_supported(screen, PIPE_FORMAT_LATC1_UNORM,
451384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák                                   PIPE_TEXTURE_2D, 0,
452e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW) &&
453384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák       screen->is_format_supported(screen, PIPE_FORMAT_LATC1_SNORM,
454384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák                                   PIPE_TEXTURE_2D, 0,
455e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW) &&
456384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák       screen->is_format_supported(screen, PIPE_FORMAT_LATC2_UNORM,
457384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák                                   PIPE_TEXTURE_2D, 0,
458e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW) &&
459384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák       screen->is_format_supported(screen, PIPE_FORMAT_LATC2_SNORM,
460384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák                                   PIPE_TEXTURE_2D, 0,
461e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW)) {
462384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák      ctx->Extensions.EXT_texture_compression_latc = GL_TRUE;
463384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák   }
464384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák
465384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák   if (screen->is_format_supported(screen, PIPE_FORMAT_LATC2_UNORM,
466384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák                                   PIPE_TEXTURE_2D, 0,
467e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW)) {
468384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák      ctx->Extensions.ATI_texture_compression_3dc = GL_TRUE;
469384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák   }
470384845f335d1fbe6766673b988b23a003e104e7bMarek Olšák
4712af1da15468d06d3ce9d89bcc706276ecc66f761Marek Olšák   if (screen->is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_SNORM,
4722af1da15468d06d3ce9d89bcc706276ecc66f761Marek Olšák                                   PIPE_TEXTURE_2D, 0,
4732af1da15468d06d3ce9d89bcc706276ecc66f761Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW)) {
4742af1da15468d06d3ce9d89bcc706276ecc66f761Marek Olšák      ctx->Extensions.EXT_texture_snorm = GL_TRUE;
4752af1da15468d06d3ce9d89bcc706276ecc66f761Marek Olšák   }
4762af1da15468d06d3ce9d89bcc706276ecc66f761Marek Olšák
4776b1b8e4ca1c911105c42154c9e794262d74652e5Brian Paul   /* ycbcr support */
4787d1a79a04eb1266649956f6924f25071d85e20feJosé Fonseca   if (screen->is_format_supported(screen, PIPE_FORMAT_UYVY,
479127328bfadaa5f080730fd41f404f1bc74f490d3Roland Scheidegger                                   PIPE_TEXTURE_2D, 0,
480e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW) ||
4817d1a79a04eb1266649956f6924f25071d85e20feJosé Fonseca       screen->is_format_supported(screen, PIPE_FORMAT_YUYV,
482127328bfadaa5f080730fd41f404f1bc74f490d3Roland Scheidegger                                   PIPE_TEXTURE_2D, 0,
483e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW)) {
4841307eebfa07e3440554eb2871e5dbd94e98ed7a8Brian      ctx->Extensions.MESA_ycbcr_texture = GL_TRUE;
4851307eebfa07e3440554eb2871e5dbd94e98ed7a8Brian   }
4865c06c52116890342c3988325760a73fd84e2be30Brian Paul
4879b56a2cb626b254bcb7b7202e6babd1b5570208fBrian Paul   /* GL_EXT_texture_array */
4889b56a2cb626b254bcb7b7202e6babd1b5570208fBrian Paul   if (screen->get_param(screen, PIPE_CAP_ARRAY_TEXTURES)) {
4899b56a2cb626b254bcb7b7202e6babd1b5570208fBrian Paul      ctx->Extensions.EXT_texture_array = GL_TRUE;
4909b56a2cb626b254bcb7b7202e6babd1b5570208fBrian Paul      ctx->Extensions.MESA_texture_array = GL_TRUE;
4919b56a2cb626b254bcb7b7202e6babd1b5570208fBrian Paul   }
4929b56a2cb626b254bcb7b7202e6babd1b5570208fBrian Paul
4935c06c52116890342c3988325760a73fd84e2be30Brian Paul   /* GL_ARB_framebuffer_object */
4945c06c52116890342c3988325760a73fd84e2be30Brian Paul   if (ctx->Extensions.EXT_packed_depth_stencil) {
4955c06c52116890342c3988325760a73fd84e2be30Brian Paul      /* we support always support GL_EXT_framebuffer_blit */
4965c06c52116890342c3988325760a73fd84e2be30Brian Paul      ctx->Extensions.ARB_framebuffer_object = GL_TRUE;
4975c06c52116890342c3988325760a73fd84e2be30Brian Paul   }
498c9b558351847133dced0c9daaeb84d57d550afc9Brian Paul
499c9b558351847133dced0c9daaeb84d57d550afc9Brian Paul   if (st->pipe->render_condition) {
500c9b558351847133dced0c9daaeb84d57d550afc9Brian Paul      ctx->Extensions.NV_conditional_render = GL_TRUE;
501c9b558351847133dced0c9daaeb84d57d550afc9Brian Paul   }
5025fae36147e1067ac8b1eb5bcade2f9b1dbf29aa4Roland Scheidegger
5035fae36147e1067ac8b1eb5bcade2f9b1dbf29aa4Roland Scheidegger   if (screen->get_param(screen, PIPE_CAP_INDEP_BLEND_ENABLE)) {
5045fae36147e1067ac8b1eb5bcade2f9b1dbf29aa4Roland Scheidegger      ctx->Extensions.EXT_draw_buffers2 = GL_TRUE;
5055fae36147e1067ac8b1eb5bcade2f9b1dbf29aa4Roland Scheidegger   }
5065fae36147e1067ac8b1eb5bcade2f9b1dbf29aa4Roland Scheidegger
507afeebecd95b43860c8320f18b50863958de4f765Brian Paul   if (screen->get_param(screen, PIPE_CAP_INDEP_BLEND_FUNC)) {
508afeebecd95b43860c8320f18b50863958de4f765Brian Paul      ctx->Extensions.ARB_draw_buffers_blend = GL_TRUE;
509afeebecd95b43860c8320f18b50863958de4f765Brian Paul   }
510afeebecd95b43860c8320f18b50863958de4f765Brian Paul
511f2e05acac931889e0820e1cc5d7ea810048a6b5fMarek Olšák   /* GL_ARB_half_float_vertex */
512f2e05acac931889e0820e1cc5d7ea810048a6b5fMarek Olšák   if (screen->is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_FLOAT,
513f2e05acac931889e0820e1cc5d7ea810048a6b5fMarek Olšák                                   PIPE_BUFFER, 0,
514e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák                                   PIPE_BIND_VERTEX_BUFFER)) {
515f2e05acac931889e0820e1cc5d7ea810048a6b5fMarek Olšák      ctx->Extensions.ARB_half_float_vertex = GL_TRUE;
516f2e05acac931889e0820e1cc5d7ea810048a6b5fMarek Olšák   }
517f2e05acac931889e0820e1cc5d7ea810048a6b5fMarek Olšák
518fdff7e635b91988f9c926a91f89f47bc24e81aa1Marek Olšák   if (screen->is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_FIXED,
519fdff7e635b91988f9c926a91f89f47bc24e81aa1Marek Olšák                                   PIPE_BUFFER, 0,
520fdff7e635b91988f9c926a91f89f47bc24e81aa1Marek Olšák                                   PIPE_BIND_VERTEX_BUFFER)) {
521fdff7e635b91988f9c926a91f89f47bc24e81aa1Marek Olšák      ctx->Extensions.ARB_ES2_compatibility = GL_TRUE;
522fdff7e635b91988f9c926a91f89f47bc24e81aa1Marek Olšák   }
523fdff7e635b91988f9c926a91f89f47bc24e81aa1Marek Olšák
524a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri   if (screen->get_shader_param(screen, PIPE_SHADER_GEOMETRY, PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0) {
525bb7c2691d25b6aaea2663f85a5b6723edbf56938Brian Paul#if 0 /* XXX re-enable when GLSL compiler again supports geometry shaders */
526da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin      ctx->Extensions.ARB_geometry_shader4 = GL_TRUE;
527bb7c2691d25b6aaea2663f85a5b6723edbf56938Brian Paul#endif
528da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin   }
529c304869ec02793f2d8bf363d1e3b37c3d121cca7Marek Olšák
530053875a8b193481a7b1c209d9adf9d3d85788884Brian Paul   if (screen->get_param(screen, PIPE_CAP_PRIMITIVE_RESTART)) {
531053875a8b193481a7b1c209d9adf9d3d85788884Brian Paul      ctx->Extensions.NV_primitive_restart = GL_TRUE;
532053875a8b193481a7b1c209d9adf9d3d85788884Brian Paul   }
533053875a8b193481a7b1c209d9adf9d3d85788884Brian Paul
534c304869ec02793f2d8bf363d1e3b37c3d121cca7Marek Olšák   if (screen->get_param(screen, PIPE_CAP_DEPTH_CLAMP)) {
535c304869ec02793f2d8bf363d1e3b37c3d121cca7Marek Olšák      ctx->Extensions.ARB_depth_clamp = GL_TRUE;
536c304869ec02793f2d8bf363d1e3b37c3d121cca7Marek Olšák   }
5375f612f5c006ff006ad1d2b90fbfdcdbee271771eDave Airlie
5388d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák   /* This extension does not actually require support of floating point
5398d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák    * render targets, just clamping controls.
5408d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák    * Advertise this extension if either fragment color clamping is supported
5418d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák    * or no render targets having color values outside of the range [0, 1]
5428d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák    * are supported, in which case the fragment color clamping has no effect
5438d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák    * on rendering.
54447e3896dfd89a26abbe4ca2469c2480f3982b204Luca Barbieri    */
5458d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák   if (screen->get_param(screen, PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL) ||
5468d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák       (!screen->is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_SNORM,
5478d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák                                     PIPE_TEXTURE_2D, 0,
5488d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák                                     PIPE_BIND_RENDER_TARGET) &&
5498d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák        !screen->is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_SNORM,
55048aa7725893ee75af10b8519e8a018e94334c7ccBrian Paul                                     PIPE_TEXTURE_2D, 0,
55148aa7725893ee75af10b8519e8a018e94334c7ccBrian Paul                                     PIPE_BIND_RENDER_TARGET) &&
5528d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák        !screen->is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_FLOAT,
5538d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák                                     PIPE_TEXTURE_2D, 0,
5548d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák                                     PIPE_BIND_RENDER_TARGET) &&
5558d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák        !screen->is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_FLOAT,
5568d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák                                     PIPE_TEXTURE_2D, 0,
5578d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák                                     PIPE_BIND_RENDER_TARGET) &&
5588d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák        !screen->is_format_supported(screen, PIPE_FORMAT_R11G11B10_FLOAT,
5598d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák                                     PIPE_TEXTURE_2D, 0,
5608d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák                                     PIPE_BIND_RENDER_TARGET) &&
5618d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák        !screen->is_format_supported(screen, PIPE_FORMAT_R9G9B9E5_FLOAT,
5628d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák                                     PIPE_TEXTURE_2D, 0,
5638d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák                                     PIPE_BIND_RENDER_TARGET))) {
56447e3896dfd89a26abbe4ca2469c2480f3982b204Luca Barbieri      ctx->Extensions.ARB_color_buffer_float = GL_TRUE;
5658d4ec87d7f987b3852dafa6802815bb9a3ec7ad4Marek Olšák   }
56647e3896dfd89a26abbe4ca2469c2480f3982b204Luca Barbieri
5675f612f5c006ff006ad1d2b90fbfdcdbee271771eDave Airlie   if (screen->get_param(screen, PIPE_CAP_SHADER_STENCIL_EXPORT)) {
5685f612f5c006ff006ad1d2b90fbfdcdbee271771eDave Airlie      ctx->Extensions.ARB_shader_stencil_export = GL_TRUE;
5695f612f5c006ff006ad1d2b90fbfdcdbee271771eDave Airlie   }
5709cd277684db5a266b451a719a963556664838d6eBrian Paul
57195c7881ac8240fa369e33db411bbd165d0f61948Marek Olšák   if (screen->get_param(screen, PIPE_CAP_TGSI_INSTANCEID)) {
5729cd277684db5a266b451a719a963556664838d6eBrian Paul      ctx->Extensions.ARB_draw_instanced = GL_TRUE;
57395c7881ac8240fa369e33db411bbd165d0f61948Marek Olšák   }
57495c7881ac8240fa369e33db411bbd165d0f61948Marek Olšák   if (screen->get_param(screen, PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR)) {
575a6860f0913d5d4be0c73da963e84e97fc926225fBrian Paul      ctx->Extensions.ARB_instanced_arrays = GL_TRUE;
5769cd277684db5a266b451a719a963556664838d6eBrian Paul   }
5775257a6dbc65d742e6d0fcf4278a4157b2f39fdf7Marek Olšák
5785257a6dbc65d742e6d0fcf4278a4157b2f39fdf7Marek Olšák   if (screen->fence_finish) {
5795257a6dbc65d742e6d0fcf4278a4157b2f39fdf7Marek Olšák      ctx->Extensions.ARB_sync = GL_TRUE;
5805257a6dbc65d742e6d0fcf4278a4157b2f39fdf7Marek Olšák   }
581aea4ed41ed9b4d0442d1090ac1f01231a9859796Marek Olšák
582aea4ed41ed9b4d0442d1090ac1f01231a9859796Marek Olšák   if (st->pipe->texture_barrier) {
583aea4ed41ed9b4d0442d1090ac1f01231a9859796Marek Olšák      ctx->Extensions.NV_texture_barrier = GL_TRUE;
584aea4ed41ed9b4d0442d1090ac1f01231a9859796Marek Olšák   }
5851da44f5923c5715d78a48dc300bbc6cbd3f3ea99Marek Olšák
5861da44f5923c5715d78a48dc300bbc6cbd3f3ea99Marek Olšák   if (screen->is_format_supported(screen, PIPE_FORMAT_R9G9B9E5_FLOAT,
5871da44f5923c5715d78a48dc300bbc6cbd3f3ea99Marek Olšák                                   PIPE_TEXTURE_2D, 0,
5881da44f5923c5715d78a48dc300bbc6cbd3f3ea99Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW)) {
5891da44f5923c5715d78a48dc300bbc6cbd3f3ea99Marek Olšák      ctx->Extensions.EXT_texture_shared_exponent = GL_TRUE;
5901da44f5923c5715d78a48dc300bbc6cbd3f3ea99Marek Olšák   }
591e62530a6c00da71c0f7bf1f4c425fe6c5b452df6Marek Olšák
592e62530a6c00da71c0f7bf1f4c425fe6c5b452df6Marek Olšák   if (screen->is_format_supported(screen, PIPE_FORMAT_R11G11B10_FLOAT,
593e62530a6c00da71c0f7bf1f4c425fe6c5b452df6Marek Olšák                                   PIPE_TEXTURE_2D, 0,
594e62530a6c00da71c0f7bf1f4c425fe6c5b452df6Marek Olšák                                   PIPE_BIND_RENDER_TARGET |
595e62530a6c00da71c0f7bf1f4c425fe6c5b452df6Marek Olšák                                   PIPE_BIND_SAMPLER_VIEW)) {
596e62530a6c00da71c0f7bf1f4c425fe6c5b452df6Marek Olšák      ctx->Extensions.EXT_packed_float = GL_TRUE;
597e62530a6c00da71c0f7bf1f4c425fe6c5b452df6Marek Olšák   }
598c6499a741c99394e81d1d86ffd066f3d9749875cBrian}
599