Previously we only did this pre-Gen6, and used pwrite on Gen6+. In one workload, this cuts significant amount of overhead.
Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> --- src/mesa/drivers/dri/intel/intel_buffer_objects.c | 26 +++++++++------------ 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_buffer_objects.c b/src/mesa/drivers/dri/intel/intel_buffer_objects.c index 200fce3..169d777 100644 --- a/src/mesa/drivers/dri/intel/intel_buffer_objects.c +++ b/src/mesa/drivers/dri/intel/intel_buffer_objects.c @@ -178,26 +178,22 @@ intel_bufferobj_subdata(struct gl_context * ctx, drm_intel_bo_unreference(intel_obj->buffer); intel_bufferobj_alloc_buffer(intel, intel_obj); drm_intel_bo_subdata(intel_obj->buffer, 0, size, data); - } else if (intel->gen < 6) { - if (busy) { - drm_intel_bo *temp_bo; + } else if (busy) { + drm_intel_bo *temp_bo; - temp_bo = drm_intel_bo_alloc(intel->bufmgr, "subdata temp", size, 64); + temp_bo = drm_intel_bo_alloc(intel->bufmgr, "subdata temp", size, 64); - drm_intel_bo_subdata(temp_bo, 0, size, data); + drm_intel_bo_subdata(temp_bo, 0, size, data); - intel_emit_linear_blit(intel, - intel_obj->buffer, offset, - temp_bo, 0, - size); + intel_emit_linear_blit(intel, + intel_obj->buffer, offset, + temp_bo, 0, + size); - drm_intel_bo_unreference(temp_bo); - } else { - drm_intel_bo_subdata(intel_obj->buffer, offset, size, data); - } + drm_intel_bo_unreference(temp_bo); } else { - /* Can't use the blit to modify the buffer in the middle of batch. */ - if (drm_intel_bo_references(intel->batch.bo, intel_obj->buffer)) { + if (intel->gen >= 6 && + drm_intel_bo_references(intel->batch.bo, intel_obj->buffer)) { intel_batchbuffer_flush(intel); } drm_intel_bo_subdata(intel_obj->buffer, offset, size, data); -- 1.7.10.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev