Lines Matching refs:fence
57 VkFence fence;
262 VkFence fence)
268 submit->fence = fence;
287 VkFence fence)
293 submit->fence = fence;
356 struct vn_fence *fence = vn_fence_from_handle(_fence);
357 const bool external_fence = fence && fence->is_external;
358 const bool feedback_fence = fence && fence->feedback.slot;
380 * - fence is an external fence
385 /* if the original submission involves a feedback fence:
386 * - defer the feedback fence to another submit to avoid deep copy
387 * - defer the potential sync_submit to the feedback fence submission
391 feedback_fence ? VK_NULL_HANDLE : submit.fence,
398 /* TODO intercept original submit batches to append the fence feedback cmd
413 .pCommandBuffers = &fence->feedback.commands[feedback_cmd_index],
416 submit.fence, sync_submit);
453 VkFence fence)
464 &submit, _queue, bindInfoCount, pBindInfo, fence);
470 submit.bind_sparse_batches, submit.fence);
498 /* fence commands */
509 struct vn_fence *fence,
513 fence->permanent.type = VN_SYNC_TYPE_DEVICE_ONLY;
514 fence->temporary.type = VN_SYNC_TYPE_INVALID;
515 fence->payload = &fence->permanent;
521 vn_fence_signal_wsi(struct vn_device *dev, struct vn_fence *fence)
523 struct vn_sync_payload *temp = &fence->temporary;
527 fence->payload = temp;
532 struct vn_fence *fence,
541 if (fence->is_external)
545 * between feedback slot signaling and the actual fence signal operation.
585 fence->feedback.slot = slot;
586 fence->feedback.commands = cmd_handles;
593 struct vn_fence *fence,
598 if (!fence->feedback.slot)
603 fence->feedback.commands[i]);
606 vn_feedback_pool_free(&dev->feedback_pool, fence->feedback.slot);
608 vk_free(alloc, fence->feedback.commands);
624 struct vn_fence *fence = vk_zalloc(alloc, sizeof(*fence), VN_DEFAULT_ALIGN,
626 if (!fence)
629 vn_object_base_init(&fence->base, VK_OBJECT_TYPE_FENCE, &dev->base);
639 fence->is_external = !!export_info->handleTypes;
642 result = vn_fence_init_payloads(dev, fence, signaled, alloc);
646 result = vn_fence_feedback_init(dev, fence, signaled, alloc);
650 *pFence = vn_fence_to_handle(fence);
656 vn_sync_payload_release(dev, &fence->permanent);
657 vn_sync_payload_release(dev, &fence->temporary);
660 vn_object_base_fini(&fence->base);
661 vk_free(alloc, fence);
672 struct vn_fence *fence = vn_fence_from_handle(_fence);
676 if (!fence)
681 vn_fence_feedback_fini(dev, fence, alloc);
683 vn_sync_payload_release(dev, &fence->permanent);
684 vn_sync_payload_release(dev, &fence->temporary);
686 vn_object_base_fini(&fence->base);
687 vk_free(alloc, fence);
696 /* TODO if the fence is shared-by-ref, this needs to be synchronous */
703 struct vn_fence *fence = vn_fence_from_handle(pFences[i]);
704 struct vn_sync_payload *perm = &fence->permanent;
706 vn_sync_payload_release(dev, &fence->temporary);
709 fence->payload = perm;
711 if (fence->feedback.slot)
712 vn_feedback_reset_status(fence->feedback.slot);
722 struct vn_fence *fence = vn_fence_from_handle(_fence);
723 struct vn_sync_payload *payload = fence->payload;
728 if (fence->feedback.slot) {
729 result = vn_feedback_get_status(fence->feedback.slot);
731 /* When fence feedback slot gets signaled, the real fence
734 * the renderer wait for the fence. This also helps resolve
736 * longer sees any fence status checks and falsely believes the
750 unreachable("unexpected fence payload type");
885 struct vn_fence *fence = vn_fence_from_handle(pImportFenceFdInfo->fence);
890 /* TODO update fence->is_external after we support opaque fd import */
901 vn_fence_signal_wsi(dev, fence);
913 struct vn_fence *fence = vn_fence_from_handle(pGetFdInfo->fence);
916 struct vn_sync_payload *payload = fence->payload;
928 vn_sync_payload_release(dev, &fence->temporary);
929 fence->payload = &fence->permanent;
931 /* XXX implies reset operation on the host fence */