Lines Matching refs:fence
94 struct dri2_fence *fence = CALLOC_STRUCT(dri2_fence);
96 if (!fence)
99 stapi->flush(stapi, 0, &fence->pipe_fence, NULL, NULL);
101 if (!fence->pipe_fence) {
102 FREE(fence);
106 fence->driscreen = dri_screen(_ctx->driScreenPriv);
107 return fence;
115 struct dri2_fence *fence = CALLOC_STRUCT(dri2_fence);
118 /* exporting driver created fence, flush: */
119 stapi->flush(stapi, ST_FLUSH_FENCE_FD, &fence->pipe_fence, NULL, NULL);
121 /* importing a foreign fence fd: */
122 ctx->create_fence_fd(ctx, &fence->pipe_fence, fd, PIPE_FD_TYPE_NATIVE_SYNC);
124 if (!fence->pipe_fence) {
125 FREE(fence);
129 fence->driscreen = dri_screen(_ctx->driScreenPriv);
130 return fence;
138 struct dri2_fence *fence = (struct dri2_fence*)_fence;
140 return screen->fence_get_fd(screen, fence->pipe_fence);
147 struct dri2_fence *fence;
152 fence = CALLOC_STRUCT(dri2_fence);
153 if (!fence)
156 fence->cl_event = (void*)cl_event;
158 if (!driscreen->opencl_dri_event_add_ref(fence->cl_event)) {
159 free(fence);
163 fence->driscreen = driscreen;
164 return fence;
172 struct dri2_fence *fence = (struct dri2_fence*)_fence;
174 if (fence->pipe_fence)
175 screen->fence_reference(screen, &fence->pipe_fence, NULL);
176 else if (fence->cl_event)
177 driscreen->opencl_dri_event_release(fence->cl_event);
181 FREE(fence);
188 struct dri2_fence *fence = (struct dri2_fence*)_fence;
189 struct dri_screen *driscreen = fence->driscreen;
192 /* No need to flush. The context was flushed when the fence was created. */
194 if (fence->pipe_fence)
195 return screen->fence_finish(screen, NULL, fence->pipe_fence, timeout);
196 else if (fence->cl_event) {
198 driscreen->opencl_dri_event_get_fence(fence->cl_event);
203 return driscreen->opencl_dri_event_wait(fence->cl_event, timeout);
215 struct dri2_fence *fence = (struct dri2_fence*)_fence;
217 /* We might be called here with a NULL fence as a result of WaitSyncKHR
218 * on a EGL_KHR_reusable_sync fence. Nothing to do here in such case.
220 if (!fence)
224 ctx->fence_server_sync(ctx, fence->pipe_fence);