[Mesa-dev] [PATCH 03/16] main: store the common option in a struct of the Const part of the GL context

Martin Peres martin.peres at linux.intel.com
Fri Jun 5 06:03:57 PDT 2015


This will allow us to share common drirc options across drivers while
making sure some drivers are not left behind (current situation).

This changes _mesa_initialize_context to make sure that every driver
sets the shared options either to the default values or the
drirc-provided options.

Signed-off-by: Martin Peres <martin.peres at linux.intel.com>
---
 src/gallium/include/state_tracker/st_api.h         |  4 ++
 src/gallium/state_trackers/dri/dri_screen.c        |  4 +-
 src/gallium/state_trackers/osmesa/osmesa.c         |  1 +
 src/mesa/Makefile.sources                          |  2 +
 src/mesa/drivers/dri/i915/intel_context.c          | 11 +++-
 src/mesa/drivers/dri/i965/brw_context.c            |  9 ++-
 src/mesa/drivers/dri/nouveau/nouveau_context.c     |  5 +-
 .../drivers/dri/radeon/radeon_common_context.c     |  6 ++
 src/mesa/drivers/dri/swrast/swrast.c               |  5 +-
 src/mesa/drivers/osmesa/osmesa.c                   |  5 ++
 src/mesa/drivers/x11/xm_api.c                      |  5 +-
 src/mesa/main/context.c                            | 17 ++++--
 src/mesa/main/context.h                            |  5 +-
 src/mesa/main/mtypes.h                             |  4 ++
 src/mesa/main/shared_options.c                     | 33 ++++++++++
 src/mesa/main/shared_options.h                     | 71 ++++++++++++++++++++++
 src/mesa/main/tests/dispatch_sanity.cpp            |  6 ++
 src/mesa/state_tracker/st_context.c                |  4 +-
 src/mesa/state_tracker/st_manager.c                |  2 +-
 19 files changed, 182 insertions(+), 17 deletions(-)
 create mode 100644 src/mesa/main/shared_options.c
 create mode 100644 src/mesa/main/shared_options.h

diff --git a/src/gallium/include/state_tracker/st_api.h b/src/gallium/include/state_tracker/st_api.h
index ecf1c07..eca3d50 100644
--- a/src/gallium/include/state_tracker/st_api.h
+++ b/src/gallium/include/state_tracker/st_api.h
@@ -29,6 +29,7 @@
 
 #include "pipe/p_compiler.h"
 #include "pipe/p_format.h"
