From: Kenneth Graunke Date: Fri, 19 Oct 2018 08:31:56 +0000 (-0700) Subject: iris: don't let render/compute contexts stomp each other's dirty bits X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b3a40c27a24ccf10d1b91d8294b6e9f01f5fd2b9;p=mesa.git iris: don't let render/compute contexts stomp each other's dirty bits only clear what you process --- diff --git a/src/gallium/drivers/iris/iris_context.h b/src/gallium/drivers/iris/iris_context.h index 096a3d2ff51..4060cdb5d2d 100644 --- a/src/gallium/drivers/iris/iris_context.h +++ b/src/gallium/drivers/iris/iris_context.h @@ -111,6 +111,14 @@ struct blorp_params; #define IRIS_DIRTY_VF (1ull << 53) #define IRIS_DIRTY_VF_TOPOLOGY (1ull << 54) +#define IRIS_ALL_DIRTY_FOR_COMPUTE (IRIS_DIRTY_CS | \ + IRIS_DIRTY_SAMPLER_STATES_CS | \ + IRIS_DIRTY_UNCOMPILED_CS | \ + IRIS_DIRTY_CONSTANTS_CS | \ + IRIS_DIRTY_BINDINGS_CS) + +#define IRIS_ALL_DIRTY_FOR_RENDER ~IRIS_ALL_DIRTY_FOR_COMPUTE + #define IRIS_ALL_DIRTY_BINDINGS (IRIS_DIRTY_BINDINGS_VS | \ IRIS_DIRTY_BINDINGS_TCS | \ IRIS_DIRTY_BINDINGS_TES | \ diff --git a/src/gallium/drivers/iris/iris_draw.c b/src/gallium/drivers/iris/iris_draw.c index c2216a22bed..f9b8db7b64e 100644 --- a/src/gallium/drivers/iris/iris_draw.c +++ b/src/gallium/drivers/iris/iris_draw.c @@ -89,7 +89,7 @@ iris_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info) ice->vtbl.update_surface_base_address(batch, &ice->state.binder); ice->vtbl.upload_render_state(ice, batch, info); - ice->state.dirty = 0ull; + ice->state.dirty &= ~IRIS_ALL_DIRTY_FOR_RENDER; iris_postdraw_update_resolve_tracking(ice, batch); } @@ -163,8 +163,7 @@ iris_launch_grid(struct pipe_context *ctx, const struct pipe_grid_info *grid) ice->vtbl.update_surface_base_address(batch, &ice->state.binder); ice->vtbl.upload_compute_state(ice, batch, grid); - // XXX: this is wrong. we need separate dirty tracking for compute/render - ice->state.dirty = 0ull; + ice->state.dirty &= ~IRIS_ALL_DIRTY_FOR_COMPUTE; // XXX: postdraw resolve tracking }