mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-31 01:10:16 +01:00
anv: Handle nir_intrinsic_vulkan_resource_reindex
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
This commit is contained in:
parent
cfb81f58a0
commit
32c859125b
1 changed files with 27 additions and 1 deletions
|
|
@ -128,6 +128,25 @@ lower_res_index_intrinsic(nir_intrinsic_instr *intrin,
|
|||
nir_instr_remove(&intrin->instr);
|
||||
}
|
||||
|
||||
static void
|
||||
lower_res_reindex_intrinsic(nir_intrinsic_instr *intrin,
|
||||
struct apply_pipeline_layout_state *state)
|
||||
{
|
||||
nir_builder *b = &state->builder;
|
||||
|
||||
/* For us, the resource indices are just indices into the binding table and
|
||||
* array elements are sequential. A resource_reindex just turns into an
|
||||
* add of the two indices.
|
||||
*/
|
||||
assert(intrin->src[0].is_ssa && intrin->src[0].is_ssa);
|
||||
nir_ssa_def *new_index = nir_iadd(b, intrin->src[0].ssa,
|
||||
intrin->src[1].ssa);
|
||||
|
||||
assert(intrin->dest.is_ssa);
|
||||
nir_ssa_def_rewrite_uses(&intrin->dest.ssa, nir_src_for_ssa(new_index));
|
||||
nir_instr_remove(&intrin->instr);
|
||||
}
|
||||
|
||||
static void
|
||||
lower_tex_deref(nir_tex_instr *tex, nir_deref_var *deref,
|
||||
unsigned *const_index, unsigned array_size,
|
||||
|
|
@ -265,8 +284,15 @@ apply_pipeline_layout_block(nir_block *block,
|
|||
switch (instr->type) {
|
||||
case nir_instr_type_intrinsic: {
|
||||
nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
|
||||
if (intrin->intrinsic == nir_intrinsic_vulkan_resource_index) {
|
||||
switch (intrin->intrinsic) {
|
||||
case nir_intrinsic_vulkan_resource_index:
|
||||
lower_res_index_intrinsic(intrin, state);
|
||||
break;
|
||||
case nir_intrinsic_vulkan_resource_reindex:
|
||||
lower_res_reindex_intrinsic(intrin, state);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue