From: Eric Anholt Date: Sun, 11 Jan 2015 01:52:26 +0000 (+1300) Subject: vc4: Fix up statechange management for uncompiled/compiled FS/VS. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1a328120d334ae09fa6a1ce8b599174f730a9753;p=mesa.git vc4: Fix up statechange management for uncompiled/compiled FS/VS. No need to recheck the FS compile when the VS source has changed, but there *is* a need to recheck the VS compile when the compiled VS has changed (since the live inputs may change). Fixes es3conform's blend test. --- diff --git a/src/gallium/drivers/vc4/vc4_context.h b/src/gallium/drivers/vc4/vc4_context.h index 90a68e5c28e..e3d797e02b8 100644 --- a/src/gallium/drivers/vc4/vc4_context.h +++ b/src/gallium/drivers/vc4/vc4_context.h @@ -44,7 +44,7 @@ #define VC4_DIRTY_FRAGTEX (1 << 3) #define VC4_DIRTY_VERTTEX (1 << 4) #define VC4_DIRTY_TEXSTATE (1 << 5) -#define VC4_DIRTY_PROG (1 << 6) + #define VC4_DIRTY_BLEND_COLOR (1 << 7) #define VC4_DIRTY_STENCIL_REF (1 << 8) #define VC4_DIRTY_SAMPLE_MASK (1 << 9) @@ -59,9 +59,9 @@ #define VC4_DIRTY_FLAT_SHADE_FLAGS (1 << 18) #define VC4_DIRTY_PRIM_MODE (1 << 19) #define VC4_DIRTY_CLIP (1 << 20) - -#define VC4_SHADER_DIRTY_VP (1 << 0) -#define VC4_SHADER_DIRTY_FP (1 << 1) +#define VC4_DIRTY_UNCOMPILED_VS (1 << 21) +#define VC4_DIRTY_UNCOMPILED_FS (1 << 22) +#define VC4_DIRTY_COMPILED_FS (1 << 24) struct vc4_texture_stateobj { struct pipe_sampler_view *textures[PIPE_MAX_SAMPLERS]; @@ -139,7 +139,6 @@ struct vc4_compiled_shader { struct vc4_program_stateobj { struct vc4_uncompiled_shader *bind_vs, *bind_fs; struct vc4_compiled_shader *cs, *vs, *fs; - uint32_t dirty; uint8_t num_exports; /* Indexed by semantic name or TGSI_SEMANTIC_COUNT + semantic index * for TGSI_SEMANTIC_GENERIC. Special vs exports (position and point- diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c index 581b9400957..2ab7da90dd7 100644 --- a/src/gallium/drivers/vc4/vc4_program.c +++ b/src/gallium/drivers/vc4/vc4_program.c @@ -2364,7 +2364,7 @@ vc4_update_compiled_fs(struct vc4_context *vc4, uint8_t prim_mode) VC4_DIRTY_RASTERIZER | VC4_DIRTY_FRAGTEX | VC4_DIRTY_TEXSTATE | - VC4_DIRTY_PROG))) { + VC4_DIRTY_UNCOMPILED_FS))) { return; } @@ -2408,6 +2408,7 @@ vc4_update_compiled_fs(struct vc4_context *vc4, uint8_t prim_mode) if (vc4->prog.fs == old_fs) return; + vc4->dirty |= VC4_DIRTY_COMPILED_FS; if (vc4->rasterizer->base.flatshade && old_fs && vc4->prog.fs->color_inputs != old_fs->color_inputs) { vc4->dirty |= VC4_DIRTY_FLAT_SHADE_FLAGS; @@ -2425,7 +2426,8 @@ vc4_update_compiled_vs(struct vc4_context *vc4, uint8_t prim_mode) VC4_DIRTY_VERTTEX | VC4_DIRTY_TEXSTATE | VC4_DIRTY_VTXSTATE | - VC4_DIRTY_PROG))) { + VC4_DIRTY_UNCOMPILED_VS | + VC4_DIRTY_COMPILED_FS))) { return; } @@ -2814,8 +2816,7 @@ vc4_fp_state_bind(struct pipe_context *pctx, void *hwcso) { struct vc4_context *vc4 = vc4_context(pctx); vc4->prog.bind_fs = hwcso; - vc4->prog.dirty |= VC4_SHADER_DIRTY_FP; - vc4->dirty |= VC4_DIRTY_PROG; + vc4->dirty |= VC4_DIRTY_UNCOMPILED_FS; } static void @@ -2823,8 +2824,7 @@ vc4_vp_state_bind(struct pipe_context *pctx, void *hwcso) { struct vc4_context *vc4 = vc4_context(pctx); vc4->prog.bind_vs = hwcso; - vc4->prog.dirty |= VC4_SHADER_DIRTY_VP; - vc4->dirty |= VC4_DIRTY_PROG; + vc4->dirty |= VC4_DIRTY_UNCOMPILED_VS; } void