diff options
author | Brian <brian.paul@tungstengraphics.com> | 2008-01-23 14:23:49 -0700 |
---|---|---|
committer | Brian <brian.paul@tungstengraphics.com> | 2008-01-23 14:23:49 -0700 |
commit | 336e2cb9ec52e5cf8b2fac3142d5a67e3dcd55c4 (patch) | |
tree | e21808468828fac5902d9326a0e01cad35e22b27 /src/mesa/pipe/softpipe/sp_prim_setup.c | |
parent | 2d37e78e636e5e1e7d5d00230e50a00f7a71e868 (diff) |
gallium: rework compute_vertex_layout() to intelligently map vs outputs to fs inputs
Some follow-on simplification in prim setup is possible...
Diffstat (limited to 'src/mesa/pipe/softpipe/sp_prim_setup.c')
-rw-r--r-- | src/mesa/pipe/softpipe/sp_prim_setup.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/mesa/pipe/softpipe/sp_prim_setup.c b/src/mesa/pipe/softpipe/sp_prim_setup.c index 9b2f10bbbb..4b6b7a0fd1 100644 --- a/src/mesa/pipe/softpipe/sp_prim_setup.c +++ b/src/mesa/pipe/softpipe/sp_prim_setup.c @@ -515,13 +515,22 @@ setup_fragcoord_coeff(struct setup_stage *setup) */ static void setup_tri_coefficients( struct setup_stage *setup ) { - const enum interp_mode *interp = setup->softpipe->vertex_info.interp_mode; + const enum interp_mode *interp; #define USE_INPUT_MAP 01 #if USE_INPUT_MAP const struct pipe_shader_state *fs = &setup->softpipe->fs->shader; #endif uint fragSlot; + if (setup->softpipe->vertex_info.format[0] == FORMAT_HEADER) { + /* skip header, pos slots */ + interp = setup->softpipe->vertex_info.interp_mode + 2; + } + else { + /* skip pos slot */ + interp = setup->softpipe->vertex_info.interp_mode + 1; + } + /* z and w are done by linear interpolation: */ tri_linear_coeff(setup, &setup->posCoef, 0, 2); @@ -557,7 +566,7 @@ static void setup_tri_coefficients( struct setup_stage *setup ) else { #endif uint j; - switch (interp[vertSlot]) { + switch (interp[fragSlot]) { case INTERP_CONSTANT: for (j = 0; j < NUM_CHANNELS; j++) const_coeff(setup, &setup->coef[fragSlot], vertSlot, j); |