v2: rebase

Signed-off-by: Rhys Perry <pendingchao...@gmail.com>
---
 src/amd/common/ac_llvm_build.c | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c
index fb871a47400..71eaac4b7bd 100644
--- a/src/amd/common/ac_llvm_build.c
+++ b/src/amd/common/ac_llvm_build.c
@@ -1481,6 +1481,11 @@ ac_build_ddxy(struct ac_llvm_context *ctx,
        LLVMValueRef tl, trbl;
        LLVMValueRef result;
 
+       int size = ac_get_type_size(LLVMTypeOf(val));
+
+       if (size == 2)
+               val = LLVMBuildZExt(ctx->builder, val, ctx->i32, "");
+
        for (unsigned i = 0; i < 4; ++i) {
                tl_lanes[i] = i & mask;
                trbl_lanes[i] = (i & mask) + idx;
@@ -1493,12 +1498,19 @@ ac_build_ddxy(struct ac_llvm_context *ctx,
                                     trbl_lanes[0], trbl_lanes[1],
                                     trbl_lanes[2], trbl_lanes[3]);
 
-       tl = LLVMBuildBitCast(ctx->builder, tl, ctx->f32, "");
-       trbl = LLVMBuildBitCast(ctx->builder, trbl, ctx->f32, "");
+       if (size == 2) {
+               tl = LLVMBuildTrunc(ctx->builder, tl, ctx->i16, "");
+               trbl = LLVMBuildTrunc(ctx->builder, trbl, ctx->i16, "");
+       }
+
+       LLVMTypeRef type = ac_float_of_size(ctx, size * 8);
+       tl = LLVMBuildBitCast(ctx->builder, tl, type, "");
+       trbl = LLVMBuildBitCast(ctx->builder, trbl, type, "");
        result = LLVMBuildFSub(ctx->builder, trbl, tl, "");
 
-       result = ac_build_intrinsic(ctx, "llvm.amdgcn.wqm.f32", ctx->f32,
-                                   &result, 1, 0);
+       result = ac_build_intrinsic(ctx,
+               LLVMTypeOf(val) == ctx->f32 ? "llvm.amdgcn.wqm.f32" : 
"llvm.amdgcn.wqm.f16", type,
+               &result, 1, 0);
 
        return result;
 }
-- 
2.20.1

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to