From 6291f19f71d660b82cc16ca6af9da66f8fa33956 Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Thu, 5 May 2016 22:25:01 +0200 Subject: [PATCH] radeonsi: Compute correct LDS size for fragment shaders. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit No sure where the 36 came from, but we clearly need at least 48 bytes per attribute per primitive. Signed-off-by: Bas Nieuwenhuizen Reviewed-by: Marek Olšák --- 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 49c498da61e..211db9f6f2f 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.30.2