Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
---
 src/amd/common/ac_llvm_build.c | 41 ++++++++++++++++++++++------------
 1 file changed, 27 insertions(+), 14 deletions(-)

diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c
index 3acf41728ac..867a13622f9 100644
--- a/src/amd/common/ac_llvm_build.c
+++ b/src/amd/common/ac_llvm_build.c
@@ -1347,20 +1347,33 @@ ac_build_tbuffer_load_short(struct ac_llvm_context *ctx,
                                LLVMValueRef immoffset,
                                LLVMValueRef glc)
 {
-       const char *name = "llvm.amdgcn.tbuffer.load.i32";
-       LLVMTypeRef type = ctx->i32;
-       LLVMValueRef params[] = {
-                               rsrc,
-                               vindex,
-                               voffset,
-                               soffset,
-                               immoffset,
-                               LLVMConstInt(ctx->i32, 
V_008F0C_BUF_DATA_FORMAT_16, false),
-                               LLVMConstInt(ctx->i32, 
V_008F0C_BUF_NUM_FORMAT_UINT, false),
-                               glc,
-                               ctx->i1false,
-       };
-       LLVMValueRef res = ac_build_intrinsic(ctx, name, type, params, 9, 0);
+       unsigned dfmt = V_008F0C_BUF_DATA_FORMAT_16;
+       unsigned nfmt = V_008F0C_BUF_NUM_FORMAT_UINT;
+       LLVMValueRef res;
+
+       if (HAVE_LLVM >= 0x0800) {
+               voffset = LLVMBuildAdd(ctx->builder, voffset, immoffset, "");
+
+               res = ac_build_llvm8_tbuffer_load(ctx, rsrc, vindex, voffset,
+                                                 soffset, 1, dfmt, nfmt, glc,
+                                                 false, true, true);
+       } else {
+               const char *name = "llvm.amdgcn.tbuffer.load.i32";
+               LLVMTypeRef type = ctx->i32;
+               LLVMValueRef params[] = {
+                                       rsrc,
+                                       vindex,
+                                       voffset,
+                                       soffset,
+                                       immoffset,
+                                       LLVMConstInt(ctx->i32, dfmt, false),
+                                       LLVMConstInt(ctx->i32, nfmt, false),
+                                       glc,
+                                       ctx->i1false,
+               };
+               res = ac_build_intrinsic(ctx, name, type, params, 9, 0);
+       }
+
        return LLVMBuildTrunc(ctx->builder, res, ctx->i16, "");
 }
 
-- 
2.20.1

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

Reply via email to