diff options
author | Eric Anholt <[email protected]> | 2014-10-10 14:17:15 +0200 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2014-10-10 15:49:22 +0200 |
commit | d09509da2aa5ff709c48bdc4163a2c57811c70ab (patch) | |
tree | 3bdeeeeda0d651036af40fbaaeaafb765ec64edf /src/gallium/drivers/vc4/vc4_program.c | |
parent | c6f50c4086a96c3a8d84522ed7ee5c75a8b0868c (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.c | 20 |
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; |