mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-30 23:00:11 +01:00
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.justen@intel.com>
This commit is contained in:
parent
3b34ed79f1
commit
1bce04deb8
1 changed files with 13 additions and 4 deletions
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue