amd,radv,radeonsi: add ac_emit_cp_wait_mem()

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37813>
This commit is contained in:
Samuel Pitoiset 2025-10-10 10:28:07 +02:00 committed by Marge Bot
parent 82cbfc964a
commit 6329e282b8
4 changed files with 21 additions and 18 deletions

View file

@ -889,3 +889,18 @@ ac_emit_write_data_imm(struct ac_cmdbuf *cs, unsigned engine_sel, uint64_t va, u
ac_cmdbuf_emit(value);
ac_cmdbuf_end();
}
void
ac_emit_cp_wait_mem(struct ac_cmdbuf *cs, uint64_t va, uint32_t ref,
uint32_t mask, unsigned flags)
{
ac_cmdbuf_begin(cs);
ac_cmdbuf_emit(PKT3(PKT3_WAIT_REG_MEM, 5, 0));
ac_cmdbuf_emit(WAIT_REG_MEM_MEM_SPACE(1) | flags);
ac_cmdbuf_emit(va);
ac_cmdbuf_emit(va >> 32);
ac_cmdbuf_emit(ref); /* reference value */
ac_cmdbuf_emit(mask); /* mask */
ac_cmdbuf_emit(4); /* poll interval */
ac_cmdbuf_end();
}

View file

@ -105,6 +105,10 @@ void
ac_emit_write_data_imm(struct ac_cmdbuf *cs, unsigned engine_sel,
uint64_t va, uint32_t value);
void
ac_emit_cp_wait_mem(struct ac_cmdbuf *cs, uint64_t va, uint32_t ref,
uint32_t mask, unsigned flags);
#ifdef __cplusplus
}
#endif

View file

@ -344,15 +344,7 @@ radv_cp_wait_mem(struct radv_cmd_stream *cs, const uint32_t op, const uint64_t v
assert(op == WAIT_REG_MEM_EQUAL || op == WAIT_REG_MEM_NOT_EQUAL || op == WAIT_REG_MEM_GREATER_OR_EQUAL);
if (cs->hw_ip == AMD_IP_GFX || cs->hw_ip == AMD_IP_COMPUTE) {
radeon_begin(cs);
radeon_emit(PKT3(PKT3_WAIT_REG_MEM, 5, false));
radeon_emit(op | WAIT_REG_MEM_MEM_SPACE(1));
radeon_emit(va);
radeon_emit(va >> 32);
radeon_emit(ref); /* reference value */
radeon_emit(mask); /* mask */
radeon_emit(4); /* poll interval */
radeon_end();
ac_emit_cp_wait_mem(cs->b, va, ref, mask, op);
} else if (cs->hw_ip == AMD_IP_SDMA) {
radv_sdma_emit_wait_mem(cs, op, va, ref, mask);
} else {

View file

@ -155,15 +155,7 @@ unsigned si_cp_write_fence_dwords(struct si_screen *screen)
void si_cp_wait_mem(struct si_context *ctx, struct radeon_cmdbuf *cs, uint64_t va, uint32_t ref,
uint32_t mask, unsigned flags)
{
radeon_begin(cs);
radeon_emit(PKT3(PKT3_WAIT_REG_MEM, 5, 0));
radeon_emit(WAIT_REG_MEM_MEM_SPACE(1) | flags);
radeon_emit(va);
radeon_emit(va >> 32);
radeon_emit(ref); /* reference value */
radeon_emit(mask); /* mask */
radeon_emit(4); /* poll interval */
radeon_end();
ac_emit_cp_wait_mem(&cs->current, va, ref, mask, flags);
}
static void si_add_fence_dependency(struct si_context *sctx, struct pipe_fence_handle *fence)