From: Kenneth Graunke Date: Tue, 8 Oct 2019 17:11:52 +0000 (-0700) Subject: iris: Properly unreference extra VBOs for draw parameters X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=face221283f0be316ae6629155a908d8972c2fa7;p=mesa.git iris: Properly unreference extra VBOs for draw parameters bound_vertex_buffers doesn't include extra draw parameters buffers. Tracking this correctly is kind of complicated, and iris_destroy_state isn't exactly in a hot path, so just loop over all VBO bindings. Fixes: 4122665dd90 (iris: Enable ARB_shader_draw_parameters support) Reported-by: Sergii Romantsov --- diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index ab1578fc184..6f0aa182339 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -6045,11 +6045,11 @@ iris_destroy_state(struct iris_context *ice) pipe_resource_reference(&ice->draw.draw_params.res, NULL); pipe_resource_reference(&ice->draw.derived_draw_params.res, NULL); - uint64_t bound_vbs = ice->state.bound_vertex_buffers; - while (bound_vbs) { - const int i = u_bit_scan64(&bound_vbs); + /* Loop over all VBOs, including ones for draw parameters */ + for (unsigned i = 0; i < ARRAY_SIZE(genx->vertex_buffers); i++) { pipe_resource_reference(&genx->vertex_buffers[i].resource, NULL); } + free(ice->state.genx); for (int i = 0; i < 4; i++) {