st/mesa: accept and handle configuration options from st/dri
Currently there is a single option - force_glsl_extensions_warn. Signed-off-by: Vadim Girlin <vadimgirlin@gmail.com>
This commit is contained in:
@@ -232,6 +232,15 @@ struct st_visual
|
||||
enum st_attachment_type render_buffer;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Configuration options from driconf
|
||||
*/
|
||||
struct st_config_options
|
||||
{
|
||||
boolean force_glsl_extensions_warn;
|
||||
};
|
||||
|
||||
/**
|
||||
* Represent the attributes of a context.
|
||||
*/
|
||||
@@ -254,6 +263,11 @@ struct st_context_attribs
|
||||
* The visual of the framebuffers the context will be bound to.
|
||||
*/
|
||||
struct st_visual visual;
|
||||
|
||||
/**
|
||||
* Configuration options.
|
||||
*/
|
||||
struct st_config_options options;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -114,12 +114,15 @@ st_get_msaa(void)
|
||||
|
||||
|
||||
static struct st_context *
|
||||
st_create_context_priv( struct gl_context *ctx, struct pipe_context *pipe )
|
||||
st_create_context_priv( struct gl_context *ctx, struct pipe_context *pipe,
|
||||
const struct st_config_options *options)
|
||||
{
|
||||
struct pipe_screen *screen = pipe->screen;
|
||||
uint i;
|
||||
struct st_context *st = ST_CALLOC_STRUCT( st_context );
|
||||
|
||||
st->options = *options;
|
||||
|
||||
ctx->st = st;
|
||||
|
||||
st->ctx = ctx;
|
||||
@@ -207,7 +210,8 @@ static void st_init_driver_flags(struct gl_driver_flags *f)
|
||||
|
||||
struct st_context *st_create_context(gl_api api, struct pipe_context *pipe,
|
||||
const struct gl_config *visual,
|
||||
struct st_context *share)
|
||||
struct st_context *share,
|
||||
const struct st_config_options *options)
|
||||
{
|
||||
struct gl_context *ctx;
|
||||
struct gl_context *shareCtx = share ? share->ctx : NULL;
|
||||
@@ -234,7 +238,7 @@ struct st_context *st_create_context(gl_api api, struct pipe_context *pipe,
|
||||
if (debug_get_option_mesa_mvp_dp4())
|
||||
_mesa_set_mvp_with_dp4( ctx, GL_TRUE );
|
||||
|
||||
return st_create_context_priv(ctx, pipe);
|
||||
return st_create_context_priv(ctx, pipe, options);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -194,6 +194,8 @@ struct st_context
|
||||
|
||||
int32_t draw_stamp;
|
||||
int32_t read_stamp;
|
||||
|
||||
struct st_config_options options;
|
||||
};
|
||||
|
||||
|
||||
@@ -266,7 +268,8 @@ st_get_msaa(void);
|
||||
extern struct st_context *
|
||||
st_create_context(gl_api api, struct pipe_context *pipe,
|
||||
const struct gl_config *visual,
|
||||
struct st_context *share);
|
||||
struct st_context *share,
|
||||
const struct st_config_options *options);
|
||||
|
||||
extern void
|
||||
st_destroy_context(struct st_context *st);
|
||||
|
@@ -646,4 +646,6 @@ void st_init_extensions(struct st_context *st)
|
||||
ctx->Extensions.ARB_draw_instanced) {
|
||||
ctx->Extensions.ARB_transform_feedback_instanced = GL_TRUE;
|
||||
}
|
||||
if (st->options.force_glsl_extensions_warn)
|
||||
ctx->Const.ForceGLSLExtensionsWarn = 1;
|
||||
}
|
||||
|
@@ -637,7 +637,7 @@ st_api_create_context(struct st_api *stapi, struct st_manager *smapi,
|
||||
}
|
||||
|
||||
st_visual_to_context_mode(&attribs->visual, &mode);
|
||||
st = st_create_context(api, pipe, &mode, shared_ctx);
|
||||
st = st_create_context(api, pipe, &mode, shared_ctx, &attribs->options);
|
||||
if (!st) {
|
||||
*error = ST_CONTEXT_ERROR_NO_MEMORY;
|
||||
pipe->destroy(pipe);
|
||||
|
Reference in New Issue
Block a user