[Mesa-dev] [PATCH 1/2] radeonsi: don't enable scratch just for SGPR spills

Ilia Mirkin imirkin at alum.mit.edu
Tue Jun 7 23:07:30 UTC 2016


On Tue, Jun 7, 2016 at 7:05 PM, Marek Olšák <maraeo at gmail.com> wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> Diff from shader-db:
>   Scratch: 3221504 -> 17408 (-99.46 %) bytes per wave
> ---
>  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;

Not sure how many of these there can be, but you might want to add a
break here so you don't keep going after having found one.

> +       }
>
>         /* 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:
>                         {
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list