nir: use const_index helpers

Signed-off-by: Rob Clark <robclark@freedesktop.org>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
Rob Clark
2016-01-21 14:12:58 -05:00
parent 6921762de6
commit ced8d3e773
11 changed files with 23 additions and 24 deletions

View File

@@ -343,7 +343,7 @@ nir_store_var(nir_builder *build, nir_variable *var, nir_ssa_def *value,
nir_intrinsic_instr *store = nir_intrinsic_instr *store =
nir_intrinsic_instr_create(build->shader, nir_intrinsic_store_var); nir_intrinsic_instr_create(build->shader, nir_intrinsic_store_var);
store->num_components = num_components; store->num_components = num_components;
store->const_index[0] = writemask; nir_intrinsic_set_write_mask(store, writemask);
store->variables[0] = nir_deref_var_create(store, var); store->variables[0] = nir_deref_var_create(store, var);
store->src[0] = nir_src_for_ssa(value); store->src[0] = nir_src_for_ssa(value);
nir_builder_instr_insert(build, &store->instr); nir_builder_instr_insert(build, &store->instr);

View File

@@ -70,8 +70,8 @@ lower_instr(nir_intrinsic_instr *instr,
unsigned uniform_loc = instr->variables[0]->var->data.location; unsigned uniform_loc = instr->variables[0]->var->data.location;
nir_intrinsic_instr *new_instr = nir_intrinsic_instr_create(mem_ctx, op); nir_intrinsic_instr *new_instr = nir_intrinsic_instr_create(mem_ctx, op);
new_instr->const_index[0] = nir_intrinsic_set_base(new_instr,
state->shader_program->UniformStorage[uniform_loc].opaque[state->shader->stage].index; state->shader_program->UniformStorage[uniform_loc].opaque[state->shader->stage].index);
nir_load_const_instr *offset_const = nir_load_const_instr_create(mem_ctx, 1); nir_load_const_instr *offset_const = nir_load_const_instr_create(mem_ctx, 1);
offset_const->value.u[0] = instr->variables[0]->var->data.offset; offset_const->value.u[0] = instr->variables[0]->var->data.offset;

View File

@@ -71,8 +71,8 @@ store_clipdist_output(nir_builder *b, nir_variable *out, nir_ssa_def **val)
store = nir_intrinsic_instr_create(b->shader, nir_intrinsic_store_output); store = nir_intrinsic_instr_create(b->shader, nir_intrinsic_store_output);
store->num_components = 4; store->num_components = 4;
store->const_index[0] = out->data.driver_location; nir_intrinsic_set_base(store, out->data.driver_location);
store->const_index[1] = 0xf; /* wrmask */ nir_intrinsic_set_write_mask(store, 0xf);
store->src[0].ssa = nir_vec4(b, val[0], val[1], val[2], val[3]); store->src[0].ssa = nir_vec4(b, val[0], val[1], val[2], val[3]);
store->src[0].is_ssa = true; store->src[0].is_ssa = true;
store->src[1] = nir_src_for_ssa(nir_imm_int(b, 0)); store->src[1] = nir_src_for_ssa(nir_imm_int(b, 0));
@@ -86,7 +86,7 @@ load_clipdist_input(nir_builder *b, nir_variable *in, nir_ssa_def **val)
load = nir_intrinsic_instr_create(b->shader, nir_intrinsic_load_input); load = nir_intrinsic_instr_create(b->shader, nir_intrinsic_load_input);
load->num_components = 4; load->num_components = 4;
load->const_index[0] = in->data.driver_location; nir_intrinsic_set_base(load, in->data.driver_location);
load->src[0] = nir_src_for_ssa(nir_imm_int(b, 0)); load->src[0] = nir_src_for_ssa(nir_imm_int(b, 0));
nir_ssa_dest_init(&load->instr, &load->dest, 4, NULL); nir_ssa_dest_init(&load->instr, &load->dest, 4, NULL);
nir_builder_instr_insert(b, &load->instr); nir_builder_instr_insert(b, &load->instr);
@@ -112,7 +112,7 @@ find_output_in_block(nir_block *block, void *void_state)
if (instr->type == nir_instr_type_intrinsic) { if (instr->type == nir_instr_type_intrinsic) {
nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr);
if ((intr->intrinsic == nir_intrinsic_store_output) && if ((intr->intrinsic == nir_intrinsic_store_output) &&
intr->const_index[0] == state->drvloc) { nir_intrinsic_base(intr) == state->drvloc) {
assert(state->def == NULL); assert(state->def == NULL);
assert(intr->src[0].is_ssa); assert(intr->src[0].is_ssa);
assert(nir_src_as_const_value(intr->src[1])); assert(nir_src_as_const_value(intr->src[1]));

View File

@@ -93,7 +93,7 @@ rewrite_emit_vertex(nir_intrinsic_instr *intrin, struct state *state)
nir_intrinsic_instr *lowered = nir_intrinsic_instr *lowered =
nir_intrinsic_instr_create(b->shader, nir_intrinsic_instr_create(b->shader,
nir_intrinsic_emit_vertex_with_counter); nir_intrinsic_emit_vertex_with_counter);
lowered->const_index[0] = intrin->const_index[0]; nir_intrinsic_set_stream_id(lowered, nir_intrinsic_stream_id(intrin));
lowered->src[0] = nir_src_for_ssa(count); lowered->src[0] = nir_src_for_ssa(count);
nir_builder_instr_insert(b, &lowered->instr); nir_builder_instr_insert(b, &lowered->instr);
@@ -121,7 +121,7 @@ rewrite_end_primitive(nir_intrinsic_instr *intrin, struct state *state)
nir_intrinsic_instr *lowered = nir_intrinsic_instr *lowered =
nir_intrinsic_instr_create(b->shader, nir_intrinsic_instr_create(b->shader,
nir_intrinsic_end_primitive_with_counter); nir_intrinsic_end_primitive_with_counter);
lowered->const_index[0] = intrin->const_index[0]; nir_intrinsic_set_stream_id(lowered, nir_intrinsic_stream_id(intrin));
lowered->src[0] = nir_src_for_ssa(count); lowered->src[0] = nir_src_for_ssa(count);
nir_builder_instr_insert(b, &lowered->instr); nir_builder_instr_insert(b, &lowered->instr);

View File

@@ -213,8 +213,8 @@ nir_lower_io_block(nir_block *block, void *void_state)
load_op(state, mode, per_vertex)); load_op(state, mode, per_vertex));
load->num_components = intrin->num_components; load->num_components = intrin->num_components;
load->const_index[0] = nir_intrinsic_set_base(load,
intrin->variables[0]->var->data.driver_location; intrin->variables[0]->var->data.driver_location);
if (per_vertex) if (per_vertex)
load->src[0] = nir_src_for_ssa(vertex_index); load->src[0] = nir_src_for_ssa(vertex_index);
@@ -258,11 +258,9 @@ nir_lower_io_block(nir_block *block, void *void_state)
nir_src_copy(&store->src[0], &intrin->src[0], store); nir_src_copy(&store->src[0], &intrin->src[0], store);
store->const_index[0] = nir_intrinsic_set_base(store,
intrin->variables[0]->var->data.driver_location; intrin->variables[0]->var->data.driver_location);
nir_intrinsic_set_write_mask(store, nir_intrinsic_write_mask(intrin));
/* Copy the writemask */
store->const_index[1] = intrin->const_index[0];
if (per_vertex) if (per_vertex)
store->src[1] = nir_src_for_ssa(vertex_index); store->src[1] = nir_src_for_ssa(vertex_index);

View File

@@ -243,7 +243,7 @@ lower_locals_to_regs_block(nir_block *block, void *void_state)
nir_alu_instr *mov = nir_alu_instr_create(state->shader, nir_op_imov); nir_alu_instr *mov = nir_alu_instr_create(state->shader, nir_op_imov);
nir_src_copy(&mov->src[0].src, &intrin->src[0], mov); nir_src_copy(&mov->src[0].src, &intrin->src[0], mov);
mov->dest.write_mask = intrin->const_index[0]; mov->dest.write_mask = nir_intrinsic_write_mask(intrin);
mov->dest.dest.is_ssa = false; mov->dest.dest.is_ssa = false;
mov->dest.dest.reg.reg = reg_src.reg.reg; mov->dest.dest.reg.reg = reg_src.reg.reg;
mov->dest.dest.reg.base_offset = reg_src.reg.base_offset; mov->dest.dest.reg.base_offset = reg_src.reg.base_offset;

View File

@@ -72,7 +72,7 @@ load_input(nir_builder *b, nir_variable *in)
load = nir_intrinsic_instr_create(b->shader, nir_intrinsic_load_input); load = nir_intrinsic_instr_create(b->shader, nir_intrinsic_load_input);
load->num_components = 4; load->num_components = 4;
load->const_index[0] = in->data.driver_location; nir_intrinsic_set_base(load, in->data.driver_location);
load->src[0] = nir_src_for_ssa(nir_imm_int(b, 0)); load->src[0] = nir_src_for_ssa(nir_imm_int(b, 0));
nir_ssa_dest_init(&load->instr, &load->dest, 4, NULL); nir_ssa_dest_init(&load->instr, &load->dest, 4, NULL);
nir_builder_instr_insert(b, &load->instr); nir_builder_instr_insert(b, &load->instr);
@@ -151,7 +151,7 @@ nir_lower_two_sided_color_block(nir_block *block, void *void_state)
for (idx = 0; idx < state->colors_count; idx++) { for (idx = 0; idx < state->colors_count; idx++) {
unsigned drvloc = unsigned drvloc =
state->colors[idx].front->data.driver_location; state->colors[idx].front->data.driver_location;
if (intr->const_index[0] == drvloc) { if (nir_intrinsic_base(intr) == drvloc) {
assert(nir_src_as_const_value(intr->src[0])); assert(nir_src_as_const_value(intr->src[0]));
break; break;
} }

View File

@@ -128,7 +128,7 @@ emit_copy_load_store(nir_intrinsic_instr *copy_instr,
nir_intrinsic_instr *store = nir_intrinsic_instr *store =
nir_intrinsic_instr_create(mem_ctx, nir_intrinsic_store_var); nir_intrinsic_instr_create(mem_ctx, nir_intrinsic_store_var);
store->num_components = num_components; store->num_components = num_components;
store->const_index[0] = (1 << num_components) - 1; nir_intrinsic_set_write_mask(store, (1 << num_components) - 1);
store->variables[0] = nir_deref_as_var(nir_copy_deref(store, &dest_head->deref)); store->variables[0] = nir_deref_as_var(nir_copy_deref(store, &dest_head->deref));
store->src[0].is_ssa = true; store->src[0].is_ssa = true;

View File

@@ -682,7 +682,8 @@ rename_variables_block(nir_block *block, struct lower_variables_state *state)
nir_ssa_def *new_def; nir_ssa_def *new_def;
b.cursor = nir_before_instr(&intrin->instr); b.cursor = nir_before_instr(&intrin->instr);
if (intrin->const_index[0] == (1 << intrin->num_components) - 1) { unsigned wrmask = nir_intrinsic_write_mask(intrin);
if (wrmask == (1 << intrin->num_components) - 1) {
/* Whole variable store - just copy the source. Note that /* Whole variable store - just copy the source. Note that
* intrin->num_components and intrin->src[0].ssa->num_components * intrin->num_components and intrin->src[0].ssa->num_components
* may differ. * may differ.
@@ -701,7 +702,7 @@ rename_variables_block(nir_block *block, struct lower_variables_state *state)
*/ */
nir_ssa_def *srcs[4]; nir_ssa_def *srcs[4];
for (unsigned i = 0; i < intrin->num_components; i++) { for (unsigned i = 0; i < intrin->num_components; i++) {
if (intrin->const_index[0] & (1 << i)) { if (wrmask & (1 << i)) {
srcs[i] = nir_channel(&b, intrin->src[0].ssa, i); srcs[i] = nir_channel(&b, intrin->src[0].ssa, i);
} else { } else {
srcs[i] = nir_channel(&b, old_def, i); srcs[i] = nir_channel(&b, old_def, i);

View File

@@ -530,7 +530,7 @@ print_intrinsic_instr(nir_intrinsic_instr *instr, print_state *state)
} }
nir_foreach_variable(var, var_list) { nir_foreach_variable(var, var_list) {
if ((var->data.driver_location == instr->const_index[0]) && if ((var->data.driver_location == nir_intrinsic_base(instr)) &&
var->name) { var->name) {
fprintf(fp, "\t/* %s */", var->name); fprintf(fp, "\t/* %s */", var->name);
break; break;

View File

@@ -417,7 +417,7 @@ validate_intrinsic_instr(nir_intrinsic_instr *instr, validate_state *state)
assert(instr->variables[0]->var->data.mode != nir_var_shader_in && assert(instr->variables[0]->var->data.mode != nir_var_shader_in &&
instr->variables[0]->var->data.mode != nir_var_uniform && instr->variables[0]->var->data.mode != nir_var_uniform &&
instr->variables[0]->var->data.mode != nir_var_shader_storage); instr->variables[0]->var->data.mode != nir_var_shader_storage);
assert((instr->const_index[0] & ~((1 << instr->num_components) - 1)) == 0); assert((nir_intrinsic_write_mask(instr) & ~((1 << instr->num_components) - 1)) == 0);
break; break;
} }
case nir_intrinsic_copy_var: case nir_intrinsic_copy_var: