mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 07:18:17 +02:00
amd,radv: add ac_emit_cp_atomic_mem()
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37881>
This commit is contained in:
parent
93f3b36b55
commit
a0117b5e74
3 changed files with 25 additions and 11 deletions
|
|
@ -1244,6 +1244,25 @@ ac_emit_cp_acquire_mem(struct ac_cmdbuf *cs, enum amd_gfx_level gfx_level,
|
|||
ac_cmdbuf_end();
|
||||
}
|
||||
|
||||
void
|
||||
ac_emit_cp_atomic_mem(struct ac_cmdbuf *cs, uint32_t atomic_op,
|
||||
uint32_t atomic_cmd, uint64_t va, uint64_t data,
|
||||
uint64_t compare_data)
|
||||
{
|
||||
ac_cmdbuf_begin(cs);
|
||||
ac_cmdbuf_emit(PKT3(PKT3_ATOMIC_MEM, 7, 0));
|
||||
ac_cmdbuf_emit(ATOMIC_OP(atomic_op) |
|
||||
ATOMIC_COMMAND(atomic_cmd));
|
||||
ac_cmdbuf_emit(va); /* addr lo */
|
||||
ac_cmdbuf_emit(va >> 32); /* addr hi */
|
||||
ac_cmdbuf_emit(data); /* data lo */
|
||||
ac_cmdbuf_emit(data >> 32); /* data hi */
|
||||
ac_cmdbuf_emit(compare_data); /* compare data lo */
|
||||
ac_cmdbuf_emit(compare_data >> 32); /* compare data hi */
|
||||
ac_cmdbuf_emit(10); /* loop interval */
|
||||
ac_cmdbuf_end();
|
||||
}
|
||||
|
||||
void
|
||||
ac_cmdbuf_flush_vgt_streamout(struct ac_cmdbuf *cs, enum amd_gfx_level gfx_level)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -178,6 +178,11 @@ ac_emit_cp_acquire_mem(struct ac_cmdbuf *cs, enum amd_gfx_level gfx_level,
|
|||
enum amd_ip_type ip_type, uint32_t engine,
|
||||
uint32_t gcr_cntl);
|
||||
|
||||
void
|
||||
ac_emit_cp_atomic_mem(struct ac_cmdbuf *cs, uint32_t atomic_op,
|
||||
uint32_t atomic_cmd, uint64_t va, uint64_t data,
|
||||
uint64_t compare_data);
|
||||
|
||||
void
|
||||
ac_cmdbuf_flush_vgt_streamout(struct ac_cmdbuf *cs, enum amd_gfx_level gfx_level);
|
||||
|
||||
|
|
|
|||
|
|
@ -1514,17 +1514,7 @@ radv_create_perf_counter_lock_cs(struct radv_device *device, unsigned pass, bool
|
|||
if (!unlock) {
|
||||
uint64_t mutex_va = radv_buffer_get_va(device->perf_counter_bo) + PERF_CTR_BO_LOCK_OFFSET;
|
||||
|
||||
radeon_begin(cs);
|
||||
radeon_emit(PKT3(PKT3_ATOMIC_MEM, 7, 0));
|
||||
radeon_emit(ATOMIC_OP(TC_OP_ATOMIC_CMPSWAP_32) | ATOMIC_COMMAND(ATOMIC_COMMAND_LOOP));
|
||||
radeon_emit(mutex_va); /* addr lo */
|
||||
radeon_emit(mutex_va >> 32); /* addr hi */
|
||||
radeon_emit(1); /* data lo */
|
||||
radeon_emit(0); /* data hi */
|
||||
radeon_emit(0); /* compare data lo */
|
||||
radeon_emit(0); /* compare data hi */
|
||||
radeon_emit(10); /* loop interval */
|
||||
radeon_end();
|
||||
ac_emit_cp_atomic_mem(cs->b, TC_OP_ATOMIC_CMPSWAP_32, ATOMIC_COMMAND_LOOP, mutex_va, 1, 0);
|
||||
}
|
||||
|
||||
uint64_t va = radv_buffer_get_va(device->perf_counter_bo) + PERF_CTR_BO_PASS_OFFSET;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue