Christoph Bumiller
2009-Sep-12 19:33 UTC
[PATCH 11/13] nv50: add support for light-twoside
--- src/gallium/drivers/nv50/nv50_program.c | 19 +++++++++++++++++++ src/gallium/drivers/nv50/nv50_state.c | 4 +++- 2 files changed, 22 insertions(+), 1 deletions(-) diff --git a/src/gallium/drivers/nv50/nv50_program.c b/src/gallium/drivers/nv50/nv50_program.c index feb1504..39c3afc 100644 --- a/src/gallium/drivers/nv50/nv50_program.c +++ b/src/gallium/drivers/nv50/nv50_program.c @@ -2048,6 +2048,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_id = 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); @@ -2125,6 +2130,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_id < 0x40) + p->cfg.two_side[c] = p->cfg.io[ + p->cfg.two_side[c].hw_id]; } else if (p->type == PIPE_SHADER_FRAGMENT) { int rid, aid; @@ -2726,6 +2736,15 @@ nv50_linkage_validate(struct nv50_context *nv50) } reg[0] += (m - 4) << 8; /* adjust BFC0 id */ + + /* if VP writes any back-face colour, use separate slots */ + if (vp->cfg.two_side[0].mask | vp->cfg.two_side[1].mask) { + 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 */ diff --git a/src/gallium/drivers/nv50/nv50_state.c b/src/gallium/drivers/nv50/nv50_state.c index 4283808..20d9f43 100644 --- a/src/gallium/drivers/nv50/nv50_state.c +++ b/src/gallium/drivers/nv50/nv50_state.c @@ -264,7 +264,6 @@ nv50_rasterizer_state_create(struct pipe_context *pipe, CALLOC_STRUCT(nv50_rasterizer_stateobj); /*XXX: ignored - * - light_twosize * - point_smooth * - multisample * - point_sprite / sprite_coord_mode @@ -276,6 +275,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); -- 1.6.3.3 --------------010208090904000401070505 Content-Type: text/plain; name="0012-nv50-add-support-for-point-size-per-vertex.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename*0="0012-nv50-add-support-for-point-size-per-vertex.patch"