aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers
diff options
context:
space:
mode:
authorChristoph Bumiller <[email protected]>2013-01-07 15:46:31 +0100
committerChristoph Bumiller <[email protected]>2013-01-08 16:13:52 +0100
commit18f3f7b95898e7db20cdb24181bc24f91cc24fe6 (patch)
treef22780e60a2145dcbdd190884e70adbc58552a84 /src/gallium/drivers
parentb9c8a98e216f4613dc0a40e26d08f2c1cb760e76 (diff)
nvc0: catch too high GENERIC indices to prevent GRAPH traps
Diffstat (limited to 'src/gallium/drivers')
-rw-r--r--src/gallium/drivers/nvc0/nvc0_program.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/gallium/drivers/nvc0/nvc0_program.c b/src/gallium/drivers/nvc0/nvc0_program.c
index 8bcb2066f17..39393a1f61c 100644
--- a/src/gallium/drivers/nvc0/nvc0_program.c
+++ b/src/gallium/drivers/nvc0/nvc0_program.c
@@ -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