Re: [Mesa-dev] [PATCH 1/6] anv/pipeline: Translate vulkan_resource_index to a constant when possible

2017-12-02 Thread Jordan Justen
On 2017-12-01 17:20:04, Jason Ekstrand wrote:
> We want to call brw_nir_analyze_ubo_ranges immedately after
> anv_nir_apply_pipeline_layout and it badly wants constants.  We could
> run an optimization step and let constant folding do it but that's way
> more expensive than needed.  It's really easy to just handle constants
> in apply_pipeline_layout.
> ---
>  src/intel/vulkan/anv_nir_apply_pipeline_layout.c | 15 +++
>  1 file changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c 
> b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c
> index f8d8164..4f7680b 100644
> --- a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c
> +++ b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c
> @@ -116,12 +116,19 @@ lower_res_index_intrinsic(nir_intrinsic_instr *intrin,
> uint32_t array_size =
>state->layout->set[set].layout->binding[binding].array_size;
>  
> -   nir_ssa_def *block_index = nir_ssa_for_src(b, intrin->src[0], 1);
> +   nir_const_value *const_block_index = 
> nir_src_as_const_value(intrin->src[0]);
>  
> -   if (state->add_bounds_checks)
> -  block_index = nir_umin(b, block_index, nir_imm_int(b, array_size - 1));
> +   nir_ssa_def *block_index;
> +   if (const_block_index) {
> +  block_index = nir_imm_int(b, surface_index + 
> const_block_index->u32[0]);

I'm guessing that if this is constant, then it'll have been bounds
checked elsewhere? If not, I guess you could do something easy here
with array_size.

Reviewed-by: Jordan Justen 

> +   } else {
> +  block_index = nir_ssa_for_src(b, intrin->src[0], 1);
>  
> -   block_index = nir_iadd(b, nir_imm_int(b, surface_index), block_index);
> +  if (state->add_bounds_checks)
> + block_index = nir_umin(b, block_index, nir_imm_int(b, array_size - 
> 1));
> +
> +  block_index = nir_iadd(b, nir_imm_int(b, surface_index), block_index);
> +   }
>  
> assert(intrin->dest.is_ssa);
> nir_ssa_def_rewrite_uses(&intrin->dest.ssa, nir_src_for_ssa(block_index));
> -- 
> 2.5.0.400.gff86faf
> 
> ___
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 1/6] anv/pipeline: Translate vulkan_resource_index to a constant when possible

2017-12-03 Thread Jason Ekstrand
On Sat, Dec 2, 2017 at 11:09 PM, Jordan Justen 
wrote:

> On 2017-12-01 17:20:04, Jason Ekstrand wrote:
> > We want to call brw_nir_analyze_ubo_ranges immedately after
> > anv_nir_apply_pipeline_layout and it badly wants constants.  We could
> > run an optimization step and let constant folding do it but that's way
> > more expensive than needed.  It's really easy to just handle constants
> > in apply_pipeline_layout.
> > ---
> >  src/intel/vulkan/anv_nir_apply_pipeline_layout.c | 15 +++
> >  1 file changed, 11 insertions(+), 4 deletions(-)
> >
> > diff --git a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c
> b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c
> > index f8d8164..4f7680b 100644
> > --- a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c
> > +++ b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c
> > @@ -116,12 +116,19 @@ lower_res_index_intrinsic(nir_intrinsic_instr
> *intrin,
> > uint32_t array_size =
> >state->layout->set[set].layout->binding[binding].array_size;
> >
> > -   nir_ssa_def *block_index = nir_ssa_for_src(b, intrin->src[0], 1);
> > +   nir_const_value *const_block_index = nir_src_as_const_value(intrin-
> >src[0]);
> >
> > -   if (state->add_bounds_checks)
> > -  block_index = nir_umin(b, block_index, nir_imm_int(b, array_size
> - 1));
> > +   nir_ssa_def *block_index;
> > +   if (const_block_index) {
> > +  block_index = nir_imm_int(b, surface_index +
> const_block_index->u32[0]);
>
> I'm guessing that if this is constant, then it'll have been bounds
> checked elsewhere? If not, I guess you could do something easy here
> with array_size.
>

Thanks!  I meant to but forgot.  Fixed locally.


> Reviewed-by: Jordan Justen 
>
> > +   } else {
> > +  block_index = nir_ssa_for_src(b, intrin->src[0], 1);
> >
> > -   block_index = nir_iadd(b, nir_imm_int(b, surface_index),
> block_index);
> > +  if (state->add_bounds_checks)
> > + block_index = nir_umin(b, block_index, nir_imm_int(b,
> array_size - 1));
> > +
> > +  block_index = nir_iadd(b, nir_imm_int(b, surface_index),
> block_index);
> > +   }
> >
> > assert(intrin->dest.is_ssa);
> > nir_ssa_def_rewrite_uses(&intrin->dest.ssa,
> nir_src_for_ssa(block_index));
> > --
> > 2.5.0.400.gff86faf
> >
> > ___
> > mesa-dev mailing list
> > mesa-dev@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev