diff options
author | Samuel Pitoiset <[email protected]> | 2019-03-13 14:04:13 +0100 |
---|---|---|
committer | Samuel Pitoiset <[email protected]> | 2019-03-13 14:15:05 +0100 |
commit | 045fae0f734a39cd24e444ac05382545dc7fdd2e (patch) | |
tree | feaf0db34305351ef1396252826d4e2cacab2c47 /src/amd/common | |
parent | a66b186bebf9b63897199b9b6e26d40977417f74 (diff) |
ac: add ac_build_{struct,raw}_tbuffer_load() helpers
The struct version sets IDXEN=1, while the raw version sets IDXEN=0.
Signed-off-by: Samuel Pitoiset <[email protected]>
Reviewed-by: Bas Nieuwenhuizen <[email protected]>
Diffstat (limited to 'src/amd/common')
-rw-r--r-- | src/amd/common/ac_llvm_build.c | 48 | ||||
-rw-r--r-- | src/amd/common/ac_llvm_build.h | 37 |
2 files changed, 68 insertions, 17 deletions
diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c index b9eaf26f603..2d873d79102 100644 --- a/src/amd/common/ac_llvm_build.c +++ b/src/amd/common/ac_llvm_build.c @@ -1407,7 +1407,7 @@ ac_build_llvm8_tbuffer_load(struct ac_llvm_context *ctx, ac_get_load_intr_attribs(can_speculate)); } -LLVMValueRef +static LLVMValueRef ac_build_tbuffer_load(struct ac_llvm_context *ctx, LLVMValueRef rsrc, LLVMValueRef vindex, @@ -1419,7 +1419,8 @@ ac_build_tbuffer_load(struct ac_llvm_context *ctx, unsigned nfmt, bool glc, bool slc, - bool can_speculate) + bool can_speculate, + bool structurized) /* only matters for LLVM 8+ */ { if (HAVE_LLVM >= 0x800) { voffset = LLVMBuildAdd(ctx->builder, voffset, immoffset, ""); @@ -1427,12 +1428,12 @@ ac_build_tbuffer_load(struct ac_llvm_context *ctx, return ac_build_llvm8_tbuffer_load(ctx, rsrc, vindex, voffset, soffset, num_channels, dfmt, nfmt, glc, slc, - can_speculate, true); + can_speculate, structurized); } LLVMValueRef args[] = { rsrc, - vindex, + vindex ? vindex : ctx->i32_0, voffset, soffset, immoffset, @@ -1454,6 +1455,43 @@ ac_build_tbuffer_load(struct ac_llvm_context *ctx, } LLVMValueRef +ac_build_struct_tbuffer_load(struct ac_llvm_context *ctx, + LLVMValueRef rsrc, + LLVMValueRef vindex, + LLVMValueRef voffset, + LLVMValueRef soffset, + LLVMValueRef immoffset, + unsigned num_channels, + unsigned dfmt, + unsigned nfmt, + bool glc, + bool slc, + bool can_speculate) +{ + return ac_build_tbuffer_load(ctx, rsrc, vindex, voffset, soffset, + immoffset, num_channels, dfmt, nfmt, glc, + slc, can_speculate, true); +} + +LLVMValueRef +ac_build_raw_tbuffer_load(struct ac_llvm_context *ctx, + LLVMValueRef rsrc, + LLVMValueRef voffset, + LLVMValueRef soffset, + LLVMValueRef immoffset, + unsigned num_channels, + unsigned dfmt, + unsigned nfmt, + bool glc, + bool slc, + bool can_speculate) +{ + return ac_build_tbuffer_load(ctx, rsrc, NULL, voffset, soffset, + immoffset, num_channels, dfmt, nfmt, glc, + slc, can_speculate, false); +} + +LLVMValueRef ac_build_tbuffer_load_short(struct ac_llvm_context *ctx, LLVMValueRef rsrc, LLVMValueRef vindex, @@ -1467,7 +1505,7 @@ ac_build_tbuffer_load_short(struct ac_llvm_context *ctx, LLVMValueRef res; res = ac_build_tbuffer_load(ctx, rsrc, vindex, voffset, soffset, - immoffset, 1, dfmt, nfmt, glc, false, false); + immoffset, 1, dfmt, nfmt, glc, false, false, true); return LLVMBuildTrunc(ctx->builder, res, ctx->i16, ""); } diff --git a/src/amd/common/ac_llvm_build.h b/src/amd/common/ac_llvm_build.h index d746c864229..c6475320990 100644 --- a/src/amd/common/ac_llvm_build.h +++ b/src/amd/common/ac_llvm_build.h @@ -307,18 +307,31 @@ ac_build_tbuffer_load_short(struct ac_llvm_context *ctx, bool glc); LLVMValueRef -ac_build_tbuffer_load(struct ac_llvm_context *ctx, - LLVMValueRef rsrc, - LLVMValueRef vindex, - LLVMValueRef voffset, - LLVMValueRef soffset, - LLVMValueRef immoffset, - unsigned num_channels, - unsigned dfmt, - unsigned nfmt, - bool glc, - bool slc, - bool can_speculate); +ac_build_struct_tbuffer_load(struct ac_llvm_context *ctx, + LLVMValueRef rsrc, + LLVMValueRef vindex, + LLVMValueRef voffset, + LLVMValueRef soffset, + LLVMValueRef immoffset, + unsigned num_channels, + unsigned dfmt, + unsigned nfmt, + bool glc, + bool slc, + bool can_speculate); + +LLVMValueRef +ac_build_raw_tbuffer_load(struct ac_llvm_context *ctx, + LLVMValueRef rsrc, + LLVMValueRef voffset, + LLVMValueRef soffset, + LLVMValueRef immoffset, + unsigned num_channels, + unsigned dfmt, + unsigned nfmt, + bool glc, + bool slc, + bool can_speculate); LLVMValueRef ac_get_thread_id(struct ac_llvm_context *ctx); |