Mesa (master): ac/nir: use ac_build_buffer_load() for SSBO load operations
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Mar 20 21:19:15 UTC 2019
Module: Mesa
Branch: master
Commit: 6b573c00c9156297513a0783ef05a1c5601e6620
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6b573c00c9156297513a0783ef05a1c5601e6620
Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date: Tue Mar 12 10:20:11 2019 +0100
ac/nir: use ac_build_buffer_load() for SSBO load operations
Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
---
src/amd/common/ac_nir_to_llvm.c | 35 ++++++-----------------------------
1 file changed, 6 insertions(+), 29 deletions(-)
diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index ca198775f51..532427d8a01 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -1706,7 +1706,6 @@ static LLVMValueRef visit_load_buffer(struct ac_nir_context *ctx,
int num_components = instr->num_components;
enum gl_access_qualifier access = nir_intrinsic_access(instr);
unsigned cache_policy = get_cache_policy(ctx, access, false, false);
- LLVMValueRef glc = (cache_policy & ac_glc) ? ctx->ac.i1true : ctx->ac.i1false;
LLVMValueRef offset = get_src(ctx, instr->src[1]);
LLVMValueRef rsrc = ctx->abi->load_ssbo(ctx->abi,
@@ -1736,34 +1735,12 @@ static LLVMValueRef visit_load_buffer(struct ac_nir_context *ctx,
immoffset,
cache_policy & ac_glc);
} else {
- const char *load_name;
- LLVMTypeRef data_type;
- switch (load_bytes) {
- case 16:
- case 12:
- load_name = "llvm.amdgcn.buffer.load.v4f32";
- data_type = ctx->ac.v4f32;
- break;
- case 8:
- case 6:
- load_name = "llvm.amdgcn.buffer.load.v2f32";
- data_type = ctx->ac.v2f32;
- break;
- case 4:
- load_name = "llvm.amdgcn.buffer.load.f32";
- data_type = ctx->ac.f32;
- break;
- default:
- unreachable("Malformed load buffer.");
- }
- LLVMValueRef params[] = {
- rsrc,
- vindex,
- LLVMBuildAdd(ctx->ac.builder, offset, immoffset, ""),
- glc,
- ctx->ac.i1false,
- };
- ret = ac_build_intrinsic(&ctx->ac, load_name, data_type, params, 5, 0);
+ int num_channels = util_next_power_of_two(load_bytes) / 4;
+
+ ret = ac_build_buffer_load(&ctx->ac, rsrc, num_channels,
+ vindex, offset, immoffset, 0,
+ cache_policy & ac_glc, 0,
+ false, false);
}
LLVMTypeRef byte_vec = LLVMVectorType(ctx->ac.i8, ac_get_type_size(LLVMTypeOf(ret)));
More information about the mesa-commit
mailing list