pan/bi: Support centroid and sample interpolations

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7472>
This commit is contained in:
Boris Brezillon 2020-11-05 12:11:54 +01:00
parent ca5a00a70c
commit 2522f509a3
1 changed files with 24 additions and 0 deletions

View File

@ -144,6 +144,20 @@ bi_emit_ld_output(bi_context *ctx, nir_intrinsic_instr *instr)
bi_emit(ctx, ins);
}
static enum bifrost_interp_mode
bi_interp_for_intrinsic(nir_intrinsic_op op)
{
switch (op) {
case nir_intrinsic_load_barycentric_centroid:
return BIFROST_INTERP_CENTROID;
case nir_intrinsic_load_barycentric_sample:
return BIFROST_INTERP_SAMPLE;
case nir_intrinsic_load_barycentric_pixel:
default:
return BIFROST_INTERP_CENTER;
}
}
static void
bi_emit_ld_vary(bi_context *ctx, nir_intrinsic_instr *instr)
{
@ -154,6 +168,14 @@ bi_emit_ld_vary(bi_context *ctx, nir_intrinsic_instr *instr)
ins.dest_type = nir_type_float | nir_dest_bit_size(instr->dest);
ins.format = ins.dest_type;
if (instr->intrinsic == nir_intrinsic_load_interpolated_input) {
nir_intrinsic_instr *parent = nir_src_as_intrinsic(instr->src[0]);
if (parent) {
ins.load_vary.interp_mode =
bi_interp_for_intrinsic(parent->intrinsic);
}
}
if (nir_src_is_const(*nir_get_io_offset_src(instr))) {
/* Zero it out for direct */
ins.src[1] = BIR_INDEX_ZERO;
@ -681,6 +703,8 @@ emit_intrinsic(bi_context *ctx, nir_intrinsic_instr *instr)
switch (instr->intrinsic) {
case nir_intrinsic_load_barycentric_pixel:
case nir_intrinsic_load_barycentric_centroid:
case nir_intrinsic_load_barycentric_sample:
/* stub */
break;
case nir_intrinsic_load_interpolated_input: