agx: lower nir_intrinsic_load_num_subgroups
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29179>
This commit is contained in:
committed by
Marge Bot
parent
765bf9a25b
commit
3efa723b63
@@ -9,6 +9,13 @@
|
||||
#include "nir_builder_opcodes.h"
|
||||
#include "nir_intrinsics.h"
|
||||
|
||||
/* XXX: cribbed from nak, move to common */
|
||||
static nir_def *
|
||||
nir_udiv_round_up(nir_builder *b, nir_def *n, nir_def *d)
|
||||
{
|
||||
return nir_udiv(b, nir_iadd(b, n, nir_iadd_imm(b, d, -1)), d);
|
||||
}
|
||||
|
||||
static bool
|
||||
lower(nir_builder *b, nir_intrinsic_instr *intr, void *data)
|
||||
{
|
||||
@@ -67,6 +74,19 @@ lower(nir_builder *b, nir_intrinsic_instr *intr, void *data)
|
||||
return true;
|
||||
}
|
||||
|
||||
case nir_intrinsic_load_num_subgroups: {
|
||||
nir_def *workgroup_size = nir_load_workgroup_size(b);
|
||||
workgroup_size = nir_imul(b,
|
||||
nir_imul(b, nir_channel(b, workgroup_size, 0),
|
||||
nir_channel(b, workgroup_size, 1)),
|
||||
nir_channel(b, workgroup_size, 2));
|
||||
nir_def *subgroup_size = nir_imm_int(b, 32);
|
||||
nir_def *num_subgroups =
|
||||
nir_udiv_round_up(b, workgroup_size, subgroup_size);
|
||||
nir_def_rewrite_uses(&intr->def, num_subgroups);
|
||||
return true;
|
||||
}
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user