Module: Mesa Branch: master Commit: 1bce04deb8e62e7fc1c19b1ecc7b6484e33ecf20 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1bce04deb8e62e7fc1c19b1ecc7b6484e33ecf20
Author: Jason Ekstrand <jason.ekstr...@intel.com> Date: Fri Dec 1 03:18:51 2017 -0800 anv/pipeline: Translate vulkan_resource_index to a constant when possible 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. Reviewed-by: Jordan Justen <jordan.l.jus...@intel.com> --- src/intel/vulkan/anv_nir_apply_pipeline_layout.c | 17 +++++++++++++---- 1 file changed, 13 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 612b3f7eff..978a8a57c7 100644 --- a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c +++ b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c @@ -116,12 +116,21 @@ 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_array_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_array_index) { + unsigned array_index = const_array_index->u32[0]; + array_index = MIN2(array_index, array_size - 1); + block_index = nir_imm_int(b, surface_index + array_index); + } 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)); _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit