[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
Mon Jun 8 00:13:59 PDT 2015


On 05/06/15 16:53, Brian Paul wrote:
> This is a big patch that touches a lot of files all over the place.  I 
> wonder if it could be broken up a bit.  In any case, comments below...

Thanks for the quick review, Brian!

I tried to keep the diff minimal but aside from the empty declarations 
and new files, I cannot take anything out. I will do that!

>
>
> On 06/05/2015 07:03 AM, Martin Peres wrote:
>> 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;
>> +
>
> This an interface violation.  The gallium state tracker API should 
> have no dependencies on core Mesa.
>
> Unfortunately, I think the config options for the state tracker API 
> and core Mesa will have to be in separate, though very similar, 
> structures.
>
> The various gallium state trackers will populate st_config_options and 
> pass them to the Mesa state tracker where they'd be translated into 
> the core Mesa options structure.

Unifying the dri drivers is a noble goal but I really want to unify all 
the drivers. This is why I created the two separate files in main :)

Can core Mesa depend on a gallium-exported header?

>
>
>>      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
>
> Most (all?) core Mesa structure types start with a gl_ prefix.  I 
> think a better name would be something like gl_context_options.

Although I agree the name is bad, omitting the gl_ prefix was a 
conscious decision because the options do not have to be gl-related. I 
may be looking too far in the future though :D

I will add the gl_ prefix!

>
>> +{
>> +   /* 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);
>
> This seems wrong.  Core Mesa should not know anything about DRI so 
> pulling the driOptionCache up from lower layers of the stack is an 
> interface violation.
>
> It seems to me that the DRI code should be responsible for populating 
> a gl_context_options object which would then be passed to core Mesa.
>
> We're looking at adding a config option system for Windows/WGL also.  
> We don't have any DRI stuff there, of course.

Can I suggest moving the driOptionCache to src/util? It would then be 
acceptable to just pass around the optionCache

>
> I think the patch series would be better if you started out by just 
> defining the new gl_context_options structure and plumbing it through 
> the _mesa_create/init_context() functions. 

If I could move around the option cache instead, I would be happier.

> Let see a complete structure with all the config options you have in 
> mind.

The current list is here: 
http://cgit.freedesktop.org/~mperes/mesa/tree/src/mesa/main/shared_options.h?h=mesa_extension_override2&id=69b3661e9ab7fe6fadc1ff964053795bf764e56b#n44

>
> For extension enable/disable, rather than duplicate the 
> MESA_EXTENSIONS_OVERRIDE strings, it might be nicer to have a list of 
> names of extensions to enable and a list of names of extensions to 
> disable.
>
> -Brian



More information about the mesa-dev mailing list