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

Author: Wladimir J. van der Laan <laa...@gmail.com>
Date:   Sat Nov 18 10:44:26 2017 +0100

etnaviv: Emit SCALE for vertex attributes

This is used by HALTI2+ (GC3000+) when drawing with DRAW_INSTANCED.

It is also necessary when switching between integer and floating point
vertex element formats.

Signed-off-by: Wladimir J. van der Laan <laa...@gmail.com>
Reviewed-by: Christian Gmeiner <christian.gmei...@gmail.com>

---

 src/gallium/drivers/etnaviv/etnaviv_emit.c     | 5 +++++
 src/gallium/drivers/etnaviv/etnaviv_internal.h | 1 +
 src/gallium/drivers/etnaviv/etnaviv_state.c    | 1 +
 3 files changed, 7 insertions(+)

diff --git a/src/gallium/drivers/etnaviv/etnaviv_emit.c 
b/src/gallium/drivers/etnaviv/etnaviv_emit.c
index 41504ac41f..c24831c88b 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_emit.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_emit.c
@@ -350,6 +350,11 @@ etna_emit_state(struct etna_context *ctx)
       /*00600*/ etna_set_state_multi(stream, VIVS_FE_VERTEX_ELEMENT_CONFIG(0),
          ctx->vertex_elements->num_elements,
          ctx->vertex_elements->FE_VERTEX_ELEMENT_CONFIG);
+      if (ctx->specs.halti >= 2) {
+         /*00780*/ etna_set_state_multi(stream, 
VIVS_FE_GENERIC_ATTRIB_SCALE(0),
+            ctx->vertex_elements->num_elements,
+            ctx->vertex_elements->NFE_GENERIC_ATTRIB_SCALE);
+      }
    }
 
    /* The following code is originally generated by gen_merge_state.py, to
diff --git a/src/gallium/drivers/etnaviv/etnaviv_internal.h 
b/src/gallium/drivers/etnaviv/etnaviv_internal.h
index 48dd5bf324..6375ae0428 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_internal.h
+++ b/src/gallium/drivers/etnaviv/etnaviv_internal.h
@@ -216,6 +216,7 @@ struct compiled_framebuffer_state {
 struct compiled_vertex_elements_state {
    unsigned num_elements;
    uint32_t FE_VERTEX_ELEMENT_CONFIG[VIVS_FE_VERTEX_ELEMENT_CONFIG__LEN];
+   uint32_t NFE_GENERIC_ATTRIB_SCALE[VIVS_NFE_GENERIC_ATTRIB__LEN];
 };
 
 /* Compiled context->set_vertex_buffer result */
diff --git a/src/gallium/drivers/etnaviv/etnaviv_state.c 
b/src/gallium/drivers/etnaviv/etnaviv_state.c
index 004e3cd132..1e0b7548a4 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_state.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_state.c
@@ -550,6 +550,7 @@ etna_vertex_elements_state_create(struct pipe_context *pctx,
          
VIVS_FE_VERTEX_ELEMENT_CONFIG_STREAM(elements[idx].vertex_buffer_index) |
          VIVS_FE_VERTEX_ELEMENT_CONFIG_START(elements[idx].src_offset) |
          VIVS_FE_VERTEX_ELEMENT_CONFIG_END(end_offset - start_offset);
+      cs->NFE_GENERIC_ATTRIB_SCALE[idx] = 0x3f800000; /* 1 for integer, 1.0 
for float */
    }
 
    return cs;

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to