Mesa (master): st_glsl_to_tgsi: only skip over slots of an input array that are present

Nicolai Hähnle nh at kemper.freedesktop.org
Thu Jul 28 10:03:29 UTC 2016


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

Author: Nicolai Hähnle <nicolai.haehnle at amd.com>
Date:   Mon Jul 25 18:05:46 2016 +0200

st_glsl_to_tgsi: only skip over slots of an input array that are present

When an application declares varying arrays but does not actually do any
indirect indexing, some array indices may end up unused in the consuming
shader, so the number of input slots that correspond to the array ends
up less than the array_size.

Cc: mesa-stable at lists.freedesktop.org
Reviewed-by: Marek Olšák <marek.olsak at amd.com>

---

 src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 7564119..38e2c4a 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -6058,7 +6058,11 @@ st_translate_program(
                               inputSemanticName[i], inputSemanticIndex[i],
                               interpMode[i], 0, interpLocation[i],
                               array_id, array_size);
-            i += array_size - 1;
+
+            GLuint base_attr = inputSlotToAttr[i];
+            while (i + 1 < numInputs &&
+                   inputSlotToAttr[i + 1] < base_attr + array_size)
+               ++i;
          }
          else {
             t->inputs[i] = ureg_DECL_fs_input_cyl_centroid(ureg,




More information about the mesa-commit mailing list