summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/i965/intel_buffer_objects.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2013-12-24 15:11:54 -0800
committerEric Anholt <eric@anholt.net>2014-01-09 15:39:20 +0800
commitf46563fe1c8a5560e4de0adf03e3d8770b7fc734 (patch)
treee3c442ebd9b81218848e1f3a644d23119e6549ea /src/mesa/drivers/dri/i965/intel_buffer_objects.c
parente186b927b8254ce62e0d47db90d16cd4253b3db5 (diff)
downloadexternal_mesa3d-f46563fe1c8a5560e4de0adf03e3d8770b7fc734.zip
external_mesa3d-f46563fe1c8a5560e4de0adf03e3d8770b7fc734.tar.gz
external_mesa3d-f46563fe1c8a5560e4de0adf03e3d8770b7fc734.tar.bz2
i965: Don't do the temporary-and-blit-copy for INVALIDATE_RANGE maps.
We definitely want to fall through to the unsynchronized map case, instead of wasting bandwidth on a copy. Prevents a -43.2407% +/- 1.06113% (n=49) performance regression on aa10perf when teaching glamor to provide the GL_INVALIDATE_RANGE_BIT information. This is a performance fix, which I usually wouldn't cherry-pick to stable. But this was really was just a bug in the code, its presence would discourage developers from giving us the best information they can, and I think we've got fairly high confidence in the unsynchronized map path already. Cc: 10.0 9.2 <mesa-stable@lists.freedesktop.org> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Diffstat (limited to 'src/mesa/drivers/dri/i965/intel_buffer_objects.c')
-rw-r--r--src/mesa/drivers/dri/i965/intel_buffer_objects.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_buffer_objects.c b/src/mesa/drivers/dri/i965/intel_buffer_objects.c
index cab805a..84bc29d 100644
--- a/src/mesa/drivers/dri/i965/intel_buffer_objects.c
+++ b/src/mesa/drivers/dri/i965/intel_buffer_objects.c
@@ -357,7 +357,8 @@ intel_bufferobj_map_range(struct gl_context * ctx,
* BO, and we'll copy what they put in there out at unmap or
* FlushRange time.
*/
- if ((access & GL_MAP_INVALIDATE_RANGE_BIT) &&
+ if (!(access & GL_MAP_UNSYNCHRONIZED_BIT) &&
+ (access & GL_MAP_INVALIDATE_RANGE_BIT) &&
drm_intel_bo_busy(intel_obj->buffer)) {
if (access & GL_MAP_FLUSH_EXPLICIT_BIT) {
intel_obj->range_map_buffer = malloc(length);