diff options
author | Vadim Girlin <[email protected]> | 2011-11-05 08:48:02 +0400 |
---|---|---|
committer | Alex Deucher <[email protected]> | 2011-11-05 17:23:22 -0400 |
commit | 5b27b63de64167a84a03d820550e56c4b7bbc69d (patch) | |
tree | 9c133e796da6b3cb00f6e5ba0cce729062a106a6 /src/gallium/drivers/r600/r600_state.c | |
parent | 9f52b876f493982022795021fe6173de8089a224 (diff) |
r600g: precalculate semantic indices for SPI setup
There is no need to duplicate semantic mapping which is done in hw, so get
rid of r600_find_vs_semantic_index.
TGSI name/sid pair is mapped to the 8-bit semantic index for SPI.
Signed-off-by: Vadim Girlin <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
Diffstat (limited to 'src/gallium/drivers/r600/r600_state.c')
-rw-r--r-- | src/gallium/drivers/r600/r600_state.c | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c index bf3da791c81..4b66fe11ec5 100644 --- a/src/gallium/drivers/r600/r600_state.c +++ b/src/gallium/drivers/r600/r600_state.c @@ -2141,23 +2141,20 @@ void r600_pipe_shader_vs(struct pipe_context *ctx, struct r600_pipe_shader *shad struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx; struct r600_pipe_state *rstate = &shader->rstate; struct r600_shader *rshader = &shader->shader; - unsigned spi_vs_out_id[10]; - unsigned i, tmp, nparams; + unsigned spi_vs_out_id[10] = {}; + unsigned i, tmp, nparams = 0; /* clear previous register */ rstate->nregs = 0; - /* so far never got proper semantic id from tgsi */ - /* FIXME better to move this in config things so they get emited - * only one time per cs - */ - for (i = 0; i < 10; i++) { - spi_vs_out_id[i] = 0; - } - for (i = 0; i < 32; i++) { - tmp = i << ((i & 3) * 8); - spi_vs_out_id[i / 4] |= tmp; + for (i = 0; i < rshader->noutput; i++) { + if (rshader->output[i].spi_sid) { + tmp = rshader->output[i].spi_sid << ((nparams & 3) * 8); + spi_vs_out_id[nparams / 4] |= tmp; + nparams++; + } } + for (i = 0; i < 10; i++) { r600_pipe_state_add_reg(rstate, R_028614_SPI_VS_OUT_ID_0 + i * 4, @@ -2168,7 +2165,6 @@ void r600_pipe_shader_vs(struct pipe_context *ctx, struct r600_pipe_shader *shad * VS is required to export at least one param and r600_shader_from_tgsi() * takes care of adding a dummy export. */ - nparams = rshader->noutput - rshader->npos; if (nparams < 1) nparams = 1; |