[Mesa-dev] [PATCH 10/12] nir: Store num_direct_uniforms in the nir_shader.

Ian Romanick idr at freedesktop.org
Wed Apr 8 12:48:01 PDT 2015


On 04/08/2015 12:06 AM, Kenneth Graunke wrote:
> Storing this here is pretty sketchy - I don't know if any driver other
> than i965 will want to use it.  But this will make it a lot easier to
> generate NIR code at link time.  We'll probably rework it anyway.
> 
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/glsl/nir/nir.h                       | 3 +++
>  src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 5 +++--
>  2 files changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h
> index e844e4d..7d11996 100644
> --- a/src/glsl/nir/nir.h
> +++ b/src/glsl/nir/nir.h
> @@ -1429,6 +1429,9 @@ typedef struct nir_shader {
>      * access plus one
>      */
>     unsigned num_inputs, num_uniforms, num_outputs;
> +
> +   /** the number of uniforms that are only accessed directly */
> +   unsigned num_direct_uniforms;
>  } nir_shader;
>  
>  #define nir_foreach_overload(shader, overload)                        \
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> index 145a447..034b79a 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> @@ -120,7 +120,7 @@ fs_visitor::emit_nir_code()
>  
>     if (shader_prog) {
>        nir_assign_var_locations_scalar_direct_first(nir, &nir->uniforms,
> -                                                   &num_direct_uniforms,
> +                                                   &nir->num_direct_uniforms,
>                                                     &nir->num_uniforms);

Why not just have nir_assign_var_locations_scalar_direct_first modify
the nir_shader passed in?  That seems more concise.

>     } else {
>        /* ARB programs generally create a giant array of "uniform" data, and allow
> @@ -128,7 +128,7 @@ fs_visitor::emit_nir_code()
>         * analysis, it's all or nothing.  num_direct_uniforms is only useful when
>         * we have some direct and some indirect access; it doesn't matter here.
>         */
> -      num_direct_uniforms = 0;
> +      nir->num_direct_uniforms = 0;
>     }
>     nir_assign_var_locations_scalar(&nir->inputs, &nir->num_inputs);
>     nir_assign_var_locations_scalar(&nir->outputs, &nir->num_outputs);
> @@ -343,6 +343,7 @@ void
>  fs_visitor::nir_setup_uniforms(nir_shader *shader)
>  {
>     uniforms = shader->num_uniforms;
> +   num_direct_uniforms = shader->num_direct_uniforms;
>  
>     /* We split the uniform register file in half.  The first half is
>      * entirely direct uniforms.  The second half is indirect.
> 



More information about the mesa-dev mailing list