[Mesa-dev] [PATCH 03/10] radeonsi: generalize si_set_constant_buffer

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


On 20.04.2016 10:47, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> this will be used in the next commit
> ---
>   src/gallium/drivers/radeonsi/si_descriptors.c | 27 +++++++++++++++++----------
>   1 file changed, 17 insertions(+), 10 deletions(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c
> index c802b1e..b8f74f4 100644
> --- a/src/gallium/drivers/radeonsi/si_descriptors.c
> +++ b/src/gallium/drivers/radeonsi/si_descriptors.c
> @@ -775,15 +775,10 @@ void si_upload_const_buffer(struct si_context *sctx, struct r600_resource **rbuf
>   		util_memcpy_cpu_to_le32(tmp, ptr, size);
>   }
>
> -static void si_set_constant_buffer(struct pipe_context *ctx, uint shader, uint slot,
> -				   struct pipe_constant_buffer *input)
> +static void si_set_constant_buffer(struct si_context *sctx,
> +				   struct si_buffer_resources *buffers,
> +				   uint slot, struct pipe_constant_buffer *input)
>   {
> -	struct si_context *sctx = (struct si_context *)ctx;
> -	struct si_buffer_resources *buffers = &sctx->const_buffers[shader];
> -
> -	if (shader >= SI_NUM_SHADERS)
> -		return;
> -
>   	assert(slot < buffers->desc.num_elements);
>   	pipe_resource_reference(&buffers->buffers[slot], NULL);
>
> @@ -806,7 +801,7 @@ static void si_set_constant_buffer(struct pipe_context *ctx, uint shader, uint s
>   					       input->buffer_size, &buffer_offset);
>   			if (!buffer) {
>   				/* Just unbind on failure. */
> -				si_set_constant_buffer(ctx, shader, slot, NULL);
> +				si_set_constant_buffer(sctx, buffers, slot, NULL);
>   				return;
>   			}
>   			va = r600_resource(buffer)->gpu_address + buffer_offset;
> @@ -842,6 +837,18 @@ static void si_set_constant_buffer(struct pipe_context *ctx, uint shader, uint s
>   	buffers->desc.dirty_mask |= 1llu << slot;
>   }
>
> +static void si_pipe_set_constant_buffer(struct pipe_context *ctx,
> +					uint shader, uint slot,
> +					struct pipe_constant_buffer *input)
> +{
> +	struct si_context *sctx = (struct si_context *)ctx;
> +
> +	if (shader >= SI_NUM_SHADERS)
> +		return;

I know you just moved the check, but couldn't/shouldn't that be an 
assert(shader < SI_NUM_SHADERS) instead?

Nicolai

> +
> +	si_set_constant_buffer(sctx, &sctx->const_buffers[shader], slot, input);
> +}
> +
>   /* SHADER BUFFERS */
>
>   static void si_set_shader_buffers(struct pipe_context *ctx, unsigned shader,
> @@ -1470,7 +1477,7 @@ void si_init_all_descriptors(struct si_context *sctx)
>   	/* Set pipe_context functions. */
>   	sctx->b.b.bind_sampler_states = si_bind_sampler_states;
>   	sctx->b.b.set_shader_images = si_set_shader_images;
> -	sctx->b.b.set_constant_buffer = si_set_constant_buffer;
> +	sctx->b.b.set_constant_buffer = si_pipe_set_constant_buffer;
>   	sctx->b.b.set_shader_buffers = si_set_shader_buffers;
>   	sctx->b.b.set_sampler_views = si_set_sampler_views;
>   	sctx->b.b.set_stream_output_targets = si_set_streamout_targets;
>


More information about the mesa-dev mailing list