mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-03 01:18:06 +02:00
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:
parent
82cbfc964a
commit
6329e282b8
4 changed files with 21 additions and 18 deletions
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue