[Mesa-dev] [PATCH 2/2] gallium/u_threaded: rename IGNORE_VALID_RANGE -> NO_INFER_UNSYNCHRONIZED

Nicolai Hähnle nhaehnle at gmail.com
Mon Aug 28 10:42:18 UTC 2017


Both patches:

Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>


On 25.08.2017 15:41, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
> 
> ---
>   src/gallium/auxiliary/util/u_threaded_context.c | 4 ++--
>   src/gallium/auxiliary/util/u_threaded_context.h | 4 ++--
>   src/gallium/drivers/radeon/r600_buffer_common.c | 2 +-
>   3 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/util/u_threaded_context.c b/src/gallium/auxiliary/util/u_threaded_context.c
> index 8e3cc34..043d4e6 100644
> --- a/src/gallium/auxiliary/util/u_threaded_context.c
> +++ b/src/gallium/auxiliary/util/u_threaded_context.c
> @@ -1293,21 +1293,21 @@ tc_improve_map_buffer_flags(struct threaded_context *tc,
>          * result in an incorrect behavior with the threaded context.
>          */
>         return usage;
>      }
>   
>      /* Handle CPU reads trivially. */
>      if (usage & PIPE_TRANSFER_READ) {
>         /* Drivers aren't allowed to do buffer invalidations. */
>         return (usage & ~PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE) |
>                TC_TRANSFER_MAP_NO_INVALIDATE |
> -             TC_TRANSFER_MAP_IGNORE_VALID_RANGE;
> +             TC_TRANSFER_MAP_NO_INFER_UNSYNCHRONIZED;
>      }
>   
>      /* See if the buffer range being mapped has never been initialized,
>       * in which case it can be mapped unsynchronized. */
>      if (!(usage & PIPE_TRANSFER_UNSYNCHRONIZED) &&
>          !tres->is_shared &&
>          !util_ranges_intersect(&tres->valid_buffer_range, offset, offset + size))
>         usage |= PIPE_TRANSFER_UNSYNCHRONIZED;
>   
>      if (!(usage & PIPE_TRANSFER_UNSYNCHRONIZED)) {
> @@ -1338,21 +1338,21 @@ tc_improve_map_buffer_flags(struct threaded_context *tc,
>   
>      /* Unsychronized buffer mappings don't have to synchronize the thread. */
>      if (usage & PIPE_TRANSFER_UNSYNCHRONIZED) {
>         usage &= ~PIPE_TRANSFER_DISCARD_RANGE;
>         usage |= TC_TRANSFER_MAP_THREADED_UNSYNC; /* notify the driver */
>      }
>   
>      /* Never invalidate inside the driver and never infer "unsynchronized". */
>      return usage |
>             TC_TRANSFER_MAP_NO_INVALIDATE |
> -          TC_TRANSFER_MAP_IGNORE_VALID_RANGE;
> +          TC_TRANSFER_MAP_NO_INFER_UNSYNCHRONIZED;
>   }
>   
>   static void *
>   tc_transfer_map(struct pipe_context *_pipe,
>                   struct pipe_resource *resource, unsigned level,
>                   unsigned usage, const struct pipe_box *box,
>                   struct pipe_transfer **transfer)
>   {
>      struct threaded_context *tc = threaded_context(_pipe);
>      struct threaded_resource *tres = threaded_resource(resource);
> diff --git a/src/gallium/auxiliary/util/u_threaded_context.h b/src/gallium/auxiliary/util/u_threaded_context.h
> index 0742fae..8977b03 100644
> --- a/src/gallium/auxiliary/util/u_threaded_context.h
> +++ b/src/gallium/auxiliary/util/u_threaded_context.h
> @@ -87,21 +87,21 @@
>    *
>    * 1) If transfer_map has PIPE_TRANSFER_UNSYNCHRONIZED, the call is made
>    *    in the non-driver thread without flushing the queue. The driver will
>    *    receive TC_TRANSFER_MAP_THREADED_UNSYNC in addition to PIPE_TRANSFER_-
>    *    UNSYNCHRONIZED to indicate this.
>    *    Note that transfer_unmap is always enqueued and called from the driver
>    *    thread.
>    *
>    * 2) The driver isn't allowed to infer unsychronized mappings by tracking
>    *    the valid buffer range. The threaded context always sends TC_TRANSFER_-
> - *    MAP_IGNORE_VALID_RANGE to indicate this. Ignoring the flag will lead
> + *    MAP_NO_INFER_UNSYNCHRONIZED to indicate this. Ignoring the flag will lead
>    *    to failures.
>    *    The threaded context does its own detection of unsynchronized mappings.
>    *
>    * 3) The driver isn't allowed to do buffer invalidations by itself under any
>    *    circumstances. This is necessary for unsychronized maps to map the latest
>    *    version of the buffer. (because invalidations can be queued, while
>    *    unsychronized maps are not queued and they should return the latest
>    *    storage after invalidation). The threaded context always sends
>    *    TC_TRANSFER_MAP_NO_INVALIDATE into transfer_map and buffer_subdata to
>    *    indicate this. Ignoring the flag will lead to failures.
> @@ -159,21 +159,21 @@
>   #define U_THREADED_CONTEXT_H
>   
>   #include "pipe/p_context.h"
>   #include "pipe/p_state.h"
>   #include "util/u_queue.h"
>   #include "util/u_range.h"
>   #include "util/slab.h"
>   
>   /* These are transfer flags sent to drivers. */
>   /* Never infer whether it's safe to use unsychronized mappings: */
> -#define TC_TRANSFER_MAP_IGNORE_VALID_RANGE   (1u << 29)
> +#define TC_TRANSFER_MAP_NO_INFER_UNSYNCHRONIZED (1u << 29)
>   /* Don't invalidate buffers: */
>   #define TC_TRANSFER_MAP_NO_INVALIDATE        (1u << 30)
>   /* transfer_map is called from a non-driver thread: */
>   #define TC_TRANSFER_MAP_THREADED_UNSYNC      (1u << 31)
>   
>   /* Size of the queue = number of batch slots in memory.
>    * - 1 batch is always idle and records new commands
>    * - 1 batch is being executed
>    * so the queue size is TC_MAX_BATCHES - 2 = number of waiting batches.
>    *
> diff --git a/src/gallium/drivers/radeon/r600_buffer_common.c b/src/gallium/drivers/radeon/r600_buffer_common.c
> index dd1c209..076faa9 100644
> --- a/src/gallium/drivers/radeon/r600_buffer_common.c
> +++ b/src/gallium/drivers/radeon/r600_buffer_common.c
> @@ -376,21 +376,21 @@ static void *r600_buffer_transfer_map(struct pipe_context *ctx,
>   	 *        page will be used.
>   	 *
>   	 * So don't ever use staging buffers.
>   	 */
>   	if (rbuffer->b.is_user_ptr)
>   		usage |= PIPE_TRANSFER_PERSISTENT;
>   
>   	/* See if the buffer range being mapped has never been initialized,
>   	 * in which case it can be mapped unsynchronized. */
>   	if (!(usage & (PIPE_TRANSFER_UNSYNCHRONIZED |
> -		       TC_TRANSFER_MAP_IGNORE_VALID_RANGE)) &&
> +		       TC_TRANSFER_MAP_NO_INFER_UNSYNCHRONIZED)) &&
>   	    usage & PIPE_TRANSFER_WRITE &&
>   	    !rbuffer->b.is_shared &&
>   	    !util_ranges_intersect(&rbuffer->valid_buffer_range, box->x, box->x + box->width)) {
>   		usage |= PIPE_TRANSFER_UNSYNCHRONIZED;
>   	}
>   
>   	/* If discarding the entire range, discard the whole resource instead. */
>   	if (usage & PIPE_TRANSFER_DISCARD_RANGE &&
>   	    box->x == 0 && box->width == resource->width0) {
>   		usage |= PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE;
> 


-- 
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.


More information about the mesa-dev mailing list