From: Marek Olšák <[email protected]>

---
 src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c 
b/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c
index c958da6..b5fad34 100644
--- a/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c
+++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c
@@ -559,25 +559,31 @@ static void load_emit(
                                                info->shader_buffers_atomic,
                                                info->images_store |
                                                info->images_atomic);
 
        if (inst->Src[0].Register.File == TGSI_FILE_BUFFER) {
                load_emit_buffer(ctx, emit_data, can_speculate, false);
                return;
        }
 
        if (inst->Memory.Texture == TGSI_TEXTURE_BUFFER) {
+               unsigned num_channels = 
util_last_bit(inst->Dst[0].Register.WriteMask);
+               LLVMValueRef result =
+                       ac_build_buffer_load_format(&ctx->ac,
+                                                   emit_data->args[0],
+                                                   emit_data->args[1],
+                                                   emit_data->args[2],
+                                                   num_channels,
+                                                   
LLVMConstIntGetZExtValue(emit_data->args[3]),
+                                                   can_speculate);
                emit_data->output[emit_data->chan] =
-                       lp_build_intrinsic(
-                               builder, 
"llvm.amdgcn.buffer.load.format.v4f32", emit_data->dst_type,
-                               emit_data->args, emit_data->arg_count,
-                               ac_get_load_intr_attribs(can_speculate));
+                       ac_build_expand_to_vec4(&ctx->ac, result, num_channels);
        } else {
                ac_get_image_intr_name("llvm.amdgcn.image.load",
                                       emit_data->dst_type,             /* 
vdata */
                                       LLVMTypeOf(emit_data->args[0]), /* 
coords */
                                       LLVMTypeOf(emit_data->args[1]), /* rsrc 
*/
                                       intrinsic_name, sizeof(intrinsic_name));
 
                emit_data->output[emit_data->chan] =
                        lp_build_intrinsic(
                                builder, intrinsic_name, emit_data->dst_type,
-- 
2.7.4

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to