mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 03:08:05 +02:00
radv: set EVENT_WRITE_EOP.INT_SEL = wait for write confirmation
Ported from RadeonSI. Not sure why this is needed but AMDVLK does something similar. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
parent
41f6096c26
commit
af17a29ad8
1 changed files with 9 additions and 3 deletions
|
|
@ -686,11 +686,17 @@ void si_cs_emit_write_event_eop(struct radeon_cmdbuf *cs,
|
|||
EVENT_INDEX(5) |
|
||||
event_flags;
|
||||
unsigned is_gfx8_mec = is_mec && chip_class < GFX9;
|
||||
unsigned sel = EOP_DATA_SEL(data_sel);
|
||||
|
||||
/* Wait for write confirmation before writing data, but don't send
|
||||
* an interrupt. */
|
||||
if (data_sel != EOP_DATA_SEL_DISCARD)
|
||||
sel |= EOP_INT_SEL(EOP_INT_SEL_SEND_DATA_AFTER_WR_CONFIRM);
|
||||
|
||||
if (chip_class >= GFX9 || is_gfx8_mec) {
|
||||
radeon_emit(cs, PKT3(PKT3_RELEASE_MEM, is_gfx8_mec ? 5 : 6, predicated));
|
||||
radeon_emit(cs, op);
|
||||
radeon_emit(cs, EOP_DATA_SEL(data_sel));
|
||||
radeon_emit(cs, sel);
|
||||
radeon_emit(cs, va); /* address lo */
|
||||
radeon_emit(cs, va >> 32); /* address hi */
|
||||
radeon_emit(cs, new_fence); /* immediate data lo */
|
||||
|
|
@ -707,7 +713,7 @@ void si_cs_emit_write_event_eop(struct radeon_cmdbuf *cs,
|
|||
radeon_emit(cs, PKT3(PKT3_EVENT_WRITE_EOP, 4, predicated));
|
||||
radeon_emit(cs, op);
|
||||
radeon_emit(cs, va);
|
||||
radeon_emit(cs, ((va >> 32) & 0xffff) | EOP_DATA_SEL(data_sel));
|
||||
radeon_emit(cs, ((va >> 32) & 0xffff) | sel);
|
||||
radeon_emit(cs, old_fence); /* immediate data */
|
||||
radeon_emit(cs, 0); /* unused */
|
||||
}
|
||||
|
|
@ -715,7 +721,7 @@ void si_cs_emit_write_event_eop(struct radeon_cmdbuf *cs,
|
|||
radeon_emit(cs, PKT3(PKT3_EVENT_WRITE_EOP, 4, predicated));
|
||||
radeon_emit(cs, op);
|
||||
radeon_emit(cs, va);
|
||||
radeon_emit(cs, ((va >> 32) & 0xffff) | EOP_DATA_SEL(data_sel));
|
||||
radeon_emit(cs, ((va >> 32) & 0xffff) | sel);
|
||||
radeon_emit(cs, new_fence); /* immediate data */
|
||||
radeon_emit(cs, 0); /* unused */
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue