On 08.06.2016 01:05, Marek Olšák wrote:
From: Marek Olšák <marek.ol...@amd.com>

Diff from shader-db:
   Scratch: 3221504 -> 17408 (-99.46 %) bytes per wave

Wow.

This really needs to be fixed in LLVM. In the meantime, this series is

Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com>

---
  src/gallium/drivers/radeonsi/si_shader.c | 17 +++++++++++++++--
  1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index 6e8eefb..d392807 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -5825,6 +5825,18 @@ void si_shader_binary_read_config(struct 
radeon_shader_binary *binary,
        unsigned i;
        const unsigned char *config =
                radeon_shader_binary_config_start(binary, symbol_offset);
+       bool really_needs_scratch = false;
+
+       /* LLVM adds SGPR spills to the scratch size.
+        * Find out if we really need the scratch buffer.
+        */
+       for (i = 0; i < binary->reloc_count; i++) {
+               const struct radeon_shader_reloc *reloc = &binary->relocs[i];
+
+               if (!strcmp(scratch_rsrc_dword0_symbol, reloc->name) ||
+                   !strcmp(scratch_rsrc_dword1_symbol, reloc->name))
+                       really_needs_scratch = true;
+       }

        /* XXX: We may be able to emit some of these values directly rather than
         * extracting fields to be emitted later.
@@ -5859,8 +5871,9 @@ void si_shader_binary_read_config(struct 
radeon_shader_binary *binary,
                case R_0286E8_SPI_TMPRING_SIZE:
                case R_00B860_COMPUTE_TMPRING_SIZE:
                        /* WAVESIZE is in units of 256 dwords. */
-                       conf->scratch_bytes_per_wave =
-                               G_00B860_WAVESIZE(value) * 256 * 4 * 1;
+                       if (really_needs_scratch)
+                               conf->scratch_bytes_per_wave =
+                                       G_00B860_WAVESIZE(value) * 256 * 4;
                        break;
                default:
                        {

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to