diff --git a/src/imagination/rogue/passes/rogue_schedule_instr_groups.c b/src/imagination/rogue/passes/rogue_schedule_instr_groups.c index 26cccebe892..1a03e5a8ada 100644 --- a/src/imagination/rogue/passes/rogue_schedule_instr_groups.c +++ b/src/imagination/rogue/passes/rogue_schedule_instr_groups.c @@ -566,6 +566,7 @@ static void rogue_calc_backend_instrs_size(rogue_instr_group *group, enum rogue_instr_phase phase) { switch (backend->op) { + case ROGUE_BACKEND_OP_FITR_PIXEL: case ROGUE_BACKEND_OP_FITRP_PIXEL: group->size.instrs[phase] = 2; break; diff --git a/src/imagination/rogue/rogue.h b/src/imagination/rogue/rogue.h index e0262ab80f7..07d2c979feb 100644 --- a/src/imagination/rogue/rogue.h +++ b/src/imagination/rogue/rogue.h @@ -1336,7 +1336,7 @@ enum rogue_backend_op { ROGUE_BACKEND_OP_LD, - /* ROGUE_BACKEND_OP_FITR, */ + ROGUE_BACKEND_OP_FITR_PIXEL, /* ROGUE_BACKEND_OP_SAMPLE, */ /* ROGUE_BACKEND_OP_CENTROID, */ ROGUE_BACKEND_OP_FITRP_PIXEL, diff --git a/src/imagination/rogue/rogue_backend_instrs.def b/src/imagination/rogue/rogue_backend_instrs.def index 0806d487847..ea9c19715c0 100644 --- a/src/imagination/rogue/rogue_backend_instrs.def +++ b/src/imagination/rogue/rogue_backend_instrs.def @@ -57,6 +57,7 @@ ROGUE_BUILDER_DEFINE_BACKEND11(UVSW_WRITE) ROGUE_BUILDER_DEFINE_BACKEND11(UVSW_WRITETHENEMITTHENENDTASK) ROGUE_BUILDER_DEFINE_BACKEND13(LD) +ROGUE_BUILDER_DEFINE_BACKEND13(FITR_PIXEL) ROGUE_BUILDER_DEFINE_BACKEND14(FITRP_PIXEL) diff --git a/src/imagination/rogue/rogue_encode.c b/src/imagination/rogue/rogue_encode.c index eeb9791ebfc..aa44a31adeb 100644 --- a/src/imagination/rogue/rogue_encode.c +++ b/src/imagination/rogue/rogue_encode.c @@ -295,6 +295,18 @@ static void rogue_encode_backend_instr(const rogue_backend_instr *backend, rogue_instr_encoding *instr_encoding) { switch (backend->op) { + case ROGUE_BACKEND_OP_FITR_PIXEL: + instr_encoding->backend.op = BACKENDOP_FITR; + instr_encoding->backend.fitr.p = 0; + instr_encoding->backend.fitr.drc = + rogue_ref_get_drc_index(&backend->src[0].ref); + instr_encoding->backend.fitr.mode = FITR_MODE_PIXEL; + instr_encoding->backend.fitr.sat = + rogue_backend_op_mod_is_set(backend, OM(SAT)); + instr_encoding->backend.fitr.count = + rogue_ref_get_val(&backend->src[2].ref); + break; + case ROGUE_BACKEND_OP_FITRP_PIXEL: instr_encoding->backend.op = BACKENDOP_FITR; instr_encoding->backend.fitr.p = 1; diff --git a/src/imagination/rogue/rogue_info.c b/src/imagination/rogue/rogue_info.c index ad4157dce11..afe8180d1ae 100644 --- a/src/imagination/rogue/rogue_info.c +++ b/src/imagination/rogue/rogue_info.c @@ -272,6 +272,19 @@ const rogue_backend_op_info rogue_backend_op_infos[ROGUE_BACKEND_OP_COUNT] = { .src_stride = { [2] = 1, }, + }, + [ROGUE_BACKEND_OP_FITR_PIXEL] = { .str = "fitr.pixel", .num_dsts = 1, .num_srcs = 3, + .phase_io = { .dst[0] = IO(S3), .src[1] = IO(S0), }, + .supported_op_mods = OM(SAT), + .supported_dst_types = { [0] = T(REG) | T(REGARRAY), }, + .supported_src_types = { + [0] = T(DRC), + [1] = T(REGARRAY), + [2] = T(VAL), + }, + .src_stride = { + [1] = 3, + }, }, [ROGUE_BACKEND_OP_FITRP_PIXEL] = { .str = "fitrp.pixel", .num_dsts = 1, .num_srcs = 4, .phase_io = { .dst[0] = IO(S3), .src[1] = IO(S0), .src[2] = IO(S2), },