Lines Matching refs:vc4
35 vc4_job_free(struct vc4_context *vc4, struct vc4_job *job)
42 _mesa_hash_table_remove_key(vc4->jobs, &job->key);
45 _mesa_hash_table_remove_key(vc4->write_jobs,
50 _mesa_hash_table_remove_key(vc4->write_jobs,
55 _mesa_hash_table_remove_key(vc4->write_jobs,
60 _mesa_hash_table_remove_key(vc4->write_jobs,
68 if (vc4->job == job)
69 vc4->job = NULL;
75 vc4_job_create(struct vc4_context *vc4)
77 struct vc4_job *job = rzalloc(vc4, struct vc4_job);
92 if (vc4->perfmon)
93 job->perfmon = vc4->perfmon;
99 vc4_flush_jobs_writing_resource(struct vc4_context *vc4,
102 struct hash_entry *entry = _mesa_hash_table_search(vc4->write_jobs,
106 vc4_job_submit(vc4, job);
111 vc4_flush_jobs_reading_resource(struct vc4_context *vc4,
116 vc4_flush_jobs_writing_resource(vc4, prsc);
118 hash_table_foreach(vc4->jobs, entry) {
130 vc4_job_submit(vc4, job);
141 vc4_job_submit(vc4, job);
151 vc4_job_submit(vc4, job);
167 vc4_get_job(struct vc4_context *vc4,
172 struct hash_entry *entry = _mesa_hash_table_search(vc4->jobs,
181 vc4_flush_jobs_reading_resource(vc4, cbuf->texture);
183 vc4_flush_jobs_reading_resource(vc4, zsbuf->texture);
185 struct vc4_job *job = vc4_job_create(vc4);
214 _mesa_hash_table_insert(vc4->write_jobs, cbuf->texture, job);
216 _mesa_hash_table_insert(vc4->write_jobs, zsbuf->texture, job);
220 _mesa_hash_table_insert(vc4->jobs, &job->key, job);
226 vc4_get_job_for_fbo(struct vc4_context *vc4)
228 if (vc4->job)
229 return vc4->job;
231 struct pipe_surface *cbuf = vc4->framebuffer.cbufs[0];
232 struct pipe_surface *zsbuf = vc4->framebuffer.zsbuf;
233 struct vc4_job *job = vc4_get_job(vc4, cbuf, zsbuf);
235 /* The dirty flags are tracking what's been updated while vc4->job has
239 vc4->dirty = ~0;
263 job->draw_tiles_x = DIV_ROUND_UP(vc4->framebuffer.width,
265 job->draw_tiles_y = DIV_ROUND_UP(vc4->framebuffer.height,
272 if (vc4->rasterizer)
273 job->flags = vc4->rasterizer->tile_raster_order_flags;
275 vc4->job = job;
370 vc4_job_submit(struct vc4_context *vc4, struct vc4_job *job)
476 if (vc4->screen->has_syncobj) {
477 submit.out_sync = vc4->job_syncobj;
479 if (vc4->in_fence_fd >= 0) {
481 drmSyncobjImportSyncFile(vc4->fd, vc4->in_syncobj,
482 vc4->in_fence_fd);
483 submit.in_sync = vc4->in_syncobj;
484 close(vc4->in_fence_fd);
485 vc4->in_fence_fd = -1;
492 ret = vc4_ioctl(vc4->fd, DRM_IOCTL_VC4_SUBMIT_CL, &submit);
499 vc4->last_emit_seqno = submit.seqno;
505 if (vc4->last_emit_seqno - vc4->screen->finished_seqno > 5) {
506 if (!vc4_wait_seqno(vc4->screen,
507 vc4->last_emit_seqno - 5,
515 if (!vc4_wait_seqno(vc4->screen, vc4->last_emit_seqno,
523 vc4_job_free(vc4, job);
539 vc4_job_init(struct vc4_context *vc4)
541 vc4->jobs = _mesa_hash_table_create(vc4,
544 vc4->write_jobs = _mesa_hash_table_create(vc4,
548 if (vc4->screen->has_syncobj) {
552 int ret = drmSyncobjCreate(vc4->fd,
554 &vc4->job_syncobj);