Mesa (master): r600g: use r600_get_temp to get temporaries for CLIPDIST shader outputs

Marek Olšák mareko at kemper.freedesktop.org
Thu Dec 20 16:13:37 UTC 2012


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

Author: Marek Olšák <maraeo at gmail.com>
Date:   Wed Dec 19 15:00:45 2012 +0100

r600g: use r600_get_temp to get temporaries for CLIPDIST shader outputs

I need this to be able to use r600_get_temp in the function later.

Reviewed-by: Dave Airlie <airlied at redhat.com>

---

 src/gallium/drivers/r600/r600_shader.c |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c
index bcd43f1..0ffa1fa 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -1468,6 +1468,9 @@ static int r600_shader_from_tgsi(struct r600_screen *rscreen,
 		}
 	}
 
+	/* Reset the temporary register counter. */
+	ctx.max_driver_temp_used = 0;
+
 	/* Get instructions if we are using the LLVM backend. */
 	if (use_llvm) {
 		r600_bytecode_from_byte_stream(&ctx, inst_bytes, inst_byte_count);
@@ -1477,15 +1480,20 @@ static int r600_shader_from_tgsi(struct r600_screen *rscreen,
 	noutput = shader->noutput;
 
 	if (ctx.clip_vertex_write) {
+		unsigned clipdist_temp[2];
+
+		clipdist_temp[0] = r600_get_temp(&ctx);
+		clipdist_temp[1] = r600_get_temp(&ctx);
+
 		/* need to convert a clipvertex write into clipdistance writes and not export
 		   the clip vertex anymore */
 
 		memset(&shader->output[noutput], 0, 2*sizeof(struct r600_shader_io));
 		shader->output[noutput].name = TGSI_SEMANTIC_CLIPDIST;
-		shader->output[noutput].gpr = ctx.temp_reg;
+		shader->output[noutput].gpr = clipdist_temp[0];
 		noutput++;
 		shader->output[noutput].name = TGSI_SEMANTIC_CLIPDIST;
-		shader->output[noutput].gpr = ctx.temp_reg+1;
+		shader->output[noutput].gpr = clipdist_temp[1];
 		noutput++;
 
 		/* reset spi_sid for clipvertex output to avoid confusing spi */
@@ -1508,7 +1516,7 @@ static int r600_shader_from_tgsi(struct r600_screen *rscreen,
 				alu.src[1].kc_bank = R600_UCP_CONST_BUFFER;
 				alu.src[1].chan = j;
 
-				alu.dst.sel = ctx.temp_reg + oreg;
+				alu.dst.sel = clipdist_temp[oreg];
 				alu.dst.chan = j;
 				alu.dst.write = (j == ochan);
 				if (j == 3)




More information about the mesa-commit mailing list