diff --git a/.pick_status.json b/.pick_status.json index 3bc2eca415f..ce85794b224 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1966,7 +1966,7 @@ "description": "iris: invalidate sysvals if grid dimension changes", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/gallium/drivers/iris/iris_context.c b/src/gallium/drivers/iris/iris_context.c index 70dd21176a4..3d4f2e13daa 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 f320086f780..9c81be7ed51 100644 --- a/src/gallium/drivers/iris/iris_context.h +++ b/src/gallium/drivers/iris/iris_context.h @@ -749,6 +749,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 00d672ffec4..5b12ac255b4 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);