Mesa (main): etnaviv: set VIVS_GL_VERTEX_ELEMENT_CONFIG depending on prim type

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Apr 26 17:05:14 UTC 2022


Module: Mesa
Branch: main
Commit: 90ea4283b47d846628e5c5fec7d205771220811f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=90ea4283b47d846628e5c5fec7d205771220811f

Author: Lucas Stach <l.stach at pengutronix.de>
Date:   Tue Apr 19 12:54:55 2022 +0200

etnaviv: set VIVS_GL_VERTEX_ELEMENT_CONFIG depending on prim type

New blob versions always emit this state on GPUs that don't have the
NEW_GPIPE feature bit before drawing a primitive, as it needs to be
set according to the primitive type.

Closes: #2933
Signed-off-by: Lucas Stach <l.stach at pengutronix.de>
Reviewed-by: Christian Gmeiner <christian.gmeiner at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16094>

---

 src/gallium/drivers/etnaviv/etnaviv_context.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/etnaviv/etnaviv_context.c b/src/gallium/drivers/etnaviv/etnaviv_context.c
index c0b0e966013..bda29f93492 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_context.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_context.c
@@ -416,6 +416,23 @@ etna_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info,
    /* First, sync state, then emit DRAW_PRIMITIVES or DRAW_INDEXED_PRIMITIVES */
    etna_emit_state(ctx);
 
+   if (!VIV_FEATURE(screen, chipMinorFeatures6, NEW_GPIPE)) {
+      switch (draw_mode) {
+      case PRIMITIVE_TYPE_LINE_LOOP:
+      case PRIMITIVE_TYPE_LINE_STRIP:
+      case PRIMITIVE_TYPE_TRIANGLE_STRIP:
+      case PRIMITIVE_TYPE_TRIANGLE_FAN:
+         etna_set_state(ctx->stream, VIVS_GL_VERTEX_ELEMENT_CONFIG,
+                        VIVS_GL_VERTEX_ELEMENT_CONFIG_UNK0 |
+                        VIVS_GL_VERTEX_ELEMENT_CONFIG_REUSE);
+         break;
+      default:
+         etna_set_state(ctx->stream, VIVS_GL_VERTEX_ELEMENT_CONFIG,
+                        VIVS_GL_VERTEX_ELEMENT_CONFIG_UNK0);
+         break;
+      }
+   }
+
    if (screen->specs.halti >= 2) {
       /* On HALTI2+ (GC3000 and higher) only use instanced drawing commands, as the blob does */
       etna_draw_instanced(ctx->stream, info->index_size, draw_mode, info->instance_count,
@@ -454,7 +471,6 @@ etna_reset_gpu_state(struct etna_context *ctx)
    uint32_t dummy_attribs[VIVS_NFE_GENERIC_ATTRIB__LEN] = { 0 };
 
    etna_set_state(stream, VIVS_GL_API_MODE, VIVS_GL_API_MODE_OPENGL);
-   etna_set_state(stream, VIVS_GL_VERTEX_ELEMENT_CONFIG, 0x00000001);
    etna_set_state(stream, VIVS_PA_W_CLIP_LIMIT, 0x34000001);
    etna_set_state(stream, VIVS_PA_FLAGS, 0x00000000); /* blob sets ZCONVERT_BYPASS on GC3000+, this messes up z for us */
    etna_set_state(stream, VIVS_PA_VIEWPORT_UNK00A80, 0x38a01404);



More information about the mesa-commit mailing list