st_glsl_to_tgsi: only skip over slots of an input array that are present
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Mon, 25 Jul 2016 16:05:46 +0000 (18:05 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Thu, 28 Jul 2016 09:46:02 +0000 (10:46 +0100)
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@lists.freedesktop.org
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/state_tracker/st_glsl_to_tgsi.cpp

index 7564119ac11a55c17e317bae254efc0966815253..38e2c4a5d60d52c887c1a2787469f7476b724acb 100644 (file)
@@ -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,