[PATCH] drm/i915/frontbuffer: Avoid frontbuffer flushes at pin time
Dhinakaran Pandiyan
dhinakaran.pandiyan at intel.com
Thu Feb 15 01:43:24 UTC 2018
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan at intel.com>
---
drivers/gpu/drm/i915/i915_gem.c | 1 -
drivers/gpu/drm/i915/intel_display.c | 2 ++
drivers/gpu/drm/i915/intel_fbdev.c | 1 +
drivers/gpu/drm/i915/intel_overlay.c | 1 +
4 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index ffc3797ed2ed..277afebe7d67 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -4141,7 +4141,6 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
/* Treat this as an end-of-frame, like intel_user_framebuffer_dirty() */
__i915_gem_object_flush_for_display(obj);
- intel_fb_obj_flush(obj, ORIGIN_FBPINNED);
/* It should now be out of any other write domains, and we can update
* the domain values for our changes.
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 9840db54c436..2f44f4e01003 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -2809,6 +2809,7 @@ intel_find_initial_plane_obj(struct intel_crtc *intel_crtc,
mutex_lock(&dev->struct_mutex);
intel_state->vma =
intel_pin_and_fence_fb_obj(fb, primary->state->rotation);
+ intel_fb_obj_flush(intel_fb_obj(fb), ORIGIN_DIRTYFB);
mutex_unlock(&dev->struct_mutex);
if (IS_ERR(intel_state->vma)) {
DRM_ERROR("failed to pin boot fb on pipe %d: %li\n",
@@ -13150,6 +13151,7 @@ intel_legacy_cursor_update(struct drm_plane *plane,
ret = PTR_ERR(vma);
goto out_unlock;
}
+ intel_fb_obj_flush(intel_fb_obj(fb), ORIGIN_FLIP);
to_intel_plane_state(new_plane_state)->vma = vma;
}
diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c
index abf09b6e80c8..caa89aef22c1 100644
--- a/drivers/gpu/drm/i915/intel_fbdev.c
+++ b/drivers/gpu/drm/i915/intel_fbdev.c
@@ -220,6 +220,7 @@ static int intelfb_create(struct drm_fb_helper *helper,
ret = PTR_ERR(vma);
goto out_unlock;
}
+ intel_fb_obj_flush(intel_fb_obj(&ifbdev->fb->base), ORIGIN_DIRTYFB);
info = drm_fb_helper_alloc_fbi(helper);
if (IS_ERR(info)) {
diff --git a/drivers/gpu/drm/i915/intel_overlay.c b/drivers/gpu/drm/i915/intel_overlay.c
index 41e9465d44a8..16bfb68f8e42 100644
--- a/drivers/gpu/drm/i915/intel_overlay.c
+++ b/drivers/gpu/drm/i915/intel_overlay.c
@@ -806,6 +806,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
ret = PTR_ERR(vma);
goto out_pin_section;
}
+ intel_fb_obj_flush(new_bo, ORIGIN_DIRTYFB);
ret = i915_vma_put_fence(vma);
if (ret)
--
2.14.1
More information about the Intel-gfx-trybot
mailing list