ac/llvm: unpack thread IDs on Aldebaran
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9389>
This commit is contained in:
parent
6edf1978d3
commit
9fdf69e611
|
@ -3453,7 +3453,19 @@ static void visit_intrinsic(struct ac_nir_context *ctx, nir_intrinsic_instr *ins
|
|||
break;
|
||||
}
|
||||
case nir_intrinsic_load_local_invocation_id: {
|
||||
result = ac_get_arg(&ctx->ac, ctx->args->local_invocation_ids);
|
||||
LLVMValueRef ids = ac_get_arg(&ctx->ac, ctx->args->local_invocation_ids);
|
||||
|
||||
if (LLVMGetTypeKind(LLVMTypeOf(ids)) == LLVMIntegerTypeKind) {
|
||||
/* Thread IDs are packed in VGPR0, 10 bits per component. */
|
||||
LLVMValueRef id[3];
|
||||
|
||||
for (unsigned i = 0; i < 3; i++)
|
||||
id[i] = ac_unpack_param(&ctx->ac, ids, i * 10, 10);
|
||||
|
||||
result = ac_build_gather_values(&ctx->ac, id, 3);
|
||||
} else {
|
||||
result = ids;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case nir_intrinsic_load_base_instance:
|
||||
|
|
|
@ -738,7 +738,10 @@ void si_init_shader_args(struct si_shader_context *ctx, bool ngg_cull_shader)
|
|||
ac_add_arg(&ctx->args, AC_ARG_SGPR, 1, AC_ARG_INT, &ctx->args.tg_size);
|
||||
|
||||
/* Hardware VGPRs. */
|
||||
ac_add_arg(&ctx->args, AC_ARG_VGPR, 3, AC_ARG_INT, &ctx->args.local_invocation_ids);
|
||||
if (!ctx->screen->info.has_graphics && ctx->screen->info.family >= CHIP_ALDEBARAN)
|
||||
ac_add_arg(&ctx->args, AC_ARG_VGPR, 1, AC_ARG_INT, &ctx->args.local_invocation_ids);
|
||||
else
|
||||
ac_add_arg(&ctx->args, AC_ARG_VGPR, 3, AC_ARG_INT, &ctx->args.local_invocation_ids);
|
||||
break;
|
||||
default:
|
||||
assert(0 && "unimplemented shader");
|
||||
|
|
Loading…
Reference in New Issue