Mesa (main): radv: use shader_info::system_values_read

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Apr 14 14:35:57 UTC 2022


Module: Mesa
Branch: main
Commit: c7eaf0306876df53d3608ae3bf67afc272dcdf20
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c7eaf0306876df53d3608ae3bf67afc272dcdf20

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Fri Mar 11 09:53:46 2022 +0100

radv: use shader_info::system_values_read

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Timur Kristóf <timur.kristof at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15343>

---

 src/amd/vulkan/radv_shader_info.c | 62 ++++++++++++---------------------------
 1 file changed, 18 insertions(+), 44 deletions(-)

diff --git a/src/amd/vulkan/radv_shader_info.c b/src/amd/vulkan/radv_shader_info.c
index ca88e1bc34c..a7e56e27642 100644
--- a/src/amd/vulkan/radv_shader_info.c
+++ b/src/amd/vulkan/radv_shader_info.c
@@ -144,24 +144,6 @@ gather_intrinsic_info(const nir_shader *nir, const nir_intrinsic_instr *instr,
          info->ps.needs_sample_positions = true;
       break;
    }
-   case nir_intrinsic_load_barycentric_model:
-      info->ps.reads_barycentric_model = true;
-      break;
-   case nir_intrinsic_load_draw_id:
-      info->vs.needs_draw_id = true;
-      break;
-   case nir_intrinsic_load_base_instance:
-      info->vs.needs_base_instance = true;
-      break;
-   case nir_intrinsic_load_instance_id:
-      info->vs.needs_instance_id = true;
-      break;
-   case nir_intrinsic_load_num_workgroups:
-      info->cs.uses_grid_size = true;
-      break;
-   case nir_intrinsic_load_ray_launch_size:
-      info->cs.uses_ray_launch_size = true;
-      break;
    case nir_intrinsic_load_local_invocation_id:
    case nir_intrinsic_load_workgroup_id: {
       unsigned mask = nir_ssa_def_components_read(&instr->dest.ssa);
@@ -175,38 +157,12 @@ gather_intrinsic_info(const nir_shader *nir, const nir_intrinsic_instr *instr,
       }
       break;
    }
-   case nir_intrinsic_load_local_invocation_index:
-   case nir_intrinsic_load_subgroup_id:
-   case nir_intrinsic_load_num_subgroups:
-      info->cs.uses_local_invocation_idx = true;
-      break;
-   case nir_intrinsic_load_sample_mask_in:
-      info->ps.reads_sample_mask_in = true;
-      break;
-   case nir_intrinsic_load_sample_id:
-      info->ps.reads_sample_id = true;
-      break;
-   case nir_intrinsic_load_frag_shading_rate:
-      info->ps.reads_frag_shading_rate = true;
-      break;
-   case nir_intrinsic_load_front_face:
-      info->ps.reads_front_face = true;
-      break;
    case nir_intrinsic_load_frag_coord:
       info->ps.reads_frag_coord_mask = nir_ssa_def_components_read(&instr->dest.ssa);
       break;
    case nir_intrinsic_load_sample_pos:
       info->ps.reads_sample_pos_mask = nir_ssa_def_components_read(&instr->dest.ssa);
       break;
-   case nir_intrinsic_load_view_index:
-      info->uses_view_index = true;
-      break;
-   case nir_intrinsic_load_invocation_id:
-      info->uses_invocation_id = true;
-      break;
-   case nir_intrinsic_load_primitive_id:
-      info->uses_prim_id = true;
-      break;
    case nir_intrinsic_load_push_constant:
       gather_push_constant_info(nir, instr, info);
       break;
@@ -620,10 +576,23 @@ radv_nir_shader_info_pass(struct radv_device *device, const struct nir_shader *n
       info->ps.num_prim_interp = num_per_primitive_inputs;
    }
 
+   info->vs.needs_draw_id |= BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_DRAW_ID);
+   info->vs.needs_base_instance |= BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_BASE_INSTANCE);
+   info->vs.needs_instance_id |= BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_INSTANCE_ID);
+   info->uses_view_index |= BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_VIEW_INDEX);
+   info->uses_invocation_id |= BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_INVOCATION_ID);
+   info->uses_prim_id |= BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_PRIMITIVE_ID);
+
+   /* Used by compute and mesh shaders. */
+   info->cs.uses_grid_size = BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_NUM_WORKGROUPS);
+   info->cs.uses_local_invocation_idx = BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_LOCAL_INVOCATION_INDEX) |
+                                        BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_SUBGROUP_ID) |
+                                        BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_NUM_SUBGROUPS);
    switch (nir->info.stage) {
    case MESA_SHADER_COMPUTE:
       for (int i = 0; i < 3; ++i)
          info->cs.block_size[i] = nir->info.workgroup_size[i];
+      info->cs.uses_ray_launch_size = BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_RAY_LAUNCH_SIZE);
       break;
    case MESA_SHADER_FRAGMENT:
       info->ps.can_discard = nir->info.fs.uses_discard;
@@ -639,6 +608,11 @@ radv_nir_shader_info_pass(struct radv_device *device, const struct nir_shader *n
       info->ps.writes_z = nir->info.outputs_written & BITFIELD64_BIT(FRAG_RESULT_DEPTH);
       info->ps.writes_stencil = nir->info.outputs_written & BITFIELD64_BIT(FRAG_RESULT_STENCIL);
       info->ps.writes_sample_mask = nir->info.outputs_written & BITFIELD64_BIT(FRAG_RESULT_SAMPLE_MASK);
+      info->ps.reads_sample_mask_in = BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_SAMPLE_MASK_IN);
+      info->ps.reads_sample_id = BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_SAMPLE_ID);
+      info->ps.reads_frag_shading_rate = BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_FRAG_SHADING_RATE);
+      info->ps.reads_front_face = BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_FRONT_FACE);
+      info->ps.reads_barycentric_model = BITSET_TEST(nir->info.system_values_read, SYSTEM_VALUE_BARYCENTRIC_PULL_MODEL);
       break;
    case MESA_SHADER_GEOMETRY:
       info->gs.vertices_in = nir->info.gs.vertices_in;



More information about the mesa-commit mailing list