On Mon, Dec 28, 2015 at 9:00 PM, Timothy Arceri <timothy.arc...@collabora.com> wrote: > This will allow us to choose to ignore the disable which will be > useful for allowing support of the component layout qualifier while > still disabling packing for varyings without an explicit component. > --- > src/glsl/ir_optimization.h | 3 ++- > src/glsl/link_varyings.cpp | 18 +++++++++--------- > src/glsl/lower_packed_varyings.cpp | 18 +++++++++++++----- > 3 files changed, 24 insertions(+), 15 deletions(-) > > diff --git a/src/glsl/ir_optimization.h b/src/glsl/ir_optimization.h > index dabd80a..19ebf86 100644 > --- a/src/glsl/ir_optimization.h > +++ b/src/glsl/ir_optimization.h > @@ -128,7 +128,8 @@ void lower_shared_reference(struct gl_shader *shader, > unsigned *shared_size); > 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); > + unsigned gs_input_vertices, gl_shader *shader, > + bool disable_varying_packing); > 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 ed9ab47..7e6089d 100644 > --- a/src/glsl/link_varyings.cpp > +++ b/src/glsl/link_varyings.cpp > @@ -1874,15 +1874,15 @@ assign_varying_locations(struct gl_context *ctx, > ir_var_shader_in); > } > > - if (!disable_varying_packing) { > - if (producer) { > - lower_packed_varyings(mem_ctx, slots_used, ir_var_shader_out, > - 0, producer); > - } > - if (consumer) { > - lower_packed_varyings(mem_ctx, slots_used, ir_var_shader_in, > - consumer_vertices, consumer); > - } > + if (producer) { > + lower_packed_varyings(mem_ctx, slots_used, ir_var_shader_out, > + 0, producer, disable_varying_packing); > + } > + > + if (consumer) { > + lower_packed_varyings(mem_ctx, slots_used, ir_var_shader_in, > + consumer_vertices, consumer, > + disable_varying_packing); > } > > return true; > diff --git a/src/glsl/lower_packed_varyings.cpp > b/src/glsl/lower_packed_varyings.cpp > index 8d1eb17..d91aa22 100644 > --- a/src/glsl/lower_packed_varyings.cpp > +++ b/src/glsl/lower_packed_varyings.cpp > @@ -168,7 +168,8 @@ public: > ir_variable_mode mode, > unsigned gs_input_vertices, > exec_list *out_instructions, > - exec_list *out_variables); > + exec_list *out_variables, > + bool disable_varying_packing); > > void run(struct gl_shader *shader); > > @@ -231,6 +232,8 @@ private: > * Exec list into which the visitor should insert any new variables. > */ > exec_list *out_variables; > + > + bool disable_varying_packing; > }; > > } /* anonymous namespace */ > @@ -238,7 +241,7 @@ 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) > + exec_list *out_variables, bool disable_varying_packing) > : mem_ctx(mem_ctx), > locations_used(locations_used), > packed_varyings((ir_variable **) > @@ -247,7 +250,8 @@ > lower_packed_varyings_visitor::lower_packed_varyings_visitor( > mode(mode), > gs_input_vertices(gs_input_vertices), > out_instructions(out_instructions), > - out_variables(out_variables) > + out_variables(out_variables), > + disable_varying_packing(disable_varying_packing) > { > } > > @@ -656,6 +660,9 @@ lower_packed_varyings_visitor::needs_lowering(ir_variable > *var) > if (var->data.explicit_location) > return false; > > + if (disable_varying_packing) > + return false; > + > const glsl_type *type = var->type->without_array(); > if (type->vector_elements == 4 && !type->is_double()) > return false; > @@ -709,7 +716,7 @@ > 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) > + gl_shader *shader, bool disable_varying_packing) > { > exec_list *instructions = shader->ir; > ir_function *main_func = shader->symbols->get_function("main"); > @@ -720,7 +727,8 @@ lower_packed_varyings(void *mem_ctx, unsigned > locations_used, > lower_packed_varyings_visitor visitor(mem_ctx, locations_used, mode, > gs_input_vertices, > &new_instructions, > - &new_variables); > + &new_variables, > + disable_varying_packing); > 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
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