nir: Support upper bound of subgroup_id/num_subgroups for non-compute.
authorTimur Kristóf <timur.kristof@gmail.com>
Fri, 23 Apr 2021 06:46:18 +0000 (08:46 +0200)
committerMarge Bot <eric+marge@anholt.net>
Wed, 12 May 2021 13:47:04 +0000 (13:47 +0000)
These intrinsics will be used when lowering NGG shaders, including
currently supported stages like VS, TES, GS and also by mesh shaders
in the future.

Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10740>

src/compiler/nir/nir_range_analysis.c

index bbee87a..7563278 100644 (file)
@@ -1339,12 +1339,12 @@ nir_unsigned_upper_bound(nir_shader *shader, struct hash_table *range_ht,
       case nir_intrinsic_load_subgroup_id:
       case nir_intrinsic_load_num_subgroups: {
          uint32_t work_group_size = config->max_work_group_invocations;
-         if (!shader->info.cs.local_size_variable) {
+         if (shader->info.stage == MESA_SHADER_COMPUTE && !shader->info.cs.local_size_variable) {
             work_group_size = shader->info.cs.local_size[0] *
                               shader->info.cs.local_size[1] *
                               shader->info.cs.local_size[2];
          }
-         res = (work_group_size + config->min_subgroup_size - 1) / config->min_subgroup_size;
+         res = DIV_ROUND_UP(work_group_size, config->min_subgroup_size);
          if (intrin->intrinsic == nir_intrinsic_load_subgroup_id)
             res--;
          break;