diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2010-11-01 08:38:44 -0400 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2010-11-01 08:38:44 -0400 |
commit | 0f8c6d7ca9257d6a01671ab69b897860d3ae9bc0 (patch) | |
tree | e06b567e620e17d5ce983610ef3721d860d0cf27 | |
parent | 13b2928933919c5344716d49620a52493a243f8c (diff) |
drm/i915: Move the invalidate|flush information out of the device struct
... and into a local structure scoped for the single function in which
it is used.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 45 | ||||
-rw-r--r-- | include/drm/drmP.h | 2 |
3 files changed, 23 insertions, 26 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 3f8786049cb6..a0063f82fa33 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
@@ -642,8 +642,6 @@ typedef struct drm_i915_private { | |||
642 | /* storage for physical objects */ | 642 | /* storage for physical objects */ |
643 | struct drm_i915_gem_phys_object *phys_objs[I915_MAX_PHYS_OBJECT]; | 643 | struct drm_i915_gem_phys_object *phys_objs[I915_MAX_PHYS_OBJECT]; |
644 | 644 | ||
645 | uint32_t flush_rings; | ||
646 | |||
647 | /* accounting, useful for userland debugging */ | 645 | /* accounting, useful for userland debugging */ |
648 | size_t object_memory; | 646 | size_t object_memory; |
649 | size_t pin_memory; | 647 | size_t pin_memory; |
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index c797d2b9b233..ffea847c8a0d 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
@@ -36,6 +36,12 @@ | |||
36 | #include <linux/pci.h> | 36 | #include <linux/pci.h> |
37 | #include <linux/intel-gtt.h> | 37 | #include <linux/intel-gtt.h> |
38 | 38 | ||
39 | struct change_domains { | ||
40 | uint32_t invalidate_domains; | ||
41 | uint32_t flush_domains; | ||
42 | uint32_t flush_rings; | ||
43 | }; | ||
44 | |||
39 | static uint32_t i915_gem_get_gtt_alignment(struct drm_i915_gem_object *obj_priv); | 45 | static uint32_t i915_gem_get_gtt_alignment(struct drm_i915_gem_object *obj_priv); |
40 | static uint32_t i915_gem_get_gtt_size(struct drm_i915_gem_object *obj_priv); | 46 | static uint32_t i915_gem_get_gtt_size(struct drm_i915_gem_object *obj_priv); |
41 | 47 | ||
@@ -3167,10 +3173,9 @@ i915_gem_object_set_to_cpu_domain(struct drm_gem_object *obj, int write) | |||
3167 | */ | 3173 | */ |
3168 | static void | 3174 | static void |
3169 | i915_gem_object_set_to_gpu_domain(struct drm_gem_object *obj, | 3175 | i915_gem_object_set_to_gpu_domain(struct drm_gem_object *obj, |
3170 | struct intel_ring_buffer *ring) | 3176 | struct intel_ring_buffer *ring, |
3177 | struct change_domains *cd) | ||
3171 | { | 3178 | { |
3172 | struct drm_device *dev = obj->dev; | ||
3173 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
3174 | struct drm_i915_gem_object *obj_priv = to_intel_bo(obj); | 3179 | struct drm_i915_gem_object *obj_priv = to_intel_bo(obj); |
3175 | uint32_t invalidate_domains = 0; | 3180 | uint32_t invalidate_domains = 0; |
3176 | uint32_t flush_domains = 0; | 3181 | uint32_t flush_domains = 0; |
@@ -3216,12 +3221,12 @@ i915_gem_object_set_to_gpu_domain(struct drm_gem_object *obj, | |||
3216 | if (flush_domains == 0 && obj->pending_write_domain == 0) | 3221 | if (flush_domains == 0 && obj->pending_write_domain == 0) |
3217 | obj->pending_write_domain = obj->write_domain; | 3222 | obj->pending_write_domain = obj->write_domain; |
3218 | 3223 | ||
3219 | dev->invalidate_domains |= invalidate_domains; | 3224 | cd->invalidate_domains |= invalidate_domains; |
3220 | dev->flush_domains |= flush_domains; | 3225 | cd->flush_domains |= flush_domains; |
3221 | if (flush_domains & I915_GEM_GPU_DOMAINS) | 3226 | if (flush_domains & I915_GEM_GPU_DOMAINS) |
3222 | dev_priv->mm.flush_rings |= obj_priv->ring->id; | 3227 | cd->flush_rings |= obj_priv->ring->id; |
3223 | if (invalidate_domains & I915_GEM_GPU_DOMAINS) | 3228 | if (invalidate_domains & I915_GEM_GPU_DOMAINS) |
3224 | dev_priv->mm.flush_rings |= ring->id; | 3229 | cd->flush_rings |= ring->id; |
3225 | } | 3230 | } |
3226 | 3231 | ||
3227 | /** | 3232 | /** |
@@ -3590,30 +3595,26 @@ i915_gem_execbuffer_move_to_gpu(struct drm_device *dev, | |||
3590 | struct drm_gem_object **objects, | 3595 | struct drm_gem_object **objects, |
3591 | int count) | 3596 | int count) |
3592 | { | 3597 | { |
3593 | struct drm_i915_private *dev_priv = dev->dev_private; | 3598 | struct change_domains cd; |
3594 | int ret, i; | 3599 | int ret, i; |
3595 | 3600 | ||
3596 | /* Zero the global flush/invalidate flags. These | 3601 | cd.invalidate_domains = 0; |
3597 | * will be modified as new domains are computed | 3602 | cd.flush_domains = 0; |
3598 | * for each object | 3603 | cd.flush_rings = 0; |
3599 | */ | ||
3600 | dev->invalidate_domains = 0; | ||
3601 | dev->flush_domains = 0; | ||
3602 | dev_priv->mm.flush_rings = 0; | ||
3603 | for (i = 0; i < count; i++) | 3604 | for (i = 0; i < count; i++) |
3604 | i915_gem_object_set_to_gpu_domain(objects[i], ring); | 3605 | i915_gem_object_set_to_gpu_domain(objects[i], ring, &cd); |
3605 | 3606 | ||
3606 | if (dev->invalidate_domains | dev->flush_domains) { | 3607 | if (cd.invalidate_domains | cd.flush_domains) { |
3607 | #if WATCH_EXEC | 3608 | #if WATCH_EXEC |
3608 | DRM_INFO("%s: invalidate_domains %08x flush_domains %08x\n", | 3609 | DRM_INFO("%s: invalidate_domains %08x flush_domains %08x\n", |
3609 | __func__, | 3610 | __func__, |
3610 | dev->invalidate_domains, | 3611 | cd.invalidate_domains, |
3611 | dev->flush_domains); | 3612 | cd.flush_domains); |
3612 | #endif | 3613 | #endif |
3613 | i915_gem_flush(dev, file, | 3614 | i915_gem_flush(dev, file, |
3614 | dev->invalidate_domains, | 3615 | cd.invalidate_domains, |
3615 | dev->flush_domains, | 3616 | cd.flush_domains, |
3616 | dev_priv->mm.flush_rings); | 3617 | cd.flush_rings); |
3617 | } | 3618 | } |
3618 | 3619 | ||
3619 | for (i = 0; i < count; i++) { | 3620 | for (i = 0; i < count; i++) { |
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 274eaaa15c36..d4bc0f5cab8f 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
@@ -1041,8 +1041,6 @@ struct drm_device { | |||
1041 | /*@{ */ | 1041 | /*@{ */ |
1042 | spinlock_t object_name_lock; | 1042 | spinlock_t object_name_lock; |
1043 | struct idr object_name_idr; | 1043 | struct idr object_name_idr; |
1044 | uint32_t invalidate_domains; /* domains pending invalidation */ | ||
1045 | uint32_t flush_domains; /* domains pending flush */ | ||
1046 | /*@} */ | 1044 | /*@} */ |
1047 | 1045 | ||
1048 | }; | 1046 | }; |