[Mesa-dev] [PATCH 1/1] radv: use a faster version for nir_op_pack_half_2x16
Dave Airlie
airlied at gmail.com
Tue Dec 5 23:52:15 UTC 2017
On 6 December 2017 at 03:02, Samuel Pitoiset <samuel.pitoiset at gmail.com> wrote:
> This patch is ported from RadeonSI and it has two effects.
>
> It fixes a rendering issue which affects F1 2017 and Dawn
> of War 3 (Vega only) because LLVM was ending up by generating
> the new v_mad_mix_{hi,lo} instructions which appear to be
> buggy in some way. Not sure if Mesa is generating something
> wrong or if the issue is in LLVM only. Anyway, that explains why
> the DOW3 issue can't be reproduced with GL on Vega.
>
> It also improves performance because v_cvt_pkrtz_f16 is faster,
> and because I guess the rounding mode behaviour is similar between
> GL and VK, we can use it. About performance, it improves Talos
> by +3/4% but I don't see any other impacts.
>
> No CTS regressions on Polaris (Vega in progress).
Seems like a good plan.
Reviewed-by: Dave Airlie <airlied at redhat.com>
Thanks for hunting that down.
Dave.
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
> src/amd/common/ac_nir_to_llvm.c | 12 +-----------
> 1 file changed, 1 insertion(+), 11 deletions(-)
>
> diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
> index 96ba289a81..663b27d265 100644
> --- a/src/amd/common/ac_nir_to_llvm.c
> +++ b/src/amd/common/ac_nir_to_llvm.c
> @@ -1426,23 +1426,13 @@ static LLVMValueRef emit_bitfield_insert(struct ac_llvm_context *ctx,
> static LLVMValueRef emit_pack_half_2x16(struct ac_llvm_context *ctx,
> LLVMValueRef src0)
> {
> - LLVMValueRef const16 = LLVMConstInt(ctx->i32, 16, false);
> - int i;
> LLVMValueRef comp[2];
>
> src0 = ac_to_float(ctx, src0);
> comp[0] = LLVMBuildExtractElement(ctx->builder, src0, ctx->i32_0, "");
> comp[1] = LLVMBuildExtractElement(ctx->builder, src0, ctx->i32_1, "");
> - for (i = 0; i < 2; i++) {
> - comp[i] = LLVMBuildFPTrunc(ctx->builder, comp[i], ctx->f16, "");
> - comp[i] = LLVMBuildBitCast(ctx->builder, comp[i], ctx->i16, "");
> - comp[i] = LLVMBuildZExt(ctx->builder, comp[i], ctx->i32, "");
> - }
> -
> - comp[1] = LLVMBuildShl(ctx->builder, comp[1], const16, "");
> - comp[0] = LLVMBuildOr(ctx->builder, comp[0], comp[1], "");
>
> - return comp[0];
> + return ac_build_cvt_pkrtz_f16(ctx, comp);
> }
>
> static LLVMValueRef emit_unpack_half_2x16(struct ac_llvm_context *ctx,
> --
> 2.15.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list