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. 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