[Mesa-dev] [PATCH] swr: call swr_update_derived unconditionally when drawing/clearing

Cherniak, Bruce bruce.cherniak at intel.com
Mon Nov 21 23:45:57 UTC 2016


Reviewed-by: Bruce Cherniak <bruce.cherniak at intel.com>

> On Nov 19, 2016, at 11:09 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> 
> Currently a sequence like draw/map/draw/map will cause the second map to
> not wait for the second draw. This is because the first map will clear
> the resource business bit, and the second draw won't reset it since no
> state has changed.
> 
> swr_update_derived does a tiny bit of extra work, including updating the
> SWR_BACKEND_STATE as well as waiting for prending fences. If that's a
> problem, we could call swr_update_resource_status directly from
> draw/clear handlers.
> 
> Fixes clearbuffer-stencil, clearbuffer-depth, clearbuffer-depth-stencil,
> and clearbuffer-display-lists.
> 
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> ---
> src/gallium/drivers/swr/swr_clear.cpp | 3 +--
> src/gallium/drivers/swr/swr_draw.cpp  | 3 +--
> 2 files changed, 2 insertions(+), 4 deletions(-)
> 
> diff --git a/src/gallium/drivers/swr/swr_clear.cpp b/src/gallium/drivers/swr/swr_clear.cpp
> index 7ac308e..f59179f 100644
> --- a/src/gallium/drivers/swr/swr_clear.cpp
> +++ b/src/gallium/drivers/swr/swr_clear.cpp
> @@ -40,8 +40,7 @@ swr_clear(struct pipe_context *pipe,
>    if (!swr_check_render_cond(pipe))
>       return;
> 
> -   if (ctx->dirty)
> -      swr_update_derived(pipe);
> +   swr_update_derived(pipe);
> 
>    if (buffers & PIPE_CLEAR_COLOR && fb->nr_cbufs) {
>       for (unsigned i = 0; i < fb->nr_cbufs; ++i)
> diff --git a/src/gallium/drivers/swr/swr_draw.cpp b/src/gallium/drivers/swr/swr_draw.cpp
> index fc39f6f..c4d5e5c 100644
> --- a/src/gallium/drivers/swr/swr_draw.cpp
> +++ b/src/gallium/drivers/swr/swr_draw.cpp
> @@ -90,8 +90,7 @@ swr_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
>    }
> 
>    /* Update derived state, pass draw info to update function */
> -   if (ctx->dirty)
> -      swr_update_derived(pipe, info);
> +   swr_update_derived(pipe, info);
> 
>    swr_update_draw_context(ctx);
> 
> -- 
> 2.7.3
> 



More information about the mesa-dev mailing list