<div dir="ltr"><div>If the shader is monolithic, the value of SPI_PS_INPUT_ENA that is generated by LLVM is used as-is.</div><div><br></div><div>Marek<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jun 21, 2019 at 7:03 PM Bas Nieuwenhuizen <<a href="mailto:bas@basnieuwenhuizen.nl">bas@basnieuwenhuizen.nl</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Doesn't this cause assertions in si_shader_ps() for monolithic<br>
shaders? Some of these assertions check that at least one bit in a<br>
group is set and I think we end up with input_ena = 0 for monolithic<br>
shaders now?<br>
<br>
On Thu, Jun 20, 2019 at 6:20 AM Marek Olšák <<a href="mailto:maraeo@gmail.com" target="_blank">maraeo@gmail.com</a>> wrote:<br>
><br>
> From: Marek Olšák <<a href="mailto:marek.olsak@amd.com" target="_blank">marek.olsak@amd.com</a>><br>
><br>
> The driver doesn't use these values and ac_rtld has assertions<br>
> expecting the value of 0.<br>
> ---<br>
>  src/gallium/drivers/radeonsi/si_shader.c | 39 ++++++++++++++++--------<br>
>  1 file changed, 26 insertions(+), 13 deletions(-)<br>
><br>
> diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c<br>
> index 54b29d0ae01..0489399b827 100644<br>
> --- a/src/gallium/drivers/radeonsi/si_shader.c<br>
> +++ b/src/gallium/drivers/radeonsi/si_shader.c<br>
> @@ -6128,21 +6128,22 @@ static void si_get_ps_prolog_key(struct si_shader *shader,<br>
>                  key->ps_prolog.states.bc_optimize_for_linear);<br>
>         key->ps_prolog.ancillary_vgpr_index = shader->info.ancillary_vgpr_index;<br>
><br>
>         if (info->colors_read) {<br>
>                 unsigned *color = shader->selector->color_attr_index;<br>
><br>
>                 if (shader->key.part.ps.prolog.color_two_side) {<br>
>                         /* BCOLORs are stored after the last input. */<br>
>                         key->ps_prolog.num_interp_inputs = info->num_inputs;<br>
>                         key->ps_prolog.face_vgpr_index = shader->info.face_vgpr_index;<br>
> -                       shader->config.spi_ps_input_ena |= S_0286CC_FRONT_FACE_ENA(1);<br>
> +                       if (separate_prolog)<br>
> +                               shader->config.spi_ps_input_ena |= S_0286CC_FRONT_FACE_ENA(1);<br>
>                 }<br>
><br>
>                 for (unsigned i = 0; i < 2; i++) {<br>
>                         unsigned interp = info->input_interpolate[color[i]];<br>
>                         unsigned location = info->input_interpolate_loc[color[i]];<br>
><br>
>                         if (!(info->colors_read & (0xf << i*4)))<br>
>                                 continue;<br>
><br>
>                         key->ps_prolog.color_attr_index[i] = color[i];<br>
> @@ -6159,66 +6160,78 @@ static void si_get_ps_prolog_key(struct si_shader *shader,<br>
>                         case TGSI_INTERPOLATE_COLOR:<br>
>                                 /* Force the interpolation location for colors here. */<br>
>                                 if (shader->key.part.ps.prolog.force_persp_sample_interp)<br>
>                                         location = TGSI_INTERPOLATE_LOC_SAMPLE;<br>
>                                 if (shader->key.part.ps.prolog.force_persp_center_interp)<br>
>                                         location = TGSI_INTERPOLATE_LOC_CENTER;<br>
><br>
>                                 switch (location) {<br>
>                                 case TGSI_INTERPOLATE_LOC_SAMPLE:<br>
>                                         key->ps_prolog.color_interp_vgpr_index[i] = 0;<br>
> -                                       shader->config.spi_ps_input_ena |=<br>
> -                                               S_0286CC_PERSP_SAMPLE_ENA(1);<br>
> +                                       if (separate_prolog) {<br>
> +                                               shader->config.spi_ps_input_ena |=<br>
> +                                                       S_0286CC_PERSP_SAMPLE_ENA(1);<br>
> +                                       }<br>
>                                         break;<br>
>                                 case TGSI_INTERPOLATE_LOC_CENTER:<br>
>                                         key->ps_prolog.color_interp_vgpr_index[i] = 2;<br>
> -                                       shader->config.spi_ps_input_ena |=<br>
> -                                               S_0286CC_PERSP_CENTER_ENA(1);<br>
> +                                       if (separate_prolog) {<br>
> +                                               shader->config.spi_ps_input_ena |=<br>
> +                                                       S_0286CC_PERSP_CENTER_ENA(1);<br>
> +                                       }<br>
>                                         break;<br>
>                                 case TGSI_INTERPOLATE_LOC_CENTROID:<br>
>                                         key->ps_prolog.color_interp_vgpr_index[i] = 4;<br>
> -                                       shader->config.spi_ps_input_ena |=<br>
> -                                               S_0286CC_PERSP_CENTROID_ENA(1);<br>
> +                                       if (separate_prolog) {<br>
> +                                               shader->config.spi_ps_input_ena |=<br>
> +                                                       S_0286CC_PERSP_CENTROID_ENA(1);<br>
> +                                       }<br>
>                                         break;<br>
>                                 default:<br>
>                                         assert(0);<br>
>                                 }<br>
>                                 break;<br>
>                         case TGSI_INTERPOLATE_LINEAR:<br>
>                                 /* Force the interpolation location for colors here. */<br>
>                                 if (shader->key.part.ps.prolog.force_linear_sample_interp)<br>
>                                         location = TGSI_INTERPOLATE_LOC_SAMPLE;<br>
>                                 if (shader->key.part.ps.prolog.force_linear_center_interp)<br>
>                                         location = TGSI_INTERPOLATE_LOC_CENTER;<br>
><br>
>                                 /* The VGPR assignment for non-monolithic shaders<br>
>                                  * works because InitialPSInputAddr is set on the<br>
>                                  * main shader and PERSP_PULL_MODEL is never used.<br>
>                                  */<br>
>                                 switch (location) {<br>
>                                 case TGSI_INTERPOLATE_LOC_SAMPLE:<br>
>                                         key->ps_prolog.color_interp_vgpr_index[i] =<br>
>                                                 separate_prolog ? 6 : 9;<br>
> -                                       shader->config.spi_ps_input_ena |=<br>
> -                                               S_0286CC_LINEAR_SAMPLE_ENA(1);<br>
> +                                       if (separate_prolog) {<br>
> +                                               shader->config.spi_ps_input_ena |=<br>
> +                                                       S_0286CC_LINEAR_SAMPLE_ENA(1);<br>
> +                                       }<br>
>                                         break;<br>
>                                 case TGSI_INTERPOLATE_LOC_CENTER:<br>
>                                         key->ps_prolog.color_interp_vgpr_index[i] =<br>
>                                                 separate_prolog ? 8 : 11;<br>
> -                                       shader->config.spi_ps_input_ena |=<br>
> -                                               S_0286CC_LINEAR_CENTER_ENA(1);<br>
> +                                       if (separate_prolog) {<br>
> +                                               shader->config.spi_ps_input_ena |=<br>
> +                                                       S_0286CC_LINEAR_CENTER_ENA(1);<br>
> +                                       }<br>
>                                         break;<br>
>                                 case TGSI_INTERPOLATE_LOC_CENTROID:<br>
>                                         key->ps_prolog.color_interp_vgpr_index[i] =<br>
>                                                 separate_prolog ? 10 : 13;<br>
> -                                       shader->config.spi_ps_input_ena |=<br>
> -                                               S_0286CC_LINEAR_CENTROID_ENA(1);<br>
> +                                       if (separate_prolog) {<br>
> +                                               shader->config.spi_ps_input_ena |=<br>
> +                                                       S_0286CC_LINEAR_CENTROID_ENA(1);<br>
> +                                       }<br>
>                                         break;<br>
>                                 default:<br>
>                                         assert(0);<br>
>                                 }<br>
>                                 break;<br>
>                         default:<br>
>                                 assert(0);<br>
>                         }<br>
>                 }<br>
>         }<br>
> --<br>
> 2.17.1<br>
><br>
> _______________________________________________<br>
> mesa-dev mailing list<br>
> <a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a><br>
> <a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</blockquote></div></div>