Reviewed-by: Marek Olšák <marek.ol...@amd.com>

Marek

On Wed, Jun 19, 2019 at 4:42 AM Thomas Hellström (VMware) <
tho...@shipmail.org> wrote:

> From: Thomas Hellstrom <thellst...@vmware.com>
>
> For svga, the use of persistent / coherent maps is typically slightly
> slower than without them. It's probably a bit case-dependent and
> possible to tune, but for now, make sure we can disable those.
>
> Signed-off-by: Thomas Hellstrom <thellst...@vmware.com>
> Reviewed-by: Brian Paul <bri...@vmware.com>
> ---
>  src/gallium/auxiliary/util/u_upload_mgr.c | 14 ++++++++++++--
>  src/gallium/auxiliary/util/u_upload_mgr.h |  4 ++++
>  2 files changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/auxiliary/util/u_upload_mgr.c
> b/src/gallium/auxiliary/util/u_upload_mgr.c
> index c2c0ba957e3..73f6cae0b6d 100644
> --- a/src/gallium/auxiliary/util/u_upload_mgr.c
> +++ b/src/gallium/auxiliary/util/u_upload_mgr.c
> @@ -106,8 +106,10 @@ u_upload_clone(struct pipe_context *pipe, struct
> u_upload_mgr *upload)
>     struct u_upload_mgr *result = u_upload_create(pipe,
> upload->default_size,
>                                                   upload->bind,
> upload->usage,
>                                                   upload->flags);
> -   if (upload->map_persistent &&
> -       upload->map_flags & PIPE_TRANSFER_FLUSH_EXPLICIT)
> +   if (!upload->map_persistent && result->map_persistent)
> +      u_upload_disable_persistent(result);
> +   else if (upload->map_persistent &&
> +            upload->map_flags & PIPE_TRANSFER_FLUSH_EXPLICIT)
>        u_upload_enable_flush_explicit(result);
>
>     return result;
> @@ -121,6 +123,14 @@ u_upload_enable_flush_explicit(struct u_upload_mgr
> *upload)
>     upload->map_flags |= PIPE_TRANSFER_FLUSH_EXPLICIT;
>  }
>
> +void
> +u_upload_disable_persistent(struct u_upload_mgr *upload)
> +{
> +   upload->map_persistent = FALSE;
> +   upload->map_flags &= ~(PIPE_TRANSFER_COHERENT |
> PIPE_TRANSFER_PERSISTENT);
> +   upload->map_flags |= PIPE_TRANSFER_FLUSH_EXPLICIT;
> +}
> +
>  static void
>  upload_unmap_internal(struct u_upload_mgr *upload, boolean destroying)
>  {
> diff --git a/src/gallium/auxiliary/util/u_upload_mgr.h
> b/src/gallium/auxiliary/util/u_upload_mgr.h
> index 80832016272..6a4a60963fe 100644
> --- a/src/gallium/auxiliary/util/u_upload_mgr.h
> +++ b/src/gallium/auxiliary/util/u_upload_mgr.h
> @@ -73,6 +73,10 @@ u_upload_clone(struct pipe_context *pipe, struct
> u_upload_mgr *upload);
>  void
>  u_upload_enable_flush_explicit(struct u_upload_mgr *upload);
>
> +/** Whether to avoid persistent mappings where available */
> +void
> +u_upload_disable_persistent(struct u_upload_mgr *upload);
> +
>  /**
>   * Destroy the upload manager.
>   */
> --
> 2.20.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to