[Mesa-dev] [PATCH] radeonsi: fix invalidating bindless buffer descriptors

Nicolai Hähnle nhaehnle at gmail.com
Mon Jul 3 16:07:37 UTC 2017


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

On 30.06.2017 18:48, Samuel Pitoiset wrote:
> The VA is stored at [4:5], not [0:1]. This invalidated all
> texture buffer descriptors when they were made resident in
> the current context.
> 
> This removes few partial flushes and cache invalidations which
> are needed when updating a bindless descriptor on the fly with
> a WRITE_DATA packet.
> 
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>   src/gallium/drivers/radeonsi/si_descriptors.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c
> index 88f7dcee959..18b070ba3a2 100644
> --- a/src/gallium/drivers/radeonsi/si_descriptors.c
> +++ b/src/gallium/drivers/radeonsi/si_descriptors.c
> @@ -2361,7 +2361,7 @@ static void si_invalidate_bindless_buf_desc(struct si_context *sctx,
>   					    uint64_t offset)
>   {
>   	struct r600_resource *buf = r600_resource(resource);
> -	uint32_t *desc_list = desc->desc_list;
> +	uint32_t *desc_list = desc->desc_list + 4;
>   	uint64_t old_desc_va;
>   
>   	assert(resource->target == PIPE_BUFFER);
> @@ -2374,7 +2374,7 @@ static void si_invalidate_bindless_buf_desc(struct si_context *sctx,
>   		/* The buffer has been invalidated when the handle wasn't
>   		 * resident, update the descriptor and the dirty flag.
>   		 */
> -		si_set_buf_desc_address(buf, offset, &desc_list[4]);
> +		si_set_buf_desc_address(buf, offset, &desc_list[0]);
>   
>   		desc->dirty = true;
>   		sctx->bindless_descriptors_dirty = true;
> 


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


More information about the mesa-dev mailing list