[Mesa-dev] [PATCH 3/6] cso: Optimize cso_save/restore_fragment_samplers

Nicolai Hähnle nhaehnle at gmail.com
Fri Dec 16 11:22:36 UTC 2016


On 16.12.2016 10:52, Michel Dänzer wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> Only copy/memset the pointers that actually need to be.
>
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
> ---
>  src/gallium/auxiliary/cso_cache/cso_context.c | 21 +++++++++++++++++----
>  1 file changed, 17 insertions(+), 4 deletions(-)
>
> diff --git a/src/gallium/auxiliary/cso_cache/cso_context.c b/src/gallium/auxiliary/cso_cache/cso_context.c
> index f52969d366..03f78eea53 100644
> --- a/src/gallium/auxiliary/cso_cache/cso_context.c
> +++ b/src/gallium/auxiliary/cso_cache/cso_context.c
> @@ -1267,8 +1267,10 @@ cso_save_fragment_samplers(struct cso_context *ctx)
>     struct sampler_info *saved = &ctx->fragment_samplers_saved;
>
>     saved->nr_samplers = info->nr_samplers;
> -   memcpy(saved->cso_samplers, info->cso_samplers, sizeof(info->cso_samplers));
> -   memcpy(saved->samplers, info->samplers, sizeof(info->samplers));
> +   memcpy(saved->cso_samplers, info->cso_samplers, info->nr_samplers *
> +          sizeof(*info->cso_samplers));
> +   memcpy(saved->samplers, info->samplers, info->nr_samplers *
> +          sizeof(*info->samplers));
>  }
>
>
> @@ -1277,9 +1279,20 @@ cso_restore_fragment_samplers(struct cso_context *ctx)
>  {
>     struct sampler_info *info = &ctx->samplers[PIPE_SHADER_FRAGMENT];
>     struct sampler_info *saved = &ctx->fragment_samplers_saved;
> +   int delta = info->nr_samplers - saved->nr_samplers;
> +
> +   memcpy(info->cso_samplers, saved->cso_samplers,
> +          saved->nr_samplers * sizeof(*info->cso_samplers));
> +   memcpy(info->samplers, saved->samplers,
> +          saved->nr_samplers * sizeof(*info->samplers));
> +
> +   if (delta > 0) {

I'd be more comfortable with an explicit info->nr_samplers > 
saved->nr_samplers given that nr_samplers is an unsigned. Apart from 
that, patches 1-3:

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

> +      memset(&info->cso_samplers[saved->nr_samplers], 0,
> +             delta * sizeof(*info->cso_samplers));
> +      memset(&info->samplers[saved->nr_samplers], 0,
> +             delta * sizeof(*info->samplers));
> +   }
>
> -   memcpy(info->cso_samplers, saved->cso_samplers, sizeof(info->cso_samplers));
> -   memcpy(info->samplers, saved->samplers, sizeof(info->samplers));
>     cso_single_sampler_done(ctx, PIPE_SHADER_FRAGMENT);
>  }
>
>


More information about the mesa-dev mailing list