[Mesa-dev] [PATCH] radeonsi: Compute correct LDS size for fragment shaders.

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Thu May 5 20:33:26 UTC 2016


No sure where the 36 came from, but we clearly need at least
48 bytes per attribute per primitive.

Signed-off-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
---
 src/gallium/drivers/radeonsi/si_shader.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index 49c498d..211db9f 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -5640,15 +5640,18 @@ static void si_shader_dump_stats(struct si_screen *sscreen,
 
 	/* Compute LDS usage for PS. */
 	if (processor == PIPE_SHADER_FRAGMENT) {
-		/* The minimum usage per wave is (num_inputs * 36). The maximum
-		 * usage is (num_inputs * 36 * 16).
+		/* The minimum usage per wave is (num_inputs * 48). The maximum
+		 * usage is (num_inputs * 48 * 16).
 		 * We can get anything in between and it varies between waves.
 		 *
+		 * The 48 bytes per input for a single primitive is equal to
+		 * 4 bytes/component * 4 components/input * 3 points.
+		 *
 		 * Other stages don't know the size at compile time or don't
 		 * allocate LDS per wave, but instead they do it per thread group.
 		 */
 		lds_per_wave = conf->lds_size * lds_increment +
-			       align(num_inputs * 36, lds_increment);
+			       align(num_inputs * 48, lds_increment);
 	}
 
 	/* Compute the per-SIMD wave counts. */
-- 
2.8.2



More information about the mesa-dev mailing list