Re: [PATCH xf86-video-intel] sna: Forcibly relinquish the GPU bo cache of a SHM pixmap on flushing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Apr 17, 2020 at 10:05 AM Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> wrote:
>
> Before we indicate return control of the SHM Pixmap to the client (that
> is prior to the next XReply), we ensure that the original SHM buffer is
> uptodate with any changes made on the GPU. We must flush the GPU writes
> back to the CPU and so not allow ourselves to keep the dirty cache of
> the CPU bo.
>
> Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx>
> Cc: Alexei Podtelezhnikov <apodtele@xxxxxxxxx>

The failed assertion is gone.

Tested-by: Alexei Podtelezhnikov <apodtele@xxxxxxxxx>

> ---
>  src/sna/sna_accel.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
> index edbfe5a4a..6e14cf7b4 100644
> --- a/src/sna/sna_accel.c
> +++ b/src/sna/sna_accel.c
> @@ -2119,6 +2119,11 @@ static inline bool operate_inplace(struct sna_pixmap *priv, unsigned flags)
>         if (!USE_INPLACE)
>                 return false;
>
> +       if (flags & __MOVE_FORCE) {
> +               DBG(("%s: no, inplace operation denied by force\n", __FUNCTION__));
> +               return false;
> +       }
> +
>         if ((flags & MOVE_INPLACE_HINT) == 0) {
>                 DBG(("%s: no, inplace operation not suitable\n", __FUNCTION__));
>                 return false;
> @@ -2327,7 +2332,7 @@ skip_inplace_map:
>
>         sna_pixmap_unmap(pixmap, priv);
>
> -       if (USE_INPLACE &&
> +       if (USE_INPLACE && !(flags & __MOVE_FORCE) &&
>             (flags & MOVE_WRITE ? (void *)priv->gpu_bo : (void *)priv->gpu_damage) && priv->cpu_damage == NULL &&
>             priv->gpu_bo->tiling == I915_TILING_NONE &&
>             (flags & MOVE_READ || kgem_bo_can_map__cpu(&sna->kgem, priv->gpu_bo, flags & MOVE_WRITE)) &&
> @@ -17409,7 +17414,10 @@ void sna_accel_flush(struct sna *sna)
>                              priv->pixmap->refcnt));
>                         assert(!priv->flush);
>                         ret = sna_pixmap_move_to_cpu(priv->pixmap,
> -                                                    MOVE_READ | MOVE_WRITE);
> +                                                    MOVE_READ |
> +                                                    MOVE_WRITE |
> +                                                    MOVE_WHOLE_HINT |
> +                                                    __MOVE_FORCE);
>                         assert(!ret || priv->gpu_bo == NULL);
>                         if (priv->pixmap->refcnt == 0) {
>                                 sna_damage_destroy(&priv->cpu_damage);
> --
> 2.26.0
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx



[Index of Archives]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux