Module: Mesa Branch: master Commit: a71c3b885a532016aa426b5bb753291cffe39a44 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a71c3b885a532016aa426b5bb753291cffe39a44
Author: Eric Anholt <e...@anholt.net> Date: Fri Oct 24 16:45:04 2014 +0100 vc4: Refactor flushing before mapping a BO. I'm going to want to make some other decisions here before flushing. --- src/gallium/drivers/vc4/vc4_context.c | 17 ++++++++--------- src/gallium/drivers/vc4/vc4_context.h | 2 +- src/gallium/drivers/vc4/vc4_resource.c | 6 ++++-- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/gallium/drivers/vc4/vc4_context.c b/src/gallium/drivers/vc4/vc4_context.c index 87f0251..b1f0f35 100644 --- a/src/gallium/drivers/vc4/vc4_context.c +++ b/src/gallium/drivers/vc4/vc4_context.c @@ -350,13 +350,13 @@ vc4_pipe_flush(struct pipe_context *pctx, struct pipe_fence_handle **fence, * * This helps avoid flushing the command buffers when unnecessary. */ -void -vc4_flush_for_bo(struct pipe_context *pctx, struct vc4_bo *bo) +bool +vc4_cl_references_bo(struct pipe_context *pctx, struct vc4_bo *bo) { struct vc4_context *vc4 = vc4_context(pctx); if (!vc4->needs_flush) - return; + return false; /* Walk all the referenced BOs in the drawing command list to see if * they match. @@ -365,8 +365,7 @@ vc4_flush_for_bo(struct pipe_context *pctx, struct vc4_bo *bo) for (int i = 0; i < (vc4->bo_handles.next - vc4->bo_handles.base) / 4; i++) { if (referenced_bos[i] == bo) { - vc4_flush(pctx); - return; + return true; } } @@ -377,8 +376,7 @@ vc4_flush_for_bo(struct pipe_context *pctx, struct vc4_bo *bo) if (csurf) { struct vc4_resource *ctex = vc4_resource(csurf->base.texture); if (ctex->bo == bo) { - vc4_flush(pctx); - return; + return true; } } @@ -387,10 +385,11 @@ vc4_flush_for_bo(struct pipe_context *pctx, struct vc4_bo *bo) struct vc4_resource *ztex = vc4_resource(zsurf->base.texture); if (ztex->bo == bo) { - vc4_flush(pctx); - return; + return true; } } + + return false; } static void diff --git a/src/gallium/drivers/vc4/vc4_context.h b/src/gallium/drivers/vc4/vc4_context.h index d0b280a..9eaff8f 100644 --- a/src/gallium/drivers/vc4/vc4_context.h +++ b/src/gallium/drivers/vc4/vc4_context.h @@ -278,7 +278,7 @@ void vc4_write_uniforms(struct vc4_context *vc4, struct vc4_texture_stateobj *texstate); void vc4_flush(struct pipe_context *pctx); -void vc4_flush_for_bo(struct pipe_context *pctx, struct vc4_bo *bo); +bool vc4_cl_references_bo(struct pipe_context *pctx, struct vc4_bo *bo); void vc4_emit_state(struct pipe_context *pctx); void vc4_generate_code(struct vc4_context *vc4, struct vc4_compile *c); struct qpu_reg *vc4_register_allocate(struct vc4_context *vc4, struct vc4_compile *c); diff --git a/src/gallium/drivers/vc4/vc4_resource.c b/src/gallium/drivers/vc4/vc4_resource.c index c198ab9..62667bf 100644 --- a/src/gallium/drivers/vc4/vc4_resource.c +++ b/src/gallium/drivers/vc4/vc4_resource.c @@ -80,8 +80,10 @@ vc4_resource_transfer_map(struct pipe_context *pctx, rsc->bo = vc4_bo_alloc(vc4->screen, size, "resource"); } - if (!(usage & PIPE_TRANSFER_UNSYNCHRONIZED)) - vc4_flush_for_bo(pctx, rsc->bo); + if (!(usage & PIPE_TRANSFER_UNSYNCHRONIZED)) { + if (vc4_cl_references_bo(pctx, rsc->bo)) + vc4_flush(pctx); + } if (usage & PIPE_TRANSFER_WRITE) rsc->writes++; _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit