mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 11:08:03 +02:00
ir3: Make ir3_create_collect() take a block
There's no reason to make this any different from the other builders, since it just creates a collect instruction, and in the next commit we'll need to create a collect in the first block for prefetch textures. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13142>
This commit is contained in:
parent
8fb99b58df
commit
38a84723f1
5 changed files with 51 additions and 54 deletions
|
|
@ -48,7 +48,7 @@ emit_intrinsic_load_ssbo(struct ir3_context *ctx, nir_intrinsic_instr *intr,
|
|||
offset = ir3_get_src(ctx, &intr->src[2])[0];
|
||||
|
||||
/* src0 is uvec2(offset*4, 0), src1 is offset.. nir already *= 4: */
|
||||
src0 = ir3_collect(ctx, byte_offset, create_immed(b, 0));
|
||||
src0 = ir3_collect(b, byte_offset, create_immed(b, 0));
|
||||
src1 = offset;
|
||||
|
||||
ldgb = ir3_LDGB(b, ssbo, 0, src0, 0, src1, 0);
|
||||
|
|
@ -81,9 +81,9 @@ emit_intrinsic_store_ssbo(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
/* src0 is value, src1 is offset, src2 is uvec2(offset*4, 0)..
|
||||
* nir already *= 4:
|
||||
*/
|
||||
src0 = ir3_create_collect(ctx, ir3_get_src(ctx, &intr->src[0]), ncomp);
|
||||
src0 = ir3_create_collect(b, ir3_get_src(ctx, &intr->src[0]), ncomp);
|
||||
src1 = offset;
|
||||
src2 = ir3_collect(ctx, byte_offset, create_immed(b, 0));
|
||||
src2 = ir3_collect(b, byte_offset, create_immed(b, 0));
|
||||
|
||||
stgb = ir3_STGB(b, ssbo, 0, src0, 0, src1, 0, src2, 0);
|
||||
stgb->cat6.iim_val = ncomp;
|
||||
|
|
@ -129,7 +129,7 @@ emit_intrinsic_atomic_ssbo(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
struct ir3_instruction *data = ir3_get_src(ctx, &intr->src[2])[0];
|
||||
/* 64b byte offset */
|
||||
struct ir3_instruction *byte_offset =
|
||||
ir3_collect(ctx, ir3_get_src(ctx, &intr->src[1])[0], create_immed(b, 0));
|
||||
ir3_collect(b, ir3_get_src(ctx, &intr->src[1])[0], create_immed(b, 0));
|
||||
/* dword offset for everything but comp_swap */
|
||||
struct ir3_instruction *src3 = ir3_get_src(ctx, &intr->src[3])[0];
|
||||
|
||||
|
|
@ -165,7 +165,7 @@ emit_intrinsic_atomic_ssbo(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
break;
|
||||
case nir_intrinsic_ssbo_atomic_comp_swap_ir3:
|
||||
/* for cmpxchg, src0 is [ui]vec2(data, compare): */
|
||||
data = ir3_collect(ctx, src3, data);
|
||||
data = ir3_collect(b, src3, data);
|
||||
struct ir3_instruction *dword_offset = ir3_get_src(ctx, &intr->src[4])[0];
|
||||
atomic = ir3_ATOMIC_CMPXCHG_G(b, ssbo, 0, data, 0, dword_offset, 0,
|
||||
byte_offset, 0);
|
||||
|
|
@ -225,7 +225,7 @@ get_image_offset(struct ir3_context *ctx, const nir_intrinsic_instr *instr,
|
|||
offset = ir3_SHR_B(b, offset, 0, create_immed(b, 2), 0);
|
||||
}
|
||||
|
||||
return ir3_collect(ctx, offset, create_immed(b, 0));
|
||||
return ir3_collect(b, offset, create_immed(b, 0));
|
||||
}
|
||||
|
||||
/* src[] = { deref, coord, sample_index }. const_index[] = {} */
|
||||
|
|
@ -242,7 +242,7 @@ emit_intrinsic_load_image(struct ir3_context *ctx, nir_intrinsic_instr *intr,
|
|||
ir3_get_num_components_for_image_format(nir_intrinsic_format(intr));
|
||||
|
||||
struct ir3_instruction *ldib = ir3_LDIB(
|
||||
b, ibo, 0, offset, 0, ir3_create_collect(ctx, coords, ncoords), 0);
|
||||
b, ibo, 0, offset, 0, ir3_create_collect(b, coords, ncoords), 0);
|
||||
ldib->dsts[0]->wrmask = MASK(intr->num_components);
|
||||
ldib->cat6.iim_val = ncomp;
|
||||
ldib->cat6.d = ncoords;
|
||||
|
|
@ -279,8 +279,8 @@ emit_intrinsic_store_image(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
* one over the other in various cases.
|
||||
*/
|
||||
|
||||
stib = ir3_STIB(b, ibo, 0, ir3_create_collect(ctx, value, ncomp), 0,
|
||||
ir3_create_collect(ctx, coords, ncoords), 0, offset, 0);
|
||||
stib = ir3_STIB(b, ibo, 0, ir3_create_collect(b, value, ncomp), 0,
|
||||
ir3_create_collect(b, coords, ncoords), 0, offset, 0);
|
||||
stib->cat6.iim_val = ncomp;
|
||||
stib->cat6.d = ncoords;
|
||||
stib->cat6.type = ir3_get_type_for_image_intrinsic(intr);
|
||||
|
|
@ -306,7 +306,7 @@ emit_intrinsic_atomic_image(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
* src2 is 64b byte offset
|
||||
*/
|
||||
src0 = ir3_get_src(ctx, &intr->src[3])[0];
|
||||
src1 = ir3_create_collect(ctx, coords, ncoords);
|
||||
src1 = ir3_create_collect(b, coords, ncoords);
|
||||
src2 = get_image_offset(ctx, intr, coords, false);
|
||||
|
||||
switch (intr->intrinsic) {
|
||||
|
|
@ -335,7 +335,7 @@ emit_intrinsic_atomic_image(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
break;
|
||||
case nir_intrinsic_image_atomic_comp_swap:
|
||||
/* for cmpxchg, src0 is [ui]vec2(data, compare): */
|
||||
src0 = ir3_collect(ctx, ir3_get_src(ctx, &intr->src[4])[0], src0);
|
||||
src0 = ir3_collect(b, ir3_get_src(ctx, &intr->src[4])[0], src0);
|
||||
atomic = ir3_ATOMIC_CMPXCHG_G(b, image, 0, src0, 0, src1, 0, src2, 0);
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ emit_intrinsic_store_ssbo(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
|
||||
/* src0 is offset, src1 is value:
|
||||
*/
|
||||
val = ir3_create_collect(ctx, ir3_get_src(ctx, &intr->src[0]), ncomp);
|
||||
val = ir3_create_collect(b, ir3_get_src(ctx, &intr->src[0]), ncomp);
|
||||
offset = ir3_get_src(ctx, &intr->src[3])[0];
|
||||
|
||||
stib = ir3_STIB(b, ir3_ssbo_to_ibo(ctx, intr->src[1]), 0, offset, 0, val, 0);
|
||||
|
|
@ -136,10 +136,10 @@ emit_intrinsic_atomic_ssbo(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
if (intr->intrinsic == nir_intrinsic_ssbo_atomic_comp_swap_ir3) {
|
||||
src0 = ir3_get_src(ctx, &intr->src[4])[0];
|
||||
struct ir3_instruction *compare = ir3_get_src(ctx, &intr->src[3])[0];
|
||||
src1 = ir3_collect(ctx, dummy, compare, data);
|
||||
src1 = ir3_collect(b, dummy, compare, data);
|
||||
} else {
|
||||
src0 = ir3_get_src(ctx, &intr->src[3])[0];
|
||||
src1 = ir3_collect(ctx, dummy, data);
|
||||
src1 = ir3_collect(b, dummy, data);
|
||||
}
|
||||
|
||||
switch (intr->intrinsic) {
|
||||
|
|
@ -207,7 +207,7 @@ emit_intrinsic_load_image(struct ir3_context *ctx, nir_intrinsic_instr *intr,
|
|||
unsigned ncoords = ir3_get_image_coords(intr, NULL);
|
||||
|
||||
ldib = ir3_LDIB(b, ir3_image_to_ibo(ctx, intr->src[0]), 0,
|
||||
ir3_create_collect(ctx, coords, ncoords), 0);
|
||||
ir3_create_collect(b, coords, ncoords), 0);
|
||||
ldib->dsts[0]->wrmask = MASK(intr->num_components);
|
||||
ldib->cat6.iim_val = intr->num_components;
|
||||
ldib->cat6.d = ncoords;
|
||||
|
|
@ -236,8 +236,8 @@ emit_intrinsic_store_image(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
/* src0 is offset, src1 is value:
|
||||
*/
|
||||
stib = ir3_STIB(b, ir3_image_to_ibo(ctx, intr->src[0]), 0,
|
||||
ir3_create_collect(ctx, coords, ncoords), 0,
|
||||
ir3_create_collect(ctx, value, ncomp), 0);
|
||||
ir3_create_collect(b, coords, ncoords), 0,
|
||||
ir3_create_collect(b, value, ncomp), 0);
|
||||
stib->cat6.iim_val = ncomp;
|
||||
stib->cat6.d = ncoords;
|
||||
stib->cat6.type = ir3_get_type_for_image_intrinsic(intr);
|
||||
|
|
@ -275,14 +275,14 @@ emit_intrinsic_atomic_image(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
* register) and then immediately extract the first component.
|
||||
*/
|
||||
dummy = create_immed(b, 0);
|
||||
src0 = ir3_create_collect(ctx, coords, ncoords);
|
||||
src0 = ir3_create_collect(b, coords, ncoords);
|
||||
|
||||
if (intr->intrinsic == nir_intrinsic_image_atomic_comp_swap ||
|
||||
intr->intrinsic == nir_intrinsic_bindless_image_atomic_comp_swap) {
|
||||
struct ir3_instruction *compare = ir3_get_src(ctx, &intr->src[4])[0];
|
||||
src1 = ir3_collect(ctx, dummy, compare, value);
|
||||
src1 = ir3_collect(b, dummy, compare, value);
|
||||
} else {
|
||||
src1 = ir3_collect(ctx, dummy, value);
|
||||
src1 = ir3_collect(b, dummy, value);
|
||||
}
|
||||
|
||||
switch (intr->intrinsic) {
|
||||
|
|
@ -372,7 +372,7 @@ emit_intrinsic_load_global_ir3(struct ir3_context *ctx,
|
|||
unsigned dest_components = nir_intrinsic_dest_components(intr);
|
||||
struct ir3_instruction *addr, *offset;
|
||||
|
||||
addr = ir3_collect(ctx, ir3_get_src(ctx, &intr->src[0])[0],
|
||||
addr = ir3_collect(b, ir3_get_src(ctx, &intr->src[0])[0],
|
||||
ir3_get_src(ctx, &intr->src[0])[1]);
|
||||
|
||||
offset = ir3_get_src(ctx, &intr->src[1])[0];
|
||||
|
|
@ -397,12 +397,12 @@ emit_intrinsic_store_global_ir3(struct ir3_context *ctx,
|
|||
struct ir3_instruction *value, *addr, *offset;
|
||||
unsigned ncomp = nir_intrinsic_src_components(intr, 0);
|
||||
|
||||
addr = ir3_collect(ctx, ir3_get_src(ctx, &intr->src[1])[0],
|
||||
addr = ir3_collect(b, ir3_get_src(ctx, &intr->src[1])[0],
|
||||
ir3_get_src(ctx, &intr->src[1])[1]);
|
||||
|
||||
offset = ir3_get_src(ctx, &intr->src[2])[0];
|
||||
|
||||
value = ir3_create_collect(ctx, ir3_get_src(ctx, &intr->src[0]), ncomp);
|
||||
value = ir3_create_collect(b, ir3_get_src(ctx, &intr->src[0]), ncomp);
|
||||
|
||||
struct ir3_instruction *stg =
|
||||
ir3_STG_A(b, addr, 0, offset, 0, create_immed(b, 0), 0,
|
||||
|
|
|
|||
|
|
@ -838,7 +838,7 @@ emit_intrinsic_load_ubo(struct ir3_context *ctx, nir_intrinsic_instr *intr,
|
|||
carry->cat2.condition = IR3_COND_LT;
|
||||
base_hi = ir3_ADD_S(b, base_hi, 0, carry, 0);
|
||||
|
||||
addr = ir3_collect(ctx, addr, base_hi);
|
||||
addr = ir3_collect(b, addr, base_hi);
|
||||
}
|
||||
|
||||
for (int i = 0; i < intr->num_components; i++) {
|
||||
|
|
@ -918,7 +918,7 @@ emit_intrinsic_store_shared(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
|
||||
assert(wrmask == BITFIELD_MASK(intr->num_components));
|
||||
|
||||
stl = ir3_STL(b, offset, 0, ir3_create_collect(ctx, value, ncomp), 0,
|
||||
stl = ir3_STL(b, offset, 0, ir3_create_collect(b, value, ncomp), 0,
|
||||
create_immed(b, ncomp), 0);
|
||||
stl->cat6.dst_offset = base;
|
||||
stl->cat6.type = utype_src(intr->src[0]);
|
||||
|
|
@ -970,7 +970,7 @@ emit_intrinsic_store_shared_ir3(struct ir3_context *ctx,
|
|||
offset = ir3_get_src(ctx, &intr->src[1])[0];
|
||||
|
||||
store = ir3_STLW(b, offset, 0,
|
||||
ir3_create_collect(ctx, value, intr->num_components), 0,
|
||||
ir3_create_collect(b, value, intr->num_components), 0,
|
||||
create_immed(b, intr->num_components), 0);
|
||||
|
||||
/* for a650, use STL for vertex outputs used by tess ctrl shader: */
|
||||
|
|
@ -1044,7 +1044,7 @@ emit_intrinsic_atomic_shared(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
break;
|
||||
case nir_intrinsic_shared_atomic_comp_swap:
|
||||
/* for cmpxchg, src1 is [ui]vec2(data, compare): */
|
||||
src1 = ir3_collect(ctx, ir3_get_src(ctx, &intr->src[2])[0], src1);
|
||||
src1 = ir3_collect(b, ir3_get_src(ctx, &intr->src[2])[0], src1);
|
||||
atomic = ir3_ATOMIC_CMPXCHG(b, src0, 0, src1, 0);
|
||||
break;
|
||||
default:
|
||||
|
|
@ -1102,7 +1102,7 @@ emit_intrinsic_store_scratch(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
|
||||
assert(wrmask == BITFIELD_MASK(intr->num_components));
|
||||
|
||||
stp = ir3_STP(b, offset, 0, ir3_create_collect(ctx, value, ncomp), 0,
|
||||
stp = ir3_STP(b, offset, 0, ir3_create_collect(b, value, ncomp), 0,
|
||||
create_immed(b, ncomp), 0);
|
||||
stp->cat6.dst_offset = 0;
|
||||
stp->cat6.type = utype_src(intr->src[0]);
|
||||
|
|
@ -1166,7 +1166,7 @@ get_image_samp_tex_src(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
|
||||
texture = ir3_get_src(ctx, &intr->src[0])[0];
|
||||
sampler = create_immed(b, 0);
|
||||
info.samp_tex = ir3_collect(ctx, texture, sampler);
|
||||
info.samp_tex = ir3_collect(b, texture, sampler);
|
||||
}
|
||||
} else {
|
||||
info.flags |= IR3_INSTR_S2EN;
|
||||
|
|
@ -1177,7 +1177,7 @@ get_image_samp_tex_src(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
texture = create_immed_typed(ctx->block, tex_idx, TYPE_U16);
|
||||
sampler = create_immed_typed(ctx->block, tex_idx, TYPE_U16);
|
||||
|
||||
info.samp_tex = ir3_collect(ctx, sampler, texture);
|
||||
info.samp_tex = ir3_collect(b, sampler, texture);
|
||||
}
|
||||
|
||||
return info;
|
||||
|
|
@ -1241,7 +1241,7 @@ emit_intrinsic_load_image(struct ir3_context *ctx, nir_intrinsic_instr *intr,
|
|||
coords[ncoords++] = create_immed(b, 0);
|
||||
|
||||
sam = emit_sam(ctx, OPC_ISAM, info, type, 0b1111,
|
||||
ir3_create_collect(ctx, coords, ncoords), NULL);
|
||||
ir3_create_collect(b, coords, ncoords), NULL);
|
||||
|
||||
ir3_handle_nonuniform(sam, intr);
|
||||
|
||||
|
|
@ -1506,7 +1506,7 @@ get_barycentric(struct ir3_context *ctx, enum ir3_bary bary)
|
|||
ij = create_sysval_input(ctx, sysval_base + bary, 0x3);
|
||||
ir3_split_dest(ctx->block, xy, ij, 0, 2);
|
||||
|
||||
ctx->ij[bary] = ir3_create_collect(ctx, xy, 2);
|
||||
ctx->ij[bary] = ir3_create_collect(ctx->block, xy, 2);
|
||||
}
|
||||
|
||||
return ctx->ij[bary];
|
||||
|
|
@ -1607,7 +1607,7 @@ get_frag_coord(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
ir3_MUL_F(b, xyzw[i], 0, create_immed(b, fui(1.0 / 16.0)), 0);
|
||||
}
|
||||
|
||||
ctx->frag_coord = ir3_create_collect(ctx, xyzw, 4);
|
||||
ctx->frag_coord = ir3_create_collect(b, xyzw, 4);
|
||||
}
|
||||
|
||||
ctx->so->fragcoord_compmask |= nir_ssa_def_components_read(&intr->dest.ssa);
|
||||
|
|
@ -2343,7 +2343,7 @@ get_tex_samp_tex_src(struct ir3_context *ctx, nir_tex_instr *tex)
|
|||
} else {
|
||||
sampler = create_immed(b, 0);
|
||||
}
|
||||
info.samp_tex = ir3_collect(ctx, texture, sampler);
|
||||
info.samp_tex = ir3_collect(b, texture, sampler);
|
||||
}
|
||||
} else {
|
||||
info.flags |= IR3_INSTR_S2EN;
|
||||
|
|
@ -2372,7 +2372,7 @@ get_tex_samp_tex_src(struct ir3_context *ctx, nir_tex_instr *tex)
|
|||
info.samp_idx = tex->texture_index;
|
||||
}
|
||||
|
||||
info.samp_tex = ir3_collect(ctx, sampler, texture);
|
||||
info.samp_tex = ir3_collect(b, sampler, texture);
|
||||
}
|
||||
|
||||
return info;
|
||||
|
|
@ -2637,7 +2637,7 @@ emit_tex(struct ir3_context *ctx, nir_tex_instr *tex)
|
|||
|
||||
ctx->so->fb_read = true;
|
||||
info.samp_tex = ir3_collect(
|
||||
ctx, create_immed_typed(ctx->block, ctx->so->num_samp, TYPE_U16),
|
||||
b, create_immed_typed(ctx->block, ctx->so->num_samp, TYPE_U16),
|
||||
create_immed_typed(ctx->block, ctx->so->num_samp, TYPE_U16));
|
||||
info.flags = IR3_INSTR_S2EN;
|
||||
|
||||
|
|
@ -2646,8 +2646,8 @@ emit_tex(struct ir3_context *ctx, nir_tex_instr *tex)
|
|||
info = get_tex_samp_tex_src(ctx, tex);
|
||||
}
|
||||
|
||||
struct ir3_instruction *col0 = ir3_create_collect(ctx, src0, nsrc0);
|
||||
struct ir3_instruction *col1 = ir3_create_collect(ctx, src1, nsrc1);
|
||||
struct ir3_instruction *col0 = ir3_create_collect(b, src0, nsrc0);
|
||||
struct ir3_instruction *col1 = ir3_create_collect(b, src1, nsrc1);
|
||||
|
||||
if (opc == OPC_META_TEX_PREFETCH) {
|
||||
int idx = nir_tex_instr_src_index(tex, nir_tex_src_coord);
|
||||
|
|
@ -3318,7 +3318,7 @@ setup_input(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
struct ir3_instruction *coord = NULL;
|
||||
|
||||
if (intr->intrinsic == nir_intrinsic_load_interpolated_input)
|
||||
coord = ir3_create_collect(ctx, ir3_get_src(ctx, &intr->src[0]), 2);
|
||||
coord = ir3_create_collect(ctx->block, ir3_get_src(ctx, &intr->src[0]), 2);
|
||||
|
||||
compile_assert(ctx, nir_src_is_const(intr->src[coord ? 1 : 0]));
|
||||
|
||||
|
|
@ -4019,7 +4019,7 @@ ir3_compile_shader_nir(struct ir3_compiler *compiler,
|
|||
unsigned n = so->outputs_count++;
|
||||
so->outputs[n].slot = VARYING_SLOT_PRIMITIVE_ID;
|
||||
|
||||
struct ir3_instruction *out = ir3_collect(ctx, ctx->primitive_id);
|
||||
struct ir3_instruction *out = ir3_collect(ctx->block, ctx->primitive_id);
|
||||
outputs[outputs_count] = out;
|
||||
outidxs[outputs_count] = n;
|
||||
if (so->type == MESA_SHADER_VERTEX && ctx->rel_patch_id)
|
||||
|
|
@ -4032,7 +4032,7 @@ ir3_compile_shader_nir(struct ir3_compiler *compiler,
|
|||
if (so->type == MESA_SHADER_VERTEX && ctx->rel_patch_id) {
|
||||
unsigned n = so->outputs_count++;
|
||||
so->outputs[n].slot = VARYING_SLOT_REL_PATCH_ID_IR3;
|
||||
struct ir3_instruction *out = ir3_collect(ctx, ctx->rel_patch_id);
|
||||
struct ir3_instruction *out = ir3_collect(ctx->block, ctx->rel_patch_id);
|
||||
outputs[outputs_count] = out;
|
||||
outidxs[outputs_count] = n;
|
||||
regids[outputs_count] = regid(0, 1);
|
||||
|
|
@ -4042,7 +4042,7 @@ ir3_compile_shader_nir(struct ir3_compiler *compiler,
|
|||
if (ctx->gs_header) {
|
||||
unsigned n = so->outputs_count++;
|
||||
so->outputs[n].slot = VARYING_SLOT_GS_HEADER_IR3;
|
||||
struct ir3_instruction *out = ir3_collect(ctx, ctx->gs_header);
|
||||
struct ir3_instruction *out = ir3_collect(ctx->block, ctx->gs_header);
|
||||
outputs[outputs_count] = out;
|
||||
outidxs[outputs_count] = n;
|
||||
regids[outputs_count] = regid(0, 0);
|
||||
|
|
@ -4052,7 +4052,7 @@ ir3_compile_shader_nir(struct ir3_compiler *compiler,
|
|||
if (ctx->tcs_header) {
|
||||
unsigned n = so->outputs_count++;
|
||||
so->outputs[n].slot = VARYING_SLOT_TCS_HEADER_IR3;
|
||||
struct ir3_instruction *out = ir3_collect(ctx, ctx->tcs_header);
|
||||
struct ir3_instruction *out = ir3_collect(ctx->block, ctx->tcs_header);
|
||||
outputs[outputs_count] = out;
|
||||
outidxs[outputs_count] = n;
|
||||
regids[outputs_count] = regid(0, 0);
|
||||
|
|
@ -4081,13 +4081,13 @@ ir3_compile_shader_nir(struct ir3_compiler *compiler,
|
|||
struct ir3_instruction *outputs[ctx->noutputs / 4];
|
||||
unsigned outputs_count = 0;
|
||||
|
||||
struct ir3_block *old_block = ctx->block;
|
||||
struct ir3_block *b = ctx->block;
|
||||
/* Insert these collect's in the block before the end-block if
|
||||
* possible, so that any moves they generate can be shuffled around to
|
||||
* reduce nop's:
|
||||
*/
|
||||
if (ctx->block->predecessors_count == 1)
|
||||
ctx->block = ctx->block->predecessors[0];
|
||||
b = ctx->block->predecessors[0];
|
||||
|
||||
/* Setup IR level outputs, which are "collects" that gather
|
||||
* the scalar components of outputs.
|
||||
|
|
@ -4114,7 +4114,7 @@ ir3_compile_shader_nir(struct ir3_compiler *compiler,
|
|||
continue;
|
||||
|
||||
struct ir3_instruction *out =
|
||||
ir3_create_collect(ctx, &ctx->outputs[i], ncomp);
|
||||
ir3_create_collect(b, &ctx->outputs[i], ncomp);
|
||||
|
||||
int outidx = i / 4;
|
||||
assert(outidx < so->outputs_count);
|
||||
|
|
@ -4150,8 +4150,6 @@ ir3_compile_shader_nir(struct ir3_compiler *compiler,
|
|||
}
|
||||
}
|
||||
|
||||
ctx->block = old_block;
|
||||
|
||||
struct ir3_instruction *end =
|
||||
ir3_instr_create(ctx->block, OPC_END, 0, outputs_count);
|
||||
|
||||
|
|
|
|||
|
|
@ -298,10 +298,9 @@ dest_flags(struct ir3_instruction *instr)
|
|||
}
|
||||
|
||||
struct ir3_instruction *
|
||||
ir3_create_collect(struct ir3_context *ctx, struct ir3_instruction *const *arr,
|
||||
ir3_create_collect(struct ir3_block *block, struct ir3_instruction *const *arr,
|
||||
unsigned arrsz)
|
||||
{
|
||||
struct ir3_block *block = ctx->block;
|
||||
struct ir3_instruction *collect;
|
||||
|
||||
if (arrsz == 0)
|
||||
|
|
@ -343,7 +342,7 @@ ir3_create_collect(struct ir3_context *ctx, struct ir3_instruction *const *arr,
|
|||
elem = ir3_MOV(block, elem, type);
|
||||
}
|
||||
|
||||
compile_assert(ctx, dest_flags(elem) == flags);
|
||||
debug_assert(dest_flags(elem) == flags);
|
||||
__ssa_src(collect, elem, flags);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -204,7 +204,7 @@ struct ir3_instruction **ir3_get_dst(struct ir3_context *ctx, nir_dest *dst,
|
|||
struct ir3_instruction *const *ir3_get_src(struct ir3_context *ctx,
|
||||
nir_src *src);
|
||||
void ir3_put_dst(struct ir3_context *ctx, nir_dest *dst);
|
||||
struct ir3_instruction *ir3_create_collect(struct ir3_context *ctx,
|
||||
struct ir3_instruction *ir3_create_collect(struct ir3_block *block,
|
||||
struct ir3_instruction *const *arr,
|
||||
unsigned arrsz);
|
||||
void ir3_split_dest(struct ir3_block *block, struct ir3_instruction **dst,
|
||||
|
|
@ -216,10 +216,10 @@ void emit_intrinsic_image_size_tex(struct ir3_context *ctx,
|
|||
nir_intrinsic_instr *intr,
|
||||
struct ir3_instruction **dst);
|
||||
|
||||
#define ir3_collect(ctx, ...) \
|
||||
#define ir3_collect(block, ...) \
|
||||
({ \
|
||||
struct ir3_instruction *__arr[] = {__VA_ARGS__}; \
|
||||
ir3_create_collect(ctx, __arr, ARRAY_SIZE(__arr)); \
|
||||
ir3_create_collect(block, __arr, ARRAY_SIZE(__arr)); \
|
||||
})
|
||||
|
||||
NORETURN void ir3_context_error(struct ir3_context *ctx, const char *format,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue