summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/vc4/vc4_program.c
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2014-10-10 14:17:15 +0200
committerEric Anholt <[email protected]>2014-10-10 15:49:22 +0200
commitd09509da2aa5ff709c48bdc4163a2c57811c70ab (patch)
tree3bdeeeeda0d651036af40fbaaeaafb765ec64edf /src/gallium/drivers/vc4/vc4_program.c
parentc6f50c4086a96c3a8d84522ed7ee5c75a8b0868c (diff)
vc4: Don't look up the compiled shaders unless state has changed.
Improves simulated norast performance on a little benchmark by 38.0965% +/- 3.27534% (n=11).
Diffstat (limited to 'src/gallium/drivers/vc4/vc4_program.c')
-rw-r--r--src/gallium/drivers/vc4/vc4_program.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c
index bf76acff2cd..b22426cf9aa 100644
--- a/src/gallium/drivers/vc4/vc4_program.c
+++ b/src/gallium/drivers/vc4/vc4_program.c
@@ -1792,6 +1792,17 @@ vc4_update_compiled_fs(struct vc4_context *vc4, uint8_t prim_mode)
struct vc4_fs_key local_key;
struct vc4_fs_key *key = &local_key;
+ if (!(vc4->dirty & (VC4_DIRTY_PRIM_MODE |
+ VC4_DIRTY_BLEND |
+ VC4_DIRTY_FRAMEBUFFER |
+ VC4_DIRTY_ZSA |
+ VC4_DIRTY_RASTERIZER |
+ VC4_DIRTY_FRAGTEX |
+ VC4_DIRTY_TEXSTATE |
+ VC4_DIRTY_PROG))) {
+ return;
+ }
+
memset(key, 0, sizeof(*key));
vc4_setup_shared_key(&key->base, &vc4->fragtex);
key->base.shader_state = vc4->prog.bind_fs;
@@ -1840,6 +1851,15 @@ vc4_update_compiled_vs(struct vc4_context *vc4, uint8_t prim_mode)
struct vc4_vs_key local_key;
struct vc4_vs_key *key = &local_key;
+ if (!(vc4->dirty & (VC4_DIRTY_PRIM_MODE |
+ VC4_DIRTY_RASTERIZER |
+ VC4_DIRTY_VERTTEX |
+ VC4_DIRTY_TEXSTATE |
+ VC4_DIRTY_VTXSTATE |
+ VC4_DIRTY_PROG))) {
+ return;
+ }
+
memset(key, 0, sizeof(*key));
vc4_setup_shared_key(&key->base, &vc4->verttex);
key->base.shader_state = vc4->prog.bind_vs;