diff options
Diffstat (limited to 'src/mesa/state_tracker/st_program.c')
-rw-r--r-- | src/mesa/state_tracker/st_program.c | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index 3365bc0b8bb..e4d3bb33c71 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -453,20 +453,34 @@ st_translate_fragment_program(struct st_context *st, stfp->input_semantic_index[slot] = 1; interpMode[slot] = TGSI_INTERPOLATE_LINEAR; break; - case FRAG_ATTRIB_FOGC: - if (stfp->Base.UsesPointCoord) { - stfp->input_semantic_name[slot] = TGSI_SEMANTIC_GENERIC; - stfp->input_semantic_index[slot] = num_generic++; - interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE; - } else if (stfp->Base.UsesFrontFacing) { - stfp->input_semantic_name[slot] = TGSI_SEMANTIC_FACE; - stfp->input_semantic_index[slot] = 0; - interpMode[slot] = TGSI_INTERPOLATE_CONSTANT; - } else { + case FRAG_ATTRIB_FOGC: { + int extra_decls = 0; + if (stfp->Base.UsesFogFragCoord) { stfp->input_semantic_name[slot] = TGSI_SEMANTIC_FOG; stfp->input_semantic_index[slot] = 0; interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE; + input_flags[slot] = stfp->Base.Base.InputFlags[attr]; + ++extra_decls; } + if (stfp->Base.UsesFrontFacing) { + GLint idx = slot + extra_decls; + stfp->input_semantic_name[idx] = TGSI_SEMANTIC_FACE; + stfp->input_semantic_index[idx] = 0; + interpMode[idx] = TGSI_INTERPOLATE_CONSTANT; + input_flags[idx] = stfp->Base.Base.InputFlags[attr]; + ++extra_decls; + } + if (stfp->Base.UsesPointCoord) { + GLint idx = slot + extra_decls; + stfp->input_semantic_name[idx] = TGSI_SEMANTIC_GENERIC; + stfp->input_semantic_index[idx] = num_generic++; + interpMode[idx] = TGSI_INTERPOLATE_PERSPECTIVE; + input_flags[idx] = stfp->Base.Base.InputFlags[attr]; + ++extra_decls; + } + fs_num_inputs += extra_decls - 1; + continue; + } break; case FRAG_ATTRIB_TEX0: case FRAG_ATTRIB_TEX1: |