[Mesa-dev] [PATCH 2/2] i965: Use the render cache tracker in more places to skip mi_flush()es.
Kenneth Graunke
kenneth at whitecape.org
Wed Mar 5 16:34:50 PST 2014
On 03/05/2014 04:17 PM, Eric Anholt wrote:
> Now you can call the blit functions without worrying about flushing either
> too much or too little.
> ---
> src/mesa/drivers/dri/i965/intel_blit.c | 8 +++++---
> src/mesa/drivers/dri/i965/intel_buffer_objects.c | 20 --------------------
> 2 files changed, 5 insertions(+), 23 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/intel_blit.c b/src/mesa/drivers/dri/i965/intel_blit.c
> index d482272..992a603 100644
> --- a/src/mesa/drivers/dri/i965/intel_blit.c
> +++ b/src/mesa/drivers/dri/i965/intel_blit.c
> @@ -431,7 +431,7 @@ intelEmitCopyBlit(struct brw_context *brw,
>
> ADVANCE_BATCH_TILED(dst_y_tiled, src_y_tiled);
>
> - intel_batchbuffer_emit_mi_flush(brw);
> + brw_render_cache_set_add_bo(brw, dst_buffer);
>
> return true;
> }
> @@ -515,7 +515,7 @@ intelEmitImmediateColorExpandBlit(struct brw_context *brw,
>
> intel_batchbuffer_data(brw, src_bits, dwords * 4, BLT_RING);
>
> - intel_batchbuffer_emit_mi_flush(brw);
> + brw_render_cache_set_add_bo(brw, dst_buffer);
>
> return true;
> }
> @@ -568,6 +568,8 @@ intel_emit_linear_blit(struct brw_context *brw,
> if (!ok)
> _mesa_problem(ctx, "Failed to linear blit %dx%d\n", size, 1);
> }
> +
> + brw_render_cache_set_add_bo(brw, dst_bo);
> }
>
> /**
> @@ -633,5 +635,5 @@ intel_miptree_set_alpha_to_one(struct brw_context *brw,
> OUT_BATCH(0xffffffff); /* white, but only alpha gets written */
> ADVANCE_BATCH_TILED(dst_y_tiled, false);
>
> - intel_batchbuffer_emit_mi_flush(brw);
> + brw_render_cache_set_add_bo(brw, region->bo);
> }
> diff --git a/src/mesa/drivers/dri/i965/intel_buffer_objects.c b/src/mesa/drivers/dri/i965/intel_buffer_objects.c
> index e6124dc..288bff4 100644
> --- a/src/mesa/drivers/dri/i965/intel_buffer_objects.c
> +++ b/src/mesa/drivers/dri/i965/intel_buffer_objects.c
> @@ -515,12 +515,6 @@ intel_bufferobj_unmap(struct gl_context * ctx, struct gl_buffer_object *obj,
> assert(intel_obj);
> assert(obj->Mappings[index].Pointer);
> if (intel_obj->range_map_buffer[index] != NULL) {
> - /* Since we've emitted some blits to buffers that will (likely) be used
> - * in rendering operations in other cache domains in this batch, emit a
> - * flush. Once again, we wish for a domain tracker in libdrm to cover
> - * usage inside of a batchbuffer.
> - */
> - intel_batchbuffer_emit_mi_flush(brw);
> _mesa_align_free(intel_obj->range_map_buffer[index]);
> intel_obj->range_map_buffer[index] = NULL;
> } else if (intel_obj->range_map_bo[index] != NULL) {
> @@ -536,13 +530,6 @@ intel_bufferobj_unmap(struct gl_context * ctx, struct gl_buffer_object *obj,
> intel_bufferobj_mark_gpu_usage(intel_obj, obj->Mappings[index].Offset,
> obj->Mappings[index].Length);
>
> - /* Since we've emitted some blits to buffers that will (likely) be used
> - * in rendering operations in other cache domains in this batch, emit a
> - * flush. Once again, we wish for a domain tracker in libdrm to cover
> - * usage inside of a batchbuffer.
> - */
> - intel_batchbuffer_emit_mi_flush(brw);
> -
> drm_intel_bo_unreference(intel_obj->range_map_bo[index]);
> intel_obj->range_map_bo[index] = NULL;
> } else if (intel_obj->buffer != NULL) {
> @@ -607,13 +594,6 @@ intel_bufferobj_copy_subdata(struct gl_context *ctx,
> intel_emit_linear_blit(brw,
> dst_bo, write_offset,
> src_bo, read_offset, size);
> -
> - /* Since we've emitted some blits to buffers that will (likely) be used
> - * in rendering operations in other cache domains in this batch, emit a
> - * flush. Once again, we wish for a domain tracker in libdrm to cover
> - * usage inside of a batchbuffer.
> - */
> - intel_batchbuffer_emit_mi_flush(brw);
> }
>
> void
>
I really like the idea of this patch, but we probably need to add
set_check() operations somewhere. Buffer objects used as TexBOs and
UBOs get accessed via the sampler, and I don't see how they'd get the
flushes they need.
--Ken
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20140305/13d7ecd8/attachment-0001.pgp>
More information about the mesa-dev
mailing list