Module: Mesa Branch: master Commit: 9fdf69e6119b6326701ee0b43a0ee0b5301dc1ba URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9fdf69e6119b6326701ee0b43a0ee0b5301dc1ba
Author: Marek Olšák <[email protected]> Date: Tue Mar 2 21:41:26 2021 -0500 ac/llvm: unpack thread IDs on Aldebaran Reviewed-by: Pierre-Eric Pelloux-Prayer <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9389> --- src/amd/llvm/ac_nir_to_llvm.c | 14 +++++++++++++- src/gallium/drivers/radeonsi/si_shader.c | 5 ++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/amd/llvm/ac_nir_to_llvm.c b/src/amd/llvm/ac_nir_to_llvm.c index 71aa4438073..53e9bfaa1a3 100644 --- a/src/amd/llvm/ac_nir_to_llvm.c +++ b/src/amd/llvm/ac_nir_to_llvm.c @@ -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: diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 705e6e54c00..b1691cf6a4d 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -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"); _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
