Mesa (master): i965/vec4: take into account doubles when creating attribute mapping

Juan Antonio Suárez Romero jasuarez at kemper.freedesktop.org
Thu Jan 12 12:04:20 UTC 2017


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

Author: Alejandro Piñeiro <apinheiro at igalia.com>
Date:   Thu Apr 21 14:16:18 2016 +0200

i965/vec4: take into account doubles when creating attribute mapping

Doubles needs more that one slot per attribute. So when filling the
attribute_map we check if it is a double in order to allocate one
extra register.

Signed-off-by: Alejandro Piñeiro <apinheiro at igalia.com>
Signed-off-by: Juan A. Suarez Romero <jasuarez at igalia.com>
Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>

---

 src/mesa/drivers/dri/i965/brw_vec4.cpp | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp
index f80162d..748a068 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp
@@ -1733,10 +1733,15 @@ vec4_vs_visitor::setup_attributes(int payload_reg)
    memset(attribute_map, 0, sizeof(attribute_map));
 
    nr_attributes = 0;
-   for (int i = 0; i < VERT_ATTRIB_MAX; i++) {
-      if (vs_prog_data->inputs_read & BITFIELD64_BIT(i)) {
-	 attribute_map[i] = payload_reg + nr_attributes;
-	 nr_attributes++;
+   GLbitfield64 vs_inputs = vs_prog_data->inputs_read;
+   while (vs_inputs) {
+      GLuint first = ffsll(vs_inputs) - 1;
+      int needed_slots =
+         (vs_prog_data->double_inputs_read & BITFIELD64_BIT(first)) ? 2 : 1;
+      for (int c = 0; c < needed_slots; c++) {
+         attribute_map[nr_attributes] = payload_reg + nr_attributes;
+         nr_attributes++;
+         vs_inputs &= ~BITFIELD64_BIT(first + c);
       }
    }
 




More information about the mesa-commit mailing list