Mesa (master): zink: use set_foreach_remove()

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Apr 8 04:01:19 UTC 2021


Module: Mesa
Branch: master
Commit: 6536d5a947b22d717b33fe4f42942071103d74e4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6536d5a947b22d717b33fe4f42942071103d74e4

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
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 <airlied at redhat.com>
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);
 }



More information about the mesa-commit mailing list