summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerome Glisse <jglisse@redhat.com>2010-02-15 23:22:54 +0100
committerJerome Glisse <jglisse@redhat.com>2010-02-15 23:22:54 +0100
commitecb0945fb32d9531f9b5fdcfe07ba40c63e32c0f (patch)
treea0c16393f2f701e0580644523c4915ea6a899bc4
parent36a7c4478d4fcc9bcd4d937676960a87cd52386d (diff)
simplify vs/ps routing
-rw-r--r--r600_atom.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/r600_atom.c b/r600_atom.c
index 5042056..d55cab0 100644
--- a/r600_atom.c
+++ b/r600_atom.c
@@ -1358,19 +1358,22 @@ static int r600_vs_shader_create(struct radeon_device *rdev,
vs_shader->pkts[vs_shader->atom.npkts++] = 0x000001B1;
vs_shader->pkts[vs_shader->atom.npkts++] = tmp;
/* SPI_VS_OUT_ID_* */
- tmp = (vs_shader->vs.noutputs + 3) >> 2;
- vs_shader->pkts[vs_shader->atom.npkts++] = PKT3(PKT3_SET_CONTEXT_REG, tmp);
+ vs_shader->pkts[vs_shader->atom.npkts++] = PKT3(PKT3_SET_CONTEXT_REG, 10);
vs_shader->pkts[vs_shader->atom.npkts++] = 0x00000185;
- vs_shader->pkts[vs_shader->atom.npkts] = 0;
- for (i = 0, j = 0; i < vs_shader->vs.noutputs; i++, j++) {
- if (j & 4) {
- vs_shader->atom.npkts++;
- vs_shader->pkts[vs_shader->atom.npkts] = 0;
+ /* set unused field to 255 */
+ for (i = vs_shader->vs.noutputs; i < 32; i++) {
+ vs_shader->vs.output_semantic[i] = 255;
+ }
+ for (i = 0; i < 8; i++) {
+ vs_shader->pkts[vs_shader->atom.npkts] = 0;
+ for (j = 0; j < 4; j++) {
+ vs_shader->pkts[vs_shader->atom.npkts] |= vs_shader->vs.output_semantic[(i*4)+j] << (j * 8);
}
- j &= 3;
- vs_shader->pkts[vs_shader->atom.npkts] |= vs_shader->vs.output_semantic[i] << (j * 8);
+ vs_shader->atom.npkts++;
}
- vs_shader->atom.npkts++;
+ /* FIXME: why is their 10 vector if we only have 32 outputs ? */
+ vs_shader->pkts[vs_shader->atom.npkts++] = 0xFFFFFFFF;
+ vs_shader->pkts[vs_shader->atom.npkts++] = 0xFFFFFFFF;
*atom = &vs_shader->atom;
fprintf(stderr, "%s %d pkts\n", __func__, (*atom)->npkts);
return 0;