Lines Matching defs:submit
37 /* A "softpin" implementation of submit/ringbuffer, which lowers CPU overhead
58 /* add (if needed) bo to submit and return index: */
60 fd_submit_append_bo(struct fd_submit_sp *submit, struct fd_bo *bo)
65 * different submits. But it is not legal to use the same submit
70 if (unlikely((idx >= submit->nr_bos) || (submit->bos[idx] != bo))) {
74 entry = _mesa_hash_table_search_pre_hashed(submit->bo_table, hash, bo);
79 idx = APPEND(submit, bos, fd_bo_ref(bo));
81 _mesa_hash_table_insert_pre_hashed(submit->bo_table, hash, bo,
91 fd_submit_suballoc_ring_bo(struct fd_submit *submit,
94 struct fd_submit_sp *fd_submit = to_fd_submit_sp(submit);
115 fd_ring->ring_bo = fd_bo_new_ring(submit->pipe->dev, SUBALLOC_SIZE);
131 fd_submit_sp_new_ringbuffer(struct fd_submit *submit, uint32_t size,
134 struct fd_submit_sp *fd_submit = to_fd_submit_sp(submit);
139 fd_ring->u.submit = submit;
147 fd_submit_suballoc_ring_bo(submit, fd_ring, size);
153 fd_ring->ring_bo = fd_bo_new_ring(submit->pipe->dev, size);
163 * Prepare submit for flush, always done synchronously.
167 * the submit is flushed, even if deferred
172 fd_submit_sp_flush_prep(struct fd_submit *submit, int in_fence_fd,
175 struct fd_submit_sp *fd_submit = to_fd_submit_sp(submit);
178 finalize_current_cmd(submit->primary);
181 to_fd_ringbuffer_sp(submit->primary);
188 fd_bo_add_fence(fd_submit->bos[i], submit->pipe, submit->fence);
203 struct fd_submit *submit = job;
204 struct fd_submit_sp *fd_submit = to_fd_submit_sp(submit);
205 struct fd_pipe *pipe = submit->pipe;
215 DEBUG_MSG("finish: %u", submit->fence);
221 struct fd_submit *submit = job;
222 fd_submit_del(submit);
228 struct fd_submit *submit = last_submit(submit_list);
229 struct fd_submit_sp *fd_submit = to_fd_submit_sp(submit);
242 DEBUG_MSG("enqueue: %u", submit->fence);
244 util_queue_add_job(&submit->pipe->dev->submit_queue,
245 submit, fence,
254 should_defer(struct fd_submit *submit)
256 struct fd_submit_sp *fd_submit = to_fd_submit_sp(submit);
258 /* if too many bo's, it may not be worth the CPU cost of submit merging: */
267 if (submit->pipe->dev->deferred_cmds > 128)
274 fd_submit_sp_flush(struct fd_submit *submit, int in_fence_fd,
277 struct fd_device *dev = submit->pipe->dev;
278 struct fd_pipe *pipe = submit->pipe;
290 (last_submit(&dev->deferred_submits)->pipe != submit->pipe)) {
300 list_addtail(&fd_submit_ref(submit)->node, &dev->deferred_submits);
302 bool has_shared = fd_submit_sp_flush_prep(submit, in_fence_fd, out_fence);
304 assert(fd_fence_before(pipe->last_enqueue_fence, submit->fence));
305 pipe->last_enqueue_fence = submit->fence;
307 /* If we don't need an out-fence, we can defer the submit.
313 if ((in_fence_fd == -1) && !out_fence && !has_shared && should_defer(submit)) {
314 DEBUG_MSG("defer: %u", submit->fence);
315 dev->deferred_cmds += fd_ringbuffer_cmd_count(submit->primary);
374 * submit, we need to be sure that submitq has caught up and flushed
385 fd_submit_sp_destroy(struct fd_submit *submit)
387 struct fd_submit_sp *fd_submit = to_fd_submit_sp(submit);
416 struct fd_submit *submit;
425 submit = &fd_submit->base;
426 submit->funcs = &submit_funcs;
428 return submit;
462 struct fd_pipe *pipe = fd_ring->u.submit->pipe;
509 struct fd_submit *submit = fd_ring->u.submit;
511 if (to_fd_submit_sp(submit)->nr_bos > MAX_ARRAY_SIZE/2) {
533 struct fd_submit *submit = fd_ring->u.submit;
540 slab_free(&to_fd_submit_sp(submit)->ring_pool, fd_ring);
601 if (fd_dev_64b(&fd_ring->u.submit->pipe->dev_id)) {