+#include "main/shared_options.h"
 
 /**
  * \file API for communication between state trackers and state tracker
@@ -240,6 +241,9 @@ struct st_visual
  */
 struct st_config_options
 {
+   /** The screen's effective configuration options */
+   struct shared_options shared_options;
+
    boolean disable_blend_func_extended;
    boolean disable_glsl_line_continuations;
    boolean disable_shader_bit_encoding;
diff --git a/src/gallium/state_trackers/dri/dri_screen.c b/src/gallium/state_trackers/dri/dri_screen.c
index 85393d8..08affdd 100644
--- a/src/gallium/state_trackers/dri/dri_screen.c
+++ b/src/gallium/state_trackers/dri/dri_screen.c
@@ -82,8 +82,10 @@ const __DRIconfigOptionsExtension gallium_config_options = {
 
 static void
 dri_fill_st_options(struct st_config_options *options,
-                    const struct driOptionCache * optionCache)
+                    struct driOptionCache *optionCache)
 {
+   _mesa_shared_options_fill(optionCache, &options->shared_options);
+
    options->disable_blend_func_extended =
       driQueryOptionb(optionCache, "disable_blend_func_extended");
    options->disable_glsl_line_continuations =
diff --git a/src/gallium/state_trackers/osmesa/osmesa.c b/src/gallium/state_trackers/osmesa/osmesa.c
index 2d5d096..e4cc149 100644
--- a/src/gallium/state_trackers/osmesa/osmesa.c
+++ b/src/gallium/state_trackers/osmesa/osmesa.c
@@ -591,6 +591,7 @@ OSMesaCreateContextExt(GLenum format, GLint depthBits, GLint stencilBits,
    attribs.options.disable_shader_bit_encoding = FALSE;
    attribs.options.force_s3tc_enable = FALSE;
    attribs.options.force_glsl_version = 0;
+   _mesa_shared_options_fill_defaults(&attribs.options.shared_options);
 
    osmesa_init_st_visual(&attribs.visual,
                          PIPE_FORMAT_R8G8B8A8_UNORM,
diff --git a/src/mesa/Makefile.sources b/src/mesa/Makefile.sources
index 83f500f..f3cb69c 100644
--- a/src/mesa/Makefile.sources
+++ b/src/mesa/Makefile.sources
@@ -179,6 +179,8 @@ MAIN_FILES = \
 	main/shader_query.cpp \
 	main/shared.c \
 	main/shared.h \
+	main/shared_options.c \
+	main/shared_options.h \
 	main/state.c \
 	main/state.h \
 	main/stencil.c \
diff --git a/src/mesa/drivers/dri/i915/intel_context.c b/src/mesa/drivers/dri/i915/intel_context.c
index 5618dcd..3789b7e 100644
--- a/src/mesa/drivers/dri/i915/intel_context.c
+++ b/src/mesa/drivers/dri/i915/intel_context.c
@@ -34,6 +34,7 @@
 #include "main/imports.h"
 #include "main/points.h"
 #include "main/renderbuffer.h"
+#include "main/shared_options.h"
 
 #include "swrast/swrast.h"
 #include "swrast_setup/swrast_setup.h"
@@ -409,6 +410,7 @@ intelInitContext(struct intel_context *intel,
    struct gl_context *shareCtx = (struct gl_context *) sharedContextPrivate;
    __DRIscreen *sPriv = driContextPriv->driScreenPriv;
    struct intel_screen *intelScreen = sPriv->driverPrivate;
+   struct shared_options shared_options;
    int bo_reuse_mode;
 
    /* Can't rely on invalidate events, fall back to glViewport hack */
@@ -419,8 +421,13 @@ intelInitContext(struct intel_context *intel,
 
    intel->intelScreen = intelScreen;
 
+   driParseConfigFiles(&intel->optionCache, &intelScreen->optionCache,
+                       sPriv->myNum, "i915");
+
+   _mesa_shared_options_fill(&intel->optionCache, &shared_options);
+
    if (!_mesa_initialize_context(&intel->ctx, api, mesaVis, shareCtx,
-                                 functions)) {
+                                 &shared_options, functions)) {
       *dri_ctx_error = __DRI_CTX_ERROR_NO_MEMORY;
       printf("%s: failed to init mesa context\n", __func__);
       return false;
@@ -441,8 +448,6 @@ intelInitContext(struct intel_context *intel,
    memset(&ctx->TextureFormatSupported,
 	  0, sizeof(ctx->TextureFormatSupported));
 
-   driParseConfigFiles(&intel->optionCache, &intelScreen->optionCache,
-                       sPriv->myNum, "i915");
    intel->maxBatchSize = 4096;
 
    /* Estimate the size of the mappable aperture into the GTT.  There's an
diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
index 274a237..1086c9b 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -41,6 +41,7 @@
 #include "main/version.h"
 #include "main/vtxfmt.h"
 #include "main/texobj.h"
+#include "main/shared_options.h"
 
 #include "vbo/vbo_context.h"
 
@@ -708,6 +709,7 @@ brwCreateContext(gl_api api,
    struct gl_context *shareCtx = (struct gl_context *) sharedContextPrivate;
    struct intel_screen *screen = sPriv->driverPrivate;
    const struct brw_device_info *devinfo = screen->devinfo;
+   struct shared_options shared_options;
    struct dd_function_table functions;
 
    /* Only allow the __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS flag if the kernel
@@ -779,7 +781,11 @@ brwCreateContext(gl_api api,
 
    struct gl_context *ctx = &brw->ctx;
 
-   if (!_mesa_initialize_context(ctx, api, mesaVis, shareCtx, &functions)) {
+   brw_process_driconf_options(brw);
+   _mesa_shared_options_fill(&brw->optionCache, &shared_options);
+
+   if (!_mesa_initialize_context(ctx, api, mesaVis, shareCtx,
+                                 &shared_options, &functions)) {
       *dri_ctx_error = __DRI_CTX_ERROR_NO_MEMORY;
       fprintf(stderr, "%s: failed to init mesa context\n", __func__);
       intelDestroyContext(driContextPriv);
@@ -811,7 +817,6 @@ brwCreateContext(gl_api api,
 
    _mesa_meta_init(ctx);
 
-   brw_process_driconf_options(brw);
    brw_process_intel_debug_variable(brw);
 
    if (brw->gen >= 8 && !(INTEL_DEBUG & DEBUG_VEC4VS))
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.c b/src/mesa/drivers/dri/nouveau/nouveau_context.c
index 383cb90..f7773a2 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_context.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_context.c
@@ -126,6 +126,7 @@ nouveau_context_init(struct gl_context *ctx, gl_api api,
 	struct nouveau_context *nctx = to_nouveau_context(ctx);
 	struct dd_function_table functions;
 	driOptionCache optionCache;
+	struct shared_options shared_options;
 
 	int ret;
 
@@ -142,10 +143,12 @@ nouveau_context_init(struct gl_context *ctx, gl_api api,
 	/* parse information in __driConfigOptions */
 	driParseOptionInfo(&optionCache,
 			   nouveau_vieux_config_options.xml);
+	_mesa_shared_options_fill(&optionCache, &shared_options);
 	driDestroyOptionInfo(&optionCache);
 
 	/* Initialize the mesa context. */
-	if (!_mesa_initialize_context(ctx, api, visual, share_ctx, &functions))
+	if (!_mesa_initialize_context(ctx, api, visual, share_ctx,
+				      &shared_options, &functions))
 		return GL_FALSE;
 
 	nouveau_state_init(ctx);
diff --git a/src/mesa/drivers/dri/radeon/radeon_common_context.c b/src/mesa/drivers/dri/radeon/radeon_common_context.c
index 9699dcb..eb475b4 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common_context.c
+++ b/src/mesa/drivers/dri/radeon/radeon_common_context.c
@@ -41,6 +41,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "main/fbobject.h"
 #include "main/renderbuffer.h"
 #include "main/state.h"
+#include "main/shared_options.h"
 #include "util/simple_list.h"
 #include "swrast/swrast.h"
 #include "swrast_setup/swrast_setup.h"
@@ -139,6 +140,7 @@ GLboolean radeonInitContext(radeonContextPtr radeon,
 	radeonScreenPtr screen = (radeonScreenPtr) (sPriv->driverPrivate);
 	struct gl_context* ctx;
 	struct gl_context* shareCtx;
+	struct shared_options shared_options;
 	int fthrottle_mode;
 
 	/* Fill in additional standard functions. */
@@ -151,8 +153,12 @@ GLboolean radeonInitContext(radeonContextPtr radeon,
 	else
 		shareCtx = NULL;
 
+	_mesa_shared_options_fill(&radeon->optionCache,
+				  &shared_options);
+
 	if (!_mesa_initialize_context(&radeon->glCtx, api,
 				      glVisual, shareCtx,
+				      &shared_options,
 				      functions))
 		return GL_FALSE;
 
diff --git a/src/mesa/drivers/dri/swrast/swrast.c b/src/mesa/drivers/dri/swrast/swrast.c
index 1522636..1819445 100644
--- a/src/mesa/drivers/dri/swrast/swrast.c
+++ b/src/mesa/drivers/dri/swrast/swrast.c
@@ -768,6 +768,7 @@ dri_create_context(gl_api api,
     struct dri_context *share = (struct dri_context *)sharedContextPrivate;
     struct gl_context *mesaCtx = NULL;
     struct gl_context *sharedCtx = NULL;
+    struct shared_options shared_options;
     struct dd_function_table functions;
     driOptionCache optionCache;
 
@@ -798,10 +799,12 @@ dri_create_context(gl_api api,
 
     /* parse information in __driConfigOptions */
     driParseOptionInfo(&optionCache, swrast_config_options.xml);
+    _mesa_shared_options_fill(&optionCache, &shared_options);
     driDestroyOptionInfo(&optionCache);
 
     /* basic context setup */
-    if (!_mesa_initialize_context(mesaCtx, api, visual, sharedCtx, &functions)) {
+    if (!_mesa_initialize_context(mesaCtx, api, visual, sharedCtx,
+                                  &shared_options, &functions)) {
 	*error = __DRI_CTX_ERROR_NO_MEMORY;
 	goto context_fail;
     }
diff --git a/src/mesa/drivers/osmesa/osmesa.c b/src/mesa/drivers/osmesa/osmesa.c
index 022523e..5856486 100644
--- a/src/mesa/drivers/osmesa/osmesa.c
+++ b/src/mesa/drivers/osmesa/osmesa.c
@@ -646,6 +646,7 @@ OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits,
                         GLint accumBits, OSMesaContext sharelist )
 {
    OSMesaContext osmesa;
+   struct shared_options shared_options;
    struct dd_function_table functions;
    GLint rind, gind, bind, aind;
    GLint redBits = 0, greenBits = 0, blueBits = 0, alphaBits =0;
@@ -735,6 +736,9 @@ OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits,
          return NULL;
       }
 
+      /* Initialize the shared options with defaults values */
+      _mesa_shared_options_fill_defaults(&shared_options);
+
       /* Initialize device driver function table */
       _mesa_init_driver_functions(&functions);
       /* override with our functions */
@@ -746,6 +750,7 @@ OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits,
                                     osmesa->gl_visual,
                                     sharelist ? &sharelist->mesa
                                               : (struct gl_context *) NULL,
+                                    &shared_options,
                                     &functions)) {
          _mesa_destroy_visual( osmesa->gl_visual );
          free(osmesa);
diff --git a/src/mesa/drivers/x11/xm_api.c b/src/mesa/drivers/x11/xm_api.c
index 65e7ca8..c10aadf 100644
--- a/src/mesa/drivers/x11/xm_api.c
+++ b/src/mesa/drivers/x11/xm_api.c
@@ -72,6 +72,7 @@
 #include "main/imports.h"
 #include "main/macros.h"
 #include "main/renderbuffer.h"
+#include "main/shared_options.h"
 #include "main/teximage.h"
 #include "main/version.h"
 #include "main/vtxfmt.h"
@@ -888,6 +889,7 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list )
    static GLboolean firstTime = GL_TRUE;
    XMesaContext c;
    struct gl_context *mesaCtx;
+   struct shared_options shared_options;
    struct dd_function_table functions;
    TNLcontext *tnl;
 
@@ -906,9 +908,10 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list )
    /* initialize with default driver functions, then plug in XMesa funcs */
    _mesa_init_driver_functions(&functions);
    xmesa_init_driver_functions(v, &functions);
+   _mesa_shared_options_fill_defaults(&shared_options);
    if (!_mesa_initialize_context(mesaCtx, API_OPENGL_COMPAT, &v->mesa_visual,
                       share_list ? &(share_list->mesa) : (struct gl_context *) NULL,
-                      &functions)) {
+                      &shared_options, &functions)) {
       free(c);
       return NULL;
    }
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 8a59b5e..facc92b 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -563,11 +563,15 @@ init_program_limits(struct gl_constants *consts, gl_shader_stage stage,
  * some of these values (such as number of texture units).
  */
 void
-_mesa_init_constants(struct gl_constants *consts, gl_api api)
+_mesa_init_constants(struct gl_constants *consts,
+                     const struct shared_options *shared_options, gl_api api)
 {
    int i;
    assert(consts);
 
+   /* Options */
+   consts->options = *shared_options;
+
    /* Constants, may be overriden (usually only reduced) by device drivers */
    consts->MaxTextureMbytes = MAX_TEXTURE_MBYTES;
    consts->MaxTextureLevels = MAX_TEXTURE_LEVELS;
@@ -797,12 +801,13 @@ check_context_limits(struct gl_context *ctx)
  * functions for the more complex data structures.
  */
 static GLboolean
-init_attrib_groups(struct gl_context *ctx)
+init_attrib_groups(struct gl_context *ctx,
+                   const struct shared_options *shared_options)
 {
    assert(ctx);
 
    /* Constants */
-   _mesa_init_constants(&ctx->Const, ctx->API);
+   _mesa_init_constants(&ctx->Const, shared_options, ctx->API);
 
    /* Extensions */
    _mesa_init_extensions(&ctx->Extensions);
@@ -1146,6 +1151,7 @@ _mesa_initialize_context(struct gl_context *ctx,
                          gl_api api,
                          const struct gl_config *visual,
                          struct gl_context *share_list,
+                         const struct shared_options *shared_options,
                          const struct dd_function_table *driverFunctions)
 {
    struct gl_shared_state *shared;
@@ -1194,7 +1200,7 @@ _mesa_initialize_context(struct gl_context *ctx,
 
    _mesa_reference_shared_state(ctx, &ctx->Shared, shared);
 
-   if (!init_attrib_groups( ctx ))
+   if (!init_attrib_groups( ctx, shared_options ))
       goto fail;
 
    /* setup the API dispatch tables with all nop functions */
@@ -1285,6 +1291,7 @@ struct gl_context *
 _mesa_create_context(gl_api api,
                      const struct gl_config *visual,
                      struct gl_context *share_list,
+                     const struct shared_options *shared_options,
                      const struct dd_function_table *driverFunctions)
 {
    struct gl_context *ctx;
@@ -1293,7 +1300,7 @@ _mesa_create_context(gl_api api,
    if (!ctx)
       return NULL;
 
-   if (_mesa_initialize_context(ctx, api, visual, share_list,
+   if (_mesa_initialize_context(ctx, api, visual, share_list, shared_options,
                                 driverFunctions)) {
       return ctx;
    }
diff --git a/src/mesa/main/context.h b/src/mesa/main/context.h
index 6f3c941..9e387ce 100644
--- a/src/mesa/main/context.h
+++ b/src/mesa/main/context.h
@@ -109,12 +109,14 @@ _mesa_initialize_context( struct gl_context *ctx,
                           gl_api api,
                           const struct gl_config *visual,
                           struct gl_context *share_list,
+                          const struct shared_options *shared_options,
                           const struct dd_function_table *driverFunctions);
 
 extern struct gl_context *
 _mesa_create_context(gl_api api,
                      const struct gl_config *visual,
                      struct gl_context *share_list,
+                     const struct shared_options *shared_options,
                      const struct dd_function_table *driverFunctions);
 
 extern void
@@ -144,7 +146,8 @@ _mesa_get_current_context(void);
 /*@}*/
 
 extern void
-_mesa_init_constants(struct gl_constants *consts, gl_api api);
+_mesa_init_constants(struct gl_constants *consts,
+                     const struct shared_options *shared_options, gl_api api);
 
 extern void
 _mesa_init_get_hash(struct gl_context *ctx);
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 0aa6076..dd75b1c 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -40,6 +40,7 @@
 
 #include "main/glheader.h"
 #include "main/config.h"
+#include "main/shared_options.h"
 #include "glapi/glapi.h"
 #include "math/m_matrix.h"	/* GLmatrix */
 #include "glsl/shader_enums.h"
@@ -3376,6 +3377,9 @@ struct gl_constants
 
    GLuint GLSLVersion;  /**< Desktop GLSL version supported (ex: 120 = 1.20) */
 
+   /** Stores the drirc options of the different drivers */
+   struct shared_options options;
+
    /**
     * Changes default GLSL extension behavior from "error" to "warn".  It's out
     * of spec, but it can make some apps work that otherwise wouldn't.
diff --git a/src/mesa/main/shared_options.c b/src/mesa/main/shared_options.c
new file mode 100644
index 0000000..d3b843c
--- /dev/null
+++ b/src/mesa/main/shared_options.c
@@ -0,0 +1,33 @@
+/*
+ * Mesa 3-D graphics library
+ *
+ * Copyright (C) 2015  Intel Corporation.  All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include "shared_options.h"
+#include "drivers/dri/common/xmlconfig.h"
+
+void
+_mesa_shared_options_fill(struct driOptionCache *optionCache,
+                          struct shared_options *sharedOptions)
+{
+
+}
diff --git a/src/mesa/main/shared_options.h b/src/mesa/main/shared_options.h
new file mode 100644
index 0000000..abfb0a8
--- /dev/null
+++ b/src/mesa/main/shared_options.h
@@ -0,0 +1,71 @@
+/*
+ * Mesa 3-D graphics library
+ *
+ * Copyright (C) 2015  Intel Corporation.  All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file shared_options.h
+ * Shared DRIconf options between the different drivers
+ */
+
+#ifndef SHARED_OPTIONS_H
+#define SHARED_OPTIONS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <GL/glcorearb.h>
+
+struct driOptionCache;
+
+/**
+ * List of shared options between the different mesa drivers
+ */
+struct shared_options
+{
+   /* performance */
+
+   /* quality */
+
+   /* debug */
+
+   /* misc */
+};
+
+/** Fill the shared_options with information from the optionCache */
+void
+_mesa_shared_options_fill(struct driOptionCache *optionCache,
+                    struct shared_options *sharedOptions);
+
+/** Fill in the default state for the shared_options */
+static inline void
+_mesa_shared_options_fill_defaults(struct shared_options *sharedOptions)
+{
+
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SHARED_OPTIONS_H */
diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
index 0b7262a..b6653ce 100644
--- a/src/mesa/main/tests/dispatch_sanity.cpp
+++ b/src/mesa/main/tests/dispatch_sanity.cpp
@@ -49,6 +49,7 @@
 #include "main/remap.h"
 #include "main/vtxfmt.h"
 #include "glapi/glapi.h"
+#include "main/shared_options.h"
 #include "drivers/common/driverfuncs.h"
 
 #include "swrast/swrast.h"
@@ -105,10 +106,15 @@ DispatchSanity_test::SetUp()
 void
 DispatchSanity_test::SetUpCtx(gl_api api, unsigned int version)
 {
+   struct shared_options shared_options;
+
+   _mesa_shared_options_fill_defaults(&shared_options);
+
    _mesa_initialize_context(&ctx,
                             api,
                             &visual,
                             NULL, // share_list
+                            &shared_options,
                             &driver_functions);
    _vbo_CreateContext(&ctx);
 
diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
index ed9ed0f..464ae1e 100644
--- a/src/mesa/state_tracker/st_context.c
+++ b/src/mesa/state_tracker/st_context.c
@@ -34,6 +34,7 @@
 #include "main/version.h"
 #include "main/vtxfmt.h"
 #include "main/hash.h"
+#include "main/shared_options.h"
 #include "program/prog_cache.h"
 #include "vbo/vbo.h"
 #include "glapi/glapi.h"
@@ -323,7 +324,8 @@ struct st_context *st_create_context(gl_api api, struct pipe_context *pipe,
    memset(&funcs, 0, sizeof(funcs));
    st_init_driver_functions(pipe->screen, &funcs);
 
-   ctx = _mesa_create_context(api, visual, shareCtx, &funcs);
+   ctx = _mesa_create_context(api, visual, shareCtx, &options->shared_options,
+                              &funcs);
    if (!ctx) {
       return NULL;
    }
diff --git a/src/mesa/state_tracker/st_manager.c b/src/mesa/state_tracker/st_manager.c
index a2dee62..ebdbb00 100644
--- a/src/mesa/state_tracker/st_manager.c
+++ b/src/mesa/state_tracker/st_manager.c
@@ -928,7 +928,7 @@ static unsigned get_version(struct pipe_screen *screen,
       return version;
    }
 
-   _mesa_init_constants(&consts, api);
+   _mesa_init_constants(&consts, &options->shared_options, api);
    _mesa_init_extensions(&extensions);
 
    st_init_limits(screen, &consts, &extensions);
-- 
2.4.2



More information about the mesa-dev mailing list