radeonsi: Fix up and enable flat shading.
Requires corresponding LLVM R600 backend fix to work correctly, but even without that it doesn't hang anymore. 13 more little piglits. Depends on LLVM: r175193, r175733 NOTE: This is a candidate for the 9.1 branch.
This commit is contained in:
parent
0d51906c07
commit
18272c9b1b
|
@ -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";
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -421,8 +421,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(1);
|
||||
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) |
|
||||
|
@ -1885,7 +1884,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;
|
||||
|
|
|
@ -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)) {
|
||||
|
|
Loading…
Reference in New Issue