nir: use nir_intrinsic_get_var

Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24004>
This commit is contained in:
Erik Faye-Lund 2023-06-05 12:06:01 +02:00
parent 67a7b66b90
commit 1f9a3ee011
14 changed files with 24 additions and 36 deletions

View file

@ -122,8 +122,7 @@ static void
record_images_used(struct shader_info *info,
nir_intrinsic_instr *instr)
{
nir_variable *var =
nir_deref_instr_get_variable(nir_src_as_deref(instr->src[0]));
nir_variable *var = nir_intrinsic_get_var(instr, 0);
/* Structs have been lowered already, so get_aoa_size is sufficient. */
const unsigned size =

View file

@ -2842,8 +2842,7 @@ nir_rewrite_image_intrinsic(nir_intrinsic_instr *intrin, nir_ssa_def *src,
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_variable *var = nir_intrinsic_get_var(intrin, 0);
/* Only update the format if the intrinsic doesn't have one set */
if (nir_intrinsic_format(intrin) == PIPE_FORMAT_NONE)

View file

@ -1048,8 +1048,7 @@ replace_varying_input_by_constant_load(nir_shader *shader,
nir_builder b = nir_builder_create(impl);
nir_variable *out_var =
nir_deref_instr_get_variable(nir_src_as_deref(store_intr->src[0]));
nir_variable *out_var = nir_intrinsic_get_var(store_intr, 0);
bool progress = false;
nir_foreach_block(block, impl) {
@ -1099,8 +1098,7 @@ replace_duplicate_input(nir_shader *shader, nir_variable *input_var,
nir_builder b = nir_builder_create(impl);
nir_variable *dup_out_var =
nir_deref_instr_get_variable(nir_src_as_deref(dup_store_intr->src[0]));
nir_variable *dup_out_var = nir_intrinsic_get_var(dup_store_intr, 0);
bool progress = false;
nir_foreach_block(block, impl) {
@ -1234,8 +1232,7 @@ replace_varying_input_by_uniform_load(nir_shader *shader,
nir_builder b = nir_builder_create(impl);
nir_variable *out_var =
nir_deref_instr_get_variable(nir_src_as_deref(store_intr->src[0]));
nir_variable *out_var = nir_intrinsic_get_var(store_intr, 0);
nir_intrinsic_instr *load = nir_instr_as_intrinsic(scalar->def->parent_instr);
nir_deref_instr *deref = nir_src_as_deref(load->src[0]);

View file

@ -55,7 +55,7 @@ nir_lower_alpha_test(nir_shader *shader, enum compare_func func,
switch (intr->intrinsic) {
case nir_intrinsic_store_deref:
out = nir_deref_instr_get_variable(nir_src_as_deref(intr->src[0]));
out = nir_intrinsic_get_var(intr, 0);
break;
case nir_intrinsic_store_output:
/* already had i/o lowered.. lookup the matching output var: */

View file

@ -58,7 +58,7 @@ lower_intrinsic(nir_builder *b, nir_intrinsic_instr *intr, nir_shader *shader)
switch (intr->intrinsic) {
case nir_intrinsic_store_deref:
out = nir_deref_instr_get_variable(nir_src_as_deref(intr->src[0]));
out = nir_intrinsic_get_var(intr, 0);
break;
case nir_intrinsic_store_output:
/* already had i/o lowered.. lookup the matching output var: */

View file

@ -60,7 +60,7 @@ lower_fragcolor_instr(nir_builder *b, nir_instr *intr, void *data)
if (instr->intrinsic != nir_intrinsic_store_deref)
return false;
out = nir_deref_instr_get_variable(nir_src_as_deref(instr->src[0]));
out = nir_intrinsic_get_var(instr, 0);
if (out->data.location != FRAG_RESULT_COLOR || out->data.mode != nir_var_shader_out)
return false;
b->cursor = nir_after_instr(&instr->instr);

View file

@ -49,12 +49,6 @@ static nir_variable* tex_get_texture_var(const nir_tex_instr *instr)
return NULL;
}
static nir_variable* intrinsic_get_var(const nir_intrinsic_instr *instr)
{
return nir_deref_instr_get_variable(nir_src_as_deref(instr->src[0]));
}
static void gather_usage_helper(const nir_deref_instr **deref_ptr,
unsigned location,
uint8_t mask,
@ -311,7 +305,7 @@ static void scan_instruction(const struct nir_shader *nir,
info->writes_memory = true;
break;
case nir_intrinsic_load_deref: {
const nir_variable *var = intrinsic_get_var(intr);
const nir_variable *var = nir_intrinsic_get_var(intr, 0);
const nir_variable_mode mode = var->data.mode;
nir_deref_instr *const deref = nir_src_as_deref(intr->src[0]);
enum glsl_base_type base_type =
@ -356,7 +350,7 @@ static void scan_instruction(const struct nir_shader *nir,
case nir_intrinsic_interp_deref_at_centroid:
case nir_intrinsic_interp_deref_at_sample:
case nir_intrinsic_interp_deref_at_offset: {
enum glsl_interp_mode interp = intrinsic_get_var(intr)->data.interpolation;
enum glsl_interp_mode interp = nir_intrinsic_get_var(intr, 0)->data.interpolation;
switch (interp) {
case INTERP_MODE_SMOOTH:
case INTERP_MODE_NONE:

View file

@ -200,7 +200,7 @@ lower_image_cast_instr(nir_builder *b, nir_instr *instr, void *_data)
return false;
const struct d3d12_image_format_conversion_info_arr* info = _data;
nir_variable *image = nir_deref_instr_get_variable(nir_src_as_deref(intr->src[0]));
nir_variable *image = nir_intrinsic_get_var(intr, 0);
assert(image);
if (image->data.driver_location >= info->n_images)

View file

@ -792,7 +792,7 @@ is_multisampling_instr(const nir_instr *instr, const void *_data)
nir_io_semantics semantics = nir_intrinsic_io_semantics(intr);
return semantics.location == FRAG_RESULT_SAMPLE_MASK;
} else if (intr->intrinsic == nir_intrinsic_store_deref) {
nir_variable *var = nir_deref_instr_get_variable(nir_src_as_deref(intr->src[0]));
nir_variable *var = nir_intrinsic_get_var(intr, 0);
return var->data.location == FRAG_RESULT_SAMPLE_MASK;
} else if (intr->intrinsic == nir_intrinsic_load_sample_id ||
intr->intrinsic == nir_intrinsic_load_sample_mask_in)

View file

@ -44,8 +44,8 @@ using std::vector;
struct nir_intrinsic_instr_less {
bool operator()(const nir_intrinsic_instr *lhs, const nir_intrinsic_instr *rhs) const
{
nir_variable *vlhs = nir_deref_instr_get_variable(nir_src_as_deref(lhs->src[0]));
nir_variable *vrhs = nir_deref_instr_get_variable(nir_src_as_deref(rhs->src[0]));
nir_variable *vlhs = nir_intrinsic_get_var(lhs, 0);
nir_variable *vrhs = nir_intrinsic_get_var(rhs, 0);
auto ltype = glsl_get_base_type(vlhs->type);
auto rtype = glsl_get_base_type(vrhs->type);
@ -354,7 +354,7 @@ NirLowerIOToVector::vec_instr_stack_pop(nir_builder *b,
});
nir_intrinsic_instr *intr = *ir_sorted_set.begin();
nir_variable *var = nir_deref_instr_get_variable(nir_src_as_deref(intr->src[0]));
nir_variable *var = nir_intrinsic_get_var(intr, 0);
unsigned loc = var->data.location - m_base_slot;
@ -383,7 +383,7 @@ NirLowerIOToVector::vec_instr_stack_pop(nir_builder *b,
for (auto k = ir_sorted_set.begin() + 1; k != ir_sorted_set.end(); ++k) {
nir_intrinsic_instr *intr2 = *k;
nir_variable *var2 = nir_deref_instr_get_variable(nir_src_as_deref(intr2->src[0]));
nir_variable *var2 = nir_intrinsic_get_var(intr2, 0);
unsigned loc2 = var->data.location - m_base_slot;
if (m_vars[loc][var->data.location_frac] !=

View file

@ -101,8 +101,8 @@ r600_io_access_same_var(const nir_instr *instr1, const nir_instr *instr2)
nir_intrinsic_instr *intr1 = nir_instr_as_intrinsic(instr1);
nir_intrinsic_instr *intr2 = nir_instr_as_intrinsic(instr2);
nir_variable *var1 = nir_deref_instr_get_variable(nir_src_as_deref(intr1->src[0]));
nir_variable *var2 = nir_deref_instr_get_variable(nir_src_as_deref(intr2->src[0]));
nir_variable *var1 = nir_intrinsic_get_var(intr1, 0);
nir_variable *var2 = nir_intrinsic_get_var(intr2, 0);
/* We don't handle combining vars of different base types, so skip those */
if (glsl_get_base_type(var1->type) != glsl_get_base_type(var2->type))
@ -185,7 +185,7 @@ r600_vec_instr_stack_pop(nir_builder *b,
assert(last->type == nir_instr_type_intrinsic);
nir_intrinsic_instr *intr = nir_instr_as_intrinsic(last);
nir_variable *var = nir_deref_instr_get_variable(nir_src_as_deref(intr->src[0]));
nir_variable *var = nir_intrinsic_get_var(intr, 0);
unsigned loc = r600_correct_location(var);
nir_variable *new_var;
@ -229,7 +229,7 @@ r600_hash_instr(const nir_instr *instr)
assert(instr->type == nir_instr_type_intrinsic);
nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr);
nir_variable *var = nir_deref_instr_get_variable(nir_src_as_deref(intr->src[0]));
nir_variable *var = nir_intrinsic_get_var(intr, 0);
uint32_t hash = 0;

View file

@ -2729,7 +2729,7 @@ emit_store_deref(struct ntv_context *ctx, nir_intrinsic_instr *intr)
const struct glsl_type *gtype = nir_src_as_deref(intr->src[0])->type;
SpvId type = get_glsl_type(ctx, gtype);
nir_variable *var = nir_deref_instr_get_variable(nir_src_as_deref(intr->src[0]));
nir_variable *var = nir_intrinsic_get_var(intr, 0);
unsigned wrmask = nir_intrinsic_write_mask(intr);
if (!glsl_type_is_scalar(gtype) &&
wrmask != BITFIELD_MASK(glsl_type_is_array(gtype) ? glsl_get_aoa_size(gtype) : glsl_get_vector_elements(gtype))) {

View file

@ -1651,7 +1651,7 @@ lower_fbfetch_instr(nir_builder *b, nir_instr *instr, void *data)
nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr);
if (intr->intrinsic != nir_intrinsic_load_deref)
return false;
nir_variable *var = nir_deref_instr_get_variable(nir_src_as_deref(intr->src[0]));
nir_variable *var = nir_intrinsic_get_var(intr, 0);
if (!var->data.fb_fetch_output)
return false;
b->cursor = nir_after_instr(instr);
@ -4327,8 +4327,7 @@ scan_nir(struct zink_screen *screen, nir_shader *shader, struct zink_shader *zs)
intr->intrinsic == nir_intrinsic_image_deref_format ||
intr->intrinsic == nir_intrinsic_image_deref_order) {
nir_variable *var =
nir_deref_instr_get_variable(nir_src_as_deref(intr->src[0]));
nir_variable *var = nir_intrinsic_get_var(intr, 0);
/* Structs have been lowered already, so get_aoa_size is sufficient. */
const unsigned size =

View file

@ -2599,7 +2599,7 @@ guess_image_format_for_var(nir_shader *s, nir_variable *var)
case nir_intrinsic_image_deref_store:
case nir_intrinsic_image_deref_atomic:
case nir_intrinsic_image_deref_atomic_swap:
if (nir_deref_instr_get_variable(nir_src_as_deref(intr->src[0])) != var)
if (nir_intrinsic_get_var(intr, 0) != var)
continue;
break;
case nir_intrinsic_image_load: