summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2012-12-19 15:00:45 +0100
committerMarek Olšák <[email protected]>2012-12-20 17:13:06 +0100
commitd0e40bd3ed13ff58a898686a5b0d6238d7a1728e (patch)
tree6abfc45fdfeee93c9c50332e9b79ea4ef9f0a77b
parentfddcc67f5cb41f70d1d11827eb9190a5caec13c5 (diff)
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 <[email protected]>
-rw-r--r--src/gallium/drivers/r600/r600_shader.c14
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 bcd43f10326..0ffa1fa4183 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)