Lines Matching defs:mfence

36 destroy_fence(struct zink_screen *screen, struct zink_tc_fence *mfence)
38 mfence->fence = NULL;
39 tc_unflushed_batch_token_reference(&mfence->tc_token, NULL);
40 if (mfence->sem)
41 VKSCR(DestroySemaphore)(screen->dev, mfence->sem, NULL);
42 FREE(mfence);
48 struct zink_tc_fence *mfence = CALLOC_STRUCT(zink_tc_fence);
49 if (!mfence)
51 pipe_reference_init(&mfence->reference, 1);
52 util_queue_fence_init(&mfence->ready);
53 return mfence;
59 struct zink_tc_fence *mfence = zink_create_tc_fence();
60 if (!mfence)
62 util_queue_fence_reset(&mfence->ready);
63 tc_unflushed_batch_token_reference(&mfence->tc_token, tc_token);
64 return (struct pipe_fence_handle*)mfence;
70 struct zink_tc_fence *mfence)
72 if (pipe_reference(&(*ptr)->reference, &mfence->reference))
75 *ptr = mfence;
88 tc_fence_finish(struct zink_context *ctx, struct zink_tc_fence *mfence, uint64_t *timeout_ns)
90 if (!util_queue_fence_is_signalled(&mfence->ready)) {
92 if (mfence->tc_token) {
94 * this mfence, but only if we're in the API thread
98 * be in flight in the driver thread, so the mfence
101 threaded_context_flush(&ctx->base, mfence->tc_token, *timeout_ns == 0);
104 /* this is a tc mfence, so we're just waiting on the queue mfence to complete
105 * after being signaled by the real mfence
108 util_queue_fence_wait(&mfence->ready);
110 if (!util_queue_fence_wait_timeout(&mfence->ready, abs_timeout))
144 zink_fence_finish(struct zink_screen *screen, struct pipe_context *pctx, struct zink_tc_fence *mfence,
153 if (pctx && mfence->deferred_ctx == pctx) {
154 if (mfence->fence == ctx->deferred_fence) {
163 /* need to ensure the tc mfence has been flushed before we wait */
164 bool tc_finish = tc_fence_finish(ctx, mfence, &timeout_ns);
169 if (!mfence->fence)
172 struct zink_fence *fence = mfence->fence;
174 unsigned submit_diff = zink_batch_state(mfence->fence)->submit_count - mfence->submit_count;
199 struct zink_tc_fence *mfence = (struct zink_tc_fence *)pfence;
202 ctx->batch.state->signal_semaphore = mfence->sem;
215 struct zink_tc_fence *mfence = (struct zink_tc_fence *)pfence;
217 if (mfence->deferred_ctx == pctx || !mfence->sem)
220 mfence->deferred_ctx = pctx;
223 util_dynarray_append(&ctx->batch.state->wait_semaphores, VkSemaphore, mfence->sem);
227 mfence->sem = VK_NULL_HANDLE;
238 struct zink_tc_fence *mfence = zink_create_tc_fence();
239 if (!mfence)
245 result = VKSCR(CreateSemaphore)(screen->dev, &sci, NULL, &mfence->sem);
263 .semaphore = mfence->sem,
274 *pfence = (struct pipe_fence_handle *)mfence;
280 VKSCR(DestroySemaphore)(screen->dev, mfence->sem, NULL);
282 FREE(mfence);
298 struct zink_tc_fence *mfence = zink_create_tc_fence();
308 if (VKSCR(CreateSemaphore)(screen->dev, &sci, NULL, &mfence->sem) != VK_SUCCESS) {
309 FREE(mfence);
314 sdi.semaphore = mfence->sem;
322 *pfence = (struct pipe_fence_handle *)mfence;
326 VKSCR(DestroySemaphore)(screen->dev, mfence->sem, NULL);
327 FREE(mfence);