From: Rob Clark Date: Tue, 20 Apr 2021 15:57:54 +0000 (-0700) Subject: freedreno/drm: Assume explicit fences if in_fence_fd X-Git-Tag: upstream/21.2.3~4172 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f92f31455a45e49354d083da088a8e17cef8bf11;p=platform%2Fupstream%2Fmesa.git freedreno/drm: Assume explicit fences if in_fence_fd If we ever see explicit fencing used, then we can disable implicit fencing, even for internal or unfenced batches. Signed-off-by: Rob Clark Part-of: --- diff --git a/src/freedreno/drm/msm_priv.h b/src/freedreno/drm/msm_priv.h index e4fe084..464f779 100644 --- a/src/freedreno/drm/msm_priv.h +++ b/src/freedreno/drm/msm_priv.h @@ -63,6 +63,12 @@ struct msm_pipe { uint32_t last_submit_fence; uint32_t last_enqueue_fence; /* just for debugging */ + + /** + * If we *ever* see an in-fence-fd, assume that userspace is + * not relying on implicit fences. + */ + bool no_implicit_sync; }; FD_DEFINE_CAST(fd_pipe, msm_pipe); diff --git a/src/freedreno/drm/msm_ringbuffer_sp.c b/src/freedreno/drm/msm_ringbuffer_sp.c index 809c480..0a95369 100644 --- a/src/freedreno/drm/msm_ringbuffer_sp.c +++ b/src/freedreno/drm/msm_ringbuffer_sp.c @@ -334,8 +334,13 @@ flush_submit_list(struct list_head *submit_list) } if (msm_submit->in_fence_fd != -1) { - req.flags |= MSM_SUBMIT_FENCE_FD_IN | MSM_SUBMIT_NO_IMPLICIT; + req.flags |= MSM_SUBMIT_FENCE_FD_IN; req.fence_fd = msm_submit->in_fence_fd; + msm_pipe->no_implicit_sync = true; + } + + if (msm_pipe->no_implicit_sync) { + req.flags |= MSM_SUBMIT_NO_IMPLICIT; } if (msm_submit->out_fence && msm_submit->out_fence->use_fence_fd) {