diff options
author | Caio Marcelo de Oliveira Filho <[email protected]> | 2019-06-04 13:38:36 -0700 |
---|---|---|
committer | Caio Marcelo de Oliveira Filho <[email protected]> | 2019-06-11 17:57:37 -0700 |
commit | f346b277d14c5ff103e2698f82d9914e5cfd0667 (patch) | |
tree | 21591fbb721668d4d90eac3653ec324756b3c213 | |
parent | 7b43362f2930c87e2a3489026823cf2591aec8e3 (diff) |
iris: Create binding table slot for num_work_groups only when needed
Reviewed-by: Sagar Ghuge <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r-- | src/gallium/drivers/iris/iris_program.c | 5 | ||||
-rw-r--r-- | src/gallium/drivers/iris/iris_state.c | 3 |
2 files changed, 6 insertions, 2 deletions
diff --git a/src/gallium/drivers/iris/iris_program.c b/src/gallium/drivers/iris/iris_program.c index 691fb1fb258..4bb2a7b96e3 100644 --- a/src/gallium/drivers/iris/iris_program.c +++ b/src/gallium/drivers/iris/iris_program.c @@ -670,7 +670,6 @@ iris_setup_binding_table(struct nir_shader *nir, BITFIELD64_MASK(num_render_targets); } else if (info->stage == MESA_SHADER_COMPUTE) { bt->sizes[IRIS_SURFACE_GROUP_CS_WORK_GROUPS] = 1; - bt->used_mask[IRIS_SURFACE_GROUP_CS_WORK_GROUPS] = 1; } bt->sizes[IRIS_SURFACE_GROUP_TEXTURE] = util_last_bit(info->textures_used); @@ -706,6 +705,10 @@ iris_setup_binding_table(struct nir_shader *nir, nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); switch (intrin->intrinsic) { + case nir_intrinsic_load_num_work_groups: + bt->used_mask[IRIS_SURFACE_GROUP_CS_WORK_GROUPS] = 1; + break; + case nir_intrinsic_image_size: case nir_intrinsic_image_load: case nir_intrinsic_image_store: diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index 9cab4625b81..23f8d290368 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -4141,7 +4141,8 @@ iris_populate_binding_table(struct iris_context *ice, return; } - if (stage == MESA_SHADER_COMPUTE) { + if (stage == MESA_SHADER_COMPUTE && + shader->bt.used_mask[IRIS_SURFACE_GROUP_CS_WORK_GROUPS]) { /* surface for gl_NumWorkGroups */ struct iris_state_ref *grid_data = &ice->state.grid_size; struct iris_state_ref *grid_state = &ice->state.grid_surf_state; |