diff options
-rw-r--r-- | src/intel/compiler/brw_compiler.h | 6 | ||||
-rw-r--r-- | src/intel/compiler/brw_fs_nir.cpp | 5 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_screen.c | 1 |
3 files changed, 11 insertions, 1 deletions
diff --git a/src/intel/compiler/brw_compiler.h b/src/intel/compiler/brw_compiler.h index 1045ef5076f..43a7c9918ea 100644 --- a/src/intel/compiler/brw_compiler.h +++ b/src/intel/compiler/brw_compiler.h @@ -125,6 +125,12 @@ struct brw_compiler { * back-end compiler. */ bool compact_params; + + /** + * Whether or not the driver wants variable group size to be lowered by the + * back-end compiler. + */ + bool lower_variable_group_size; }; /** diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp index e4fbaa51050..852626c6172 100644 --- a/src/intel/compiler/brw_fs_nir.cpp +++ b/src/intel/compiler/brw_fs_nir.cpp @@ -105,7 +105,8 @@ fs_visitor::nir_setup_uniforms() assert(uniforms == prog_data->nr_params); uint32_t *param; - if (nir->info.cs.local_size_variable) { + if (nir->info.cs.local_size_variable && + compiler->lower_variable_group_size) { param = brw_stage_prog_data_add_params(prog_data, 3); for (unsigned i = 0; i < 3; i++) { param[i] = (BRW_PARAM_BUILTIN_WORK_GROUP_SIZE_X + i); @@ -3869,6 +3870,8 @@ fs_visitor::nir_emit_cs_intrinsic(const fs_builder &bld, } case nir_intrinsic_load_local_group_size: { + assert(compiler->lower_variable_group_size); + assert(nir->info.cs.local_size_variable); for (unsigned i = 0; i < 3; i++) { bld.MOV(retype(offset(dest, bld, i), BRW_REGISTER_TYPE_UD), group_size[i]); diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index 822393f6731..f2fbe70cada 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -2823,6 +2823,7 @@ __DRIconfig **intelInitScreen2(__DRIscreen *dri_screen) screen->compiler->supports_pull_constants = true; screen->compiler->compact_params = true; + screen->compiler->lower_variable_group_size = true; screen->has_exec_fence = intel_get_boolean(screen, I915_PARAM_HAS_EXEC_FENCE); |