zink: move active query pruning to batch reset

this didn't ever really need to be on the fence in the first place

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9626>
This commit is contained in:
Mike Blumenkrantz 2020-11-05 12:10:57 -05:00
parent 6aa791f626
commit fc27594943
6 changed files with 13 additions and 19 deletions

View file

@ -39,6 +39,12 @@ zink_reset_batch(struct zink_context *ctx, struct zink_batch *batch)
zink_batch_clear_resources(screen, batch);
set_foreach(batch->active_queries, entry) {
struct zink_query *query = (void*)entry->key;
zink_prune_query(screen, query);
_mesa_set_remove(batch->active_queries, entry);
}
set_foreach(batch->surfaces, entry) {
struct zink_surface *surf = (struct zink_surface *)entry->key;
surf->batch_uses &= ~BITFIELD64_BIT(batch->batch_id);

View file

@ -2267,6 +2267,7 @@ init_batch(struct zink_context *ctx, struct zink_batch *batch, unsigned idx)
return false;
batch->fbs = _mesa_pointer_set_create(NULL);
batch->active_queries = _mesa_pointer_set_create(NULL);
batch->resources = _mesa_pointer_set_create(NULL);
batch->surfaces = _mesa_pointer_set_create(NULL);
batch->bufferviews = _mesa_pointer_set_create(NULL);

View file

@ -25,7 +25,6 @@
#include "zink_context.h"
#include "zink_fence.h"
#include "zink_query.h"
#include "zink_resource.h"
#include "zink_screen.h"
@ -73,10 +72,6 @@ fail:
void
zink_fence_init(struct zink_fence *fence, struct zink_batch *batch)
{
assert(!fence->active_queries);
fence->active_queries = batch->active_queries;
batch->active_queries = NULL;
set_foreach(batch->resources, entry) {
/* the fence needs its own reference to ensure it can safely access lifetime-dependent
* resource members
@ -135,9 +130,6 @@ zink_fence_finish(struct zink_screen *screen, struct pipe_context *pctx, struct
success = vkGetFenceStatus(screen->dev, fence->fence) == VK_SUCCESS;
if (success) {
if (fence->active_queries)
zink_prune_queries(screen, fence);
/* unref all used resources */
util_dynarray_foreach(&fence->resources, struct zink_resource_object*, obj) {
fence_remove_resource_access(fence, *obj);

View file

@ -38,7 +38,6 @@ struct zink_fence {
struct pipe_reference reference;
unsigned batch_id : 3;
VkFence fence;
struct set *active_queries; /* zink_query objects which were active at some point in this batch */
struct util_dynarray resources;
struct pipe_context *deferred_ctx;
bool submitted;

View file

@ -241,17 +241,12 @@ zink_destroy_query(struct pipe_context *pctx,
}
void
zink_prune_queries(struct zink_screen *screen, struct zink_fence *fence)
zink_prune_query(struct zink_screen *screen, struct zink_query *query)
{
set_foreach(fence->active_queries, entry) {
struct zink_query *query = (void*)entry->key;
if (!p_atomic_dec_return(&query->fences)) {
if (p_atomic_read(&query->dead))
destroy_query(screen, query);
}
if (!p_atomic_dec_return(&query->fences)) {
if (p_atomic_read(&query->dead))
destroy_query(screen, query);
}
_mesa_set_destroy(fence->active_queries, NULL);
fence->active_queries = NULL;
}
static void

View file

@ -27,6 +27,7 @@
struct zink_batch;
struct zink_context;
struct zink_fence;
struct zink_query;
struct zink_screen;
void
@ -36,7 +37,7 @@ void
zink_resume_queries(struct zink_context *ctx, struct zink_batch *batch);
void
zink_prune_queries(struct zink_screen *screen, struct zink_fence *fence);
zink_prune_query(struct zink_screen *screen, struct zink_query *query);
void
zink_query_update_gs_states(struct zink_context *ctx);