radv: move more CS info to gather_shader_info_cs()
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Tue, 23 Aug 2022 09:29:26 +0000 (11:29 +0200)
committerMarge Bot <emma+marge@anholt.net>
Fri, 26 Aug 2022 14:07:09 +0000 (14:07 +0000)
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Timur Kristóf <timur.kristof@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18210>

src/amd/vulkan/radv_pipeline.c
src/amd/vulkan/radv_shader_info.c

index b9c9304..0ff2ab9 100644 (file)
@@ -3420,34 +3420,6 @@ radv_fill_shader_info(struct radv_pipeline *pipeline,
 
    radv_nir_shader_info_link(device, pipeline_key, stages, last_vgt_api_stage);
 
-   if (stages[MESA_SHADER_COMPUTE].nir) {
-      unsigned subgroup_size = pipeline_key->cs.compute_subgroup_size;
-      unsigned req_subgroup_size = subgroup_size;
-      bool require_full_subgroups = pipeline_key->cs.require_full_subgroups;
-
-      if (!subgroup_size)
-         subgroup_size = device->physical_device->cs_wave_size;
-
-      unsigned local_size = stages[MESA_SHADER_COMPUTE].nir->info.workgroup_size[0] *
-                            stages[MESA_SHADER_COMPUTE].nir->info.workgroup_size[1] *
-                            stages[MESA_SHADER_COMPUTE].nir->info.workgroup_size[2];
-
-      /* Games don't always request full subgroups when they should,
-       * which can cause bugs if cswave32 is enabled.
-       */
-      if (device->physical_device->cs_wave_size == 32 &&
-          stages[MESA_SHADER_COMPUTE].nir->info.cs.uses_wide_subgroup_intrinsics && !req_subgroup_size &&
-          local_size % RADV_SUBGROUP_SIZE == 0)
-         require_full_subgroups = true;
-
-      if (require_full_subgroups && !req_subgroup_size) {
-         /* don't use wave32 pretending to be wave64 */
-         subgroup_size = RADV_SUBGROUP_SIZE;
-      }
-
-      stages[MESA_SHADER_COMPUTE].info.cs.subgroup_size = subgroup_size;
-   }
-
    for (int i = 0; i < MESA_VULKAN_SHADER_STAGES; i++) {
       if (stages[i].nir) {
          stages[i].info.wave_size = radv_get_wave_size(device, i, &stages[i].info);
index ce5dc9d..29a8c1f 100644 (file)
@@ -506,9 +506,34 @@ gather_shader_info_fs(const nir_shader *nir, const struct radv_pipeline_key *pip
 }
 
 static void
-gather_shader_info_cs(const nir_shader *nir, struct radv_shader_info *info)
+gather_shader_info_cs(struct radv_device *device, const nir_shader *nir,
+                      const struct radv_pipeline_key *pipeline_key, struct radv_shader_info *info)
 {
    info->cs.uses_ray_launch_size = BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_RAY_LAUNCH_SIZE_ADDR_AMD);
+
+   unsigned subgroup_size = pipeline_key->cs.compute_subgroup_size;
+   unsigned req_subgroup_size = subgroup_size;
+   bool require_full_subgroups = pipeline_key->cs.require_full_subgroups;
+
+   if (!subgroup_size)
+      subgroup_size = device->physical_device->cs_wave_size;
+
+   unsigned local_size =
+      nir->info.workgroup_size[0] * nir->info.workgroup_size[1] * nir->info.workgroup_size[2];
+
+   /* Games don't always request full subgroups when they should, which can cause bugs if cswave32
+    * is enabled.
+    */
+   if (device->physical_device->cs_wave_size == 32 && nir->info.cs.uses_wide_subgroup_intrinsics &&
+       !req_subgroup_size && local_size % RADV_SUBGROUP_SIZE == 0)
+      require_full_subgroups = true;
+
+   if (require_full_subgroups && !req_subgroup_size) {
+      /* don't use wave32 pretending to be wave64 */
+      subgroup_size = RADV_SUBGROUP_SIZE;
+   }
+
+   info->cs.subgroup_size = subgroup_size;
 }
 
 static void
@@ -648,7 +673,7 @@ radv_nir_shader_info_pass(struct radv_device *device, const struct nir_shader *n
 
    switch (nir->info.stage) {
    case MESA_SHADER_COMPUTE:
-      gather_shader_info_cs(nir, info);
+      gather_shader_info_cs(device, nir, pipeline_key, info);
       break;
    case MESA_SHADER_TASK:
       gather_shader_info_task(nir, info);