summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/r600/r600_state.c
diff options
context:
space:
mode:
authorAlex Deucher <[email protected]>2011-07-29 11:29:53 -0400
committerAlex Deucher <[email protected]>2011-07-29 11:34:02 -0400
commitdc1c0ca22a1c7fcaef90b787290144d8e3d77c33 (patch)
treec1d28caad9ca009ece381871b341393851472b98 /src/gallium/drivers/r600/r600_state.c
parent5c9e0ad5fddf216921703a0aa9c911a51226cdfd (diff)
r600g: fix up vs export handling
Certain attributes (position, psize, etc.) don't count as params; they are handled separately by the hw. However, the VS is required to export at least one param and r600_shader_from_tgsi() takes care of adding a dummy export if there is none. Make sure the VS param export count in the SPI properly accounts for this. Note: This is a candidate for the 7.11 branch. 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.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c
index 294c400caa1..1350a1cf565 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -2062,7 +2062,7 @@ void r600_pipe_shader_vs(struct pipe_context *ctx, struct r600_pipe_shader *shad
struct r600_pipe_state *rstate = &shader->rstate;
struct r600_shader *rshader = &shader->shader;
unsigned spi_vs_out_id[10];
- unsigned i, tmp;
+ unsigned i, tmp, nparams;
/* clear previous register */
rstate->nregs = 0;
@@ -2084,9 +2084,17 @@ void r600_pipe_shader_vs(struct pipe_context *ctx, struct r600_pipe_shader *shad
spi_vs_out_id[i], 0xFFFFFFFF, NULL);
}
+ /* Certain attributes (position, psize, etc.) don't count as params.
+ * 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;
+
r600_pipe_state_add_reg(rstate,
R_0286C4_SPI_VS_OUT_CONFIG,
- S_0286C4_VS_EXPORT_COUNT(rshader->noutput - 1),
+ S_0286C4_VS_EXPORT_COUNT(nparams - 1),
0xFFFFFFFF, NULL);
r600_pipe_state_add_reg(rstate,
R_028868_SQ_PGM_RESOURCES_VS,