summaryrefslogtreecommitdiff
path: root/src/mesa/pipe/softpipe/sp_prim_setup.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/pipe/softpipe/sp_prim_setup.c')
-rw-r--r--src/mesa/pipe/softpipe/sp_prim_setup.c13
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);