Mesa (master): i965: Skip a bunch of IB BO refcount twiddling.
Eric Anholt
anholt at kemper.freedesktop.org
Fri Apr 11 20:40:54 UTC 2014
Module: Mesa
Branch: master
Commit: 9a5d19d680323dfb9705c6c5ac10ac30d9ccc842
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9a5d19d680323dfb9705c6c5ac10ac30d9ccc842
Author: Eric Anholt <eric at anholt.net>
Date: Sun Apr 6 11:16:48 2014 -0700
i965: Skip a bunch of IB BO refcount twiddling.
Improves cairo performance on glamor by 1.64828% +/- 1.04742% (n=65).
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
---
src/mesa/drivers/dri/i965/brw_draw_upload.c | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_draw_upload.c b/src/mesa/drivers/dri/i965/brw_draw_upload.c
index a579025..2b56cde 100644
--- a/src/mesa/drivers/dri/i965/brw_draw_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_draw_upload.c
@@ -813,7 +813,7 @@ static void brw_upload_indices(struct brw_context *brw)
struct gl_context *ctx = &brw->ctx;
const struct _mesa_index_buffer *index_buffer = brw->ib.ib;
GLuint ib_size;
- drm_intel_bo *bo = NULL;
+ drm_intel_bo *old_bo = brw->ib.bo;
struct gl_buffer_object *bufferobj;
GLuint offset;
GLuint ib_type_size;
@@ -831,7 +831,7 @@ static void brw_upload_indices(struct brw_context *brw)
/* Get new bufferobj, offset:
*/
intel_upload_data(brw, index_buffer->ptr, ib_size, ib_type_size,
- &bo, &offset);
+ &brw->ib.bo, &offset);
} else {
offset = (GLuint) (unsigned long) index_buffer->ptr;
@@ -849,13 +849,19 @@ static void brw_upload_indices(struct brw_context *brw)
bufferobj,
MAP_INTERNAL);
- intel_upload_data(brw, map, ib_size, ib_type_size, &bo, &offset);
+ intel_upload_data(brw, map, ib_size, ib_type_size,
+ &brw->ib.bo, &offset);
ctx->Driver.UnmapBuffer(ctx, bufferobj, MAP_INTERNAL);
} else {
- bo = intel_bufferobj_buffer(brw, intel_buffer_object(bufferobj),
- offset, ib_size);
- drm_intel_bo_reference(bo);
+ drm_intel_bo *bo =
+ intel_bufferobj_buffer(brw, intel_buffer_object(bufferobj),
+ offset, ib_size);
+ if (bo != brw->ib.bo) {
+ drm_intel_bo_unreference(brw->ib.bo);
+ brw->ib.bo = bo;
+ drm_intel_bo_reference(bo);
+ }
}
}
@@ -865,14 +871,8 @@ static void brw_upload_indices(struct brw_context *brw)
*/
brw->ib.start_vertex_offset = offset / ib_type_size;
- if (brw->ib.bo != bo) {
- drm_intel_bo_unreference(brw->ib.bo);
- brw->ib.bo = bo;
-
+ if (brw->ib.bo != old_bo)
brw->state.dirty.brw |= BRW_NEW_INDEX_BUFFER;
- } else {
- drm_intel_bo_unreference(bo);
- }
if (index_buffer->type != brw->ib.type) {
brw->ib.type = index_buffer->type;
More information about the mesa-commit
mailing list