From 1454955e5d5130bc0bba4e2d5ef41ceb71346729 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 30 Jul 2021 13:14:20 -0400 Subject: [PATCH] zink: only update inlinable constants when they change Reviewed-by: Hoe Hao Cheng Part-of: --- src/gallium/drivers/zink/zink_context.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 7e217781862..a13d69c34f1 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -992,10 +992,14 @@ zink_set_inlinable_constants(struct pipe_context *pctx, uint num_values, uint32_t *values) { struct zink_context *ctx = (struct zink_context *)pctx; + const uint32_t bit = BITFIELD_BIT(shader); - memcpy(ctx->inlinable_uniforms[shader], values, num_values * 4); - ctx->dirty_shader_stages |= 1 << shader; - ctx->inlinable_uniforms_valid_mask |= 1 << shader; + if (!(ctx->inlinable_uniforms_valid_mask & bit) || + memcmp(ctx->inlinable_uniforms[shader], values, num_values * 4)) { + memcpy(ctx->inlinable_uniforms[shader], values, num_values * 4); + ctx->dirty_shader_stages |= bit; + ctx->inlinable_uniforms_valid_mask |= bit; + } } ALWAYS_INLINE static void