diff options
-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; |