On Wed, Feb 13, 2013 at 04:34:24PM +0100, Michel Dänzer wrote: > From: Michel Dänzer <michel.daen...@amd.com> > > Requires corresponding LLVM R600 backend fix to work correctly, but even > without that it doesn't hang anymore. > > 13 more little piglits. > > NOTE: This is a candidate for the 9.1 branch.
Since this change depends on a change to the LLVM backend, could you commit the LLVM change first and then add the revision number of that commit to this commit message. Something like: Depends on LLVM: r123456 This will help make it easier if we have to bisect changes. -Tom > > Signed-off-by: Michel Dänzer <michel.daen...@amd.com> > --- > src/gallium/drivers/radeonsi/radeonsi_shader.c | 11 +---------- > src/gallium/drivers/radeonsi/radeonsi_shader.h | 1 + > src/gallium/drivers/radeonsi/si_state.c | 5 ++--- > src/gallium/drivers/radeonsi/si_state_draw.c | 10 +--------- > 4 files changed, 5 insertions(+), 22 deletions(-) > > diff --git a/src/gallium/drivers/radeonsi/radeonsi_shader.c > b/src/gallium/drivers/radeonsi/radeonsi_shader.c > index 7c57f4c..704f859 100644 > --- a/src/gallium/drivers/radeonsi/radeonsi_shader.c > +++ b/src/gallium/drivers/radeonsi/radeonsi_shader.c > @@ -301,14 +301,8 @@ static void declare_input_fs( > /* XXX: Handle all possible interpolation modes */ > switch (decl->Interp.Interpolate) { > case TGSI_INTERPOLATE_COLOR: > - /* XXX: Flat shading hangs the GPU */ > - if (si_shader_ctx->rctx->queued.named.rasterizer && > - si_shader_ctx->rctx->queued.named.rasterizer->flatshade) { > -#if 0 > + if (si_shader_ctx->key.flatshade) { > intr_name = "llvm.SI.fs.interp.constant"; > -#else > - intr_name = "llvm.SI.fs.interp.linear.center"; > -#endif > } else { > if (decl->Interp.Centroid) > intr_name = "llvm.SI.fs.interp.persp.centroid"; > @@ -317,11 +311,8 @@ static void declare_input_fs( > } > break; > case TGSI_INTERPOLATE_CONSTANT: > - /* XXX: Flat shading hangs the GPU */ > -#if 0 > intr_name = "llvm.SI.fs.interp.constant"; > break; > -#endif > case TGSI_INTERPOLATE_LINEAR: > if (decl->Interp.Centroid) > intr_name = "llvm.SI.fs.interp.linear.centroid"; > diff --git a/src/gallium/drivers/radeonsi/radeonsi_shader.h > b/src/gallium/drivers/radeonsi/radeonsi_shader.h > index 07b2f9f..f54f67c 100644 > --- a/src/gallium/drivers/radeonsi/radeonsi_shader.h > +++ b/src/gallium/drivers/radeonsi/radeonsi_shader.h > @@ -82,6 +82,7 @@ struct si_shader_key { > unsigned nr_cbufs:4; > unsigned color_two_side:1; > unsigned alpha_func:3; > + unsigned flatshade:1; > float alpha_ref; > }; > > diff --git a/src/gallium/drivers/radeonsi/si_state.c > b/src/gallium/drivers/radeonsi/si_state.c > index 5cca085..6bd1055 100644 > --- a/src/gallium/drivers/radeonsi/si_state.c > +++ b/src/gallium/drivers/radeonsi/si_state.c > @@ -419,8 +419,7 @@ static void *si_create_rs_state(struct pipe_context *ctx, > rs->offset_units = state->offset_units; > rs->offset_scale = state->offset_scale * 12.0f; > > - /* XXX: Flat shading hangs the GPU */ > - tmp = S_0286D4_FLAT_SHADE_ENA(0); > + tmp = S_0286D4_FLAT_SHADE_ENA(rs->flatshade); > if (state->sprite_coord_enable) { > tmp |= S_0286D4_PNT_SPRITE_ENA(1) | > > S_0286D4_PNT_SPRITE_OVRD_X(V_0286D4_SPI_PNT_SPRITE_SEL_S) | > @@ -1875,7 +1874,7 @@ static INLINE struct si_shader_key > si_shader_selector_key(struct pipe_context *c > key.export_16bpc = rctx->export_16bpc; > if (rctx->queued.named.rasterizer) { > key.color_two_side = > rctx->queued.named.rasterizer->two_side; > - /*key.flatshade = > rctx->queued.named.rasterizer->flatshade;*/ > + key.flatshade = > rctx->queued.named.rasterizer->flatshade; > } > if (rctx->queued.named.dsa) { > key.alpha_func = rctx->queued.named.dsa->alpha_func; > diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c > b/src/gallium/drivers/radeonsi/si_state_draw.c > index 3704410..61dea74 100644 > --- a/src/gallium/drivers/radeonsi/si_state_draw.c > +++ b/src/gallium/drivers/radeonsi/si_state_draw.c > @@ -128,11 +128,6 @@ static void si_pipe_shader_ps(struct pipe_context *ctx, > struct si_pipe_shader *s > continue; > } > > - /* XXX: Flat shading hangs the GPU */ > - if (shader->shader.input[i].interpolate == > TGSI_INTERPOLATE_CONSTANT || > - (shader->shader.input[i].interpolate == > TGSI_INTERPOLATE_COLOR && > - rctx->queued.named.rasterizer->flatshade)) > - have_linear = TRUE; > if (shader->shader.input[i].interpolate == > TGSI_INTERPOLATE_LINEAR) > have_linear = TRUE; > if (shader->shader.input[i].interpolate == > TGSI_INTERPOLATE_PERSPECTIVE) > @@ -327,15 +322,12 @@ static void si_update_spi_map(struct r600_context *rctx) > bcolor: > tmp = 0; > > -#if 0 > - /* XXX: Flat shading hangs the GPU */ > if (name == TGSI_SEMANTIC_POSITION || > ps->input[i].interpolate == TGSI_INTERPOLATE_CONSTANT || > (ps->input[i].interpolate == TGSI_INTERPOLATE_COLOR && > - rctx->rasterizer && rctx->rasterizer->flatshade)) { > + rctx->ps_shader->current->key.flatshade)) { > tmp |= S_028644_FLAT_SHADE(1); > } > -#endif > > if (name == TGSI_SEMANTIC_GENERIC && > rctx->sprite_coord_enable & (1 << ps->input[i].sid)) { > -- > 1.8.1.3 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev