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

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
Samuel Pitoiset
2019-11-08 12:44:39 +01:00
parent 204cf54b70
commit 58d5ab98a3

View File

@@ -4320,12 +4320,17 @@ ac_build_quad_swizzle(struct ac_llvm_context *ctx, LLVMValueRef src,
LLVMValueRef
ac_build_shuffle(struct ac_llvm_context *ctx, LLVMValueRef src, LLVMValueRef index)
{
LLVMTypeRef type = LLVMTypeOf(src);
LLVMValueRef result;
index = LLVMBuildMul(ctx->builder, index, LLVMConstInt(ctx->i32, 4, 0), "");
return ac_build_intrinsic(ctx,
"llvm.amdgcn.ds.bpermute", ctx->i32,
(LLVMValueRef []) {index, src}, 2,
AC_FUNC_ATTR_READNONE |
AC_FUNC_ATTR_CONVERGENT);
src = LLVMBuildZExt(ctx->builder, src, ctx->i32, "");
result = ac_build_intrinsic(ctx, "llvm.amdgcn.ds.bpermute", ctx->i32,
(LLVMValueRef []) {index, src}, 2,
AC_FUNC_ATTR_READNONE |
AC_FUNC_ATTR_CONVERGENT);
return LLVMBuildTrunc(ctx->builder, result, type, "");
}
LLVMValueRef