From 9ccdd86b9040b265893712f4125d30552e0fe1cd Mon Sep 17 00:00:00 2001 From: Karol Herbst Date: Sat, 17 Sep 2022 19:59:56 +0200 Subject: [PATCH] iris: invalidate sysvals if grid dimension changes Cc: mesa-stable Signed-off-by: Karol Herbst Reviewed-by: Emma Anholt Reviewed-by: Alyssa Rosenzweig Part-of: --- src/gallium/drivers/iris/iris_context.c | 1 + src/gallium/drivers/iris/iris_context.h | 2 ++ src/gallium/drivers/iris/iris_draw.c | 6 ++++++ 3 files changed, 9 insertions(+) diff --git a/src/gallium/drivers/iris/iris_context.c b/src/gallium/drivers/iris/iris_context.c index ab39a077881..e244e2666a7 100644 --- a/src/gallium/drivers/iris/iris_context.c +++ b/src/gallium/drivers/iris/iris_context.c @@ -83,6 +83,7 @@ iris_lost_context_state(struct iris_batch *batch) memset(&ice->shaders.urb, 0, sizeof(ice->shaders.urb)); memset(ice->state.last_block, 0, sizeof(ice->state.last_block)); memset(ice->state.last_grid, 0, sizeof(ice->state.last_grid)); + ice->state.last_grid_dim = 0; batch->last_binder_address = ~0ull; batch->last_aux_map_state = 0; batch->screen->vtbl.lost_genx_state(ice, batch); diff --git a/src/gallium/drivers/iris/iris_context.h b/src/gallium/drivers/iris/iris_context.h index 699ad379ed2..d03afdeea8f 100644 --- a/src/gallium/drivers/iris/iris_context.h +++ b/src/gallium/drivers/iris/iris_context.h @@ -756,6 +756,8 @@ struct iris_context { /** The last compute grid size */ uint32_t last_grid[3]; + /** The last compute grid dimensions */ + uint32_t last_grid_dim; /** Reference to the BO containing the compute grid size */ struct iris_state_ref grid_size; /** Reference to the SURFACE_STATE for the compute grid resource */ diff --git a/src/gallium/drivers/iris/iris_draw.c b/src/gallium/drivers/iris/iris_draw.c index 2bf23ab1b3e..04680097d80 100644 --- a/src/gallium/drivers/iris/iris_draw.c +++ b/src/gallium/drivers/iris/iris_draw.c @@ -408,6 +408,12 @@ iris_launch_grid(struct pipe_context *ctx, const struct pipe_grid_info *grid) ice->state.shaders[MESA_SHADER_COMPUTE].sysvals_need_upload = true; } + if (ice->state.last_grid_dim != grid->work_dim) { + ice->state.last_grid_dim = grid->work_dim; + ice->state.stage_dirty |= IRIS_STAGE_DIRTY_CONSTANTS_CS; + ice->state.shaders[MESA_SHADER_COMPUTE].sysvals_need_upload = true; + } + iris_update_grid_size_resource(ice, grid); iris_binder_reserve_compute(ice);