[Mesa-dev] [PATCH 2/2] radeonsi: simplify invalidation of RW buffer bindings

Nicolai Hähnle nhaehnle at gmail.com
Thu Apr 21 18:41:28 UTC 2016


On 21.04.2016 10:58, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> this is a follow-up to the RW buffer cleanup.

Any chance you could squash this with the patch in the earlier series 
for better bisect-ability of the history? Either way,

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

> ---
>   src/gallium/drivers/radeonsi/si_descriptors.c | 42 ++++++++++++---------------
>   1 file changed, 18 insertions(+), 24 deletions(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c
> index 343874c..6926c6b 100644
> --- a/src/gallium/drivers/radeonsi/si_descriptors.c
> +++ b/src/gallium/drivers/radeonsi/si_descriptors.c
> @@ -1226,33 +1226,27 @@ static void si_invalidate_buffer(struct pipe_context *ctx, struct pipe_resource
>   		}
>   	}
>
> -	/* Read/Write buffers. */
> -	for (shader = 0; shader < SI_NUM_SHADERS; shader++) {
> +	/* Streamout buffers. (other internal buffers can't be invalidated) */
> +	for (i = SI_VS_STREAMOUT_BUF0; i <= SI_VS_STREAMOUT_BUF3; i++) {
>   		struct si_buffer_resources *buffers = &sctx->rw_buffers;
> -		unsigned mask = buffers->desc.enabled_mask;
>
> -		while (mask) {
> -			i = u_bit_scan(&mask);
> -			if (buffers->buffers[i] == buf) {
> -				si_desc_reset_buffer_offset(ctx, buffers->desc.list + i*4,
> -							    old_va, buf);
> -				buffers->desc.dirty_mask |= 1u << i;
> +		if (buffers->buffers[i] != buf)
> +			continue;
>
> -				radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
> -						      rbuffer, buffers->shader_usage,
> -						      buffers->priority);
> -
> -				if (i >= SI_VS_STREAMOUT_BUF0 && shader == PIPE_SHADER_VERTEX) {
> -					/* Update the streamout state. */
> -					if (sctx->b.streamout.begin_emitted) {
> -						r600_emit_streamout_end(&sctx->b);
> -					}
> -					sctx->b.streamout.append_bitmask =
> -						sctx->b.streamout.enabled_mask;
> -					r600_streamout_buffers_dirty(&sctx->b);
> -				}
> -			}
> -		}
> +		si_desc_reset_buffer_offset(ctx, buffers->desc.list + i*4,
> +					    old_va, buf);
> +		buffers->desc.dirty_mask |= 1u << i;
> +
> +		radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
> +					  rbuffer, buffers->shader_usage,
> +					  buffers->priority);
> +
> +		/* Update the streamout state. */
> +		if (sctx->b.streamout.begin_emitted)
> +			r600_emit_streamout_end(&sctx->b);
> +		sctx->b.streamout.append_bitmask =
> +				sctx->b.streamout.enabled_mask;
> +		r600_streamout_buffers_dirty(&sctx->b);
>   	}
>
>   	/* Constant and shader buffers. */
>


More information about the mesa-dev mailing list