i965: Don't use PREAD for glGetBufferSubData().
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 1 Jul 2017 18:33:35 +0000 (11:33 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Tue, 11 Jul 2017 20:26:46 +0000 (13:26 -0700)
commit20104f1926436e00171c8e64ca37fff9ffbd7096
tree75cfa7f086f7f0715224e2dab8862d7eb0ebe89f
parentf50aa21456d82c8cb6fbaa565835f1acc1720a5d
i965: Don't use PREAD for glGetBufferSubData().

Just map the buffer and memcpy.  This will do a CPU mmap, which should
be reasonably efficient, and doing this gives us full control over the
domains and caching instead of leaving it to the kernel.

This prevents regressions on Braswell in the next commit.  Specifically
GL45-CTS.shader_atomic_counters.basic-buffer-operations.  Because async
maps start skipping set-domain, the pread thought everything was nicely
still in the CPU domain, and returned stale data.

v2: Use _mesa_error_no_memory() if the map fails instead of crashing.

Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
src/mesa/drivers/dri/i965/brw_bufmgr.c
src/mesa/drivers/dri/i965/brw_bufmgr.h
src/mesa/drivers/dri/i965/intel_buffer_objects.c