Lowering the global invocation id and the local work group size in nir_lower_system_values is only possible if the local work group size isn't variable, otherwise this should be handled by the native driver (if it supports ARB_compute_variable_group_size).
Signed-off-by: Plamena Manolova <plamena.n.manol...@gmail.com> --- src/compiler/nir/nir_lower_system_values.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/compiler/nir/nir_lower_system_values.c b/src/compiler/nir/nir_lower_system_values.c index bde7eb1180..74041d98f7 100644 --- a/src/compiler/nir/nir_lower_system_values.c +++ b/src/compiler/nir/nir_lower_system_values.c @@ -77,6 +77,15 @@ convert_block(nir_block *block, nir_builder *b) * "The value of gl_GlobalInvocationID is equal to * gl_WorkGroupID * gl_WorkGroupSize + gl_LocalInvocationID" */ + + /* + * If the local work group size is variable we can't lower the global + * invocation id here. + */ + if (b->shader->info.cs.local_size_variable) { + break; + } + nir_ssa_def *group_size = build_local_group_size(b); nir_ssa_def *group_id = nir_load_work_group_id(b); nir_ssa_def *local_id = nir_load_local_invocation_id(b); @@ -115,6 +124,11 @@ convert_block(nir_block *block, nir_builder *b) } case SYSTEM_VALUE_LOCAL_GROUP_SIZE: { + /* If the local work group size is variable we can't lower it here */ + if (b->shader->info.cs.local_size_variable) { + break; + } + sysval = build_local_group_size(b); break; } -- 2.11.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev