summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers
diff options
context:
space:
mode:
authorAxel Davy <[email protected]>2015-02-20 18:25:44 +0100
committerAxel Davy <[email protected]>2015-04-29 08:28:11 +0200
commit4acbf420d1101bd32e8f23acadff5fe6c6fa9b26 (patch)
treea4c08e08b1f121d0aa8bbd4b3a23147a161d77be /src/gallium/state_trackers
parent5beb411bf753da4c86082c505929bcc9629c666c (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')
-rw-r--r--src/gallium/state_trackers/nine/nine_state.c15
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;
}