Module: Mesa Branch: master Commit: 6536d5a947b22d717b33fe4f42942071103d74e4 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6536d5a947b22d717b33fe4f42942071103d74e4
Author: Mike Blumenkrantz <[email protected]> Date: Tue Jan 12 14:51:44 2021 -0500 zink: use set_foreach_remove() this saves potentially thousands of iterations on each batch reset Reviewed-by: Dave Airlie <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10097> --- src/gallium/drivers/zink/zink_batch.c | 12 ++++-------- src/gallium/drivers/zink/zink_fence.c | 3 +-- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/gallium/drivers/zink/zink_batch.c b/src/gallium/drivers/zink/zink_batch.c index 825d394dc9f..45cac57fa39 100644 --- a/src/gallium/drivers/zink/zink_batch.c +++ b/src/gallium/drivers/zink/zink_batch.c @@ -32,23 +32,20 @@ zink_reset_batch_state(struct zink_context *ctx, struct zink_batch_state *bs) zink_fence_clear_resources(screen, &bs->fence); - set_foreach(bs->active_queries, entry) { + set_foreach_remove(bs->active_queries, entry) { struct zink_query *query = (void*)entry->key; zink_prune_query(screen, query); - _mesa_set_remove(bs->active_queries, entry); } - set_foreach(bs->surfaces, entry) { + set_foreach_remove(bs->surfaces, entry) { struct zink_surface *surf = (struct zink_surface *)entry->key; zink_batch_usage_unset(&surf->batch_uses, bs->fence.batch_id); zink_surface_reference(screen, &surf, NULL); - _mesa_set_remove(bs->surfaces, entry); } - set_foreach(bs->bufferviews, entry) { + set_foreach_remove(bs->bufferviews, entry) { struct zink_buffer_view *buffer_view = (struct zink_buffer_view *)entry->key; zink_batch_usage_unset(&buffer_view->batch_uses, bs->fence.batch_id); zink_buffer_view_reference(screen, &buffer_view, NULL); - _mesa_set_remove(bs->bufferviews, entry); } util_dynarray_foreach(&bs->zombie_samplers, VkSampler, samp) { @@ -68,7 +65,7 @@ zink_reset_batch_state(struct zink_context *ctx, struct zink_batch_state *bs) _mesa_set_remove(bs->desc_sets, entry); } - set_foreach(bs->programs, entry) { + set_foreach_remove(bs->programs, entry) { struct zink_program *pg = (struct zink_program*)entry->key; if (pg->is_compute) { struct zink_compute_program *comp = (struct zink_compute_program*)pg; @@ -81,7 +78,6 @@ zink_reset_batch_state(struct zink_context *ctx, struct zink_batch_state *bs) if (zink_gfx_program_reference(screen, &prog, NULL) && in_use) ctx->curr_program = NULL; } - _mesa_set_remove(bs->programs, entry); } set_foreach(bs->fbs, entry) { diff --git a/src/gallium/drivers/zink/zink_fence.c b/src/gallium/drivers/zink/zink_fence.c index f673e2365a4..5f76a95adbb 100644 --- a/src/gallium/drivers/zink/zink_fence.c +++ b/src/gallium/drivers/zink/zink_fence.c @@ -37,12 +37,11 @@ zink_fence_clear_resources(struct zink_screen *screen, struct zink_fence *fence) { simple_mtx_lock(&fence->resource_mtx); /* unref all used resources */ - set_foreach(fence->resources, entry) { + set_foreach_remove(fence->resources, entry) { struct zink_resource_object *obj = (struct zink_resource_object *)entry->key; zink_batch_usage_unset(&obj->reads, fence->batch_id); zink_batch_usage_unset(&obj->writes, fence->batch_id); zink_resource_object_reference(screen, &obj, NULL); - _mesa_set_remove(fence->resources, entry); } simple_mtx_unlock(&fence->resource_mtx); } _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
