Mesa (master): ac: add 8-bit and 16-bit supports to ac_build_wwm()

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Nov 19 18:01:47 UTC 2019


Module: Mesa
Branch: master
Commit: 21a9243f5e7733c360b6cfd09d81f92a4146d965
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=21a9243f5e7733c360b6cfd09d81f92a4146d965

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Fri Nov  8 17:12:15 2019 +0100

ac: add 8-bit and 16-bit supports to ac_build_wwm()

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

---

 src/amd/llvm/ac_llvm_build.c | 21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/src/amd/llvm/ac_llvm_build.c b/src/amd/llvm/ac_llvm_build.c
index 641587051b8..b397f3461de 100644
--- a/src/amd/llvm/ac_llvm_build.c
+++ b/src/amd/llvm/ac_llvm_build.c
@@ -3864,12 +3864,27 @@ ac_build_ds_swizzle(struct ac_llvm_context *ctx, LLVMValueRef src, unsigned mask
 static LLVMValueRef
 ac_build_wwm(struct ac_llvm_context *ctx, LLVMValueRef src)
 {
+	LLVMTypeRef src_type = LLVMTypeOf(src);
+	unsigned bitsize = ac_get_elem_bits(ctx, src_type);
 	char name[32], type[8];
+	LLVMValueRef ret;
+
+	src = ac_to_integer(ctx, src);
+
+	if (bitsize < 32)
+		src = LLVMBuildZExt(ctx->builder, src, ctx->i32, "");
+
 	ac_build_type_name_for_intr(LLVMTypeOf(src), type, sizeof(type));
 	snprintf(name, sizeof(name), "llvm.amdgcn.wwm.%s", type);
-	return ac_build_intrinsic(ctx, name, LLVMTypeOf(src),
-				  (LLVMValueRef []) { src }, 1,
-				  AC_FUNC_ATTR_READNONE);
+	ret = ac_build_intrinsic(ctx, name, LLVMTypeOf(src),
+				 (LLVMValueRef []) { src }, 1,
+				 AC_FUNC_ATTR_READNONE);
+
+	if (bitsize < 32)
+		ret = LLVMBuildTrunc(ctx->builder, ret,
+				     ac_to_integer_type(ctx, src_type), "");
+
+	return LLVMBuildBitCast(ctx->builder, ret, src_type, "");
 }
 
 static LLVMValueRef




More information about the mesa-commit mailing list