On 3/13/19 1:26 AM, Timothy Arceri wrote:
This one causes 2000+ piglit tests to fail on radeonsi. For example:

./bin/shader_runner generated_tests/spec/arb_gpu_shader_fp64/execution/conversion/geom-conversion-explicit-bool-double.shader_test -auto -fbo
What chip? what LLVM?

On 13/3/19 3:19 am, Samuel Pitoiset wrote:
New buffer intrinsics have a separate soffset parameter.

Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
---
  src/amd/common/ac_llvm_build.c | 66 ++++++++++++++--------------------
  1 file changed, 26 insertions(+), 40 deletions(-)

diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c
index ce6639d49bf..8ed5199da55 100644
--- a/src/amd/common/ac_llvm_build.c
+++ b/src/amd/common/ac_llvm_build.c
@@ -1227,59 +1227,45 @@ ac_build_buffer_store_dword(struct ac_llvm_context *ctx,
      if (!swizzle_enable_hint) {
          LLVMValueRef offset = soffset;
  -        static const char *types[] = {"f32", "v2f32", "v4f32"};
-
          if (inst_offset)
              offset = LLVMBuildAdd(ctx->builder, offset,
                            LLVMConstInt(ctx->i32, inst_offset, 0), "");
-        if (voffset)
-            offset = LLVMBuildAdd(ctx->builder, offset, voffset, "");
-
-        LLVMValueRef args[] = {
-            ac_to_float(ctx, vdata),
-            LLVMBuildBitCast(ctx->builder, rsrc, ctx->v4i32, ""),
-            ctx->i32_0,
-            offset,
-            LLVMConstInt(ctx->i1, glc, 0),
-            LLVMConstInt(ctx->i1, slc, 0),
-        };
-
-        char name[256];
-        snprintf(name, sizeof(name), "llvm.amdgcn.buffer.store.%s",
-             types[CLAMP(num_channels, 1, 3) - 1]);
  -        ac_build_intrinsic(ctx, name, ctx->voidt,
-                   args, ARRAY_SIZE(args),
- ac_get_store_intr_attribs(writeonly_memory));
+        if (HAVE_LLVM >= 0x800) {
+            ac_build_llvm8_buffer_store_common(ctx, rsrc,
+                               ac_to_float(ctx, vdata),
+                               ctx->i32_0,
+                               voffset, offset,
+                               num_channels,
+                               glc, slc,
+                               writeonly_memory,
+                               false, true);
+        } else {
+            if (voffset)
+                offset = LLVMBuildAdd(ctx->builder, offset, voffset, "");
+
+            ac_build_buffer_store_common(ctx, rsrc,
+                             ac_to_float(ctx, vdata),
+                             ctx->i32_0, offset,
+                             num_channels, glc, slc,
+                             writeonly_memory, false);
+        }
          return;
      }
  -    static const unsigned dfmt[] = {
+    static const unsigned dfmts[] = {
          V_008F0C_BUF_DATA_FORMAT_32,
          V_008F0C_BUF_DATA_FORMAT_32_32,
          V_008F0C_BUF_DATA_FORMAT_32_32_32,
          V_008F0C_BUF_DATA_FORMAT_32_32_32_32
      };
-    static const char *types[] = {"i32", "v2i32", "v4i32"};
-    LLVMValueRef args[] = {
-        vdata,
-        LLVMBuildBitCast(ctx->builder, rsrc, ctx->v4i32, ""),
-        ctx->i32_0,
-        voffset ? voffset : ctx->i32_0,
-        soffset,
-        LLVMConstInt(ctx->i32, inst_offset, 0),
-        LLVMConstInt(ctx->i32, dfmt[num_channels - 1], 0),
-        LLVMConstInt(ctx->i32, V_008F0C_BUF_NUM_FORMAT_UINT, 0),
-        LLVMConstInt(ctx->i1, glc, 0),
-        LLVMConstInt(ctx->i1, slc, 0),
-    };
-    char name[256];
-    snprintf(name, sizeof(name), "llvm.amdgcn.tbuffer.store.%s",
-         types[CLAMP(num_channels, 1, 3) - 1]);
+    unsigned dfmt = dfmts[num_channels - 1];
+    unsigned nfmt = V_008F0C_BUF_NUM_FORMAT_UINT;
+    LLVMValueRef immoffset = LLVMConstInt(ctx->i32, inst_offset, 0);
  -    ac_build_intrinsic(ctx, name, ctx->voidt,
-               args, ARRAY_SIZE(args),
-               ac_get_store_intr_attribs(writeonly_memory));
+    ac_build_tbuffer_store(ctx, rsrc, vdata, ctx->i32_0, voffset, soffset,
+                   immoffset, num_channels, dfmt, nfmt, glc, slc,
+                   writeonly_memory);
  }
    static LLVMValueRef

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to