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