[Mesa-dev] [PATCH 09/16] i965: Add compiler options to brw_compiler
Kenneth Graunke
kenneth at whitecape.org
Tue Jun 23 10:38:16 PDT 2015
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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150623/6bcbdaee/attachment.sig>
More information about the mesa-dev
mailing list