diff options
author | Eric Anholt <[email protected]> | 2017-12-27 15:12:37 -0800 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2018-01-03 14:25:23 -0800 |
commit | 2056e4a777bd0eed88ff2762977955b2f2bf2f1c (patch) | |
tree | 619d3ce2823d1880e9cd787be8bf9488b8c593d2 /src/gallium | |
parent | 476469955225e15f454e01dc80047dd5fa5c9f97 (diff) |
broadcom/vc5: Emit proper flatshading code for glShadeModel(GL_FLAT).
In updating the simulator, behavior changed slightly so that our old code
wasn't getting glxgears's flatshading interpolated right. Emit flat
shading code just like we would for a normal flat-shaded varying, by
passing a flag in the shader key for glShadeModel(GL_FLAT) state and
customizing the color inputs based on that.
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/drivers/vc5/vc5_emit.c | 5 | ||||
-rw-r--r-- | src/gallium/drivers/vc5/vc5_program.c | 8 | ||||
-rw-r--r-- | src/gallium/drivers/vc5/vc5_state.c | 7 |
3 files changed, 3 insertions, 17 deletions
diff --git a/src/gallium/drivers/vc5/vc5_emit.c b/src/gallium/drivers/vc5/vc5_emit.c index 413059efa4a..3914a346e9d 100644 --- a/src/gallium/drivers/vc5/vc5_emit.c +++ b/src/gallium/drivers/vc5/vc5_emit.c @@ -507,11 +507,6 @@ vc5_emit_state(struct pipe_context *pctx) flags.flat_shade_flags_for_varyings_v024 = vc5->prog.fs->prog_data.fs->flat_shade_flags[0] & 0xfffff; - - if (vc5->rasterizer->base.flatshade) { - flags.flat_shade_flags_for_varyings_v024 |= - vc5->prog.fs->prog_data.fs->shade_model_flags[0] & 0xfffff; - } } } diff --git a/src/gallium/drivers/vc5/vc5_program.c b/src/gallium/drivers/vc5/vc5_program.c index 4232d6aeb83..2fbd83982cd 100644 --- a/src/gallium/drivers/vc5/vc5_program.c +++ b/src/gallium/drivers/vc5/vc5_program.c @@ -390,6 +390,7 @@ vc5_update_compiled_fs(struct vc5_context *vc5, uint8_t prim_mode) } key->light_twoside = vc5->rasterizer->base.light_twoside; + key->shade_model_flat = vc5->rasterizer->base.flatshade; struct vc5_compiled_shader *old_fs = vc5->prog.fs; vc5->prog.fs = vc5_get_compiled_shader(vc5, &key->base); @@ -399,11 +400,8 @@ vc5_update_compiled_fs(struct vc5_context *vc5, uint8_t prim_mode) vc5->dirty |= VC5_DIRTY_COMPILED_FS; if (old_fs && - (vc5->prog.fs->prog_data.fs->flat_shade_flags != - old_fs->prog_data.fs->flat_shade_flags || - (vc5->rasterizer->base.flatshade && - vc5->prog.fs->prog_data.fs->shade_model_flags != - old_fs->prog_data.fs->shade_model_flags))) { + vc5->prog.fs->prog_data.fs->flat_shade_flags != + old_fs->prog_data.fs->flat_shade_flags) { vc5->dirty |= VC5_DIRTY_FLAT_SHADE_FLAGS; } diff --git a/src/gallium/drivers/vc5/vc5_state.c b/src/gallium/drivers/vc5/vc5_state.c index 8bc575f6f1d..a3ae2b3f539 100644 --- a/src/gallium/drivers/vc5/vc5_state.c +++ b/src/gallium/drivers/vc5/vc5_state.c @@ -272,13 +272,6 @@ static void vc5_rasterizer_state_bind(struct pipe_context *pctx, void *hwcso) { struct vc5_context *vc5 = vc5_context(pctx); - struct vc5_rasterizer_state *rast = hwcso; - - if (vc5->rasterizer && rast && - vc5->rasterizer->base.flatshade != rast->base.flatshade) { - vc5->dirty |= VC5_DIRTY_FLAT_SHADE_FLAGS; - } - vc5->rasterizer = hwcso; vc5->dirty |= VC5_DIRTY_RASTERIZER; } |