gallium/ttn: minor cleanup

v2: also use ttn_src_for_indirect() everywhere for addr access, rather
    than open-coding it for INPUT/CONST srcs
v3: move ralloc out of ttn_src_for_indirect() into the one call site
    that needs a ptr

Signed-off-by: Rob Clark <robclark@freedesktop.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Rob Clark 2015-04-11 15:25:58 -04:00
parent a3cce7a38e
commit 8efe20467b
1 changed files with 17 additions and 23 deletions

View File

@ -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;
}