summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2014-10-09 17:49:23 +0200
committerEric Anholt <[email protected]>2014-10-09 21:47:06 +0200
commit5cfab07639c650e4e9bae063c72e08a27a5e209d (patch)
treed59405d6cd255e877c75971dde816488067e8d31 /src
parent4ce11de4ae356375833cb403711f5af1ed681965 (diff)
vc4: Initialize undefined temporaries to 0.
Under the simulator, reading registers before writing them triggers an assertion failure. c->undef gets treated as r0, which will usually be written, but not if it's used in the first instruction. We should definitely not be aborting in this case, and return some sort of undefined value instead. Fixes glsl-user-varying-ff.
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/vc4/vc4_program.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c
index 93f99566c52..ec66dae7861 100644
--- a/src/gallium/drivers/vc4/vc4_program.c
+++ b/src/gallium/drivers/vc4/vc4_program.c
@@ -957,10 +957,15 @@ emit_tgsi_declaration(struct vc4_compile *c,
struct tgsi_full_declaration *decl)
{
switch (decl->Declaration.File) {
- case TGSI_FILE_TEMPORARY:
+ case TGSI_FILE_TEMPORARY: {
+ uint32_t old_size = c->temps_array_size;
resize_qreg_array(c, &c->temps, &c->temps_array_size,
(decl->Range.Last + 1) * 4);
+
+ for (int i = old_size; i < c->temps_array_size; i++)
+ c->temps[i] = qir_uniform_ui(c, 0);
break;
+ }
case TGSI_FILE_INPUT:
resize_qreg_array(c, &c->inputs, &c->inputs_array_size,