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