+ ctx->Const.ForceGLSLExtensionsWarn = 1;
+
+ if (st->options.disable_glsl_line_continuations)
+ ctx->Const.DisableGLSLLineContinuations = 1;
+
+ ctx->Const.MinMapBufferAlignment =
+ screen->get_param(screen, PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT);
+
+ if (screen->get_param(screen, PIPE_CAP_TEXTURE_BUFFER_OBJECTS)) {
+ ctx->Extensions.ARB_texture_buffer_object = GL_TRUE;
+
+ ctx->Const.MaxTextureBufferSize =
+ _min(screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE),
+ (1u << 31) - 1);
+ ctx->Const.TextureBufferOffsetAlignment =
+ screen->get_param(screen, PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT);
+
+ if (ctx->Const.TextureBufferOffsetAlignment)
+ ctx->Extensions.ARB_texture_buffer_range = GL_TRUE;
+
+ init_format_extensions(st, tbo_rgb32, Elements(tbo_rgb32),
+ PIPE_BUFFER, PIPE_BIND_SAMPLER_VIEW);
+ }
+
+ if (screen->get_param(screen, PIPE_CAP_MIXED_FRAMEBUFFER_SIZES)) {
+ ctx->Extensions.ARB_framebuffer_object = GL_TRUE;
+ }
+
+ /* Unpacking a varying in the fragment shader costs 1 texture indirection.
+ * If the number of available texture indirections is very limited, then we
+ * prefer to disable varying packing rather than run the risk of varying
+ * packing preventing a shader from running.
+ */
+ if (screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT,
+ PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS) <= 8) {
+ /* We can't disable varying packing if transform feedback is available,
+ * because transform feedback code assumes a packed varying layout.
+ */
+ if (!ctx->Extensions.EXT_transform_feedback)
+ ctx->Const.DisableVaryingPacking = GL_TRUE;
+ }
+
+ if (ctx->API == API_OPENGL_CORE) {
+ ctx->Const.MaxViewports = screen->get_param(screen, PIPE_CAP_MAX_VIEWPORTS);
+ if (ctx->Const.MaxViewports >= 16) {
+ ctx->Const.ViewportBounds.Min = -16384.0;
+ ctx->Const.ViewportBounds.Max = 16384.0;
+ ctx->Extensions.ARB_viewport_array = GL_TRUE;
+ }
+ }
+ if (ctx->Const.MaxProgramTextureGatherComponents > 0)
+ ctx->Extensions.ARB_texture_gather = GL_TRUE;