mesa: split extensions overrides and glGetString(GL_EXTENSIONS)
authorEmil Velikov <emil.velikov@collabora.com>
Mon, 6 Nov 2017 15:20:35 +0000 (15:20 +0000)
committerEmil Velikov <emil.l.velikov@gmail.com>
Thu, 16 Nov 2017 14:07:14 +0000 (14:07 +0000)
Currently we apply the extension overrides and construct the extensions
string upon MakeCurrent.

They are two distinct things, so let's slit the two while pushing the
overrides management _before_ _mesa_compute_version(). This ensures that
the version is updated to reflect the enabled/disabled extensions.

Cc: Jordan Justen <jordan.l.justen@intel.com>
Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
12 files changed:
src/mesa/drivers/dri/i915/i830_context.c
src/mesa/drivers/dri/i915/i915_context.c
src/mesa/drivers/dri/i965/brw_context.c
src/mesa/drivers/dri/r200/r200_context.c
src/mesa/drivers/dri/radeon/radeon_context.c
src/mesa/drivers/dri/swrast/swrast.c
src/mesa/drivers/osmesa/osmesa.c
src/mesa/drivers/x11/xm_api.c
src/mesa/main/extensions.c
src/mesa/main/extensions.h
src/mesa/main/tests/dispatch_sanity.cpp
src/mesa/state_tracker/st_context.c

