diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index ef50a259338..5425b9e375b 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -4657,8 +4657,16 @@ radv_pipeline_generate_hw_ngg(struct radeon_cmdbuf *ctx_cs, struct radeon_cmdbuf S_00B204_CU_EN(0xffff) | S_00B204_SPI_SHADER_LATE_ALLOC_GS_GFX10(late_alloc_wave64)); uint32_t oversub_pc_lines = late_alloc_wave64 ? pipeline->device->physical_device->rad_info.pc_lines / 4 : 0; - if (shader->info.has_ngg_culling) - oversub_pc_lines *= 3; + if (shader->info.has_ngg_culling) { + unsigned oversub_factor = 2; + + if (outinfo->param_exports > 4) + oversub_factor = 4; + else if (outinfo->param_exports > 2) + oversub_factor = 3; + + oversub_pc_lines *= oversub_factor; + } gfx10_emit_ge_pc_alloc(cs, pipeline->device->physical_device->rad_info.chip_class, oversub_pc_lines); }