ac/nir/ngg,radv: use intrinsic base for instance_rate_inputs check
authorQiang Yu <yuq825@gmail.com>
Thu, 17 Nov 2022 02:17:21 +0000 (10:17 +0800)
committerMarge Bot <emma+marge@anholt.net>
Tue, 22 Nov 2022 05:46:06 +0000 (05:46 +0000)
radeonsi use packed location base while radv use un-packed location.
So we adjust instance_rate_inputs in each driver to hide the difference.
Note the attribute slot number is less than 16, so we can shift
instance_rate_inputs in radv by VERT_ATTRIB_GENERIC0 which is 16.

Reviewed-by: Timur Kristóf <timur.kristof@gmail.com>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19868>

src/amd/common/ac_nir_lower_ngg.c
src/amd/vulkan/radv_shader.c

index 9e44b4a..b198363 100644 (file)
@@ -856,8 +856,7 @@ cleanup_culling_shader_after_dce(nir_shader *shader,
             uses_vs_instance_id = true;
             break;
          case nir_intrinsic_load_input:
-            if (state->options->instance_rate_inputs &
-                (1u << (nir_intrinsic_base(intrin) - VERT_ATTRIB_GENERIC0)))
+            if (state->options->instance_rate_inputs & BITFIELD_BIT(nir_intrinsic_base(intrin)))
                uses_vs_instance_id = true;
             else
                uses_vs_vertex_id = true;
index 90c8fa3..0eb9a77 100644 (file)
@@ -1461,7 +1461,7 @@ void radv_lower_ngg(struct radv_device *device, struct radv_pipeline_stage *ngg_
       options.early_prim_export = info->has_ngg_early_prim_export;
       options.passthrough = info->is_ngg_passthrough;
       options.primitive_id_location = info->outinfo.export_prim_id ? VARYING_SLOT_PRIMITIVE_ID : -1;
-      options.instance_rate_inputs = pl_key->vs.instance_rate_inputs;
+      options.instance_rate_inputs = pl_key->vs.instance_rate_inputs << VERT_ATTRIB_GENERIC0;
 
       NIR_PASS_V(nir, ac_nir_lower_ngg_nogs, &options);