intel/cs_intrinsics: Handle 64-bit intrinsics
It's safe to do the math in 32 bits because they're all local workgroup calculations. We just need to do a conversion at the end. For a couple of intrinsics, we just turn them into 32-bit intrinsics and add a u2u64. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6280>
This commit is contained in:

committed by
Marge Bot

parent
8d62735b47
commit
8e1de8e5ac
@@ -53,6 +53,18 @@ lower_cs_intrinsics_convert_block(struct lower_intrinsics_state *state,
|
||||
|
||||
nir_ssa_def *sysval;
|
||||
switch (intrinsic->intrinsic) {
|
||||
case nir_intrinsic_load_local_group_size:
|
||||
case nir_intrinsic_load_work_group_id:
|
||||
/* Convert this to 32-bit if it's not */
|
||||
if (intrinsic->dest.ssa.bit_size == 64) {
|
||||
intrinsic->dest.ssa.bit_size = 32;
|
||||
sysval = nir_u2u64(b, &intrinsic->dest.ssa);
|
||||
nir_ssa_def_rewrite_uses_after(&intrinsic->dest.ssa,
|
||||
nir_src_for_ssa(sysval),
|
||||
sysval->parent_instr);
|
||||
}
|
||||
continue;
|
||||
|
||||
case nir_intrinsic_load_local_invocation_index:
|
||||
case nir_intrinsic_load_local_invocation_id: {
|
||||
/* First time we are using those, so let's calculate them. */
|
||||
@@ -171,6 +183,9 @@ lower_cs_intrinsics_convert_block(struct lower_intrinsics_state *state,
|
||||
continue;
|
||||
}
|
||||
|
||||
if (intrinsic->dest.ssa.bit_size == 64)
|
||||
sysval = nir_u2u64(b, sysval);
|
||||
|
||||
nir_ssa_def_rewrite_uses(&intrinsic->dest.ssa, nir_src_for_ssa(sysval));
|
||||
nir_instr_remove(&intrinsic->instr);
|
||||
|
||||
|
Reference in New Issue
Block a user