nir_builder b;
nir_builder_init(&b, impl);
- nir_metadata preserved = nir_metadata_block_index ||
+ nir_metadata preserved = nir_metadata_block_index |
nir_metadata_dominance;
bool progress = false;
b.cursor = nir_after_instr(instr);
nir_ssa_def *new_def = lower(&b, instr, cb_data);
- if (new_def) {
+ if (new_def && new_def != NIR_LOWER_INSTR_PROGRESS) {
assert(old_def != NULL);
if (new_def->parent_instr->block != instr->block)
preserved = nir_metadata_none;
list_replace(&old_if_uses, &old_def->if_uses);
}
iter = nir_after_instr(instr);
+
+ if (new_def == NIR_LOWER_INSTR_PROGRESS)
+ progress = true;
}
}
nir_rewrite_image_intrinsic(nir_intrinsic_instr *intrin, nir_ssa_def *src,
bool bindless)
{
+ enum gl_access_qualifier access = nir_intrinsic_access(intrin);
+
switch (intrin->intrinsic) {
#define CASE(op) \
case nir_intrinsic_image_deref_##op: \
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, access | var->data.image.access);
nir_intrinsic_set_format(intrin, var->data.image.format);
nir_instr_rewrite_src(&intrin->instr, &intrin->src[0],