pvr: Add support for IDF

Signed-off-by: Simon Perretta <simon.perretta@imgtec.com>
Acked-by: Frank Binns <frank.binns@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21474>
This commit is contained in:
Simon Perretta 2023-02-14 01:12:20 +00:00 committed by Marge Bot
parent 73d07bbb52
commit c4b7128d84
6 changed files with 40 additions and 0 deletions

View file

@ -624,6 +624,10 @@ static void rogue_calc_backend_instrs_size(rogue_instr_group *group,
}
break;
case ROGUE_BACKEND_OP_IDF:
group->size.instrs[phase] = 2;
break;
case ROGUE_BACKEND_OP_EMITPIX:
group->size.instrs[phase] = 1;
break;

View file

@ -1343,6 +1343,8 @@ enum rogue_backend_op {
ROGUE_BACKEND_OP_UVSW_EMITTHENENDTASK,
ROGUE_BACKEND_OP_UVSW_WRITETHENEMITTHENENDTASK,
ROGUE_BACKEND_OP_IDF,
ROGUE_BACKEND_OP_EMITPIX,
ROGUE_BACKEND_OP_LD,

View file

@ -65,6 +65,7 @@ ROGUE_BUILDER_DEFINE_BACKEND02(EMITPIX)
ROGUE_BUILDER_DEFINE_BACKEND11(UVSW_WRITE)
ROGUE_BUILDER_DEFINE_BACKEND11(UVSW_WRITETHENEMITTHENENDTASK)
ROGUE_BUILDER_DEFINE_BACKEND11(IDF)
ROGUE_BUILDER_DEFINE_BACKEND13(LD)
ROGUE_BUILDER_DEFINE_BACKEND13(FITR_PIXEL)

View file

@ -527,6 +527,15 @@ static void rogue_encode_backend_instr(const rogue_backend_instr *backend,
break;
case ROGUE_BACKEND_OP_IDF:
instr_encoding->backend.op = BACKENDOP_DMA;
instr_encoding->backend.dma.dmaop = DMAOP_IDF;
instr_encoding->backend.dma.idf.drc =
rogue_ref_get_drc_index(&backend->dst[0].ref);
instr_encoding->backend.dma.idf.srcseladd =
rogue_ref_get_io_src_index(&backend->src[0].ref);
break;
case ROGUE_BACKEND_OP_EMITPIX:
instr_encoding->backend.op = BACKENDOP_EMIT;
instr_encoding->backend.emitpix.freep =

View file

@ -258,6 +258,12 @@ const rogue_backend_op_info rogue_backend_op_infos[ROGUE_BACKEND_OP_COUNT] = {
.supported_dst_types = { [0] = T(REG), },
.supported_src_types = { [0] = T(REG), },
},
[ROGUE_BACKEND_OP_IDF] = { .str = "idf", .num_dsts = 1, .num_srcs = 1,
.phase_io = { .src[0] = IO(S0), },
.supported_dst_types = { [0] = T(DRC), },
.supported_src_types = { [0] = T(REG), },
},
[ROGUE_BACKEND_OP_EMITPIX] = { .str = "emitpix", .num_srcs = 2,
.phase_io = { .src[0] = IO(S0), .src[1] = IO(S2), },
.supported_op_mods = OM(FREEP),

View file

@ -925,6 +925,23 @@ enum sbmode {
SBMODE_BOTH = 0b11,
};
typedef struct rogue_backend_dma_idf_encoding {
/* Byte 0 */
struct {
unsigned : 3;
unsigned drc : 1;
unsigned : 4;
} PACKED;
/* Byte 1 */
struct {
unsigned srcseladd : 3;
unsigned : 5;
} PACKED;
} PACKED rogue_backend_dma_idf_encoding;
static_assert(sizeof(rogue_backend_dma_idf_encoding) == 2,
"sizeof(rogue_backend_dma_idf_encoding) != 2");
typedef struct rogue_backend_dma_encoding {
union {
/* Byte 0 */
@ -934,6 +951,7 @@ typedef struct rogue_backend_dma_encoding {
} PACKED;
rogue_backend_dma_smp_encoding smp;
rogue_backend_dma_idf_encoding idf;
rogue_backend_dma_ld_encoding ld;
} PACKED;
} PACKED rogue_backend_dma_encoding;