summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorDave Airlie <[email protected]>2018-02-12 14:46:50 +1000
committerDave Airlie <[email protected]>2018-02-14 13:37:59 +1000
commit9c9a9bee4431124439c57a9429e745dd4837fcdf (patch)
treec7dec625409d3eb19dbdbfa01d5243f738237cef /src/gallium
parent8f2656c75b8e91a8e90755280845d0e278a62ab4 (diff)
r600: fix array spill if temp[0] is before all arrays
I found a shader with DCL TEMP[0], LOCAL DCL TEMP[1..256], ARRAY(1), LOCAL DCL TEMP[257..512], ARRAY(2), LOCAL DCL TEMP[513..768], ARRAY(3), LOCAL DCL TEMP[769], LOCAL This would remap badly, as it would add up all the spilled sizes and subtract it from the temp for 0. If the current temp is less than the array start break out. Fixes: 1d871aa6 (r600g: Implement spilling of temp arrays (v2)) Signed-off-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/r600/r600_shader.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c
index 4141e864308..7d60bd90c3c 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -920,6 +920,8 @@ static int map_tgsi_reg_index_to_r600_gpr(struct r600_shader_ctx *ctx, unsigned
}
}
+ if (tgsi_reg_index < ctx->array_infos[i].range.First)
+ break;
if (ctx->spilled_arrays[i]) {
spilled_size += ctx->array_infos[i].range.Last - ctx->array_infos[i].range.First + 1;
}