i965: Use unsynchronized mappings for BufferSubData on non-LLC

Now that unsynchronized maps actually work, we can use them, like we do
on LLC platforms.

On Broxton, the performance of Unigine Valley 1.1-rc1 is improved by
37.6656% +/- 0.401389% (n=20) at 1280x720/QUALITY_LOW, and by
20.862% +/- 2.20901% (n=3) at 1920x1080/QUALITY_LOW.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Matt Turner 2017-06-05 09:54:06 -07:00
parent a16355d67d
commit e0a9b261e5

View file

@ -216,17 +216,13 @@ brw_buffer_subdata(struct gl_context *ctx,
*/
if (offset + size <= intel_obj->gpu_active_start ||
intel_obj->gpu_active_end <= offset) {
if (brw->has_llc) {
void *map = brw_bo_map_unsynchronized(brw, intel_obj->buffer);
memcpy(map + offset, data, size);
brw_bo_unmap(intel_obj->buffer);
void *map = brw_bo_map(brw, intel_obj->buffer, MAP_WRITE | MAP_ASYNC);
memcpy(map + offset, data, size);
brw_bo_unmap(intel_obj->buffer);
if (intel_obj->gpu_active_end > intel_obj->gpu_active_start)
intel_obj->prefer_stall_to_blit = true;
return;
} else {
perf_debug("BufferSubData could be unsynchronized, but !LLC doesn't support it yet\n");
}
if (intel_obj->gpu_active_end > intel_obj->gpu_active_start)
intel_obj->prefer_stall_to_blit = true;
return;
}
busy =