Mesa (master): r600g: check gpr count limit

Alex Deucher agd5f at kemper.freedesktop.org
Mon Apr 9 22:12:56 UTC 2012


Module: Mesa
Branch: master
Commit: 783e4da72aa203a645737dec81b001341951a942
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=783e4da72aa203a645737dec81b001341951a942

Author: Vadim Girlin <vadimgirlin at gmail.com>
Date:   Tue Apr 10 00:44:52 2012 +0400

r600g: check gpr count limit

This should help to prevent gpu lockups.
See https://bugs.freedesktop.org/show_bug.cgi?id=48472

NOTE: This is a candidate for the stable branches.

Signed-off-by: Vadim Girlin <vadimgirlin at gmail.com>
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

---

 src/gallium/drivers/r600/r600_shader.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c
index 1adf344..4932dcc 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -1266,6 +1266,14 @@ static int r600_shader_from_tgsi(struct r600_context * rctx, struct r600_pipe_sh
 	if (ctx.bc->chip_class == CAYMAN)
 		cm_bytecode_add_cf_end(ctx.bc);
 
+	/* check GPR limit - we have 124 = 128 - 4
+	 * (4 are reserved as alu clause temporary registers) */
+	if (ctx.bc->ngpr > 124) {
+		R600_ERR("GPR limit exceeded - shader requires %d registers\n", ctx.bc->ngpr);
+		r = -ENOMEM;
+		goto out_err;
+	}
+
 	free(ctx.literals);
 	tgsi_parse_free(&ctx.parse);
 	return 0;




More information about the mesa-commit mailing list