On Fri, Apr 24, 2015 at 4:09 PM, Axel Davy <axel.d...@ens.fr> wrote: > 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. > > Signed-off-by: Axel Davy <axel.d...@ens.fr> > --- > src/gallium/state_trackers/nine/nine_state.c | 15 ++++----------- > 1 file 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 27800c6..6e01955 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) {
FWIW, not sure if it's faster, but you could do like while (mask) { i = ffs(mask) - 1; ... mask &= ~(1 << i); } In practice, if all the bits tend to be consecutive starting at 0, this will probably even be slower. Either way, this is Reviewed-by: Ilia Mirkin <imir...@alum.mit.edu> > 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; > } > -- > 2.1.0 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev