[Mesa-dev] [PATCH 1/3] radv/gfx10: allocate ESGS ring space for exporting PrimitiveID

Samuel Pitoiset samuel.pitoiset at gmail.com
Wed Jul 10 22:36:53 UTC 2019


Only VS needs that. We shouldn't hardcode these values but
that's complicated to not do that for now.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
---
 src/amd/vulkan/radv_shader.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index 79418b401fb..d033ed0da09 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -914,17 +914,37 @@ radv_shader_variant_create(struct radv_device *device,
 		unsigned num_lds_symbols = 0;
 		const char *elf_data = (const char *)((struct radv_shader_binary_rtld *)binary)->data;
 		size_t elf_size = ((struct radv_shader_binary_rtld *)binary)->elf_size;
+		unsigned esgs_ring_size = 0;
 
 		if (device->physical_device->rad_info.chip_class >= GFX9 &&
 		    binary->stage == MESA_SHADER_GEOMETRY && !binary->is_gs_copy_shader) {
+			/* TODO: Do not hardcode this value */
+			esgs_ring_size = 32 * 1024;
+		}
+
+		if (binary->variant_info.is_ngg) {
+			/* GS stores Primitive IDs into LDS at the address
+			 * corresponding to the ES thread of the provoking
+			 * vertex. All ES threads load and export PrimitiveID
+			 * for their thread.
+			 */
+			if (binary->stage == MESA_SHADER_VERTEX &&
+			    binary->variant_info.vs.export_prim_id) {
+				/* TODO: Do not harcode this value */
+				esgs_ring_size = 256 /* max_out_verts */ * 4;
+			}
+		}
+
+		if (esgs_ring_size) {
 			/* We add this symbol even on LLVM <= 8 to ensure that
 			 * shader->config.lds_size is set correctly below.
 			 */
 			struct ac_rtld_symbol *sym = &lds_symbols[num_lds_symbols++];
 			sym->name = "esgs_ring";
-			sym->size = 32 * 1024;
+			sym->size = esgs_ring_size;
 			sym->align = 64 * 1024;
 		}
+
 		struct ac_rtld_open_info open_info = {
 			.info = &device->physical_device->rad_info,
 			.shader_type = binary->stage,
-- 
2.22.0



More information about the mesa-dev mailing list