aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2013-06-06 15:53:41 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-06-07 11:56:45 -0400
commitc65355bbefaf02d8819a810aacfd566634e3b146 (patch)
treeda8996a7a3f740d720cf0213f5b03ffcb1bbb3b8
parent0e088b8f33dab39bd8beb0c7a030d44beb936dd0 (diff)
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>
-rw-r--r--drivers/gpu/drm/i915/i915_gem_execbuffer.c2
-rw-r--r--drivers/gpu/drm/i915/intel_display.c13
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h3
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.h1
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,
786 obj->dirty = 1; 786 obj->dirty = 1;
787 obj->last_write_seqno = intel_ring_get_seqno(ring); 787 obj->last_write_seqno = intel_ring_get_seqno(ring);
788 if (obj->pin_count) /* check for potential scanout */ 788 if (obj->pin_count) /* check for potential scanout */
789 intel_mark_fb_busy(obj); 789 intel_mark_fb_busy(obj, ring);
790 } 790 }
791 791
792 trace_i915_gem_object_change_domain(obj, old_read, old_write); 792 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 3f025ee299dd..7b9eb7ccc09a 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -7112,7 +7112,8 @@ void intel_mark_idle(struct drm_device *dev)
7112 } 7112 }
7113} 7113}
7114 7114
7115void intel_mark_fb_busy(struct drm_i915_gem_object *obj) 7115void intel_mark_fb_busy(struct drm_i915_gem_object *obj,
7116 struct intel_ring_buffer *ring)
7116{ 7117{
7117 struct drm_device *dev = obj->base.dev; 7118 struct drm_device *dev = obj->base.dev;
7118 struct drm_crtc *crtc; 7119 struct drm_crtc *crtc;
@@ -7124,8 +7125,12 @@ void intel_mark_fb_busy(struct drm_i915_gem_object *obj)
7124 if (!crtc->fb) 7125 if (!crtc->fb)
7125 continue; 7126 continue;
7126 7127
7127 if (to_intel_framebuffer(crtc->fb)->obj == obj) 7128 if (to_intel_framebuffer(crtc->fb)->obj != obj)
7128 intel_increase_pllclock(crtc); 7129 continue;
7130
7131 intel_increase_pllclock(crtc);
7132 if (ring && intel_fbc_enabled(dev))
7133 ring->fbc_dirty = true;
7129 } 7134 }
7130} 7135}
7131 7136
@@ -7575,7 +7580,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
7575 goto cleanup_pending; 7580 goto cleanup_pending;
7576 7581
7577 intel_disable_fbc(dev); 7582 intel_disable_fbc(dev);
7578 intel_mark_fb_busy(obj); 7583 intel_mark_fb_busy(obj, NULL);
7579 mutex_unlock(&dev->struct_mutex); 7584 mutex_unlock(&dev->struct_mutex);
7580 7585
7581 trace_i915_flip_request(intel_crtc->plane, obj); 7586 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 b76a956cfb9a..bb4822a6c41e 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,
574extern void intel_dvo_init(struct drm_device *dev); 574extern void intel_dvo_init(struct drm_device *dev);
575extern void intel_tv_init(struct drm_device *dev); 575extern void intel_tv_init(struct drm_device *dev);
576extern void intel_mark_busy(struct drm_device *dev); 576extern void intel_mark_busy(struct drm_device *dev);
577extern void intel_mark_fb_busy(struct drm_i915_gem_object *obj); 577extern void intel_mark_fb_busy(struct drm_i915_gem_object *obj,
578 struct intel_ring_buffer *ring);
578extern void intel_mark_idle(struct drm_device *dev); 579extern void intel_mark_idle(struct drm_device *dev);
579extern bool intel_lvds_init(struct drm_device *dev); 580extern bool intel_lvds_init(struct drm_device *dev);
580extern bool intel_is_dual_link_lvds(struct drm_device *dev); 581extern 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 {
140 */ 140 */
141 u32 outstanding_lazy_request; 141 u32 outstanding_lazy_request;
142 bool gpu_caches_dirty; 142 bool gpu_caches_dirty;
143 bool fbc_dirty;
143 144
144 wait_queue_head_t irq_queue; 145 wait_queue_head_t irq_queue;
145 146