[Mesa-dev] [PATCH] radeonsi: always allocate export memory for pixel shaders

Marek Olšák maraeo at gmail.com
Sun May 8 09:49:36 UTC 2016


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

Marek

On Sun, May 8, 2016 at 12:07 AM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
> Experiments with framebuffer-no-attachments type draw calls have shown that
> NULL exports stall terribly unless we ensure that export memory is allocated
> by the SPI.
> ---
>  src/gallium/drivers/radeonsi/si_state_shaders.c | 15 ++++++++++-----
>  1 file changed, 10 insertions(+), 5 deletions(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c
> index 0bfd7e8..11e7309 100644
> --- a/src/gallium/drivers/radeonsi/si_state_shaders.c
> +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
> @@ -688,14 +688,19 @@ static void si_shader_ps(struct si_shader *shader)
>         spi_shader_col_format = si_get_spi_shader_col_format(shader);
>         cb_shader_mask = si_get_cb_shader_mask(spi_shader_col_format);
>
> -       /* This must be non-zero for alpha-test/kill to work.
> -        * The hardware ignores the EXEC mask if no export memory is allocated.
> +       /* Ensure that some export memory is always allocated, for two reasons:
> +        *
> +        * 1) Correctness: The hardware ignores the EXEC mask if no export
> +        *    memory is allocated, so KILL and alpha test do not work correctly
> +        *    without this.
> +        * 2) Performance: Every shader needs at least a NULL export, even when
> +        *    it writes no color/depth output. The NULL export instruction
> +        *    stalls without this setting.
> +        *
>          * Don't add this to CB_SHADER_MASK.
>          */
>         if (!spi_shader_col_format &&
> -           !info->writes_z && !info->writes_stencil && !info->writes_samplemask &&
> -           (shader->selector->info.uses_kill ||
> -            shader->key.ps.epilog.alpha_func != PIPE_FUNC_ALWAYS))
> +           !info->writes_z && !info->writes_stencil && !info->writes_samplemask)
>                 spi_shader_col_format = V_028714_SPI_SHADER_32_R;
>
>         si_pm4_set_reg(pm4, R_0286CC_SPI_PS_INPUT_ENA, input_ena);
> --
> 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