nir_intrinsic_instr_create(b->shader,
nir_intrinsic_load_input);
load->num_components = 1;
- load->const_index[0] = VC4_NIR_TLB_COLOR_READ_INPUT + sample;
+ nir_intrinsic_set_base(load, VC4_NIR_TLB_COLOR_READ_INPUT + sample);
load->src[0] = nir_src_for_ssa(nir_imm_int(b, 0));
nir_ssa_dest_init(&load->instr, &load->dest, 1, 32, NULL);
nir_builder_instr_insert(b, &load->instr);
nir_intrinsic_instr *intr =
nir_intrinsic_instr_create(c->s, nir_intrinsic_store_output);
intr->num_components = 1;
- intr->const_index[0] = sample_mask->data.driver_location;
+ nir_intrinsic_set_base(intr, sample_mask->data.driver_location);
intr->src[0] = nir_src_for_ssa(val);
intr->src[1] = nir_src_for_ssa(nir_imm_int(b, 0));
nir_variable *output_var = NULL;
nir_foreach_variable(var, &c->s->outputs) {
- if (var->data.driver_location == intr->const_index[0]) {
+ if (var->data.driver_location ==
+ nir_intrinsic_base(intr)) {
output_var = var;
break;
}
{
b->cursor = nir_before_instr(&intr->instr);
- int attr = intr->const_index[0];
+ int attr = nir_intrinsic_base(intr);
enum pipe_format format = c->vs_key->attr_formats[attr];
uint32_t attr_size = util_format_get_blocksize(format);
nir_intrinsic_instr_create(c->s,
nir_intrinsic_load_input);
intr_comp->num_components = 1;
- intr_comp->const_index[0] = intr->const_index[0] * 4 + i;
+ nir_intrinsic_set_base(intr_comp,
+ nir_intrinsic_base(intr) * 4 + i);
intr_comp->src[0] = nir_src_for_ssa(nir_imm_int(b, 0));
nir_ssa_dest_init(&intr_comp->instr, &intr_comp->dest, 1, 32, NULL);
nir_builder_instr_insert(b, &intr_comp->instr);
{
b->cursor = nir_before_instr(&intr->instr);
- if (intr->const_index[0] >= VC4_NIR_TLB_COLOR_READ_INPUT &&
- intr->const_index[0] < (VC4_NIR_TLB_COLOR_READ_INPUT +
- VC4_MAX_SAMPLES)) {
+ if (nir_intrinsic_base(intr) >= VC4_NIR_TLB_COLOR_READ_INPUT &&
+ nir_intrinsic_base(intr) < (VC4_NIR_TLB_COLOR_READ_INPUT +
+ VC4_MAX_SAMPLES)) {
/* This doesn't need any lowering. */
return;
}
nir_variable *input_var = NULL;
nir_foreach_variable(var, &c->s->inputs) {
- if (var->data.driver_location == intr->const_index[0]) {
+ if (var->data.driver_location == nir_intrinsic_base(intr)) {
input_var = var;
break;
}
nir_intrinsic_instr *intr_comp =
nir_intrinsic_instr_create(c->s, nir_intrinsic_load_input);
intr_comp->num_components = 1;
- intr_comp->const_index[0] = intr->const_index[0] * 4 + i;
+ nir_intrinsic_set_base(intr_comp,
+ nir_intrinsic_base(intr) * 4 + i);
intr_comp->src[0] = nir_src_for_ssa(nir_imm_int(b, 0));
nir_ssa_dest_init(&intr_comp->instr, &intr_comp->dest, 1, 32, NULL);
{
nir_variable *output_var = NULL;
nir_foreach_variable(var, &c->s->outputs) {
- if (var->data.driver_location == intr->const_index[0]) {
+ if (var->data.driver_location == nir_intrinsic_base(intr)) {
output_var = var;
break;
}
(output_var->data.location == FRAG_RESULT_COLOR ||
output_var->data.location == FRAG_RESULT_DATA0 ||
output_var->data.location == FRAG_RESULT_SAMPLE_MASK)) {
- intr->const_index[0] *= 4;
+ nir_intrinsic_set_base(intr, nir_intrinsic_base(intr) * 4);
return;
}
nir_intrinsic_instr *intr_comp =
nir_intrinsic_instr_create(c->s, nir_intrinsic_store_output);
intr_comp->num_components = 1;
- intr_comp->const_index[0] = intr->const_index[0] * 4 + i;
+ nir_intrinsic_set_base(intr_comp,
+ nir_intrinsic_base(intr) * 4 + i);
assert(intr->src[0].is_ssa);
intr_comp->src[0] =
/* Convert the uniform offset to bytes. If it happens to be a
* constant, constant-folding will clean up the shift for us.
*/
- intr_comp->const_index[0] = (intr->const_index[0] * 16 + i * 4);
+ nir_intrinsic_set_base(intr_comp,
+ nir_intrinsic_base(intr) * 16 + i * 4);
intr_comp->src[0] =
nir_src_for_ssa(nir_ishl(b, intr->src[0].ssa,
indirect_uniform_load(struct vc4_compile *c, nir_intrinsic_instr *intr)
{
struct qreg indirect_offset = ntq_get_src(c, intr->src[0], 0);
- uint32_t offset = intr->const_index[0];
+ uint32_t offset = nir_intrinsic_base(intr);
struct vc4_compiler_ubo_range *range = NULL;
unsigned i;
for (i = 0; i < c->num_uniform_ranges; i++) {
nir_intrinsic_instr *intr =
nir_intrinsic_instr_create(b->shader,
nir_intrinsic_load_uniform);
- intr->const_index[0] = (VC4_NIR_STATE_UNIFORM_OFFSET + contents) * 4;
+ nir_intrinsic_set_base(intr,
+ (VC4_NIR_STATE_UNIFORM_OFFSET + contents) * 4);
intr->num_components = 1;
intr->src[0] = nir_src_for_ssa(nir_imm_int(b, 0));
nir_ssa_dest_init(&intr->instr, &intr->dest, 1, 32, NULL);
assert(instr->num_components == 1);
const_offset = nir_src_as_const_value(instr->src[0]);
if (const_offset) {
- offset = instr->const_index[0] + const_offset->u32[0];
+ offset = nir_intrinsic_base(instr) + const_offset->u32[0];
assert(offset % 4 == 0);
/* We need dwords */
offset = offset / 4;
for (int i = 0; i < instr->num_components; i++) {
ntq_store_dest(c, &instr->dest, i,
qir_uniform(c, QUNIFORM_USER_CLIP_PLANE,
- instr->const_index[0] * 4 +
- i));
+ nir_intrinsic_ucp_id(instr) *
+ 4 + i));
}
break;
assert(instr->num_components == 1);
const_offset = nir_src_as_const_value(instr->src[0]);
assert(const_offset && "vc4 doesn't support indirect inputs");
- if (instr->const_index[0] >= VC4_NIR_TLB_COLOR_READ_INPUT) {
+ if (nir_intrinsic_base(instr) >= VC4_NIR_TLB_COLOR_READ_INPUT) {
assert(const_offset->u32[0] == 0);
/* Reads of the per-sample color need to be done in
* order.
*/
- int sample_index = (instr->const_index[0] -
+ int sample_index = (nir_intrinsic_base(instr) -
VC4_NIR_TLB_COLOR_READ_INPUT);
for (int i = 0; i <= sample_index; i++) {
if (c->color_reads[i].file == QFILE_NULL) {
ntq_store_dest(c, &instr->dest, 0,
c->color_reads[sample_index]);
} else {
- offset = instr->const_index[0] + const_offset->u32[0];
+ offset = nir_intrinsic_base(instr) + const_offset->u32[0];
ntq_store_dest(c, &instr->dest, 0,
c->inputs[offset]);
}
case nir_intrinsic_store_output:
const_offset = nir_src_as_const_value(instr->src[1]);
assert(const_offset && "vc4 doesn't support indirect outputs");
- offset = instr->const_index[0] + const_offset->u32[0];
+ offset = nir_intrinsic_base(instr) + const_offset->u32[0];
/* MSAA color outputs are the only case where we have an
* output that's not lowered to being a store of a single 32