[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