On Mon, Dec 28, 2015 at 9:00 PM, Timothy Arceri <timothy.arc...@collabora.com> wrote: > --- > src/glsl/ir_optimization.h | 3 ++- > src/glsl/link_varyings.cpp | 6 ++++-- > src/glsl/lower_packed_varyings.cpp | 33 ++++++++++++++++++++++++--------- > 3 files changed, 30 insertions(+), 12 deletions(-) > > diff --git a/src/glsl/ir_optimization.h b/src/glsl/ir_optimization.h > index 19ebf86..eab76ff 100644 > --- a/src/glsl/ir_optimization.h > +++ b/src/glsl/ir_optimization.h > @@ -129,7 +129,8 @@ void lower_ubo_reference(struct gl_shader *shader); > void lower_packed_varyings(void *mem_ctx, > unsigned locations_used, ir_variable_mode mode, > unsigned gs_input_vertices, gl_shader *shader, > - bool disable_varying_packing); > + bool disable_varying_packing, > + bool has_enhanced_layouts); > bool lower_vector_insert(exec_list *instructions, bool > lower_nonconstant_index); > bool lower_vector_derefs(gl_shader *shader); > void lower_named_interface_blocks(void *mem_ctx, gl_shader *shader); > diff --git a/src/glsl/link_varyings.cpp b/src/glsl/link_varyings.cpp > index 7e6089d..7066481 100644 > --- a/src/glsl/link_varyings.cpp > +++ b/src/glsl/link_varyings.cpp > @@ -1876,13 +1876,15 @@ assign_varying_locations(struct gl_context *ctx, > > if (producer) { > lower_packed_varyings(mem_ctx, slots_used, ir_var_shader_out, > - 0, producer, disable_varying_packing); > + 0, producer, disable_varying_packing, > + ctx->Extensions.ARB_enhanced_layouts); > } > > if (consumer) { > lower_packed_varyings(mem_ctx, slots_used, ir_var_shader_in, > consumer_vertices, consumer, > - disable_varying_packing); > + disable_varying_packing, > + ctx->Extensions.ARB_enhanced_layouts); > } > > return true; > diff --git a/src/glsl/lower_packed_varyings.cpp > b/src/glsl/lower_packed_varyings.cpp > index e4e9a35..1696373 100644 > --- a/src/glsl/lower_packed_varyings.cpp > +++ b/src/glsl/lower_packed_varyings.cpp > @@ -169,7 +169,8 @@ public: > unsigned gs_input_vertices, > exec_list *out_instructions, > exec_list *out_variables, > - bool disable_varying_packing); > + bool disable_varying_packing, > + bool has_enhanced_layouts); > > void run(struct gl_shader *shader); > > @@ -236,6 +237,7 @@ private: > exec_list *out_variables; > > bool disable_varying_packing; > + bool has_enhanced_layouts; > }; > > } /* anonymous namespace */ > @@ -243,7 +245,8 @@ private: > lower_packed_varyings_visitor::lower_packed_varyings_visitor( > void *mem_ctx, unsigned locations_used, ir_variable_mode mode, > unsigned gs_input_vertices, exec_list *out_instructions, > - exec_list *out_variables, bool disable_varying_packing) > + exec_list *out_variables, bool disable_varying_packing, > + bool has_enhanced_layouts) > : mem_ctx(mem_ctx), > locations_used(locations_used), > packed_varyings((ir_variable **) > @@ -253,7 +256,8 @@ > lower_packed_varyings_visitor::lower_packed_varyings_visitor( > gs_input_vertices(gs_input_vertices), > out_instructions(out_instructions), > out_variables(out_variables), > - disable_varying_packing(disable_varying_packing) > + disable_varying_packing(disable_varying_packing), > + has_enhanced_layouts(has_enhanced_layouts) > { > } > > @@ -673,15 +677,24 @@ lower_packed_varyings_visitor::get_packed_varying_deref( > bool > lower_packed_varyings_visitor::needs_lowering(ir_variable *var) > { > - /* Things composed of vec4's and varyings with explicitly assigned > - * locations don't need lowering. Everything else does. > + /* Don't lower varying with explicit location unless ARB_enhanced_layouts > + * is enabled, also don't try to pack structs with explicit location as > + * they don't support the component layout qualifier anyway. > */ > - if (var->data.explicit_location) > + if (var->data.explicit_location && (!has_enhanced_layouts || > + var->type->without_array()->is_record())) { > return false; > + } > > - if (disable_varying_packing) > + /* Don't disable packing for explicit locations when ARB_enhanced_layouts > + * is supported. > + */ > + if (disable_varying_packing && !var->data.explicit_location) > return false; > > + /* Things composed of vec4's and doubles don't need lowering everything > + * else does. > + */ Doubles always need lowering. What below code says is: vec4's which are not doubles don't need lowering.
> const glsl_type *type = var->type->without_array(); > if (type->vector_elements == 4 && !type->is_double()) > return false; > @@ -735,7 +748,8 @@ > lower_packed_varyings_gs_splicer::visit_leave(ir_emit_vertex *ev) > void > lower_packed_varyings(void *mem_ctx, unsigned locations_used, > ir_variable_mode mode, unsigned gs_input_vertices, > - gl_shader *shader, bool disable_varying_packing) > + gl_shader *shader, bool disable_varying_packing, > + bool has_enhanced_layouts) > { > ir_function *main_func = shader->symbols->get_function("main"); > exec_list void_parameters; > @@ -751,7 +765,8 @@ lower_packed_varyings(void *mem_ctx, unsigned > locations_used, > gs_input_vertices, > &new_instructions, > &new_variables, > - disable_varying_packing); > + disable_varying_packing, > + has_enhanced_layouts); > visitor.run(shader); > if (mode == ir_var_shader_out) { > if (shader->Stage == MESA_SHADER_GEOMETRY) { > -- > 2.4.3 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev With above comment fixed: Reviewed-by: Anuj Phogat <anuj.pho...@gmail.com> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev