diff --git a/src/broadcom/common/v3d_debug.c b/src/broadcom/common/v3d_debug.c index e55ff4a3d58..b69e56bd984 100644 --- a/src/broadcom/common/v3d_debug.c +++ b/src/broadcom/common/v3d_debug.c @@ -105,6 +105,8 @@ static const struct debug_named_value debug_control[] = { /* disable_tfu is v3dv only because v3d has some uses of the TFU without alternative codepaths */ { "disable_tfu", V3D_DEBUG_DISABLE_TFU, "Disable TFU (v3dv only)" }, + { "sync", V3D_DEBUG_SYNC, + "Sync wait for each job to complete after submission." }, DEBUG_NAMED_VALUE_END }; diff --git a/src/broadcom/common/v3d_debug.h b/src/broadcom/common/v3d_debug.h index 4b05bd300e0..a01326ba40c 100644 --- a/src/broadcom/common/v3d_debug.h +++ b/src/broadcom/common/v3d_debug.h @@ -69,6 +69,7 @@ extern uint32_t v3d_mesa_debug; #define V3D_DEBUG_NO_MERGE_JOBS (1 << 24) #define V3D_DEBUG_OPT_COMPILE_TIME (1 << 25) #define V3D_DEBUG_DISABLE_TFU (1 << 26) +#define V3D_DEBUG_SYNC (1 << 27) #define V3D_DEBUG_SHADERS (V3D_DEBUG_TGSI | V3D_DEBUG_NIR | \ V3D_DEBUG_VIR | V3D_DEBUG_QPU | \ diff --git a/src/gallium/drivers/v3d/v3d_job.c b/src/gallium/drivers/v3d/v3d_job.c index 09175060c4d..aec6fca09f3 100644 --- a/src/gallium/drivers/v3d/v3d_job.c +++ b/src/gallium/drivers/v3d/v3d_job.c @@ -592,7 +592,6 @@ v3d_job_submit(struct v3d_context *v3d, struct v3d_job *job) if (!V3D_DBG(NORAST)) { int ret; - ret = v3d_ioctl(v3d->fd, DRM_IOCTL_V3D_SUBMIT_CL, &job->submit); static bool warned = false; if (ret && !warned) { @@ -602,6 +601,10 @@ v3d_job_submit(struct v3d_context *v3d, struct v3d_job *job) } else if (!ret) { if (v3d->active_perfmon) v3d->active_perfmon->job_submitted = true; + if (V3D_DBG(SYNC)) { + drmSyncobjWait(v3d->fd, &v3d->out_sync, 1, INT64_MAX, + DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL, NULL); + } } /* If we are submitting a job in the middle of transform diff --git a/src/gallium/drivers/v3d/v3dx_draw.c b/src/gallium/drivers/v3d/v3dx_draw.c index 38f1c2aff92..c28572d4df0 100644 --- a/src/gallium/drivers/v3d/v3dx_draw.c +++ b/src/gallium/drivers/v3d/v3dx_draw.c @@ -1601,6 +1601,10 @@ v3d_launch_grid(struct pipe_context *pctx, const struct pipe_grid_info *info) } else if (!ret) { if (v3d->active_perfmon) v3d->active_perfmon->job_submitted = true; + if (V3D_DBG(SYNC)) { + drmSyncobjWait(v3d->fd, &v3d->out_sync, 1, INT64_MAX, + DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL, NULL); + } } } diff --git a/src/gallium/drivers/v3d/v3dx_tfu.c b/src/gallium/drivers/v3d/v3dx_tfu.c index e0b6d32db4a..a00e6f4d106 100644 --- a/src/gallium/drivers/v3d/v3dx_tfu.c +++ b/src/gallium/drivers/v3d/v3dx_tfu.c @@ -197,6 +197,10 @@ v3dX(tfu)(struct pipe_context *pctx, fprintf(stderr, "Failed to submit TFU job: %d\n", ret); return false; } + if (V3D_DBG(SYNC)) { + drmSyncobjWait(v3d->fd, &v3d->out_sync, 1, INT64_MAX, + DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL, NULL); + } dst->writes++;