On Monday, October 26, 2015 02:10:29 PM Ilia Mirkin wrote: > On Mon, Oct 26, 2015 at 2:03 PM, Kenneth Graunke <kenn...@whitecape.org> > wrote: > > Integer varyings need to be flat qualified - all others were already. > > I think we just missed this. Presumably some hardware passes this via > > sideband and ignores attribute interpolation, so no one has noticed. > > > > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > > Cc: Chris Forbes <chr...@ijw.co.nz> > > --- > > src/glsl/builtin_variables.cpp | 39 ++++++++++++++++++++++++++------------- > > 1 file changed, 26 insertions(+), 13 deletions(-) > > > > diff --git a/src/glsl/builtin_variables.cpp b/src/glsl/builtin_variables.cpp > > index a6ad105..07aacd4 100644 > > --- a/src/glsl/builtin_variables.cpp > > +++ b/src/glsl/builtin_variables.cpp > > @@ -887,16 +887,22 @@ builtin_variable_generator::generate_uniforms() > > void > > builtin_variable_generator::generate_vs_special_vars() > > { > > + ir_variable *var; > > + > > if (state->is_version(130, 300)) > > add_system_value(SYSTEM_VALUE_VERTEX_ID, int_t, "gl_VertexID"); > > if (state->ARB_draw_instanced_enable) > > add_system_value(SYSTEM_VALUE_INSTANCE_ID, int_t, > > "gl_InstanceIDARB"); > > if (state->ARB_draw_instanced_enable || state->is_version(140, 300)) > > add_system_value(SYSTEM_VALUE_INSTANCE_ID, int_t, "gl_InstanceID"); > > - if (state->AMD_vertex_shader_layer_enable) > > - add_output(VARYING_SLOT_LAYER, int_t, "gl_Layer"); > > - if (state->AMD_vertex_shader_viewport_index_enable) > > - add_output(VARYING_SLOT_VIEWPORT, int_t, "gl_ViewportIndex"); > > + if (state->AMD_vertex_shader_layer_enable) { > > + var = add_output(VARYING_SLOT_LAYER, int_t, "gl_Layer"); > > + var->data.interpolation = INTERP_QUALIFIER_FLAT; > > Not that I *strongly* prefer this, but what we'd do in nouveau/codegen > code (and is IMHO more concise): > > add_output(VARYING_SLOT_LAYER, int_t, "gl_Layer") > ->data.interpolation = INTERP_QUALIFIER_FLAT; > > Alternatively, you could just solve this in add_output which should > automatically set the flat interpolation for int types... > > FTR I don't strongly prefer either of the above to your solution, just > wanted to point out some alternatives in case you like them more.
Yeah, I've never been a huge fan of using -> on pointers directly returned by function calls...but that's mostly just personal preference. I considered having add_input/add_output automatically detect ivec* types and automatically set things to FLAT. The nice thing about that is that would prevent future mistakes. However, I think ivec* typed VS inputs/FS outputs shouldn't be marked FLAT, so we might need a parameter (or special vs_input/fs_output functions)...which seemed potentially ugly. I suppose adding a non-optional interp qualifier parameter would also prevent future mistakes, at the cost of making the common case wordy. In the end I figured I'd do this for now and let somebody more inspired tidy it up...
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev