[Mesa-dev] [PATCH] st/mesa: fix default interpolation for colors. (v2)
Dave Airlie
airlied at gmail.com
Fri Jan 6 07:26:28 PST 2012
On Fri, Jan 6, 2012 at 3:13 PM, Brian Paul <brianp at vmware.com> wrote:
> On 01/06/2012 06:57 AM, Dave Airlie wrote:
>>
>> From: Dave Airlie<airlied at redhat.com>
>>
>> Brian mentioned that mesa-demos/reflect was broken on softpipe,
>> by my previous commit. The problem was were blindly translating none
>> to perspective, when color/pntc at least need it linear.
>>
>> v2: no regressions version.
>> use shademodel to pick what none means.
>>
>> Signed-off-by: Dave Airlie<airlied at redhat.com>
>> ---
>> src/mesa/state_tracker/st_program.c | 19 ++++++++++++-------
>> 1 files changed, 12 insertions(+), 7 deletions(-)
>>
>> diff --git a/src/mesa/state_tracker/st_program.c
>> b/src/mesa/state_tracker/st_program.c
>> index 146a9f3..1f6094e 100644
>> --- a/src/mesa/state_tracker/st_program.c
>> +++ b/src/mesa/state_tracker/st_program.c
>> @@ -436,10 +436,14 @@ st_get_vp_variant(struct st_context *st,
>>
>>
>> static unsigned
>> -st_translate_interp(enum glsl_interp_qualifier glsl_qual)
>> +st_translate_interp(enum glsl_interp_qualifier glsl_qual, bool is_color,
>> GLenum shade_model)
>> {
>> switch (glsl_qual) {
>> case INTERP_QUALIFIER_NONE:
>> + if (is_color)
>> + if (shade_model == GL_FLAT)
>> + return TGSI_INTERPOLATE_LINEAR;
>> + return TGSI_INTERPOLATE_PERSPECTIVE;
>
>
> This doesn't look right. If shade_mode == GL_FLAT, shouldn't we return
> TGSI_INTERPOLATE_CONSTANT?
Yeah the code is very wrong, I was confused by the fact that softpipe
perspective interp is broken and some piglit results.
>> case INTERP_QUALIFIER_SMOOTH:
>> return TGSI_INTERPOLATE_PERSPECTIVE;
>> case INTERP_QUALIFIER_FLAT:
>> @@ -542,12 +546,14 @@ st_translate_fragment_program(struct st_context *st,
>> case FRAG_ATTRIB_COL0:
>> input_semantic_name[slot] = TGSI_SEMANTIC_COLOR;
>> input_semantic_index[slot] = 0;
>> - interpMode[slot] =
>> st_translate_interp(stfp->Base.InterpQualifier[attr]);
>> + interpMode[slot] =
>> st_translate_interp(stfp->Base.InterpQualifier[attr],
>> + TRUE,
>> st->ctx->Light.ShadeModel);
>> break;
>> case FRAG_ATTRIB_COL1:
>> input_semantic_name[slot] = TGSI_SEMANTIC_COLOR;
>> input_semantic_index[slot] = 1;
>> - interpMode[slot] =
>> st_translate_interp(stfp->Base.InterpQualifier[attr]);
>> + interpMode[slot] =
>> st_translate_interp(stfp->Base.InterpQualifier[attr],
>> + TRUE,
>> st->ctx->Light.ShadeModel);
>> break;
>> case FRAG_ATTRIB_FOGC:
>> input_semantic_name[slot] = TGSI_SEMANTIC_FOG;
>> @@ -601,10 +607,9 @@ st_translate_fragment_program(struct st_context *st,
>> assert(attr>= FRAG_ATTRIB_TEX0);
>> input_semantic_index[slot] = (attr - FRAG_ATTRIB_TEX0);
>> input_semantic_name[slot] = TGSI_SEMANTIC_GENERIC;
>> - if (attr == FRAG_ATTRIB_PNTC)
>> - interpMode[slot] = TGSI_INTERPOLATE_LINEAR;
>> - else
>> - interpMode[slot] =
>> st_translate_interp(stfp->Base.InterpQualifier[attr]);
>> + interpMode[slot] =
>> st_translate_interp(stfp->Base.InterpQualifier[attr],
>> + (attr ==
>> FRAG_ATTRIB_PNTC),
>> +
>> st->ctx->Light.ShadeModel);
>
>
> The ShadeModel value should only apply to color attibutes so it shouldn't
> appear here in the texcoords/generic/point-coord case.
>
> I think the code should read:
>
> if (attr == FRAG_ATTRIB_PNTC)
> interpMode[slot] = TGSI_INTERPOLATE_LINEAR;
> else
> interpMode[slot] =
> st_translate_interp((stfp->Base.InterpQualifier[attr], false, 0);
Yeah I'll probably just commit v1 + that change.
then I'll try and figure why softpipe gives different answer for
perspective than everyone else.
Dave.
More information about the mesa-dev
mailing list