Module: Mesa Branch: master Commit: 9e142386472e599e70856634e4cbd247114af74a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9e142386472e599e70856634e4cbd247114af74a
Author: Michel Dänzer <michel.daen...@amd.com> Date: Fri Dec 16 18:00:33 2016 +0900 cso: Optimize cso_save/restore_fragment_samplers Only copy/memset the pointers that actually need to be. v2: * Cast info->nr_samplers to int for calculating delta (Nicolai) Reviewed-by: Nicolai Hähnle <nicolai.haeh...@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 f52969d..0f4a333 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 = (int)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) { + 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); } _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit