Skip to content

Commit a4001f1

Browse files
pzanoni-inteldanvet
authored andcommitted
drm/i915: pass which operation triggered the frontbuffer tracking
We want to port FBC to the frontbuffer tracking infrastructure, but for that we need to know what caused the object invalidation so we can react accordingly: CPU mmaps need manual, GTT mmaps and flips don't need handling and ring rendering needs nukes. v2: - s/ORIGIN_RENDER/ORIGIN_CS/ (Daniel, Rodrigo) - Fix copy/pasted wrong documentation - Rebase v3: - Rebase v4: - Don't pass the operation to flushes (Daniel). Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
1 parent ff42e09 commit a4001f1

File tree

5 files changed

+15
-5
lines changed

5 files changed

+15
-5
lines changed

drivers/gpu/drm/i915/i915_drv.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -788,6 +788,13 @@ struct intel_context {
788788
struct list_head link;
789789
};
790790

791+
enum fb_op_origin {
792+
ORIGIN_GTT,
793+
ORIGIN_CPU,
794+
ORIGIN_CS,
795+
ORIGIN_FLIP,
796+
};
797+
791798
struct i915_fbc {
792799
unsigned long uncompressed_size;
793800
unsigned threshold;

drivers/gpu/drm/i915/i915_gem.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3756,7 +3756,7 @@ i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write)
37563756
}
37573757

37583758
if (write)
3759-
intel_fb_obj_invalidate(obj, NULL);
3759+
intel_fb_obj_invalidate(obj, NULL, ORIGIN_GTT);
37603760

37613761
trace_i915_gem_object_change_domain(obj,
37623762
old_read_domains,
@@ -4071,7 +4071,7 @@ i915_gem_object_set_to_cpu_domain(struct drm_i915_gem_object *obj, bool write)
40714071
}
40724072

40734073
if (write)
4074-
intel_fb_obj_invalidate(obj, NULL);
4074+
intel_fb_obj_invalidate(obj, NULL, ORIGIN_CPU);
40754075

40764076
trace_i915_gem_object_change_domain(obj,
40774077
old_read_domains,

drivers/gpu/drm/i915/i915_gem_execbuffer.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -971,7 +971,7 @@ i915_gem_execbuffer_move_to_active(struct list_head *vmas,
971971
obj->dirty = 1;
972972
i915_gem_request_assign(&obj->last_write_req, req);
973973

974-
intel_fb_obj_invalidate(obj, ring);
974+
intel_fb_obj_invalidate(obj, ring, ORIGIN_CS);
975975

976976
/* update for the implicit flush after a batch */
977977
obj->base.write_domain &= ~I915_GEM_GPU_DOMAINS;

drivers/gpu/drm/i915/intel_drv.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -873,7 +873,8 @@ void intel_ddi_set_vc_payload_alloc(struct drm_crtc *crtc, bool state);
873873

874874
/* intel_frontbuffer.c */
875875
void intel_fb_obj_invalidate(struct drm_i915_gem_object *obj,
876-
struct intel_engine_cs *ring);
876+
struct intel_engine_cs *ring,
877+
enum fb_op_origin origin);
877878
void intel_frontbuffer_flip_prepare(struct drm_device *dev,
878879
unsigned frontbuffer_bits);
879880
void intel_frontbuffer_flip_complete(struct drm_device *dev,

drivers/gpu/drm/i915/intel_frontbuffer.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ static void intel_mark_fb_busy(struct drm_device *dev,
127127
* intel_fb_obj_invalidate - invalidate frontbuffer object
128128
* @obj: GEM object to invalidate
129129
* @ring: set for asynchronous rendering
130+
* @origin: which operation caused the invalidation
130131
*
131132
* This function gets called every time rendering on the given object starts and
132133
* frontbuffer caching (fbc, low refresh rate for DRRS, panel self refresh) must
@@ -135,7 +136,8 @@ static void intel_mark_fb_busy(struct drm_device *dev,
135136
* scheduled.
136137
*/
137138
void intel_fb_obj_invalidate(struct drm_i915_gem_object *obj,
138-
struct intel_engine_cs *ring)
139+
struct intel_engine_cs *ring,
140+
enum fb_op_origin origin)
139141
{
140142
struct drm_device *dev = obj->base.dev;
141143
struct drm_i915_private *dev_priv = dev->dev_private;

0 commit comments

Comments
 (0)