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.
This commit is contained in:
@@ -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-
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user