mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-27 11:00:37 +02:00
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:
parent
6aa791f626
commit
fc27594943
6 changed files with 13 additions and 19 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue