pvr: Add support for generating transfer EOT programs

Signed-off-by: Simon Perretta <simon.perretta@imgtec.com>
Acked-by: Karmjit Mahil <Karmjit.Mahil@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21550>
This commit is contained in:
Simon Perretta
2023-02-13 23:03:44 +00:00
committed by Marge Bot
parent f0b47cfd65
commit 11dea16dee
2 changed files with 38 additions and 0 deletions
+4
View File
@@ -152,4 +152,8 @@ void pvr_uscgen_tq_frag(const struct pvr_tq_shader_properties *shader_props,
unsigned *temps_used,
struct util_dynarray *binary);
void pvr_uscgen_tq_eot(unsigned rt_count,
const uint64_t *pbe_regs,
struct util_dynarray *binary);
#endif /* PVR_USCGEN_H */
@@ -208,3 +208,37 @@ void pvr_uscgen_tq_frag(const struct pvr_tq_shader_properties *shader_props,
ralloc_free(shader);
}
void pvr_uscgen_tq_eot(unsigned rt_count,
const uint64_t *pbe_regs,
struct util_dynarray *binary)
{
rogue_builder b;
rogue_shader *shader = rogue_shader_create(NULL, MESA_SHADER_NONE);
rogue_set_shader_name(shader, "TQ (EOT)");
rogue_builder_init(&b, shader);
rogue_push_block(&b);
rogue_backend_instr *emitpix = NULL;
for (unsigned u = 0; u < rt_count; ++u) {
if (u > 0)
rogue_WOP(&b);
rogue_reg *state_word_0 = rogue_shared_reg(shader, pbe_regs[u]);
rogue_reg *state_word_1 = rogue_shared_reg(shader, pbe_regs[u] + 1);
emitpix = rogue_EMITPIX(&b,
rogue_ref_reg(state_word_0),
rogue_ref_reg(state_word_1));
}
assert(emitpix);
rogue_set_backend_op_mod(emitpix, ROGUE_BACKEND_OP_MOD_FREEP);
rogue_END(&b);
rogue_shader_passes(shader);
rogue_encode_shader(NULL, shader, binary);
ralloc_free(shader);
}