[Mesa-dev] [PATCH 4/4] gallium/radeon: small cleanups in r600_texture_transfer_map

Nicolai Hähnle nhaehnle at gmail.com
Wed May 18 16:46:44 UTC 2016


For the series:

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

On 18.05.2016 11:13, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> ---
>   src/gallium/drivers/radeon/r600_texture.c | 22 +++++++++-------------
>   1 file changed, 9 insertions(+), 13 deletions(-)
>
> diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c
> index a00dedc..e2955aa 100644
> --- a/src/gallium/drivers/radeon/r600_texture.c
> +++ b/src/gallium/drivers/radeon/r600_texture.c
> @@ -1237,6 +1237,8 @@ static void *r600_texture_transfer_map(struct pipe_context *ctx,
>   	unsigned offset = 0;
>   	char *map;
>
> +	assert(!(texture->flags & R600_RESOURCE_FLAG_TRANSFER));
> +
>   	/* We cannot map a tiled texture directly because the data is
>   	 * in a different order, therefore we do detiling using a blit.
>   	 *
> @@ -1257,10 +1259,6 @@ static void *r600_texture_transfer_map(struct pipe_context *ctx,
>   		use_staging_texture = TRUE;
>   	}
>
> -	if (texture->flags & R600_RESOURCE_FLAG_TRANSFER) {
> -		use_staging_texture = FALSE;
> -	}
> -
>   	trans = CALLOC_STRUCT(r600_transfer);
>   	if (!trans)
>   		return NULL;
> @@ -1327,6 +1325,7 @@ static void *r600_texture_transfer_map(struct pipe_context *ctx,
>   		trans->transfer.stride = staging_depth->surface.level[level].pitch_bytes;
>   		trans->transfer.layer_stride = staging_depth->surface.level[level].slice_size;
>   		trans->staging = (struct r600_resource*)staging_depth;
> +		buf = trans->staging;
>   	} else if (use_staging_texture) {
>   		struct pipe_resource resource;
>   		struct r600_texture *staging;
> @@ -1346,21 +1345,18 @@ static void *r600_texture_transfer_map(struct pipe_context *ctx,
>   		trans->staging = &staging->resource;
>   		trans->transfer.stride = staging->surface.level[0].pitch_bytes;
>   		trans->transfer.layer_stride = staging->surface.level[0].slice_size;
> -		if (usage & PIPE_TRANSFER_READ) {
> +
> +		if (usage & PIPE_TRANSFER_READ)
>   			r600_copy_to_staging_texture(ctx, trans);
> -		}
> +		else
> +			usage |= PIPE_TRANSFER_UNSYNCHRONIZED;
> +
> +		buf = trans->staging;
>   	} else {
>   		/* the resource is mapped directly */
>   		trans->transfer.stride = rtex->surface.level[level].pitch_bytes;
>   		trans->transfer.layer_stride = rtex->surface.level[level].slice_size;
>   		offset = r600_texture_get_offset(rtex, level, box);
> -	}
> -
> -	if (trans->staging) {
> -		buf = trans->staging;
> -		if (!rtex->is_depth && !(usage & PIPE_TRANSFER_READ))
> -			usage |= PIPE_TRANSFER_UNSYNCHRONIZED;
> -	} else {
>   		buf = &rtex->resource;
>   	}
>
>


More information about the mesa-dev mailing list