From a6b55beb78501e3447c55a2d3a4e4b5d6950b86c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tapani=20P=C3=A4lli?= Date: Fri, 4 Sep 2015 11:22:15 +0300 Subject: [PATCH] mesa: add packed_varyings list to gl_shader MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This is required to store information about packed varyings, currently these variables get lost and cannot be retrieved later in sensible way for program interface queries. List will be utilized by next patch. Signed-off-by: Tapani Pälli Reviewed-by: Marta Lofstedt --- src/glsl/lower_packed_varyings.cpp | 16 ++++++++++++---- src/mesa/main/mtypes.h | 1 + 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/glsl/lower_packed_varyings.cpp b/src/glsl/lower_packed_varyings.cpp index cfe414ae088..5d66ca931cf 100644 --- a/src/glsl/lower_packed_varyings.cpp +++ b/src/glsl/lower_packed_varyings.cpp @@ -170,7 +170,7 @@ public: exec_list *out_instructions, exec_list *out_variables); - void run(exec_list *instructions); + void run(struct gl_shader *shader); private: void bitwise_assign_pack(ir_rvalue *lhs, ir_rvalue *rhs); @@ -252,9 +252,9 @@ lower_packed_varyings_visitor::lower_packed_varyings_visitor( } void -lower_packed_varyings_visitor::run(exec_list *instructions) +lower_packed_varyings_visitor::run(struct gl_shader *shader) { - foreach_in_list(ir_instruction, node, instructions) { + foreach_in_list(ir_instruction, node, shader->ir) { ir_variable *var = node->as_variable(); if (var == NULL) continue; @@ -272,6 +272,14 @@ lower_packed_varyings_visitor::run(exec_list *instructions) assert(var->data.interpolation == INTERP_QUALIFIER_FLAT || !var->type->contains_integer()); + /* Clone the variable for program resource list before + * it gets modified and lost. + */ + if (!shader->packed_varyings) + shader->packed_varyings = new (shader) exec_list; + + shader->packed_varyings->push_tail(var->clone(shader, NULL)); + /* Change the old varying into an ordinary global. */ assert(var->data.mode != ir_var_temporary); var->data.mode = ir_var_auto; @@ -711,7 +719,7 @@ lower_packed_varyings(void *mem_ctx, unsigned locations_used, gs_input_vertices, &new_instructions, &new_variables); - visitor.run(instructions); + visitor.run(shader); if (mode == ir_var_shader_out) { if (shader->Stage == MESA_SHADER_GEOMETRY) { /* For geometry shaders, outputs need to be lowered before each call diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index d308b986175..22b1d14636f 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2292,6 +2292,7 @@ struct gl_shader struct gl_uniform_block *UniformBlocks; struct exec_list *ir; + struct exec_list *packed_varyings; struct glsl_symbol_table *symbols; bool uses_builtin_functions; -- 2.30.2