| From 1bf78c2350823f98ee9e5ed70c517805b80fae03 Mon Sep 17 00:00:00 2001 |
| From: Chris Wilson <chris@chris-wilson.co.uk> |
| Date: Thu, 6 Jun 2013 16:53:41 -0300 |
| Subject: drm/i915: Track when we dirty the scanout with render commands |
| |
| This is required for tracking render damage for use with FBC and will be |
| used in subsequent patches. |
| |
| Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> |
| Reviewed-by: Rodrigo Vivi <rodrigo.vivi@gmail.com> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit c65355bbefaf02d8819a810aacfd566634e3b146) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/i915_gem_execbuffer.c | 2 +- |
| drivers/gpu/drm/i915/intel_display.c | 13 +++++++++---- |
| drivers/gpu/drm/i915/intel_drv.h | 3 ++- |
| drivers/gpu/drm/i915/intel_ringbuffer.h | 1 + |
| 4 files changed, 13 insertions(+), 6 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c |
| index a8bb62ca8756..c98333d74111 100644 |
| --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c |
| +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c |
| @@ -786,7 +786,7 @@ i915_gem_execbuffer_move_to_active(struct list_head *objects, |
| obj->dirty = 1; |
| obj->last_write_seqno = intel_ring_get_seqno(ring); |
| if (obj->pin_count) /* check for potential scanout */ |
| - intel_mark_fb_busy(obj); |
| + intel_mark_fb_busy(obj, ring); |
| } |
| |
| trace_i915_gem_object_change_domain(obj, old_read, old_write); |
| diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c |
| index 0e697bda5dab..ddc8eea42b19 100644 |
| --- a/drivers/gpu/drm/i915/intel_display.c |
| +++ b/drivers/gpu/drm/i915/intel_display.c |
| @@ -7116,7 +7116,8 @@ void intel_mark_idle(struct drm_device *dev) |
| } |
| } |
| |
| -void intel_mark_fb_busy(struct drm_i915_gem_object *obj) |
| +void intel_mark_fb_busy(struct drm_i915_gem_object *obj, |
| + struct intel_ring_buffer *ring) |
| { |
| struct drm_device *dev = obj->base.dev; |
| struct drm_crtc *crtc; |
| @@ -7128,8 +7129,12 @@ void intel_mark_fb_busy(struct drm_i915_gem_object *obj) |
| if (!crtc->fb) |
| continue; |
| |
| - if (to_intel_framebuffer(crtc->fb)->obj == obj) |
| - intel_increase_pllclock(crtc); |
| + if (to_intel_framebuffer(crtc->fb)->obj != obj) |
| + continue; |
| + |
| + intel_increase_pllclock(crtc); |
| + if (ring && intel_fbc_enabled(dev)) |
| + ring->fbc_dirty = true; |
| } |
| } |
| |
| @@ -7579,7 +7584,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc, |
| goto cleanup_pending; |
| |
| intel_disable_fbc(dev); |
| - intel_mark_fb_busy(obj); |
| + intel_mark_fb_busy(obj, NULL); |
| mutex_unlock(&dev->struct_mutex); |
| |
| trace_i915_flip_request(intel_crtc->plane, obj); |
| diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h |
| index a060d82f175b..259a6873aacc 100644 |
| --- a/drivers/gpu/drm/i915/intel_drv.h |
| +++ b/drivers/gpu/drm/i915/intel_drv.h |
| @@ -574,7 +574,8 @@ extern bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, |
| extern void intel_dvo_init(struct drm_device *dev); |
| extern void intel_tv_init(struct drm_device *dev); |
| extern void intel_mark_busy(struct drm_device *dev); |
| -extern void intel_mark_fb_busy(struct drm_i915_gem_object *obj); |
| +extern void intel_mark_fb_busy(struct drm_i915_gem_object *obj, |
| + struct intel_ring_buffer *ring); |
| extern void intel_mark_idle(struct drm_device *dev); |
| extern bool intel_lvds_init(struct drm_device *dev); |
| extern bool intel_is_dual_link_lvds(struct drm_device *dev); |
| diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h |
| index 4c7e103e6fa4..efc403d1e3e0 100644 |
| --- a/drivers/gpu/drm/i915/intel_ringbuffer.h |
| +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h |
| @@ -140,6 +140,7 @@ struct intel_ring_buffer { |
| */ |
| u32 outstanding_lazy_request; |
| bool gpu_caches_dirty; |
| + bool fbc_dirty; |
| |
| wait_queue_head_t irq_queue; |
| |
| -- |
| 1.8.5.rc3 |
| |