Mesa (master): i965: Use async maps for BufferSubData to regions with no valid data.

Kenneth Graunke kwg at kemper.freedesktop.org
Thu Jul 13 23:58:24 UTC 2017


Module: Mesa
Branch: master
Commit: 86bd3fd864a8383e1d6823114da422f6a948bf1e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=86bd3fd864a8383e1d6823114da422f6a948bf1e

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Tue Jan 17 17:18:01 2017 -0800

i965: Use async maps for BufferSubData to regions with no valid data.

When writing a region of a buffer via glBufferSubData(), we can write
the data asynchronously if the destination doesn't contain any data.
Even if it's busy, the data was undefined, so the new data is fine too.

Removes all stall avoidance blits on BufferSubData calls in
"Total War: WARHAMMER" on my Skylake GT4.

Decreases the number of stall avoidance blits in Manhattan 3.1:
- Skylake GT4: -18.3544% +/- 6.76483% (n=13)
- Apollolake:  -12.1095% +/- 5.24458% (n=13)

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

---

 src/mesa/drivers/dri/i965/intel_buffer_objects.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/mesa/drivers/dri/i965/intel_buffer_objects.c b/src/mesa/drivers/dri/i965/intel_buffer_objects.c
index ff73a37d60..a335c00afd 100644
--- a/src/mesa/drivers/dri/i965/intel_buffer_objects.c
+++ b/src/mesa/drivers/dri/i965/intel_buffer_objects.c
@@ -234,7 +234,9 @@ brw_buffer_subdata(struct gl_context *ctx,
     * up with blitting all the time, at the cost of bandwidth)
     */
    if (offset + size <= intel_obj->gpu_active_start ||
-       intel_obj->gpu_active_end <= offset) {
+       intel_obj->gpu_active_end <= offset ||
+       offset + size <= intel_obj->valid_data_start ||
+       intel_obj->valid_data_end <= offset) {
       void *map = brw_bo_map(brw, intel_obj->buffer, MAP_WRITE | MAP_ASYNC);
       memcpy(map + offset, data, size);
       brw_bo_unmap(intel_obj->buffer);




More information about the mesa-commit mailing list