diff options
author | Eric Anholt <eric@anholt.net> | 2008-05-30 13:47:34 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2008-05-30 13:47:34 -0700 |
commit | 50bce2bc625deb439dd61f504496dddd0cd4f572 (patch) | |
tree | 23a0a3e6f34adf802412c9749426a25de36c4e21 /linux-core | |
parent | 4f92ed34270ae4afaa0ddba38d227c6e359bcc98 (diff) |
[intel-gem] Only update obj->write_domain if we're actually changing it.
The problem was revealed where on 965, the display list vertex buffer would see:
create -> (CPU, CPU)
set_domain (CPU, CPU) -> (CPU, CPU)
set_comain (CPU, 0) -> (CPU, 0) (no clflush occurred)
execbuf (GPU, 0) -> (CPU+GPU, 0) (still no clflush)
instead of:
create -> (CPU, CPU)
set_domain (CPU, CPU) -> (CPU, CPU)
set_comain (CPU, 0) -> (CPU, CPU)
execbuf (GPU, 0) -> (CPU+GPU, 0) (clflushed)
Diffstat (limited to 'linux-core')
-rw-r--r-- | linux-core/i915_gem.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/linux-core/i915_gem.c b/linux-core/i915_gem.c index 7c826aeb..bcc15dd3 100644 --- a/linux-core/i915_gem.c +++ b/linux-core/i915_gem.c @@ -945,7 +945,8 @@ i915_gem_object_set_domain(struct drm_gem_object *obj, i915_gem_clflush_object(obj); } - obj->write_domain = write_domain; + if ((write_domain | flush_domains) != 0) + obj->write_domain = write_domain; obj->read_domains = read_domains; dev->invalidate_domains |= invalidate_domains; dev->flush_domains |= flush_domains; @@ -1225,7 +1226,8 @@ i915_gem_reloc_and_validate_object(struct drm_gem_object *obj, iounmap(reloc_page); #if WATCH_BUF - i915_gem_dump_object(obj, 128, __func__, ~0); + if (0) + i915_gem_dump_object(obj, 128, __func__, ~0); #endif return 0; } |