gallium: more fog extraction fixes
fix the cases when fog coord/front face/point coord are used in the same shader.
This commit is contained in:
@@ -433,20 +433,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:
|
||||
|
Reference in New Issue
Block a user