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