summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2013-10-08 13:40:16 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2013-10-08 13:40:16 +0200
commit78eda24d041fd19309d5a155bd0a640bc3516ec7 (patch)
tree4ec84821bbc87af630c4d25432d6a0380d8658c8 /src
parent7a6832497e8bd207424295242eda0ad70b854093 (diff)
downloadetna_viv-78eda24d041fd19309d5a155bd0a640bc3516ec7.tar.gz
etna_viv-78eda24d041fd19309d5a155bd0a640bc3516ec7.tar.xz
driver: check for rebind of already bound shader objects
Skip the dirty bit if re-binding already bound shader object.
Diffstat (limited to 'src')
-rw-r--r--src/driver/etna_shader.c4
1 files changed, 4 insertions, 0 deletions
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;