nvc0: catch too high GENERIC indices to prevent GRAPH traps
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>
Mon, 7 Jan 2013 14:46:31 +0000 (15:46 +0100)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Tue, 8 Jan 2013 15:13:52 +0000 (16:13 +0100)
src/gallium/drivers/nvc0/nvc0_program.c

index 8bcb2066f1797f5b79c0cbc598735aeb3e3e55db..39393a1f61c98c39f1e0d983a5baf5b0187b7418 100644 (file)
@@ -43,8 +43,14 @@ nvc0_mesa_varying_hack(struct nv50_ir_varying *var)
       for (c = 0; c < 4; ++c)
          var->slot[c] = (0x2e0 + c * 0x4) / 4;
    else
+   if (var->si <= 39)
       for (c = 0; c < 4; ++c) /* move down user varyings (first has index 8) */
          var->slot[c] -= 0x80 / 4;
+   else {
+      NOUVEAU_ERR("too many varyings / invalid location: %u !\n", var->si);
+      for (c = 0; c < 4; ++c)
+         var->slot[c] = (0x270 + c * 0x4) / 4; /* catch invalid indices */
+   }
 }
 
 static uint32_t