Setting it to a non-zero value N will cause shader compilation to be deferred to a thread pool. When N is greater than 1, it indicates the maximum number of threads in the pool. When N is 1, the number of threads is up to the driver (two for i965).
Signed-off-by: Chia-I Wu <o...@lunarg.com> Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> --- src/mesa/drivers/dri/common/xmlpool/t_options.h | 4 ++++ src/mesa/drivers/dri/i965/brw_context.c | 15 +++++++++++++++ src/mesa/drivers/dri/i965/intel_screen.c | 2 ++ 3 files changed, 21 insertions(+) diff --git a/src/mesa/drivers/dri/common/xmlpool/t_options.h b/src/mesa/drivers/dri/common/xmlpool/t_options.h index b73a662..7ac0298 100644 --- a/src/mesa/drivers/dri/common/xmlpool/t_options.h +++ b/src/mesa/drivers/dri/common/xmlpool/t_options.h @@ -298,6 +298,10 @@ DRI_CONF_OPT_BEGIN_V(texture_heaps,enum,def,"0:2") \ DRI_CONF_DESC_END \ DRI_CONF_OPT_END +#define DRI_CONF_MULTITHREAD_GLSL_COMPILER(def) \ +DRI_CONF_OPT_BEGIN(multithread_glsl_compiler, int, def) \ + DRI_CONF_DESC(en,gettext("Enable multithreading in the GLSL compiler")) \ +DRI_CONF_OPT_END /** diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index 216b788..b02128c 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -624,6 +624,17 @@ brw_process_driconf_options(struct brw_context *brw) ctx->Const.AllowGLSLExtensionDirectiveMidShader = driQueryOptionb(options, "allow_glsl_extension_directive_midshader"); + + const int multithread_glsl_compiler = + driQueryOptioni(options, "multithread_glsl_compiler"); + if (multithread_glsl_compiler > 0) { + const int max_threads = (multithread_glsl_compiler > 1) ? + multithread_glsl_compiler : 2; + + _mesa_enable_glsl_threadpool(ctx, max_threads); + ctx->Const.DeferCompileShader = GL_TRUE; + ctx->Const.DeferLinkProgram = GL_TRUE; + } } GLboolean @@ -828,6 +839,10 @@ brwCreateContext(gl_api api, if (INTEL_DEBUG & DEBUG_SHADER_TIME) brw_init_shader_time(brw); + /* brw_shader_precompile is not thread-safe */ + if (brw->precompile) + ctx->Const.DeferLinkProgram = GL_FALSE; + _mesa_compute_version(ctx); _mesa_initialize_dispatch_tables(ctx); diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index 9e743ee..95850c1 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -48,6 +48,8 @@ static const __DRIconfigOptionsExtension brw_config_options = { DRI_CONF_BEGIN DRI_CONF_SECTION_PERFORMANCE DRI_CONF_VBLANK_MODE(DRI_CONF_VBLANK_ALWAYS_SYNC) + DRI_CONF_MULTITHREAD_GLSL_COMPILER(0) + /* Options correspond to DRI_CONF_BO_REUSE_DISABLED, * DRI_CONF_BO_REUSE_ALL */ -- 2.0.0.rc2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev