[Mesa-dev] [PATCH 2/2] radv: set EVENT_WRITE_EOP.INT_SEL = wait for write confirmation

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Wed Jun 20 16:03:37 UTC 2018


Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

for the series.

On Wed, Jun 20, 2018 at 4:10 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> Ported from RadeonSI.
> Not sure why this is needed but AMDVLK does something similar.
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>  src/amd/vulkan/si_cmd_buffer.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/src/amd/vulkan/si_cmd_buffer.c b/src/amd/vulkan/si_cmd_buffer.c
> index d6b073c783..e350bccae3 100644
> --- a/src/amd/vulkan/si_cmd_buffer.c
> +++ b/src/amd/vulkan/si_cmd_buffer.c
> @@ -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 */
>         }
> --
> 2.17.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list