anv: Use an actual binding for gl_NumWorkgroups
This commit moves our handling of gl_NumWorkgroups over to work like our handling of other special bindings in the Vulkan driver. We give it a magic descriptor set number and teach emit_binding_tables to handle it. This is better than the bias mechanism we were using because it allows us to do proper accounting through the bind map mechanism. Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:

committed by
Jason Ekstrand

parent
5c96120b5c
commit
65ee5cc0da
@@ -1221,6 +1221,12 @@ anv_pipeline_compile_cs(struct anv_pipeline *pipeline,
|
||||
.sampler_to_descriptor = stage.sampler_to_descriptor
|
||||
};
|
||||
|
||||
/* Set up a binding for the gl_NumWorkGroups */
|
||||
stage.bind_map.surface_count = 1;
|
||||
stage.bind_map.surface_to_descriptor[0] = (struct anv_pipeline_binding) {
|
||||
.set = ANV_DESCRIPTOR_SET_NUM_WORK_GROUPS,
|
||||
};
|
||||
|
||||
void *mem_ctx = ralloc_context(NULL);
|
||||
|
||||
stage.nir = anv_pipeline_stage_get_nir(pipeline, cache, mem_ctx, &stage);
|
||||
@@ -1234,7 +1240,7 @@ anv_pipeline_compile_cs(struct anv_pipeline *pipeline,
|
||||
NIR_PASS_V(stage.nir, anv_nir_add_base_work_group_id,
|
||||
&stage.prog_data.cs);
|
||||
|
||||
anv_fill_binding_table(&stage.prog_data.cs.base, 1);
|
||||
anv_fill_binding_table(&stage.prog_data.cs.base, 0);
|
||||
|
||||
const unsigned *shader_code =
|
||||
brw_compile_cs(compiler, NULL, mem_ctx, &stage.key.cs,
|
||||
|
Reference in New Issue
Block a user