ir3: Use nir_lower_tess_coord_z

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24159>
This commit is contained in:
Alyssa Rosenzweig 2023-07-14 10:33:22 -04:00 committed by Marge Bot
parent 2c8f884103
commit 16b080b5d8
2 changed files with 3 additions and 22 deletions

View file

@ -2123,15 +2123,12 @@ emit_intrinsic(struct ir3_context *ctx, nir_intrinsic_instr *intr)
dst[0] = ctx->primitive_id;
break;
case nir_intrinsic_load_tess_coord:
case nir_intrinsic_load_tess_coord_xy:
if (!ctx->tess_coord) {
ctx->tess_coord =
create_sysval_input(ctx, SYSTEM_VALUE_TESS_COORD, 0x3);
}
ir3_split_dest(b, dst, ctx->tess_coord, 0, 2);
/* Unused, but ir3_put_dst() below wants to free something */
dst[2] = create_immed(b, 0);
break;
case nir_intrinsic_end_patch_ir3:

View file

@ -745,24 +745,6 @@ lower_tess_eval_block(nir_block *block, nir_builder *b, struct state *state)
nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr);
switch (intr->intrinsic) {
case nir_intrinsic_load_tess_coord: {
b->cursor = nir_after_instr(&intr->instr);
nir_ssa_def *x = nir_channel(b, &intr->dest.ssa, 0);
nir_ssa_def *y = nir_channel(b, &intr->dest.ssa, 1);
nir_ssa_def *z;
if (state->topology == IR3_TESS_TRIANGLES)
z = nir_fsub(b, nir_fsub_imm(b, 1.0f, y), x);
else
z = nir_imm_float(b, 0.0f);
nir_ssa_def *coord = nir_vec3(b, x, y, z);
nir_ssa_def_rewrite_uses_after(&intr->dest.ssa, coord,
b->cursor.instr);
break;
}
case nir_intrinsic_load_per_vertex_input: {
// src[] = { vertex, offset }.
@ -827,6 +809,8 @@ ir3_nir_lower_tess_eval(nir_shader *shader, struct ir3_shader_variant *v,
nir_log_shaderi(shader);
}
NIR_PASS_V(shader, nir_lower_tess_coord_z, topology == IR3_TESS_TRIANGLES);
nir_function_impl *impl = nir_shader_get_entrypoint(shader);
assert(impl);