Module: Mesa Branch: main Commit: b315aa43f1c2d2f17bdd6a78cf402daae060d31c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b315aa43f1c2d2f17bdd6a78cf402daae060d31c
Author: Mike Blumenkrantz <[email protected]> Date: Wed Jun 16 21:40:37 2021 -0400 zink: move some end-of-batch stuff to submit thread no reason to do this on the driver thread when it could be async Acked-by: Dave Airlie <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11437> --- src/gallium/drivers/zink/zink_batch.c | 39 ++++++++++++++++------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/src/gallium/drivers/zink/zink_batch.c b/src/gallium/drivers/zink/zink_batch.c index c87d0c400e3..9d3979913c8 100644 --- a/src/gallium/drivers/zink/zink_batch.c +++ b/src/gallium/drivers/zink/zink_batch.c @@ -371,11 +371,29 @@ submit_queue(void *data, void *gdata, int thread_index) si.pNext = &mem_signal; } + if (vkEndCommandBuffer(bs->cmdbuf) != VK_SUCCESS) { + debug_printf("vkEndCommandBuffer failed\n"); + bs->is_device_lost = true; + goto end; + } + if (vkEndCommandBuffer(bs->barrier_cmdbuf) != VK_SUCCESS) { + debug_printf("vkEndCommandBuffer failed\n"); + bs->is_device_lost = true; + goto end; + } + + while (util_dynarray_contains(&bs->persistent_resources, struct zink_resource_object*)) { + struct zink_resource_object *obj = util_dynarray_pop(&bs->persistent_resources, struct zink_resource_object*); + VkMappedMemoryRange range = zink_resource_init_mem_range(screen, obj, 0, obj->size); + vkFlushMappedMemoryRanges(screen->dev, 1, &range); + } + if (vkQueueSubmit(bs->queue, 1, &si, bs->fence.fence) != VK_SUCCESS) { debug_printf("ZINK: vkQueueSubmit() failed\n"); bs->is_device_lost = true; } bs->submit_count++; +end: cnd_broadcast(&bs->usage.flush); p_atomic_set(&bs->fence.submitted, true); @@ -527,28 +545,7 @@ zink_end_batch(struct zink_context *ctx, struct zink_batch *batch) tc_driver_internal_flush_notify(ctx->tc); - if (vkEndCommandBuffer(batch->state->cmdbuf) != VK_SUCCESS) { - debug_printf("vkEndCommandBuffer failed\n"); - return; - } - if (vkEndCommandBuffer(batch->state->barrier_cmdbuf) != VK_SUCCESS) { - debug_printf("vkEndCommandBuffer failed\n"); - return; - } - struct zink_screen *screen = zink_screen(ctx->base.screen); - while (util_dynarray_contains(&batch->state->persistent_resources, struct zink_resource_object*)) { - struct zink_resource_object *obj = util_dynarray_pop(&batch->state->persistent_resources, struct zink_resource_object*); - assert(!obj->offset); - VkMappedMemoryRange range = { - VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE, - NULL, - obj->mem, - obj->offset, - VK_WHOLE_SIZE, - }; - vkFlushMappedMemoryRanges(screen->dev, 1, &range); - } ctx->resource_size += batch->state->resource_size; ctx->last_fence = &batch->state->fence; _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
