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 <imir...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev