<div dir="ltr">I'm surprised it does not do a idxen and swizzling, but with the current code, this is<div><br></div><div>Reviewed-by:  Bas Nieuwenhuizen <<a href="mailto:bas@basnieuwenhuizen.nl">bas@basnieuwenhuizen.nl</a>></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Feb 1, 2018 at 4:37 PM, Samuel Pitoiset <span dir="ltr"><<a href="mailto:samuel.pitoiset@gmail.com" target="_blank">samuel.pitoiset@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The old one generates useless instructions in there, found while<br>
comparing geometry shaders between RadeonSI and RADV.<br>
<br>
This improves all Vulkan demos that use geometry shaders, +4%<br>
for deferredshadows, +9% for viewportarray, +7% for<br>
geometryshader on Polaris10.<br>
<br>
This seems to also improve DOW3 a little bit (+1%).<br>
<br>
Signed-off-by: Samuel Pitoiset <<a href="mailto:samuel.pitoiset@gmail.com">samuel.pitoiset@gmail.com</a>><br>
---<br>
 src/amd/common/ac_nir_to_llvm.<wbr>c | 52 ++++++++++++++++--------------<wbr>-----------<br>
 1 file changed, 20 insertions(+), 32 deletions(-)<br>
<br>
diff --git a/src/amd/common/ac_nir_to_<wbr>llvm.c b/src/amd/common/ac_nir_to_<wbr>llvm.c<br>
index 5c5594956b..f89012bfe9 100644<br>
--- a/src/amd/common/ac_nir_to_<wbr>llvm.c<br>
+++ b/src/amd/common/ac_nir_to_<wbr>llvm.c<br>
@@ -3063,7 +3063,6 @@ load_gs_input(struct ac_shader_abi *abi,<br>
 {<br>
        struct nir_to_llvm_context *ctx = nir_to_llvm_context_from_abi(<wbr>abi);<br>
        LLVMValueRef vtx_offset;<br>
-       LLVMValueRef args[9];<br>
        unsigned param, vtx_offset_param;<br>
        LLVMValueRef value[4], result;<br>
<br>
@@ -3081,20 +3080,16 @@ load_gs_input(struct ac_shader_abi *abi,<br>
                                               LLVMConstInt(ctx->ac.i32, param * 4 + i + const_index, 0), "");<br>
                        value[i] = ac_lds_load(&ctx->ac, dw_addr);<br>
                } else {<br>
-                       args[0] = ctx->esgs_ring;<br>
-                       args[1] = vtx_offset;<br>
-                       args[2] = LLVMConstInt(ctx->ac.i32, (param * 4 + i + const_index) * 256, false);<br>
-                       args[3] = ctx->ac.i32_0;<br>
-                       args[4] = ctx->ac.i32_1; /* OFFEN */<br>
-                       args[5] = ctx->ac.i32_0; /* IDXEN */<br>
-                       args[6] = ctx->ac.i32_1; /* GLC */<br>
-                       args[7] = ctx->ac.i32_0; /* SLC */<br>
-                       args[8] = ctx->ac.i32_0; /* TFE */<br>
-<br>
-                       value[i] = ac_build_intrinsic(&ctx->ac, "llvm.SI.buffer.load.dword.<wbr>i32.i32",<br>
-                                                     ctx->ac.i32, args, 9,<br>
-                                                     AC_FUNC_ATTR_READONLY |<br>
-                                                     AC_FUNC_ATTR_LEGACY);<br>
+                       LLVMValueRef soffset =<br>
+                               LLVMConstInt(ctx->ac.i32,<br>
+                                            (param * 4 + i + const_index) * 256,<br>
+                                            false);<br>
+<br>
+                       value[i] = ac_build_buffer_load(&ctx->ac,<br>
+                                                       ctx->esgs_ring, 1,<br>
+                                                       ctx->ac.i32_0,<br>
+                                                       vtx_offset, soffset,<br>
+                                                       0, 1, 0, true, false);<br>
                }<br>
        }<br>
        result = ac_build_varying_gather_<wbr>values(&ctx->ac, value, num_components, component);<br>
@@ -7213,16 +7208,9 @@ void ac_compile_nir_shader(<wbr>LLVMTargetMachineRef tm,<br>
 static void<br>
 ac_gs_copy_shader_emit(struct nir_to_llvm_context *ctx)<br>
 {<br>
-       LLVMValueRef args[9];<br>
-       args[0] = ctx->gsvs_ring;<br>
-       args[1] = LLVMBuildMul(ctx->builder, ctx->abi.vertex_id, LLVMConstInt(ctx->ac.i32, 4, false), "");<br>
-       args[3] = ctx->ac.i32_0;<br>
-       args[4] = ctx->ac.i32_1;  /* OFFEN */<br>
-       args[5] = ctx->ac.i32_0; /* IDXEN */<br>
-       args[6] = ctx->ac.i32_1;  /* GLC */<br>
-       args[7] = ctx->ac.i32_1;  /* SLC */<br>
-       args[8] = ctx->ac.i32_0; /* TFE */<br>
-<br>
+       LLVMValueRef vtx_offset =<br>
+               LLVMBuildMul(ctx->builder, ctx->abi.vertex_id,<br>
+                            LLVMConstInt(ctx->ac.i32, 4, false), "");<br>
        int idx = 0;<br>
<br>
        for (unsigned i = 0; i < RADEON_LLVM_MAX_OUTPUTS; ++i) {<br>
@@ -7240,16 +7228,16 @@ ac_gs_copy_shader_emit(struct nir_to_llvm_context *ctx)<br>
                }<br>
<br>
                for (unsigned j = 0; j < length; j++) {<br>
-                       LLVMValueRef value;<br>
-                       args[2] = LLVMConstInt(ctx->ac.i32,<br>
+                       LLVMValueRef value, soffset;<br>
+<br>
+                       soffset = LLVMConstInt(ctx->ac.i32,<br>
                                               (slot * 4 + j) *<br>
                                               ctx->gs_max_out_vertices * 16 * 4, false);<br>
<br>
-                       value = ac_build_intrinsic(&ctx->ac,<br>
-                                                  "llvm.SI.buffer.load.dword.<wbr>i32.i32",<br>
-                                                  ctx->ac.i32, args, 9,<br>
-                                                  AC_FUNC_ATTR_READONLY |<br>
-                                                  AC_FUNC_ATTR_LEGACY);<br>
+                       value = ac_build_buffer_load(&ctx->ac, ctx->gsvs_ring,<br>
+                                                    1, ctx->ac.i32_0,<br>
+                                                    vtx_offset, soffset,<br>
+                                                    0, 1, 1, true, false);<br>
<br>
                        LLVMBuildStore(ctx->builder,<br>
                                       ac_to_float(&ctx->ac, value), ctx->nir->outputs[radeon_llvm_<wbr>reg_index_soa(i, j)]);<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.16.1<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div>