From dfd536c60d0bdffe005e354be0677f066af94f83 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Fri, 27 Jan 2017 20:25:04 +0000 Subject: intel: Export a function to re-enable implicit synchronisation Implicit synchronisation is the default behaviour of the kernel when rendering with an execobject. It may be disabled with drm_intel_gem_bo_disable_implicit_sync(), and then to restore it use drm_intel_gem_bo_enable_implicit_sync(). Signed-off-by: Chris Wilson --- intel/intel_bufmgr.h | 1 + intel/intel_bufmgr_gem.c | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) (limited to 'intel') diff --git a/intel/intel_bufmgr.h b/intel/intel_bufmgr.h index 11579fbc..693472a5 100644 --- a/intel/intel_bufmgr.h +++ b/intel/intel_bufmgr.h @@ -187,6 +187,7 @@ int drm_intel_gem_bo_unmap_gtt(drm_intel_bo *bo); #define HAVE_DRM_INTEL_GEM_BO_DISABLE_IMPLICIT_SYNC 1 int drm_intel_bufmgr_gem_can_disable_implicit_sync(drm_intel_bufmgr *bufmgr); void drm_intel_gem_bo_disable_implicit_sync(drm_intel_bo *bo); +void drm_intel_gem_bo_enable_implicit_sync(drm_intel_bo *bo); void *drm_intel_gem_bo_map__cpu(drm_intel_bo *bo); void *drm_intel_gem_bo_map__gtt(drm_intel_bo *bo); diff --git a/intel/intel_bufmgr_gem.c b/intel/intel_bufmgr_gem.c index 077746cd..a6656003 100644 --- a/intel/intel_bufmgr_gem.c +++ b/intel/intel_bufmgr_gem.c @@ -2815,6 +2815,25 @@ drm_intel_gem_bo_disable_implicit_sync(drm_intel_bo *bo) bo_gem->kflags |= EXEC_OBJECT_ASYNC; } +/** + * Enables implicit synchronisation before executing the bo + * + * This is the default behaviour of the kernel, to wait upon prior writes + * completing on the object before rendering with it, or to wait for prior + * reads to complete before writing into the object. + * drm_intel_gem_bo_disable_implicit_sync() can stop this behaviour, telling + * the kernel never to insert a stall before using the object. Then this + * function can be used to restore the implicit sync before subsequent + * rendering. + */ +void +drm_intel_gem_bo_enable_implicit_sync(drm_intel_bo *bo) +{ + drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo; + + bo_gem->kflags &= ~EXEC_OBJECT_ASYNC; +} + /** * Query whether the kernel supports disabling of its implicit synchronisation * before execbuf. See drm_intel_gem_bo_disable_implicit_sync() -- cgit v1.2.3