[Mesa-dev] [PATCH] util/u_helpers: return correct number of bound buffers
Patrick Rudolph
siro at das-labor.org
Thu Dec 10 10:50:38 PST 2015
In case a state tracker unbinds every slot by a seperate
pipe->set_vertex_buffers() call, starting from slot zero, the number
of bound buffers would not reach zero at all.
The current algorithm does not account for pre-existing holes in the
buffer list.
Unbinding all buffers at once or starting at the top-most slot results
in correct behaviour.
Calculating the correct number of bound buffers fixes a NULL pointer
dereference in nvc0_validate_vertex_buffers_shared().
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93004
Signed-off-by: Patrick Rudolph <siro at das-labor.org>
---
src/gallium/auxiliary/util/u_helpers.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/gallium/auxiliary/util/u_helpers.c b/src/gallium/auxiliary/util/u_helpers.c
index 09619c1..09020b0 100644
--- a/src/gallium/auxiliary/util/u_helpers.c
+++ b/src/gallium/auxiliary/util/u_helpers.c
@@ -81,7 +81,13 @@ void util_set_vertex_buffers_count(struct pipe_vertex_buffer *dst,
const struct pipe_vertex_buffer *src,
unsigned start_slot, unsigned count)
{
- uint32_t enabled_buffers = (1ull << *dst_count) - 1;
+ unsigned i;
+ uint32_t enabled_buffers = 0;
+
+ for (i = 0; i < *dst_count; i++) {
+ if (dst[i].buffer || dst[i].user_buffer)
+ enabled_buffers |= (1ull << i);
+ }
util_set_vertex_buffers_mask(dst, &enabled_buffers, src, start_slot,
count);
--
2.4.3
More information about the mesa-dev
mailing list