- struct vc4_surface *csurf = vc4_surface(vc4->framebuffer.cbufs[0]);
- struct vc4_resource *ctex = vc4_resource(csurf->base.texture);
- struct drm_vc4_submit_cl submit;
- memset(&submit, 0, sizeof(submit));
-
- submit.bo_handles = vc4->bo_handles.base;
- submit.bo_handle_count = (vc4->bo_handles.next -
- vc4->bo_handles.base) / 4;
- submit.bin_cl = vc4->bcl.base;
- submit.bin_cl_len = vc4->bcl.next - vc4->bcl.base;
- submit.render_cl = vc4->rcl.base;
- submit.render_cl_len = vc4->rcl.next - vc4->rcl.base;
- submit.shader_records = vc4->shader_rec.base;
- submit.shader_record_len = vc4->shader_rec.next - vc4->shader_rec.base;
- submit.shader_record_count = vc4->shader_rec_count;
-
- if (!(vc4_debug & VC4_DEBUG_NORAST)) {
- int ret;
-
-#ifndef USE_VC4_SIMULATOR
- ret = drmIoctl(vc4->fd, DRM_IOCTL_VC4_SUBMIT_CL, &submit);
-#else
- ret = vc4_simulator_flush(vc4, &submit, csurf);
-#endif
- if (ret)
- errx(1, "VC4 submit failed\n");
+ if (fence) {
+ struct pipe_screen *screen = pctx->screen;
+ struct vc4_fence *f = vc4_fence_create(vc4->screen,
+ vc4->last_emit_seqno);
+ screen->fence_reference(screen, fence, NULL);
+ *fence = (struct pipe_fence_handle *)f;