• Home
  • Raw
  • Download

Lines Matching full:queue

79 vkr_queue_get_signaled_syncs(struct vkr_queue *queue,  in vkr_queue_get_signaled_syncs()  argument
83 struct vkr_device *dev = queue->device; in vkr_queue_get_signaled_syncs()
92 mtx_lock(&queue->mutex); in vkr_queue_get_signaled_syncs()
94 LIST_FOR_EACH_ENTRY_SAFE (sync, tmp, &queue->signaled_syncs, head) { in vkr_queue_get_signaled_syncs()
95 if (sync->head.next == &queue->signaled_syncs || in vkr_queue_get_signaled_syncs()
101 list_inithead(&queue->signaled_syncs); in vkr_queue_get_signaled_syncs()
103 *queue_empty = LIST_IS_EMPTY(&queue->pending_syncs); in vkr_queue_get_signaled_syncs()
105 mtx_unlock(&queue->mutex); in vkr_queue_get_signaled_syncs()
107 LIST_FOR_EACH_ENTRY_SAFE (sync, tmp, &queue->pending_syncs, head) { in vkr_queue_get_signaled_syncs()
114 bool is_last_sync = sync->head.next == &queue->pending_syncs; in vkr_queue_get_signaled_syncs()
123 *queue_empty = LIST_IS_EMPTY(&queue->pending_syncs); in vkr_queue_get_signaled_syncs()
147 vkr_queue_retire_all_syncs(struct vkr_context *ctx, struct vkr_queue *queue) in vkr_queue_retire_all_syncs() argument
152 mtx_lock(&queue->mutex); in vkr_queue_retire_all_syncs()
153 queue->join = true; in vkr_queue_retire_all_syncs()
154 mtx_unlock(&queue->mutex); in vkr_queue_retire_all_syncs()
156 cnd_signal(&queue->cond); in vkr_queue_retire_all_syncs()
157 thrd_join(queue->thread, NULL); in vkr_queue_retire_all_syncs()
159 LIST_FOR_EACH_ENTRY_SAFE (sync, tmp, &queue->signaled_syncs, head) in vkr_queue_retire_all_syncs()
160 vkr_queue_sync_retire(ctx, queue->device, sync); in vkr_queue_retire_all_syncs()
162 assert(LIST_IS_EMPTY(&queue->signaled_syncs)); in vkr_queue_retire_all_syncs()
165 LIST_FOR_EACH_ENTRY_SAFE (sync, tmp, &queue->pending_syncs, head) in vkr_queue_retire_all_syncs()
166 vkr_queue_sync_retire(ctx, queue->device, sync); in vkr_queue_retire_all_syncs()
170 vkr_queue_destroy(struct vkr_context *ctx, struct vkr_queue *queue) in vkr_queue_destroy() argument
173 vkr_queue_retire_all_syncs(ctx, queue); in vkr_queue_destroy()
175 mtx_destroy(&queue->mutex); in vkr_queue_destroy()
176 cnd_destroy(&queue->cond); in vkr_queue_destroy()
178 list_del(&queue->busy_head); in vkr_queue_destroy()
179 list_del(&queue->base.track_head); in vkr_queue_destroy()
181 if (queue->ring_idx > 0) in vkr_queue_destroy()
182 ctx->sync_queues[queue->ring_idx] = NULL; in vkr_queue_destroy()
184 if (queue->base.id) in vkr_queue_destroy()
185 vkr_context_remove_object(ctx, &queue->base); in vkr_queue_destroy()
187 free(queue); in vkr_queue_destroy()
193 struct vkr_queue *queue = arg; in vkr_queue_thread() local
194 struct vkr_context *ctx = queue->context; in vkr_queue_thread()
195 struct vkr_device *dev = queue->device; in vkr_queue_thread()
200 snprintf(thread_name, ARRAY_SIZE(thread_name), "vkr-queue-%d", ctx->base.ctx_id); in vkr_queue_thread()
203 mtx_lock(&queue->mutex); in vkr_queue_thread()
205 while (LIST_IS_EMPTY(&queue->pending_syncs) && !queue->join) in vkr_queue_thread()
206 cnd_wait(&queue->cond, &queue->mutex); in vkr_queue_thread()
208 if (queue->join) in vkr_queue_thread()
212 LIST_ENTRY(struct vkr_queue_sync, queue->pending_syncs.next, head); in vkr_queue_thread()
214 mtx_unlock(&queue->mutex); in vkr_queue_thread()
224 mtx_lock(&queue->mutex); in vkr_queue_thread()
233 vkr_device_free_queue_sync(queue->device, sync); in vkr_queue_thread()
235 list_addtail(&sync->head, &queue->signaled_syncs); in vkr_queue_thread()
236 write_eventfd(queue->eventfd, 1); in vkr_queue_thread()
239 mtx_unlock(&queue->mutex); in vkr_queue_thread()
252 struct vkr_queue *queue; in vkr_queue_create() local
256 queue = vkr_object_alloc(sizeof(*queue), VK_OBJECT_TYPE_QUEUE, 0); in vkr_queue_create()
257 if (!queue) in vkr_queue_create()
260 queue->base.handle.queue = handle; in vkr_queue_create()
262 queue->context = ctx; in vkr_queue_create()
263 queue->device = dev; in vkr_queue_create()
264 queue->flags = flags; in vkr_queue_create()
265 queue->family = family; in vkr_queue_create()
266 queue->index = index; in vkr_queue_create()
268 list_inithead(&queue->pending_syncs); in vkr_queue_create()
269 list_inithead(&queue->signaled_syncs); in vkr_queue_create()
271 ret = mtx_init(&queue->mutex, mtx_plain); in vkr_queue_create()
273 free(queue); in vkr_queue_create()
276 ret = cnd_init(&queue->cond); in vkr_queue_create()
278 mtx_destroy(&queue->mutex); in vkr_queue_create()
279 free(queue); in vkr_queue_create()
284 ret = thrd_create(&queue->thread, vkr_queue_thread, queue); in vkr_queue_create()
286 mtx_destroy(&queue->mutex); in vkr_queue_create()
287 cnd_destroy(&queue->cond); in vkr_queue_create()
288 free(queue); in vkr_queue_create()
291 queue->eventfd = ctx->fence_eventfd; in vkr_queue_create()
294 list_inithead(&queue->busy_head); in vkr_queue_create()
295 list_inithead(&queue->base.track_head); in vkr_queue_create()
297 return queue; in vkr_queue_create()
302 struct vkr_queue *queue, in vkr_queue_assign_object_id() argument
305 if (queue->base.id) { in vkr_queue_assign_object_id()
306 if (queue->base.id != id) in vkr_queue_assign_object_id()
313 queue->base.id = id; in vkr_queue_assign_object_id()
315 vkr_context_add_object(ctx, &queue->base); in vkr_queue_assign_object_id()
324 struct vkr_queue *queue; in vkr_device_lookup_queue() local
326 LIST_FOR_EACH_ENTRY (queue, &dev->queues, base.track_head) { in vkr_device_lookup_queue()
327 if (queue->flags == flags && queue->family == family && queue->index == index) in vkr_device_lookup_queue()
328 return queue; in vkr_device_lookup_queue()
342 struct vkr_queue *queue = vkr_device_lookup_queue( in vkr_dispatch_vkGetDeviceQueue() local
344 if (!queue) { in vkr_dispatch_vkGetDeviceQueue()
351 vkr_queue_assign_object_id(ctx, queue, id); in vkr_dispatch_vkGetDeviceQueue()
362 struct vkr_queue *queue = vkr_device_lookup_queue(dev, args->pQueueInfo->flags, in vkr_dispatch_vkGetDeviceQueue2() local
365 if (!queue) { in vkr_dispatch_vkGetDeviceQueue2()
386 queue->ring_idx = timeline_info->ringIdx; in vkr_dispatch_vkGetDeviceQueue2()
387 ctx->sync_queues[timeline_info->ringIdx] = queue; in vkr_dispatch_vkGetDeviceQueue2()
392 vkr_queue_assign_object_id(ctx, queue, id); in vkr_dispatch_vkGetDeviceQueue2()
399 struct vkr_queue *queue = vkr_queue_from_handle(args->queue); in vkr_dispatch_vkQueueSubmit() local
400 struct vn_device_proc_table *vk = &queue->device->proc_table; in vkr_dispatch_vkQueueSubmit()
404 vk->QueueSubmit(args->queue, args->submitCount, args->pSubmits, args->fence); in vkr_dispatch_vkQueueSubmit()
411 struct vkr_queue *queue = vkr_queue_from_handle(args->queue); in vkr_dispatch_vkQueueBindSparse() local
412 struct vn_device_proc_table *vk = &queue->device->proc_table; in vkr_dispatch_vkQueueBindSparse()
416 vk->QueueBindSparse(args->queue, args->bindInfoCount, args->pBindInfo, args->fence); in vkr_dispatch_vkQueueBindSparse()
432 struct vkr_queue *queue = vkr_queue_from_handle(args->queue); in vkr_dispatch_vkQueueSubmit2() local
433 struct vn_device_proc_table *vk = &queue->device->proc_table; in vkr_dispatch_vkQueueSubmit2()
437 vk->QueueSubmit2(args->queue, args->submitCount, args->pSubmits, args->fence); in vkr_dispatch_vkQueueSubmit2()