Mesa (master): v3d: Stop advertising support for flat shading.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Feb 10 04:52:01 UTC 2021


Module: Mesa
Branch: master
Commit: bcb5f9f94ac77080848be46ce7bf3edcae07ac71
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=bcb5f9f94ac77080848be46ce7bf3edcae07ac71

Author: Eric Anholt <eric at anholt.net>
Date:   Wed Jan 20 13:22:23 2021 -0800

v3d: Stop advertising support for flat shading.

The GL frontend can lower this weird GL feature away for us.  This should
fix redeclaration of the gl_Color/SecondaryColor as centroid, since that
case had been missed in the !flat special case here.

Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8601>

---

 src/broadcom/compiler/nir_to_vir.c    | 23 -----------------------
 src/broadcom/compiler/v3d_compiler.h  |  1 -
 src/broadcom/vulkan/v3dv_pipeline.c   |  3 ---
 src/gallium/drivers/v3d/v3d_program.c |  2 --
 src/gallium/drivers/v3d/v3d_screen.c  |  1 +
 5 files changed, 1 insertion(+), 29 deletions(-)

diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c
index 05cca37b929..b308e3a3755 100644
--- a/src/broadcom/compiler/nir_to_vir.c
+++ b/src/broadcom/compiler/nir_to_vir.c
@@ -955,28 +955,6 @@ emit_fragment_varying(struct v3d_compile *c, nir_variable *var,
         struct qreg result;
         switch (var->data.interpolation) {
         case INTERP_MODE_NONE:
-                /* If a gl_FrontColor or gl_BackColor input has no interp
-                 * qualifier, then if we're using glShadeModel(GL_FLAT) it
-                 * needs to be flat shaded.
-                 */
-                switch (var->data.location + array_index) {
-                case VARYING_SLOT_COL0:
-                case VARYING_SLOT_COL1:
-                case VARYING_SLOT_BFC0:
-                case VARYING_SLOT_BFC1:
-                        if (c->fs_key->shade_model_flat) {
-                                BITSET_SET(c->flat_shade_flags, i);
-                                vir_MOV_dest(c, c->undef, vary);
-                                result = vir_MOV(c, r5);
-                        } else {
-                                result = vir_FADD(c, vir_FMUL(c, vary,
-                                                              c->payload_w), r5);
-                        }
-                        goto done;
-                default:
-                        break;
-                }
-                /* FALLTHROUGH */
         case INTERP_MODE_SMOOTH:
                 if (var->data.centroid) {
                         BITSET_SET(c->centroid_flags, i);
@@ -1002,7 +980,6 @@ emit_fragment_varying(struct v3d_compile *c, nir_variable *var,
                 unreachable("Bad interp mode");
         }
 
-done:
         if (input_idx >= 0)
                 c->inputs[input_idx] = result;
         return result;
diff --git a/src/broadcom/compiler/v3d_compiler.h b/src/broadcom/compiler/v3d_compiler.h
index 85f6e5a6310..785b70529ae 100644
--- a/src/broadcom/compiler/v3d_compiler.h
+++ b/src/broadcom/compiler/v3d_compiler.h
@@ -389,7 +389,6 @@ struct v3d_fs_key {
         bool sample_coverage;
         bool sample_alpha_to_coverage;
         bool sample_alpha_to_one;
-        bool shade_model_flat;
         /* Mask of which color render targets are present. */
         uint8_t cbufs;
         uint8_t swap_color_rb;
diff --git a/src/broadcom/vulkan/v3dv_pipeline.c b/src/broadcom/vulkan/v3dv_pipeline.c
index e06d9e32a95..2895a885e9a 100644
--- a/src/broadcom/vulkan/v3dv_pipeline.c
+++ b/src/broadcom/vulkan/v3dv_pipeline.c
@@ -1188,9 +1188,6 @@ pipeline_populate_v3d_fs_key(struct v3d_fs_key *key,
          key->point_coord_upper_left = true;
       }
    }
-
-   /* FIXME: ditto, although for flat lighting. Again, neet to confirm.*/
-   key->shade_model_flat = false;
 }
 
 static void
diff --git a/src/gallium/drivers/v3d/v3d_program.c b/src/gallium/drivers/v3d/v3d_program.c
index 762a1549619..c29db2d7831 100644
--- a/src/gallium/drivers/v3d/v3d_program.c
+++ b/src/gallium/drivers/v3d/v3d_program.c
@@ -613,8 +613,6 @@ v3d_update_compiled_fs(struct v3d_context *v3d, uint8_t prim_mode)
                          PIPE_SPRITE_COORD_UPPER_LEFT);
         }
 
-        key->shade_model_flat = v3d->rasterizer->base.flatshade;
-
         struct v3d_compiled_shader *old_fs = v3d->prog.fs;
         v3d->prog.fs = v3d_get_compiled_shader(v3d, &key->base, sizeof(*key));
         if (v3d->prog.fs == old_fs)
diff --git a/src/gallium/drivers/v3d/v3d_screen.c b/src/gallium/drivers/v3d/v3d_screen.c
index e06f99d3a35..2d961a1d24a 100644
--- a/src/gallium/drivers/v3d/v3d_screen.c
+++ b/src/gallium/drivers/v3d/v3d_screen.c
@@ -258,6 +258,7 @@ v3d_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
                 return 1;
 
         case PIPE_CAP_ALPHA_TEST:
+        case PIPE_CAP_FLATSHADE:
         case PIPE_CAP_TWO_SIDED_COLOR:
         case PIPE_CAP_VERTEX_COLOR_CLAMPED:
         case PIPE_CAP_FRAGMENT_COLOR_CLAMPED:



More information about the mesa-commit mailing list