[Mesa-dev] [PATCH] tgsi/scan: handle holes between VS inputs, assert-fail in other cases

Marek Olšák maraeo at gmail.com
Tue Feb 23 00:46:22 UTC 2016


From: Marek Olšák <marek.olsak at amd.com>

"st/mesa: overhaul vertex setup for clearing, glDrawPixels, glBitmap"
added a vertex shader declaring IN[0] and IN[2], but not IN[1].

Drivers relying on tgsi_shader_info can't handle holes in declarations,
because tgsi_shader_info doesn't track that.

This is just a quick workaround meant for stable that will work for vertex
shaders.

This fixes radeonsi DrawPixels and CopyPixels crashes.

Cc: mesa-stable at lists.freedesktop.org
---
 src/gallium/auxiliary/tgsi/tgsi_scan.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c b/src/gallium/auxiliary/tgsi/tgsi_scan.c
index 489423d..4f85d2f 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_scan.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c
@@ -247,7 +247,14 @@ scan_declaration(struct tgsi_shader_info *info,
          info->input_interpolate[reg] = (ubyte)fulldecl->Interp.Interpolate;
          info->input_interpolate_loc[reg] = (ubyte)fulldecl->Interp.Location;
          info->input_cylindrical_wrap[reg] = (ubyte)fulldecl->Interp.CylindricalWrap;
-         info->num_inputs++;
+
+         /* Vertex shaders can have inputs with holes between them. */
+         if (info->processor == TGSI_PROCESSOR_VERTEX)
+            info->num_inputs = MAX2(info->num_inputs, reg + 1);
+         else {
+            info->num_inputs++;
+            assert(reg < info->num_inputs);
+         }
 
          /* Only interpolated varyings. Don't include POSITION.
           * Don't include integer varyings, because they are not
@@ -341,6 +348,7 @@ scan_declaration(struct tgsi_shader_info *info,
          info->output_semantic_name[reg] = (ubyte) semName;
          info->output_semantic_index[reg] = (ubyte) semIndex;
          info->num_outputs++;
+         assert(reg < info->num_outputs);
 
          if (semName == TGSI_SEMANTIC_COLOR)
             info->colors_written |= 1 << semIndex;
-- 
2.5.0



More information about the mesa-dev mailing list