Mesa (master): zink: use _mesa_set_search_and_add() for set management
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Mar 15 02:05:47 UTC 2021
Module: Mesa
Branch: master
Commit: 181928341366baffd361e7374c072a1b24fcb58e
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=181928341366baffd361e7374c072a1b24fcb58e
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Wed Oct 7 14:32:16 2020 -0400
zink: use _mesa_set_search_and_add() for set management
this avoids extra hash lookups
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9565>
---
src/gallium/drivers/zink/zink_batch.c | 35 ++++++++++++++++-------------------
1 file changed, 16 insertions(+), 19 deletions(-)
diff --git a/src/gallium/drivers/zink/zink_batch.c b/src/gallium/drivers/zink/zink_batch.c
index 395d3b4ac46..a11b53fe74b 100644
--- a/src/gallium/drivers/zink/zink_batch.c
+++ b/src/gallium/drivers/zink/zink_batch.c
@@ -178,9 +178,9 @@ zink_batch_reference_resource_rw(struct zink_batch *batch, struct zink_resource
/* if the resource already has usage of any sort set for this batch, we can skip hashing */
uint32_t check_mask = (ZINK_RESOURCE_ACCESS_READ | ZINK_RESOURCE_ACCESS_WRITE) << batch->batch_id;
if (!(uses_check & check_mask)) {
- struct set_entry *entry = _mesa_set_search(batch->resources, res);
- if (!entry) {
- entry = _mesa_set_add(batch->resources, res);
+ bool found = false;
+ _mesa_set_search_and_add(batch->resources, res, &found);
+ if (!found) {
pipe_reference(NULL, &res->base.reference);
batch->resource_size += res->size;
if (stencil) {
@@ -208,11 +208,10 @@ void
zink_batch_reference_sampler_view(struct zink_batch *batch,
struct zink_sampler_view *sv)
{
- struct set_entry *entry = _mesa_set_search(batch->sampler_views, sv);
- if (!entry) {
- entry = _mesa_set_add(batch->sampler_views, sv);
+ bool found = false;
+ _mesa_set_search_and_add(batch->sampler_views, sv, &found);
+ if (!found)
pipe_reference(NULL, &sv->base.reference);
- }
batch->has_work = true;
}
@@ -230,22 +229,21 @@ void
zink_batch_reference_program(struct zink_batch *batch,
struct zink_program *pg)
{
- if (!_mesa_set_search(batch->programs, pg)) {
- _mesa_set_add(batch->programs, pg);
+ bool found = false;
+ _mesa_set_search_and_add(batch->programs, pg, &found);
+ if (!found)
pipe_reference(NULL, &pg->reference);
- }
batch->has_work = true;
}
bool
zink_batch_add_desc_set(struct zink_batch *batch, struct zink_descriptor_set *zds)
{
- if (!_mesa_set_search(batch->desc_sets, zds)) {
+ bool found = false;
+ _mesa_set_search_and_add(batch->desc_sets, zds, &found);
+ if (!found)
pipe_reference(NULL, &zds->reference);
- _mesa_set_add(batch->desc_sets, zds);
- return true;
- }
- return false;
+ return !found;
}
void
@@ -253,10 +251,9 @@ zink_batch_reference_surface(struct zink_batch *batch,
struct zink_surface *surface)
{
struct pipe_surface *surf = &surface->base;
- struct set_entry *entry = _mesa_set_search(batch->surfaces, surf);
- if (!entry) {
- entry = _mesa_set_add(batch->surfaces, surf);
+ bool found = false;
+ _mesa_set_search_and_add(batch->surfaces, surf, &found);
+ if (!found)
pipe_reference(NULL, &surf->reference);
- }
batch->has_work = true;
}
More information about the mesa-commit
mailing list