[Mesa-dev] [PATCH 14/28] glsl: pass disable_varying_packing bool to the lowering pass

Anuj Phogat anuj.phogat at gmail.com
Thu Jan 7 16:50:35 PST 2016


On Mon, Dec 28, 2015 at 9:00 PM, Timothy Arceri
<timothy.arceri at 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>


More information about the mesa-dev mailing list