[Mesa-dev] [PATCH] glsl: do not set the 'smooth' qualifier by default on ES shaders
Timothy Arceri
tarceri at itsqueeze.com
Tue Sep 12 01:33:27 UTC 2017
On 12/09/17 00:57, Nicolai Hähnle wrote:
> On 11.09.2017 16:47, Ilia Mirkin wrote:
>> On Mon, Sep 11, 2017 at 10:44 AM, Nicolai Hähnle <nhaehnle at gmail.com>
>> wrote:
>>> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>>>
>>> It breaks integer inputs and outputs on vertex processing stages
>>> (e.g. geometry stages). Instead, rely on the driver to choose
>>> smooth interpolation by default.
>>> ---
>>>
>>> How about this instead? I haven't fully thought it through, but
>>> that's where the INTERP_MODE_SMOOTH is coming from.
>>>
>>> To be honest I'm not 100% sure about what INTERP_MODE_NONE can
>>> mean, but I think it's definitely better than removing the (very
>>> valid!) assertion in the packing code.
>>
>> I couldn't understand what that assertion was asserting, esp in the
>> presence of struct in/out variables.
>
> structs can't have per-member interpolation qualifiers. So a struct that
> contains integer values must have FLAT or NONE interpolation as a whole.
>
> That clashes pretty hard with that ES rule, though ("When no
> interpolation qualifier is present, smooth interpolation is used.").
From what I recall, NONE is just a placeholder so that the the driver
knows to use the value set by glShadeModel(). ES doesn't have this and
so we set this up front. I believe removing it will cause a bunch of
tests to fail validation as they expect the default to be set and cross
validated against stage interfaces.
I'm also a bit confused as to what the assert() is trying to catch.
>
> On second thought, that assertion is actually irrelevant for varying
> packing itself, but it's still pretty disturbing that it's broken by
> this particular shader.
>
> Cheers,
> Nicolai
>
>
>>
>>>
>>> ---
>>> src/compiler/glsl/ast_to_hir.cpp | 11 -----------
>>> 1 file changed, 11 deletions(-)
>>>
>>> diff --git a/src/compiler/glsl/ast_to_hir.cpp
>>> b/src/compiler/glsl/ast_to_hir.cpp
>>> index 98d2f94e129..cb42041642d 100644
>>> --- a/src/compiler/glsl/ast_to_hir.cpp
>>> +++ b/src/compiler/glsl/ast_to_hir.cpp
>>> @@ -3119,31 +3119,20 @@ interpret_interpolation_qualifier(const
>>> struct ast_type_qualifier *qual,
>>> struct _mesa_glsl_parse_state
>>> *state,
>>> YYLTYPE *loc)
>>> {
>>> glsl_interp_mode interpolation;
>>> if (qual->flags.q.flat)
>>> interpolation = INTERP_MODE_FLAT;
>>> else if (qual->flags.q.noperspective)
>>> interpolation = INTERP_MODE_NOPERSPECTIVE;
>>> else if (qual->flags.q.smooth)
>>> interpolation = INTERP_MODE_SMOOTH;
>>> - else if (state->es_shader &&
>>> - ((mode == ir_var_shader_in &&
>>> - state->stage != MESA_SHADER_VERTEX) ||
>>> - (mode == ir_var_shader_out &&
>>> - state->stage != MESA_SHADER_FRAGMENT)))
>>> - /* Section 4.3.9 (Interpolation) of the GLSL ES 3.00 spec says:
>>> - *
>>> - * "When no interpolation qualifier is present, smooth
>>> interpolation
>>> - * is used."
>>> - */
>>> - interpolation = INTERP_MODE_SMOOTH;
>>> else
>>> interpolation = INTERP_MODE_NONE;
>>>
>>> validate_interpolation_qualifier(state, loc,
>>> interpolation,
>>> qual, var_type, mode);
>>>
>>> return interpolation;
>>> }
>>>
>>> --
>>> 2.11.0
>>>
>>> _______________________________________________
>>> mesa-dev mailing list
>>> mesa-dev at lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>
More information about the mesa-dev
mailing list