On 26.02.2017 02:58, Marek Olšák wrote:
> From: Marek Olšák <marek.ol...@amd.com>
> 
> ---
>  src/amd/common/ac_llvm_build.c           | 11 +++++++++--
>  src/amd/common/ac_llvm_build.h           |  3 ++-
>  src/gallium/drivers/radeonsi/si_shader.c | 20 ++++++++++----------
>  3 files changed, 21 insertions(+), 13 deletions(-)
> 
> diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c
> index 42965b6..f0ab9cb 100644
> --- a/src/amd/common/ac_llvm_build.c
> +++ b/src/amd/common/ac_llvm_build.c
> @@ -612,21 +612,22 @@ ac_build_tbuffer_store_dwords(struct ac_llvm_context 
> *ctx,
>  
>  LLVMValueRef
>  ac_build_buffer_load(struct ac_llvm_context *ctx,
>                    LLVMValueRef rsrc,
>                    int num_channels,
>                    LLVMValueRef vindex,
>                    LLVMValueRef voffset,
>                    LLVMValueRef soffset,
>                    unsigned inst_offset,
>                    unsigned glc,
> -                  unsigned slc)
> +                  unsigned slc,
> +                  bool readonly_memory)
>  {
>       unsigned func = CLAMP(num_channels, 1, 3) - 1;
>  
>       if (HAVE_LLVM >= 0x309) {
>               LLVMValueRef args[] = {
>                       LLVMBuildBitCast(ctx->builder, rsrc, ctx->v4i32, ""),
>                       vindex ? vindex : LLVMConstInt(ctx->i32, 0, 0),
>                       LLVMConstInt(ctx->i32, inst_offset, 0),
>                       LLVMConstInt(ctx->i1, glc, 0),
>                       LLVMConstInt(ctx->i1, slc, 0)
> @@ -644,21 +645,27 @@ ac_build_buffer_load(struct ac_llvm_context *ctx,
>  
>               if (soffset) {
>                       args[2] = LLVMBuildAdd(ctx->builder, args[2], soffset,
>                                              "");
>               }
>  
>               snprintf(name, sizeof(name), "llvm.amdgcn.buffer.load.%s",
>                        type_names[func]);
>  
>               return ac_emit_llvm_intrinsic(ctx, name, types[func], args,
> -                                           ARRAY_SIZE(args), 
> AC_FUNC_ATTR_READONLY);
> +                                           ARRAY_SIZE(args),
> +                                           /* READNONE means writes can't
> +                                            * affect it, while READONLY means
> +                                            * that writes can affect it. */
> +                                           readonly_memory ?
> +                                                   AC_FUNC_ATTR_READNONE :
> +                                                   AC_FUNC_ATTR_READONLY);

You probably swapped the arguments, i.e. when "readonly_memory == true",
you're passing AC_FUNC_ATTR_READNONE instead of AC_FUNC_ATTR_READONLY.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to