This patch is r-b.
On Wed, Oct 3, 2018 at 11:07 PM Samuel Pitoiset
<samuel.pitoi...@gmail.com> wrote:
>
> This fixes some new memory model tests:
> dEQP-VK.memory_model.message_passing.core11.u32.coherent.fence_fence.atomicwrite.device.*
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108112
> Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
> ---
>  src/amd/common/ac_llvm_build.c  |  5 +++--
>  src/amd/common/ac_llvm_build.h  |  3 ++-
>  src/amd/common/ac_nir_to_llvm.c | 22 +++++++++++++++++-----
>  3 files changed, 22 insertions(+), 8 deletions(-)
>
> diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c
> index ab0ba09c83..5228a5e326 100644
> --- a/src/amd/common/ac_llvm_build.c
> +++ b/src/amd/common/ac_llvm_build.c
> @@ -1164,7 +1164,8 @@ ac_build_tbuffer_load_short(struct ac_llvm_context *ctx,
>                             LLVMValueRef vindex,
>                             LLVMValueRef voffset,
>                                 LLVMValueRef soffset,
> -                               LLVMValueRef immoffset)
> +                               LLVMValueRef immoffset,
> +                               LLVMValueRef glc)
>  {
>         const char *name = "llvm.amdgcn.tbuffer.load.i32";
>         LLVMTypeRef type = ctx->i32;
> @@ -1176,7 +1177,7 @@ ac_build_tbuffer_load_short(struct ac_llvm_context *ctx,
>                                 immoffset,
>                                 LLVMConstInt(ctx->i32, 
> V_008F0C_BUF_DATA_FORMAT_16, false),
>                                 LLVMConstInt(ctx->i32, 
> V_008F0C_BUF_NUM_FORMAT_UINT, false),
> -                               ctx->i1false,
> +                               glc,
>                                 ctx->i1false,
>         };
>         LLVMValueRef res = ac_build_intrinsic(ctx, name, type, params, 9, 0);
> diff --git a/src/amd/common/ac_llvm_build.h b/src/amd/common/ac_llvm_build.h
> index 0df9234c66..784b50f1af 100644
> --- a/src/amd/common/ac_llvm_build.h
> +++ b/src/amd/common/ac_llvm_build.h
> @@ -271,7 +271,8 @@ ac_build_tbuffer_load_short(struct ac_llvm_context *ctx,
>                             LLVMValueRef vindex,
>                             LLVMValueRef voffset,
>                                 LLVMValueRef soffset,
> -                               LLVMValueRef immoffset);
> +                               LLVMValueRef immoffset,
> +                               LLVMValueRef glc);
>
>  LLVMValueRef
>  ac_get_thread_id(struct ac_llvm_context *ctx);
> diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
> index b01309cc2a..d8ce7f52bd 100644
> --- a/src/amd/common/ac_nir_to_llvm.c
> +++ b/src/amd/common/ac_nir_to_llvm.c
> @@ -1456,6 +1456,11 @@ static void visit_store_ssbo(struct ac_nir_context 
> *ctx,
>         LLVMValueRef src_data = get_src(ctx, instr->src[0]);
>         int elem_size_bytes = ac_get_elem_bits(&ctx->ac, 
> LLVMTypeOf(src_data)) / 8;
>         unsigned writemask = nir_intrinsic_write_mask(instr);
> +       enum gl_access_qualifier access = nir_intrinsic_access(instr);
> +       LLVMValueRef glc = ctx->ac.i1false;
> +
> +       if (access & (ACCESS_VOLATILE | ACCESS_COHERENT))
> +               glc = ctx->ac.i1true;
>
>         LLVMValueRef rsrc = ctx->abi->load_ssbo(ctx->abi,
>                                         get_src(ctx, instr->src[1]), true);
> @@ -1512,7 +1517,7 @@ static void visit_store_ssbo(struct ac_nir_context *ctx,
>                                 ctx->ac.i32_0,
>                                 LLVMConstInt(ctx->ac.i32, 2, false), // dfmt 
> (= 16bit)
>                                 LLVMConstInt(ctx->ac.i32, 4, false), // nfmt 
> (= uint)
> -                               ctx->ac.i1false,
> +                               glc,
>                                 ctx->ac.i1false,
>                         };
>                         ac_build_intrinsic(&ctx->ac, store_name,
> @@ -1540,7 +1545,7 @@ static void visit_store_ssbo(struct ac_nir_context *ctx,
>                                 rsrc,
>                                 ctx->ac.i32_0, /* vindex */
>                                 offset,
> -                               ctx->ac.i1false,  /* glc */
> +                               glc,
>                                 ctx->ac.i1false,  /* slc */
>                         };
>                         ac_build_intrinsic(&ctx->ac, store_name,
> @@ -1613,6 +1618,11 @@ static LLVMValueRef visit_load_buffer(struct 
> ac_nir_context *ctx,
>         int elem_size_bytes = instr->dest.ssa.bit_size / 8;
>         int num_components = instr->num_components;
>         int num_bytes = num_components * elem_size_bytes;
> +       enum gl_access_qualifier access = nir_intrinsic_access(instr);
> +       LLVMValueRef glc = ctx->ac.i1false;
> +
> +       if (access & (ACCESS_VOLATILE | ACCESS_COHERENT))
> +               glc = ctx->ac.i1true;
>
>         for (int i = 0; i < num_bytes; i += load_bytes) {
>                 load_bytes = MIN2(num_bytes - i, 16);
> @@ -1631,7 +1641,8 @@ static LLVMValueRef visit_load_buffer(struct 
> ac_nir_context *ctx,
>                                                                    vindex,
>                                                                    offset,
>                                                                    
> ctx->ac.i32_0,
> -                                                                  immoffset);
> +                                                                  immoffset,
> +                                                                  glc);
>                 } else {
>                         switch (load_bytes) {
>                         case 16:
> @@ -1655,7 +1666,7 @@ static LLVMValueRef visit_load_buffer(struct 
> ac_nir_context *ctx,
>                                 rsrc,
>                                 vindex,
>                                 LLVMBuildAdd(ctx->ac.builder, offset, 
> immoffset, ""),
> -                               ctx->ac.i1false,
> +                               glc,
>                                 ctx->ac.i1false,
>                         };
>                         results[idx] = ac_build_intrinsic(&ctx->ac, 
> load_name, data_type, params, 5, 0);
> @@ -1709,7 +1720,8 @@ static LLVMValueRef visit_load_ubo_buffer(struct 
> ac_nir_context *ctx,
>                                                                  
> ctx->ac.i32_0,
>                                                                  offset,
>                                                                  
> ctx->ac.i32_0,
> -                                                                
> LLVMConstInt(ctx->ac.i32, 2 * i, 0));
> +                                                                
> LLVMConstInt(ctx->ac.i32, 2 * i, 0),
> +                                                                
> ctx->ac.i1false);
>                 }
>                 ret = ac_build_gather_values(&ctx->ac, results, 
> num_components);
>         } else {
> --
> 2.19.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to