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

Author: Kenneth Graunke <[email protected]>
Date:   Mon Jul  2 15:04:00 2012 -0700

i965: Use the blitter in intel_bufferobj_subdata for busy BOs on Gen6+.

Previously we only did this pre-Gen6, and used pwrite on Gen6+.
In one workload, this cuts significant amount of overhead.

v2: Simplify the function based on Eric's suggestions.

Reviewed-by: Eric Anholt <[email protected]>
Signed-off-by: Kenneth Graunke <[email protected]>

---

 src/mesa/drivers/dri/intel/intel_buffer_objects.c |   26 ++++++++-------------
 1 files changed, 10 insertions(+), 16 deletions(-)

diff --git a/src/mesa/drivers/dri/intel/intel_buffer_objects.c 
b/src/mesa/drivers/dri/intel/intel_buffer_objects.c
index ef511e6..37dc75c 100644
--- a/src/mesa/drivers/dri/intel/intel_buffer_objects.c
+++ b/src/mesa/drivers/dri/intel/intel_buffer_objects.c
@@ -205,16 +205,16 @@ intel_bufferobj_subdata(struct gl_context * ctx,
       drm_intel_bo_busy(intel_obj->buffer) ||
       drm_intel_bo_references(intel->batch.bo, intel_obj->buffer);
 
-   /* replace the current busy bo with fresh data */
-   if (busy && size == intel_obj->Base.Size) {
-      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;
-
-        temp_bo = drm_intel_bo_alloc(intel->bufmgr, "subdata temp", size, 64);
+   if (busy) {
+      if (size == intel_obj->Base.Size) {
+        /* Replace the current busy bo with fresh data. */
+        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 {
+        /* Use the blitter to upload the new data. */
+        drm_intel_bo *temp_bo =
+           drm_intel_bo_alloc(intel->bufmgr, "subdata temp", size, 64);
 
         drm_intel_bo_subdata(temp_bo, 0, size, data);
 
@@ -224,14 +224,8 @@ intel_bufferobj_subdata(struct gl_context * ctx,
                                size);
 
         drm_intel_bo_unreference(temp_bo);
-      } else {
-        drm_intel_bo_subdata(intel_obj->buffer, offset, size, data);
       }
    } 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)) {
-        intel_batchbuffer_flush(intel);
-      }
       drm_intel_bo_subdata(intel_obj->buffer, offset, size, data);
    }
 }

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to