mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 17:50:11 +01:00
gallium/util: return correct number of bound vertex buffers
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@das-labor.org> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu> Cc: "11.0 11.1" <mesa-stable@lists.freedesktop.org>
This commit is contained in:
parent
ba67739b66
commit
79bff488bc
1 changed files with 7 additions and 1 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue