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.pitoi...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev