[Mesa-dev] [PATCH] st_glsl_to_tgsi: only skip over slots of an input array that are present

Nicolai Hähnle nhaehnle at gmail.com
Mon Jul 25 16:08:30 UTC 2016


From: Nicolai Hähnle <nicolai.haehnle at amd.com>

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
---
See also the shader_runner Piglit test that I sent out a moment ago.

 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,
-- 
2.7.4



More information about the mesa-dev mailing list