[Mesa-dev] [PATCH] radeonsi: set IF_THRESHOLD to 4

Marek Olšák maraeo at gmail.com
Thu Aug 24 16:03:48 UTC 2017


Acked-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Thu, Aug 24, 2017 at 2:46 PM, Timothy Arceri <tarceri at itsqueeze.com> wrote:
> In 74e39de9324d it was set to 3 and it was reported that 4 caused
> tesseract to start spilling VGPRs. This no longer seems to be the
> case.
>
> Totals:
> SGPRS: 2787844 -> 2787764 (-0.00 %)
> VGPRS: 1713121 -> 1712717 (-0.02 %)
> Spilled SGPRs: 7532 -> 7532 (0.00 %)
> Spilled VGPRs: 49 -> 33 (-32.65 %)
> Private memory VGPRs: 2060 -> 2060 (0.00 %)
> Scratch size: 2200 -> 2180 (-0.91 %) dwords per thread
> Code Size: 79265520 -> 79248360 (-0.02 %) bytes
> LDS: 436 -> 436 (0.00 %) blocks
> Max Waves: 670535 -> 670608 (0.01 %)
> Wait states: 0 -> 0 (0.00 %)
>
> Before:
>  VGPR SPILLING APPS   Shaders SpillVGPR  PrivVGPR ScratchSize
>  EffectsCaveDemo          301         0       256       264
>  ReflectionsSubwayDemo    264         0       256       264
>  VehicleGame              295         0       128       132
>  bioshock-infinite       1140         0       448       516
>  dirt-showdown            453        33         0        28
>  gang-beasts              364         0       500       496
>  kerbal-space-program    1228         0       472       480
>  tomb-raider-ultra       1199        16         0        20
>
> After:
>  VGPR SPILLING APPS   Shaders SpillVGPR  PrivVGPR ScratchSize
>  EffectsCaveDemo          301         0       256       264
>  ReflectionsSubwayDemo    264         0       256       264
>  VehicleGame              295         0       128       132
>  bioshock-infinite       1140         0       448       516
>  dirt-showdown            453        33         0        28
>  gang-beasts              364         0       500       496
>  kerbal-space-program    1228         0       472       480
>
> The only change in VGPR spills is the elimination of all spills
> in Tomb Raider at Ultra settings. Closer examination shows that
> the shaders go over the limit because they contain three
> expressions a mul, rcp and ubo load. The ubo load is actually
> used elsewhere and is therefore stored in a temp already in IR
> such as tgsi but glsl ir counts it agaist the if cost.
>
> Cc: Marek Olšák <maraeo at gmail.com>
> ---
>  src/gallium/drivers/radeonsi/si_pipe.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
> index 80a77a8f1f..1d2b7528ee 100644
> --- a/src/gallium/drivers/radeonsi/si_pipe.c
> +++ b/src/gallium/drivers/radeonsi/si_pipe.c
> @@ -769,21 +769,21 @@ static int si_get_shader_param(struct pipe_screen* pscreen,
>                 return SI_NUM_IMAGES;
>         case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
>                 return 32;
>         case PIPE_SHADER_CAP_PREFERRED_IR:
>                 if (sscreen->b.debug_flags & DBG_NIR &&
>                     (shader == PIPE_SHADER_VERTEX ||
>                      shader == PIPE_SHADER_FRAGMENT))
>                         return PIPE_SHADER_IR_NIR;
>                 return PIPE_SHADER_IR_TGSI;
>         case PIPE_SHADER_CAP_LOWER_IF_THRESHOLD:
> -               return 3;
> +               return 4;
>
>         /* Supported boolean features. */
>         case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
>         case PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED:
>         case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
>         case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
>         case PIPE_SHADER_CAP_INTEGERS:
>         case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED:
>         case PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE:
>         case PIPE_SHADER_CAP_TGSI_SKIP_MERGE_REGISTERS:
> --
> 2.13.4
>


More information about the mesa-dev mailing list