index 299e54d50eb968b2c3583f1ad4b3417e7d61eda2..4aa96cad0f8ffa76142c4eb08bc96c269c9142d8 100644 (file)
@@ -124,6 +124,7 @@ i830CreateContext(int api,
    _tnl_allow_vertex_fog(ctx, 1);
    _tnl_allow_pixel_fog(ctx, 0);
 
+   _mesa_override_extensions(ctx);
    _mesa_compute_version(ctx);
 
    _mesa_initialize_dispatch_tables(ctx);
index 4f6bdb74e7c4507c3132261b6e1ec1a2e5a343bb..e40e358281ada2602671dcec426a61bf06562a4f 100644 (file)
@@ -289,6 +289,7 @@ i915CreateContext(int api,
    _tnl_allow_vertex_fog(ctx, 0);
    _tnl_allow_pixel_fog(ctx, 1);
 
+   _mesa_override_extensions(ctx);
    _mesa_compute_version(ctx);
 
    _mesa_initialize_dispatch_tables(ctx);
index f49ac4480af55a19b6e7d234f18cdf8e23ac3c63..dd55b43669881fb97e2453290acdbcfebe5fca5c 100644 (file)
@@ -1051,6 +1051,7 @@ brwCreateContext(gl_api api,
    if (INTEL_DEBUG & DEBUG_SHADER_TIME)
       brw_init_shader_time(brw);
 
+   _mesa_override_extensions(ctx);
    _mesa_compute_version(ctx);
 
    _mesa_initialize_dispatch_tables(ctx);
index edd433ae97e49d2a81cbf0c656f8a91c9c7b0b26..eb7d92f3c60e067fbc4e8bd8e768464faefa5d7a 100644 (file)
@@ -394,6 +394,7 @@ GLboolean r200CreateContext( gl_api api,
       TCL_FALLBACK(&rmesa->radeon.glCtx, R200_TCL_FALLBACK_TCL_DISABLE, 1);
    }
 
+   _mesa_override_extensions(ctx);
    _mesa_compute_version(ctx);
 
    /* Exec table initialization requires the version to be computed */
index 04c76cdba1d53173008a1ccb8f502238c92c5b36..8ad0911586c8e77558131a4f2eae1b6a0630f12f 100644 (file)
@@ -353,6 +353,7 @@ r100CreateContext( gl_api api,
 /*       _tnl_need_dlist_norm_lengths( ctx, GL_FALSE ); */
    }
 
+   _mesa_override_extensions(ctx);
    _mesa_compute_version(ctx);
 
    /* Exec table initialization requires the version to be computed */
index f9bd1b9d5604262787750877cee2c14b275cfff1..4bee01ad308b33c09d32e730b04de87b7b316ae0 100644 (file)
@@ -817,6 +817,7 @@ dri_create_context(gl_api api,
     _mesa_meta_init(mesaCtx);
     _mesa_enable_sw_extensions(mesaCtx);
 
+   _mesa_override_extensions(mesaCtx);
     _mesa_compute_version(mesaCtx);
 
     _mesa_initialize_dispatch_tables(mesaCtx);
index 72bff3da2c64d9a1801c864f005228e191e85a18..1df3da4cd24ca96a2bcaac899d2072f1dd18c158 100644 (file)
@@ -913,6 +913,7 @@ OSMesaCreateContextAttribs(const int *attribList, OSMesaContext sharelist)
          swrast->choose_line = osmesa_choose_line;
          swrast->choose_triangle = osmesa_choose_triangle;
 
+         _mesa_override_extensions(ctx);
          _mesa_compute_version(ctx);
 
          if (ctx->Version < version_major * 10 + version_minor) {
index a0695c3d87c9d97e3a570598be9ae1b172ba1a70..ec2a73cb369f79714d8d5a7476e611504980baaf 100644 (file)
@@ -957,6 +957,7 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list )
 
    _mesa_meta_init(mesaCtx);
 
+   _mesa_override_extensions(mesaCtx);
    _mesa_compute_version(mesaCtx);
 
     /* Exec table initialization requires the version to be computed */
index f185aa5aab56eba0309d78f256d8009b42a15ad8..13a72b111d59cc0173dcbbf60b2e1f99e74cf1e2 100644 (file)
@@ -78,8 +78,8 @@ name_to_index(const char* name)
  * Overrides extensions in \c ctx based on the values in
  * _mesa_extension_override_enables and _mesa_extension_override_disables.
  */
-static void
-override_extensions_in_context(struct gl_context *ctx)
+void
+_mesa_override_extensions(struct gl_context *ctx)
 {
    unsigned i;
    const GLboolean *enables =
@@ -199,27 +199,12 @@ set_extension(struct gl_extensions *ext, int i, GLboolean state)
 }
 
 /**
- * \brief Apply the \c MESA_EXTENSION_OVERRIDE environment variable.
- *
- * \c MESA_EXTENSION_OVERRIDE is a space-separated list of extensions to
- * enable or disable. The list is processed thus:
- *    - Enable recognized extension names that are prefixed with '+'.
- *    - Disable recognized extension names that are prefixed with '-'.
- *    - Enable recognized extension names that are not prefixed.
- *    - Collect unrecognized extension names in a new string.
- *
- * \c MESA_EXTENSION_OVERRIDE was previously parsed during
- * _mesa_one_time_init_extension_overrides. We just use the results of that
- * parsing in this function.
- *
- * \return Space-separated list of unrecognized extension names (which must
- *    be freed). Does not return \c NULL.
+ * The unrecognized extensions from \c MESA_EXTENSION_OVERRIDE.
+ * Must be freed, does not return \c NULL.
  */
 static char *
 get_extension_override( struct gl_context *ctx )
 {
-   override_extensions_in_context(ctx);
-
    if (extra_extensions == NULL) {
       return calloc(1, sizeof(char));
    } else {
@@ -244,9 +229,16 @@ free_unknown_extensions_strings(void)
 
 
 /**
- * \brief Initialize extension override tables.
+ * \brief Initialize extension override tables based on \c MESA_EXTENSION_OVERRIDE
  *
  * This should be called one time early during first context initialization.
+
+ * \c MESA_EXTENSION_OVERRIDE is a space-separated list of extensions to
+ * enable or disable. The list is processed thus:
+ *    - Enable recognized extension names that are prefixed with '+'.
+ *    - Disable recognized extension names that are prefixed with '-'.
+ *    - Enable recognized extension names that are not prefixed.
+ *    - Collect unrecognized extension names in a new string.
  */
 void
 _mesa_one_time_init_extension_overrides(void)
index efef1be47518f774498913fb0c2347168e3181b3..ebed8fa4fc0b866374a45dcc36f9633b0a0f8a03 100644 (file)
@@ -53,6 +53,8 @@ extern void _mesa_init_extensions(struct gl_extensions *extentions);
 
 extern GLubyte *_mesa_make_extension_string(struct gl_context *ctx);
 
+extern void _mesa_override_extensions(struct gl_context *ctx);
+
 extern GLuint
 _mesa_get_extension_count(struct gl_context *ctx);
 
index d7183de0f1a3d00b5bc4995a806c9049cd13d4be..ae46419ec4869ccbc6291940112ce739065ff9ff 100644 (file)
@@ -112,6 +112,7 @@ DispatchSanity_test::SetUpCtx(gl_api api, unsigned int version)
                             &driver_functions);
    _vbo_CreateContext(&ctx);
 
+   _mesa_override_extensions(&ctx);
    ctx.Version = version;
 
    _mesa_initialize_dispatch_tables(&ctx);
index eae294e3eb27c3ff5fe7493ae198e174fc873475..da1cca471bac5597efa0bfb5d5ab95c963ecdf8b 100644 (file)
@@ -536,6 +536,7 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe,
 
    st->bitmap.cache.empty = true;
 
+   _mesa_override_extensions(ctx);
    _mesa_compute_version(ctx);
 
    if (ctx->Version == 0) {