[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