summaryrefslogtreecommitdiffstats
path: root/src/broadcom/compiler/nir_to_vir.c
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2017-12-27 15:12:37 -0800
committerEric Anholt <[email protected]>2018-01-03 14:25:23 -0800
commit2056e4a777bd0eed88ff2762977955b2f2bf2f1c (patch)
tree619d3ce2823d1880e9cd787be8bf9488b8c593d2 /src/broadcom/compiler/nir_to_vir.c
parent476469955225e15f454e01dc80047dd5fa5c9f97 (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/broadcom/compiler/nir_to_vir.c')
-rw-r--r--src/broadcom/compiler/nir_to_vir.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c
index 77d460c1b62..394e20d2070 100644
--- a/src/broadcom/compiler/nir_to_vir.c
+++ b/src/broadcom/compiler/nir_to_vir.c
@@ -614,16 +614,22 @@ emit_fragment_varying(struct v3d_compile *c, nir_variable *var,
switch (var->data.interpolation) {
case INTERP_MODE_NONE:
/* If a gl_FrontColor or gl_BackColor input has no interp
- * qualifier, then flag it for glShadeModel() handling by the
- * driver.
+ * qualifier, then if we're using glShadeModel(GL_FLAT) it
+ * needs to be flat shaded.
*/
switch (var->data.location) {
case VARYING_SLOT_COL0:
case VARYING_SLOT_COL1:
case VARYING_SLOT_BFC0:
case VARYING_SLOT_BFC1:
- BITSET_SET(c->shade_model_flags, i);
- break;
+ if (c->fs_key->shade_model_flat) {
+ BITSET_SET(c->flat_shade_flags, i);
+ vir_MOV_dest(c, c->undef, vary);
+ return vir_MOV(c, r5);
+ } else {
+ return vir_FADD(c, vir_FMUL(c, vary,
+ c->payload_w), r5);
+ }
default:
break;
}