nv50: add support for light-twoside

This commit is contained in:
Christoph Bumiller 2009-09-14 20:52:52 +02:00
parent 6516594c8e
commit 4d7b4781c8
2 changed files with 22 additions and 0 deletions

View File

@ -2051,6 +2051,11 @@ nv50_program_tx_prep(struct nv50_pc *pc)
si = d->Semantic.SemanticIndex;
switch (d->Semantic.SemanticName) {
case TGSI_SEMANTIC_BCOLOR:
p->cfg.two_side[si].hw = first;
if (p->cfg.io_nr > first)
p->cfg.io_nr = first;
break;
/*
case TGSI_SEMANTIC_CLIP_DISTANCE:
p->cfg.clpd = MIN2(p->cfg.clpd, first);
@ -2128,6 +2133,11 @@ nv50_program_tx_prep(struct nv50_pc *pc)
p->cfg.io[i].mask |= 1 << c;
}
}
for (c = 0; c < 2; ++c)
if (p->cfg.two_side[c].hw < 0x40)
p->cfg.two_side[c] = p->cfg.io[
p->cfg.two_side[c].hw];
} else
if (p->type == PIPE_SHADER_FRAGMENT) {
int rid, aid;
@ -2741,6 +2751,15 @@ nv50_linkage_validate(struct nv50_context *nv50)
}
reg[0] |= m << 8; /* adjust BFC0 id */
/* if light_twoside is active, it seems FFC0_ID == BFC0_ID is bad */
if (nv50->rasterizer->pipe.light_twoside) {
vpo = &vp->cfg.two_side[0];
m = nv50_sreg4_map(map, m, lin, &fp->cfg.two_side[0], &vpo[0]);
m = nv50_sreg4_map(map, m, lin, &fp->cfg.two_side[1], &vpo[1]);
}
reg[0] += m - 4; /* adjust FFC0 id */
reg[4] |= m << 8; /* set mid where 'normal' FP inputs start */

View File

@ -276,6 +276,9 @@ nv50_rasterizer_state_create(struct pipe_context *pipe,
so_method(so, tesla, 0x1684, 1);
so_data (so, cso->flatshade_first ? 0 : 1);
so_method(so, tesla, NV50TCL_VERTEX_TWO_SIDE_ENABLE, 1);
so_data (so, cso->light_twoside);
so_method(so, tesla, NV50TCL_LINE_WIDTH, 1);
so_data (so, fui(cso->line_width));
so_method(so, tesla, NV50TCL_LINE_SMOOTH_ENABLE, 1);