diff options
author | Axel Davy <[email protected]> | 2015-02-20 18:25:44 +0100 |
---|---|---|
committer | Axel Davy <[email protected]> | 2015-04-29 08:28:11 +0200 |
commit | 4acbf420d1101bd32e8f23acadff5fe6c6fa9b26 (patch) | |
tree | a4c08e08b1f121d0aa8bbd4b3a23147a161d77be /src/gallium/state_trackers/nine | |
parent | 5beb411bf753da4c86082c505929bcc9629c666c (diff) |
st/nine: Rework update_vertex_buffers
Previous code was trying to optimise to call set_vertex_buffers on
big packets, and thus avoids as many calls as possible.
However in practice doing so won't be faster (drivers implement
set_vertex_buffers by a loop over the buffers we want to bind)
When we want to unbind a buffer, we were calling set_vertex_buffers
on a buffer with vtxbuf->buffer = NULL. It works on some drivers,
but not on all of them, because it isn't in Gallium spec.
This patch fixes that.
Reviewed-by: Ilia Mirkin <[email protected]>
Signed-off-by: Axel Davy <[email protected]>
Diffstat (limited to 'src/gallium/state_trackers/nine')
-rw-r--r-- | src/gallium/state_trackers/nine/nine_state.c | 15 |
1 files changed, 4 insertions, 11 deletions
diff --git a/src/gallium/state_trackers/nine/nine_state.c b/src/gallium/state_trackers/nine/nine_state.c index 27800c61c2a..6e019558c15 100644 --- a/src/gallium/state_trackers/nine/nine_state.c +++ b/src/gallium/state_trackers/nine/nine_state.c @@ -631,7 +631,6 @@ update_vertex_buffers(struct NineDevice9 *device) uint32_t mask = state->changed.vtxbuf; unsigned i; unsigned start; - unsigned count = 0; DBG("mask=%x\n", mask); @@ -650,18 +649,12 @@ update_vertex_buffers(struct NineDevice9 *device) for (i = 0; mask; mask >>= 1, ++i) { if (mask & 1) { - if (!count) - start = i; - ++count; - } else { - if (count) - pipe->set_vertex_buffers(pipe, start, count, - &state->vtxbuf[start]); - count = 0; + if (state->vtxbuf[i].buffer) + pipe->set_vertex_buffers(pipe, i, 1, &state->vtxbuf[i]); + else + pipe->set_vertex_buffers(pipe, i, 1, NULL); } } - if (count) - pipe->set_vertex_buffers(pipe, start, count, &state->vtxbuf[start]); state->changed.vtxbuf = 0; } |