diff options
author | Jerome Glisse <jglisse@redhat.com> | 2010-02-15 23:22:54 +0100 |
---|---|---|
committer | Jerome Glisse <jglisse@redhat.com> | 2010-02-15 23:22:54 +0100 |
commit | ecb0945fb32d9531f9b5fdcfe07ba40c63e32c0f (patch) | |
tree | a0c16393f2f701e0580644523c4915ea6a899bc4 | |
parent | 36a7c4478d4fcc9bcd4d937676960a87cd52386d (diff) |
simplify vs/ps routing
-rw-r--r-- | r600_atom.c | 23 |
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; |