Lines Matching refs:queue
74 queue_wait_idle(struct v3dv_queue *queue,
77 if (queue->device->pdevice->caps.multisync) {
78 int ret = drmSyncobjWait(queue->device->pdevice->render_fd,
79 queue->last_job_syncs.syncs, 3,
83 return vk_errorf(queue, VK_ERROR_DEVICE_LOST,
89 if (!queue->last_job_syncs.first[i])
94 * per-queue-type syncobj which transitively waited on the semaphores
98 VkResult result = vk_sync_wait_many(&queue->device->vk,
110 int ret = drmSyncobjWait(queue->device->pdevice->render_fd,
111 &queue->last_job_syncs.syncs[V3DV_QUEUE_ANY], 1,
115 return vk_errorf(queue, VK_ERROR_DEVICE_LOST,
121 queue->last_job_syncs.first[i] = false;
127 handle_reset_query_cpu_job(struct v3dv_queue *queue, struct v3dv_job *job,
169 export_perfmon_last_job_sync(struct v3dv_queue *queue, struct v3dv_job *job, int *fd)
183 queue->last_job_syncs.syncs[queue_type],
188 return vk_errorf(&job->device->queue, VK_ERROR_UNKNOWN,
197 return vk_errorf(&job->device->queue, VK_ERROR_UNKNOWN,
203 queue->last_job_syncs.syncs[V3DV_QUEUE_ANY],
207 return vk_errorf(&job->device->queue, VK_ERROR_UNKNOWN,
222 struct v3dv_queue *queue = &job->device->queue;
228 result = export_perfmon_last_job_sync(queue, job, &fd);
246 result = vk_errorf(queue, VK_ERROR_UNKNOWN,
293 handle_set_event_cpu_job(struct v3dv_queue *queue, struct v3dv_job *job,
298 * "When vkCmdSetEvent is submitted to a queue, it defines an execution
302 * submitted to the same queue, including those in the same command
310 VkResult result = queue_wait_idle(queue, sync_info);
347 handle_copy_buffer_to_image_cpu_job(struct v3dv_queue *queue,
358 VkResult result = queue_wait_idle(queue, sync_info);
400 handle_timestamp_query_cpu_job(struct v3dv_queue *queue, struct v3dv_job *job,
407 VkResult result = queue_wait_idle(queue, sync_info);
432 handle_csd_indirect_cpu_job(struct v3dv_queue *queue,
442 v3dv_bo_wait(queue->device, info->buffer->mem->bo, PIPE_TIMEOUT_INFINITE);
465 process_waits(struct v3dv_queue *queue,
468 struct v3dv_device *device = queue->device;
479 if (queue->device->pdevice->caps.multisync)
484 queue->last_job_syncs.syncs[V3DV_QUEUE_ANY],
487 result = vk_errorf(queue, VK_ERROR_UNKNOWN,
499 result = vk_errorf(queue, VK_ERROR_UNKNOWN,
507 result = vk_errorf(queue, VK_ERROR_UNKNOWN,
514 queue->last_job_syncs.syncs[V3DV_QUEUE_ANY],
517 result = vk_errorf(queue, VK_ERROR_UNKNOWN,
527 process_signals(struct v3dv_queue *queue,
530 struct v3dv_device *device = queue->device;
544 queue->last_job_syncs.syncs[V3DV_QUEUE_ANY],
547 return vk_errorf(queue, VK_ERROR_UNKNOWN,
557 result = vk_errorf(queue, VK_ERROR_UNKNOWN,
578 set_in_syncs(struct v3dv_queue *queue,
584 struct v3dv_device *device = queue->device;
587 /* If this is the first job submitted to a given GPU queue in this cmd buf
590 if (queue->last_job_syncs.first[queue_sync])
628 syncs[n_syncs++].handle = queue->last_job_syncs.syncs[V3DV_QUEUE_CL];
631 syncs[n_syncs++].handle = queue->last_job_syncs.syncs[V3DV_QUEUE_CSD];
634 syncs[n_syncs++].handle = queue->last_job_syncs.syncs[V3DV_QUEUE_TFU];
641 set_out_syncs(struct v3dv_queue *queue,
648 struct v3dv_device *device = queue->device;
653 * this v3dv_queue_type to track the last job submitted to this queue.
671 syncs[n_vk_syncs].handle = queue->last_job_syncs.syncs[queue_sync];
701 struct v3dv_queue *queue = &device->queue;
705 in_syncs = set_in_syncs(queue, job, queue_sync,
710 out_syncs = set_out_syncs(queue, job, queue_sync,
736 handle_cl_job(struct v3dv_queue *queue,
742 struct v3dv_device *device = queue->device;
776 util_dynarray_foreach(&queue->device->device_address_bo_list,
795 const bool needs_perf_sync = queue->last_perfmon_id != submit.perfmon_id;
796 queue->last_perfmon_id = submit.perfmon_id;
810 if (queue->last_job_syncs.first[V3DV_QUEUE_CL]) {
845 uint32_t last_job_sync = queue->last_job_syncs.syncs[V3DV_QUEUE_ANY];
865 queue->last_job_syncs.first[V3DV_QUEUE_CL] = false;
868 return vk_queue_set_lost(&queue->vk, "V3D_SUBMIT_CL failed: %m");
874 handle_tfu_job(struct v3dv_queue *queue,
879 struct v3dv_device *device = queue->device;
899 uint32_t last_job_sync = queue->last_job_syncs.syncs[V3DV_QUEUE_ANY];
907 queue->last_job_syncs.first[V3DV_QUEUE_TFU] = false;
910 return vk_queue_set_lost(&queue->vk, "V3D_SUBMIT_TFU failed: %m");
916 handle_csd_job(struct v3dv_queue *queue,
922 struct v3dv_device *device = queue->device;
931 util_dynarray_foreach(&queue->device->device_address_bo_list,
966 uint32_t last_job_sync = queue->last_job_syncs.syncs[V3DV_QUEUE_ANY];
972 queue->last_perfmon_id = submit->perfmon_id;
986 queue->last_job_syncs.first[V3DV_QUEUE_CSD] = false;
989 return vk_queue_set_lost(&queue->vk, "V3D_SUBMIT_CSD failed: %m");
995 queue_handle_job(struct v3dv_queue *queue,
1003 return handle_cl_job(queue, job, counter_pass_idx, sync_info, signal_syncs);
1005 return handle_tfu_job(queue, job, sync_info, signal_syncs);
1007 return handle_csd_job(queue, job, counter_pass_idx, sync_info, signal_syncs);
1009 return handle_reset_query_cpu_job(queue, job, sync_info);
1015 return handle_set_event_cpu_job(queue, job, sync_info);
1019 return handle_copy_buffer_to_image_cpu_job(queue, job, sync_info);
1021 return handle_csd_indirect_cpu_job(queue, job, sync_info);
1023 return handle_timestamp_query_cpu_job(queue, job, sync_info);
1030 queue_create_noop_job(struct v3dv_queue *queue)
1032 struct v3dv_device *device = queue->device;
1033 queue->noop_job = vk_zalloc(&device->vk.alloc, sizeof(struct v3dv_job), 8,
1035 if (!queue->noop_job)
1037 v3dv_job_init(queue->noop_job, V3DV_JOB_TYPE_GPU_CL, device, NULL, -1);
1039 v3dv_X(device, job_emit_noop)(queue->noop_job);
1046 queue->noop_job->serialize = V3DV_BARRIER_ALL;
1052 queue_submit_noop_job(struct v3dv_queue *queue,
1057 if (!queue->noop_job) {
1058 VkResult result = queue_create_noop_job(queue);
1063 assert(queue->noop_job);
1064 return queue_handle_job(queue, queue->noop_job, counter_pass_idx,
1072 struct v3dv_queue *queue = container_of(vk_queue, struct v3dv_queue, vk);
1083 queue->last_job_syncs.first[i] = true;
1085 result = process_waits(queue, sync_info.wait_count, sync_info.waits);
1095 result = queue_handle_job(queue, job, submit->perf_pass_index,
1107 result = queue_submit_noop_job(queue, submit->perf_pass_index,
1116 * all work on any queue completes. See Vulkan's signal operation order
1120 result = queue_submit_noop_job(queue, submit->perf_pass_index,
1126 process_signals(queue, sync_info.signal_count, sync_info.signals);
1137 V3DV_FROM_HANDLE(v3dv_queue, queue, _queue);
1138 return vk_error(queue, VK_ERROR_FEATURE_NOT_PRESENT);