From 78eda24d041fd19309d5a155bd0a640bc3516ec7 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Tue, 8 Oct 2013 13:40:16 +0200 Subject: driver: check for rebind of already bound shader objects Skip the dirty bit if re-binding already bound shader object. --- src/driver/etna_shader.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/driver/etna_shader.c b/src/driver/etna_shader.c index ddff265..a76bc24 100644 --- a/src/driver/etna_shader.c +++ b/src/driver/etna_shader.c @@ -268,6 +268,8 @@ static void etna_pipe_bind_fs_state(struct pipe_context *pipe, void *fss_) { struct etna_pipe_context *priv = etna_pipe_context(pipe); struct etna_shader_object *fss = (struct etna_shader_object*)fss_; + if(priv->fs == fss) /* skip if already bound */ + return; priv->dirty_bits |= ETNA_STATE_SHADER | ETNA_STATE_PS_UNIFORMS; assert(fss == NULL || fss->processor == TGSI_PROCESSOR_FRAGMENT); priv->fs = fss; @@ -277,6 +279,8 @@ static void etna_pipe_bind_vs_state(struct pipe_context *pipe, void *vss_) { struct etna_pipe_context *priv = etna_pipe_context(pipe); struct etna_shader_object *vss = (struct etna_shader_object*)vss_; + if(priv->vs == vss) /* skip if already bound */ + return; priv->dirty_bits |= ETNA_STATE_SHADER | ETNA_STATE_VS_UNIFORMS; assert(vss == NULL || vss->processor == TGSI_PROCESSOR_VERTEX); priv->vs = vss; -- cgit