#include "wsi_common.h"
void
-zink_batch_state_clear_resources(struct zink_screen *screen, struct zink_batch_state *bs)
-{
- /* unref all used resources */
- set_foreach(bs->resources, entry) {
- struct zink_resource_object *obj = (struct zink_resource_object *)entry->key;
- zink_batch_usage_unset(&obj->reads, !!bs->fence.is_compute, bs->fence.batch_id);
- zink_batch_usage_unset(&obj->writes, !!bs->fence.is_compute, bs->fence.batch_id);
- zink_resource_object_reference(screen, &obj, NULL);
- _mesa_set_remove(bs->resources, entry);
- }
-}
-
-void
zink_reset_batch_state(struct zink_context *ctx, struct zink_batch_state *bs)
{
struct zink_screen *screen = zink_screen(ctx->base.screen);
- zink_batch_state_clear_resources(screen, bs);
+ zink_fence_clear_resources(screen, &bs->fence);
set_foreach(bs->active_queries, entry) {
struct zink_query *query = (void*)entry->key;
vkDestroyCommandPool(screen->dev, bs->cmdpool, NULL);
_mesa_set_destroy(bs->fbs, NULL);
- _mesa_set_destroy(bs->resources, NULL);
util_dynarray_fini(&bs->zombie_samplers);
_mesa_set_destroy(bs->surfaces, NULL);
_mesa_set_destroy(bs->bufferviews, NULL);
goto fail
SET_CREATE_OR_FAIL(bs->fbs);
- SET_CREATE_OR_FAIL(bs->resources);
+ SET_CREATE_OR_FAIL(bs->fence.resources);
SET_CREATE_OR_FAIL(bs->surfaces);
SET_CREATE_OR_FAIL(bs->bufferviews);
SET_CREATE_OR_FAIL(bs->programs);
if (!zink_batch_usage_matches(&res->obj->reads, batch->queue, batch->state->fence.batch_id) &&
!zink_batch_usage_matches(&res->obj->writes, batch->queue, batch->state->fence.batch_id)) {
bool found = false;
- _mesa_set_search_and_add(batch->state->resources, res->obj, &found);
+ _mesa_set_search_and_add(batch->state->fence.resources, res->obj, &found);
if (!found) {
pipe_reference(NULL, &res->obj->reference);
if (!batch->last_batch_id || !zink_batch_usage_matches(&res->obj->reads, batch->queue, batch->last_batch_id))
#include "util/set.h"
#include "util/u_memory.h"
+
+void
+zink_fence_clear_resources(struct zink_screen *screen, struct zink_fence *fence)
+{
+ /* unref all used resources */
+ set_foreach(fence->resources, entry) {
+ struct zink_resource_object *obj = (struct zink_resource_object *)entry->key;
+ zink_batch_usage_unset(&obj->reads, !!fence->is_compute, fence->batch_id);
+ zink_batch_usage_unset(&obj->writes, !!fence->is_compute, fence->batch_id);
+ zink_resource_object_reference(screen, &obj, NULL);
+ _mesa_set_remove(fence->resources, entry);
+ }
+}
+
static void
destroy_fence(struct zink_screen *screen, struct zink_fence *fence)
{
success = vkGetFenceStatus(screen->dev, fence->fence) == VK_SUCCESS;
if (success) {
- struct zink_batch_state *bs = zink_batch_state(fence);
- zink_batch_state_clear_resources(screen, bs);
+ zink_fence_clear_resources(screen, fence);
p_atomic_set(&fence->submitted, false);
}
return success;