summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/auxiliary/nir/tgsi_to_nir.c40
1 files changed, 17 insertions, 23 deletions
diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c b/src/gallium/auxiliary/nir/tgsi_to_nir.c
index 42671c8bb18..b6123e036f2 100644
--- a/src/gallium/auxiliary/nir/tgsi_to_nir.c
+++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c
@@ -52,7 +52,6 @@ struct ttn_reg_info {
struct ttn_compile {
union tgsi_full_token *token;
nir_builder build;
- struct nir_shader *s;
struct tgsi_shader_info *scan;
struct ttn_reg_info *output_regs;
@@ -256,7 +255,7 @@ ttn_emit_immediate(struct ttn_compile *c)
nir_instr_insert_after_cf_list(b->cf_node_list, &load_const->instr);
}
-static nir_src *
+static nir_src
ttn_src_for_indirect(struct ttn_compile *c, struct tgsi_ind_register *indirect);
/* generate either a constant or indirect deref chain for accessing an
@@ -275,7 +274,7 @@ ttn_array_deref(struct ttn_compile *c, nir_intrinsic_instr *instr,
if (indirect) {
arr->deref_array_type = nir_deref_array_type_indirect;
- arr->indirect = *ttn_src_for_indirect(c, indirect);
+ arr->indirect = ttn_src_for_indirect(c, indirect);
} else {
arr->deref_array_type = nir_deref_array_type_direct;
}
@@ -361,35 +360,29 @@ ttn_src_for_file_and_index(struct ttn_compile *c, unsigned file, unsigned index,
case TGSI_FILE_INPUT:
case TGSI_FILE_CONSTANT: {
nir_intrinsic_instr *load;
+ nir_intrinsic_op op;
switch (file) {
case TGSI_FILE_INPUT:
- load = nir_intrinsic_instr_create(b->shader,
- indirect ?
- nir_intrinsic_load_input_indirect :
- nir_intrinsic_load_input);
+ op = indirect ? nir_intrinsic_load_input_indirect :
+ nir_intrinsic_load_input;
break;
case TGSI_FILE_CONSTANT:
- load = nir_intrinsic_instr_create(b->shader,
- indirect ?
- nir_intrinsic_load_uniform_indirect :
- nir_intrinsic_load_uniform);
+ op = indirect ? nir_intrinsic_load_uniform_indirect :
+ nir_intrinsic_load_uniform;
break;
default:
unreachable("No other load files supported");
break;
}
+ load = nir_intrinsic_instr_create(b->shader, op);
+
load->num_components = 4;
load->const_index[0] = index;
load->const_index[1] = 1;
if (indirect) {
- nir_alu_src indirect_address;
- memset(&indirect_address, 0, sizeof(indirect_address));
- indirect_address.src = nir_src_for_reg(c->addr_reg);
- for (int i = 0; i < 4; i++)
- indirect_address.swizzle[i] = indirect->Swizzle;
- load->src[0] = nir_src_for_ssa(nir_imov_alu(b, indirect_address, 1));
+ load->src[0] = ttn_src_for_indirect(c, indirect);
}
nir_ssa_dest_init(&load->instr, &load->dest, 4, NULL);
nir_instr_insert_after_cf_list(b->cf_node_list, &load->instr);
@@ -406,7 +399,7 @@ ttn_src_for_file_and_index(struct ttn_compile *c, unsigned file, unsigned index,
return src;
}
-static nir_src *
+static nir_src
ttn_src_for_indirect(struct ttn_compile *c, struct tgsi_ind_register *indirect)
{
nir_builder *b = &c->build;
@@ -417,9 +410,7 @@ ttn_src_for_indirect(struct ttn_compile *c, struct tgsi_ind_register *indirect)
src.src = ttn_src_for_file_and_index(c,
indirect->File,
indirect->Index, NULL);
- nir_src *result = ralloc(b->shader, nir_src);
- *result = nir_src_for_ssa(nir_imov_alu(b, src, 1));
- return result;
+ return nir_src_for_ssa(nir_imov_alu(b, src, 1));
}
static nir_alu_dest
@@ -486,8 +477,11 @@ ttn_get_dest(struct ttn_compile *c, struct tgsi_full_dst_register *tgsi_fdst)
dest.write_mask = tgsi_dst->WriteMask;
dest.saturate = false;
- if (tgsi_dst->Indirect && (tgsi_dst->File != TGSI_FILE_TEMPORARY))
- dest.dest.reg.indirect = ttn_src_for_indirect(c, &tgsi_fdst->Indirect);
+ if (tgsi_dst->Indirect && (tgsi_dst->File != TGSI_FILE_TEMPORARY)) {
+ nir_src *indirect = ralloc(c->build.shader, nir_src);
+ *indirect = ttn_src_for_indirect(c, &tgsi_fdst->Indirect);
+ dest.dest.reg.indirect = indirect;
+ }
return dest;
}