On Monday, June 22, 2015 06:07:29 PM Jason Ekstrand wrote: > This creates the options at screen cration time and then we just copy them > into the context at context creation time. We also move is_scalar to the > brw_compiler structure. > > We also end up manually setting some values that the core would have set by > default for us. Fortunately, there are only two non-zero shader compiler > option defaults that we aren't overriding anyway so this isn't a big deal. > --- > src/mesa/drivers/dri/i965/brw_context.c | 46 ++---------------------------- > src/mesa/drivers/dri/i965/brw_context.h | 1 - > src/mesa/drivers/dri/i965/brw_shader.cpp | 49 > +++++++++++++++++++++++++++++++- > src/mesa/drivers/dri/i965/brw_shader.h | 3 ++ > src/mesa/drivers/dri/i965/brw_vec4.cpp | 2 +- > src/mesa/drivers/dri/i965/intel_screen.c | 1 + > 6 files changed, 56 insertions(+), 46 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_context.c > b/src/mesa/drivers/dri/i965/brw_context.c > index 327a668..33cdbd2 100644 > --- a/src/mesa/drivers/dri/i965/brw_context.c > +++ b/src/mesa/drivers/dri/i965/brw_context.c > @@ -50,6 +50,7 @@ > > #include "brw_context.h" > #include "brw_defines.h" > +#include "brw_shader.h" > #include "brw_draw.h" > #include "brw_state.h" > > @@ -68,8 +69,6 @@ > #include "tnl/t_pipeline.h" > #include "util/ralloc.h" > > -#include "glsl/nir/nir.h" > - > /*************************************** > * Mesa's Driver Functions > ***************************************/ > @@ -558,48 +557,12 @@ brw_initialize_context_constants(struct brw_context > *brw) > ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxInputComponents = 128; > } > > - static const nir_shader_compiler_options nir_options = { > - .native_integers = true, > - /* In order to help allow for better CSE at the NIR level we tell NIR > - * to split all ffma instructions during opt_algebraic and we then > - * re-combine them as a later step. > - */ > - .lower_ffma = true, > - .lower_sub = true, > - }; > - > /* We want the GLSL compiler to emit code that uses condition codes */ > for (int i = 0; i < MESA_SHADER_STAGES; i++) { > - ctx->Const.ShaderCompilerOptions[i].MaxIfDepth = brw->gen < 6 ? 16 : > UINT_MAX; > - ctx->Const.ShaderCompilerOptions[i].EmitCondCodes = true; > - ctx->Const.ShaderCompilerOptions[i].EmitNoNoise = true; > - ctx->Const.ShaderCompilerOptions[i].EmitNoMainReturn = true; > - ctx->Const.ShaderCompilerOptions[i].EmitNoIndirectInput = true; > - ctx->Const.ShaderCompilerOptions[i].EmitNoIndirectOutput = > - (i == MESA_SHADER_FRAGMENT); > - ctx->Const.ShaderCompilerOptions[i].EmitNoIndirectTemp = > - (i == MESA_SHADER_FRAGMENT); > - ctx->Const.ShaderCompilerOptions[i].EmitNoIndirectUniform = false; > - ctx->Const.ShaderCompilerOptions[i].LowerClipDistance = true; > + ctx->Const.ShaderCompilerOptions[i] = > + brw->intelScreen->compiler->glsl_compiler_options[i]; > } > > - ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].OptimizeForAOS = > true; > - ctx->Const.ShaderCompilerOptions[MESA_SHADER_GEOMETRY].OptimizeForAOS = > true; > - > - if (brw->scalar_vs) { > - /* If we're using the scalar backend for vertex shaders, we need to > - * configure these accordingly. > - */ > - > ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].EmitNoIndirectOutput = > true; > - > ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].EmitNoIndirectTemp = > true; > - ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].OptimizeForAOS = > false; > - > - ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].NirOptions = > &nir_options; > - } > - > - ctx->Const.ShaderCompilerOptions[MESA_SHADER_FRAGMENT].NirOptions = > &nir_options; > - ctx->Const.ShaderCompilerOptions[MESA_SHADER_COMPUTE].NirOptions = > &nir_options; > - > /* ARB_viewport_array */ > if (brw->gen >= 6 && ctx->API == API_OPENGL_CORE) { > ctx->Const.MaxViewports = GEN6_NUM_VIEWPORTS; > @@ -832,9 +795,6 @@ brwCreateContext(gl_api api, > if (INTEL_DEBUG & DEBUG_AUB) > drm_intel_bufmgr_gem_set_aub_dump(brw->bufmgr, true); > > - if (brw->gen >= 8 && !(INTEL_DEBUG & DEBUG_VEC4VS)) > - brw->scalar_vs = true; > - > brw_initialize_context_constants(brw); > > ctx->Const.ResetStrategy = notify_reset > diff --git a/src/mesa/drivers/dri/i965/brw_context.h > b/src/mesa/drivers/dri/i965/brw_context.h > index 58119ee..d8fcfff 100644 > --- a/src/mesa/drivers/dri/i965/brw_context.h > +++ b/src/mesa/drivers/dri/i965/brw_context.h > @@ -1137,7 +1137,6 @@ struct brw_context > bool has_pln; > bool no_simd8; > bool use_rep_send; > - bool scalar_vs; > > /** > * Some versions of Gen hardware don't do centroid interpolation correctly > diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp > b/src/mesa/drivers/dri/i965/brw_shader.cpp > index 3ac5ef1..683946b 100644 > --- a/src/mesa/drivers/dri/i965/brw_shader.cpp > +++ b/src/mesa/drivers/dri/i965/brw_shader.cpp > @@ -84,6 +84,53 @@ brw_compiler_create(void *mem_ctx, const struct > brw_device_info *devinfo) > brw_fs_alloc_reg_sets(compiler); > brw_vec4_alloc_reg_set(compiler); > > + if (devinfo->gen >= 8 && !(INTEL_DEBUG & DEBUG_VEC4VS)) > + compiler->scalar_vs = true; > + > + nir_shader_compiler_options *nir_options = > + rzalloc(compiler, nir_shader_compiler_options); > + nir_options->native_integers = true; > + /* In order to help allow for better CSE at the NIR level we tell NIR > + * to split all ffma instructions during opt_algebraic and we then > + * re-combine them as a later step. > + */ > + nir_options->lower_ffma = true; > + nir_options->lower_sub = true; > + > + /* We want the GLSL compiler to emit code that uses condition codes */ > + for (int i = 0; i < MESA_SHADER_STAGES; i++) { > + compiler->glsl_compiler_options[i].MaxUnrollIterations = 32; > + compiler->glsl_compiler_options[i].MaxIfDepth = > + devinfo->gen < 6 ? 16 : UINT_MAX; > + > + compiler->glsl_compiler_options[i].EmitCondCodes = true; > + compiler->glsl_compiler_options[i].EmitNoNoise = true; > + compiler->glsl_compiler_options[i].EmitNoMainReturn = true; > + compiler->glsl_compiler_options[i].EmitNoIndirectInput = true; > + compiler->glsl_compiler_options[i].EmitNoIndirectOutput = > + (i == MESA_SHADER_FRAGMENT); > + compiler->glsl_compiler_options[i].EmitNoIndirectTemp = > + (i == MESA_SHADER_FRAGMENT); > + compiler->glsl_compiler_options[i].EmitNoIndirectUniform = false; > + compiler->glsl_compiler_options[i].LowerClipDistance = true; > + } > + > + compiler->glsl_compiler_options[MESA_SHADER_VERTEX].OptimizeForAOS = true; > + compiler->glsl_compiler_options[MESA_SHADER_GEOMETRY].OptimizeForAOS = > true; > + > + if (compiler->scalar_vs) { > + /* If we're using the scalar backend for vertex shaders, we need to > + * configure these accordingly. > + */ > + > compiler->glsl_compiler_options[MESA_SHADER_VERTEX].EmitNoIndirectOutput = > true; > + compiler->glsl_compiler_options[MESA_SHADER_VERTEX].EmitNoIndirectTemp > = true; > + compiler->glsl_compiler_options[MESA_SHADER_VERTEX].OptimizeForAOS = > false; > + > + compiler->glsl_compiler_options[MESA_SHADER_VERTEX].NirOptions = > nir_options; > + } > + > + compiler->glsl_compiler_options[MESA_SHADER_FRAGMENT].NirOptions = > nir_options;
You lost this line: ctx->Const.ShaderCompilerOptions[MESA_SHADER_COMPUTE].NirOptions = &nir_options; It looks like the rest is all there, though.
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev