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>
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;
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);