st/mesa: compute supported GL versions at DRIscreen creation
authorMarek Olšák <marek.olsak@amd.com>
Sun, 3 Aug 2014 03:36:23 +0000 (05:36 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Mon, 11 Aug 2014 19:53:57 +0000 (21:53 +0200)
This computes all GL versions before any context is created.
It's a requirement for GLX_MESA_query_renderer.

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/mesa/state_tracker/st_manager.c

index 09854221a5cd4b24e5b05b4c73589bc1a769685e..7bc33268e76392613265fa4430c72752bc4dbb2b 100644 (file)
@@ -26,6 +26,7 @@
  */
 
 #include "main/mtypes.h"
+#include "main/extensions.h"
 #include "main/context.h"
 #include "main/texobj.h"
 #include "main/teximage.h"
@@ -38,6 +39,7 @@
 #include "st_texture.h"
 
 #include "st_context.h"
+#include "st_extensions.h"
 #include "st_format.h"
 #include "st_cb_fbo.h"
 #include "st_cb_flush.h"
@@ -910,6 +912,27 @@ st_manager_add_color_renderbuffer(struct st_context *st,
    return TRUE;
 }
 
+static unsigned get_version(struct pipe_screen *screen,
+                            struct st_config_options *options, gl_api api)
+{
+   struct gl_constants consts = {0};
+   struct gl_extensions extensions = {0};
+   GLuint version;
+
+   if ((api == API_OPENGL_COMPAT || api == API_OPENGL_CORE) &&
+       _mesa_override_gl_version_contextless(&consts, &api, &version)) {
+      return version;
+   }
+
+   _mesa_init_constants(&consts, api);
+   _mesa_init_extensions(&extensions);
+
+   st_init_limits(screen, &consts, &extensions);
+   st_init_extensions(screen, api, &consts, &extensions, options, GL_TRUE);
+
+   return _mesa_get_version(&extensions, &consts, api);
+}
+
 static void
 st_api_query_versions(struct st_api *stapi, struct st_manager *sm,
                       struct st_config_options *options,
@@ -918,10 +941,10 @@ st_api_query_versions(struct st_api *stapi, struct st_manager *sm,
                       int *gl_es1_version,
                       int *gl_es2_version)
 {
-   *gl_core_version = 33;
-   *gl_compat_version = 30;
-   *gl_es1_version = 11;
-   *gl_es2_version = 30;
+   *gl_core_version = get_version(sm->screen, options, API_OPENGL_CORE);
+   *gl_compat_version = get_version(sm->screen, options, API_OPENGL_COMPAT);
+   *gl_es1_version = get_version(sm->screen, options, API_OPENGLES);
+   *gl_es2_version = get_version(sm->screen, options, API_OPENGLES2);
 }
 
 static const struct st_api st_gl_api = {