On Sat, Dec 2, 2017 at 11:09 PM, Jordan Justen <jordan.l.jus...@intel.com> 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 <jordan.l.jus...@intel.com> > > > + } 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