mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 12:50:10 +01:00
nir: move brw_nir_rewrite_image_intrinsic into common code
Signed-off-by: Karol Herbst <kherbst@redhat.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
400f0bfba1
commit
3b2a9ffd60
6 changed files with 47 additions and 44 deletions
|
|
@ -1989,3 +1989,43 @@ nir_get_single_slot_attribs_mask(uint64_t attribs, uint64_t dual_slot)
|
|||
}
|
||||
return attribs;
|
||||
}
|
||||
|
||||
void
|
||||
nir_rewrite_image_intrinsic(nir_intrinsic_instr *intrin, nir_ssa_def *src)
|
||||
{
|
||||
switch (intrin->intrinsic) {
|
||||
#define CASE(op) \
|
||||
case nir_intrinsic_image_deref_##op: \
|
||||
intrin->intrinsic = nir_intrinsic_image_##op; \
|
||||
break;
|
||||
CASE(load)
|
||||
CASE(store)
|
||||
CASE(atomic_add)
|
||||
CASE(atomic_min)
|
||||
CASE(atomic_max)
|
||||
CASE(atomic_and)
|
||||
CASE(atomic_or)
|
||||
CASE(atomic_xor)
|
||||
CASE(atomic_exchange)
|
||||
CASE(atomic_comp_swap)
|
||||
CASE(atomic_fadd)
|
||||
CASE(size)
|
||||
CASE(samples)
|
||||
CASE(load_raw_intel)
|
||||
CASE(store_raw_intel)
|
||||
#undef CASE
|
||||
default:
|
||||
unreachable("Unhanded image intrinsic");
|
||||
}
|
||||
|
||||
nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]);
|
||||
nir_variable *var = nir_deref_instr_get_variable(deref);
|
||||
|
||||
nir_intrinsic_set_image_dim(intrin, glsl_get_sampler_dim(deref->type));
|
||||
nir_intrinsic_set_image_array(intrin, glsl_sampler_type_is_array(deref->type));
|
||||
nir_intrinsic_set_access(intrin, var->data.image.access);
|
||||
nir_intrinsic_set_format(intrin, var->data.image.format);
|
||||
|
||||
nir_instr_rewrite_src(&intrin->instr, &intrin->src[0],
|
||||
nir_src_for_ssa(src));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1407,6 +1407,10 @@ nir_intrinsic_align(const nir_intrinsic_instr *intrin)
|
|||
return align_offset ? 1 << (ffs(align_offset) - 1) : align_mul;
|
||||
}
|
||||
|
||||
/* Converts a image_deref_* intrinsic into a image_* one */
|
||||
void nir_rewrite_image_intrinsic(nir_intrinsic_instr *instr,
|
||||
nir_ssa_def *handle);
|
||||
|
||||
/**
|
||||
* \group texture information
|
||||
*
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ iris_lower_storage_image_derefs(nir_shader *nir)
|
|||
nir_ssa_def *index =
|
||||
nir_iadd(&b, nir_imm_int(&b, var->data.driver_location),
|
||||
get_aoa_deref_offset(&b, deref, 1));
|
||||
brw_nir_rewrite_image_intrinsic(intrin, index);
|
||||
nir_rewrite_image_intrinsic(intrin, index);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -801,44 +801,3 @@ brw_nir_lower_image_load_store(nir_shader *shader,
|
|||
|
||||
return progress;
|
||||
}
|
||||
|
||||
void
|
||||
brw_nir_rewrite_image_intrinsic(nir_intrinsic_instr *intrin,
|
||||
nir_ssa_def *index)
|
||||
{
|
||||
nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]);
|
||||
nir_variable *var = nir_deref_instr_get_variable(deref);
|
||||
|
||||
switch (intrin->intrinsic) {
|
||||
#define CASE(op) \
|
||||
case nir_intrinsic_image_deref_##op: \
|
||||
intrin->intrinsic = nir_intrinsic_image_##op; \
|
||||
break;
|
||||
CASE(load)
|
||||
CASE(store)
|
||||
CASE(atomic_add)
|
||||
CASE(atomic_min)
|
||||
CASE(atomic_max)
|
||||
CASE(atomic_and)
|
||||
CASE(atomic_or)
|
||||
CASE(atomic_xor)
|
||||
CASE(atomic_exchange)
|
||||
CASE(atomic_comp_swap)
|
||||
CASE(atomic_fadd)
|
||||
CASE(size)
|
||||
CASE(samples)
|
||||
CASE(load_raw_intel)
|
||||
CASE(store_raw_intel)
|
||||
#undef CASE
|
||||
default:
|
||||
unreachable("Unhanded image intrinsic");
|
||||
}
|
||||
|
||||
nir_intrinsic_set_image_dim(intrin, glsl_get_sampler_dim(deref->type));
|
||||
nir_intrinsic_set_image_array(intrin, glsl_sampler_type_is_array(deref->type));
|
||||
nir_intrinsic_set_access(intrin, var->data.image.access);
|
||||
nir_intrinsic_set_format(intrin, var->data.image.format);
|
||||
|
||||
nir_instr_rewrite_src(&intrin->instr, &intrin->src[0],
|
||||
nir_src_for_ssa(index));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -292,7 +292,7 @@ lower_image_intrinsic(nir_intrinsic_instr *intrin,
|
|||
} else {
|
||||
unsigned binding_offset = state->set[set].surface_offsets[binding];
|
||||
index = nir_iadd(b, index, nir_imm_int(b, binding_offset));
|
||||
brw_nir_rewrite_image_intrinsic(intrin, index);
|
||||
nir_rewrite_image_intrinsic(intrin, index);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -347,7 +347,7 @@ brw_nir_lower_gl_images(nir_shader *shader,
|
|||
b.cursor = nir_before_instr(&intrin->instr);
|
||||
nir_ssa_def *index = nir_iadd(&b, nir_imm_int(&b, image_var_idx),
|
||||
get_aoa_deref_offset(&b, deref, 1));
|
||||
brw_nir_rewrite_image_intrinsic(intrin, index);
|
||||
nir_rewrite_image_intrinsic(intrin, index);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue