ac/llvm: implement as_uniform and ballot_relaxed

Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27116>
This commit is contained in:
Georg Lehmann 2024-01-17 12:15:49 +01:00 committed by Marge Bot
parent 6b031daf16
commit 37a15ba53a

View file

@ -3038,6 +3038,7 @@ static bool visit_intrinsic(struct ac_nir_context *ctx, nir_intrinsic_instr *ins
switch (instr->intrinsic) {
case nir_intrinsic_ballot:
case nir_intrinsic_ballot_relaxed:
result = ac_build_ballot(&ctx->ac, get_src(ctx, instr->src[0]));
if (instr->def.bit_size > ctx->ac.wave_size) {
LLVMTypeRef dest_type = LLVMIntTypeInContext(ctx->ac.context, instr->def.bit_size);
@ -3058,6 +3059,7 @@ static bool visit_intrinsic(struct ac_nir_context *ctx, nir_intrinsic_instr *ins
ac_build_readlane(&ctx->ac, get_src(ctx, instr->src[0]), get_src(ctx, instr->src[1]));
break;
case nir_intrinsic_read_first_invocation:
case nir_intrinsic_as_uniform:
result = ac_build_readlane(&ctx->ac, get_src(ctx, instr->src[0]), NULL);
break;
case nir_intrinsic_load_subgroup_invocation: