Mesa (master): radv/gfx10: unconditionally declare scratch space for NGG streamout without GS

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Sep 16 10:12:47 UTC 2019


Module: Mesa
Branch: master
Commit: 67093ed3a339c5014d9ba34e6e7bc7cf0e329170
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=67093ed3a339c5014d9ba34e6e7bc7cf0e329170

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Mon Sep  9 10:32:10 2019 +0200

radv/gfx10: unconditionally declare scratch space for NGG streamout without GS

Streamout outputs are stored in the ESGS ring.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

---

 src/amd/vulkan/radv_nir_to_llvm.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c b/src/amd/vulkan/radv_nir_to_llvm.c
index 5019fa301c1..4454502cc31 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -4190,6 +4190,28 @@ LLVMModuleRef ac_translate_nir_to_llvm(struct ac_llvm_compiler *ac_llvm,
 	    shaders[shader_count - 1]->info.stage == MESA_SHADER_TESS_CTRL)
 		ac_nir_fixup_ls_hs_input_vgprs(&ctx);
 
+	if (shaders[shader_count - 1]->info.stage != MESA_SHADER_GEOMETRY &&
+	    (ctx.options->key.vs_common_out.as_ngg &&
+	     !ctx.options->key.vs_common_out.as_es)) {
+		/* Unconditionally declare scratch space base for streamout and
+		 * vertex compaction. Whether space is actually allocated is
+		 * determined during linking / PM4 creation.
+		 *
+		 * Add an extra dword per vertex to ensure an odd stride, which
+		 * avoids bank conflicts for SoA accesses.
+		 */
+		declare_esgs_ring(&ctx);
+
+		/* This is really only needed when streamout and / or vertex
+		 * compaction is enabled.
+		 */
+		LLVMTypeRef asi32 = LLVMArrayType(ctx.ac.i32, 8);
+		ctx.gs_ngg_scratch = LLVMAddGlobalInAddressSpace(ctx.ac.module,
+			asi32, "ngg_scratch", AC_ADDR_SPACE_LDS);
+		LLVMSetInitializer(ctx.gs_ngg_scratch, LLVMGetUndef(asi32));
+		LLVMSetAlignment(ctx.gs_ngg_scratch, 4);
+	}
+
 	for(int i = 0; i < shader_count; ++i) {
 		ctx.stage = shaders[i]->info.stage;
 		ctx.shader = shaders[i];




More information about the mesa-commit mailing list