diff options
author | Tapani Pälli <[email protected]> | 2015-09-04 11:22:15 +0300 |
---|---|---|
committer | Tapani Pälli <[email protected]> | 2015-09-25 08:05:59 +0300 |
commit | a6b55beb78501e3447c55a2d3a4e4b5d6950b86c (patch) | |
tree | 60024a9d088d2f07b5b6dccc557d31faa9b3acce /src/glsl | |
parent | ebbe6cdad7ab082d2b191fe6c7c0eaa6921d55de (diff) |
mesa: add packed_varyings list to gl_shader
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 <[email protected]>
Reviewed-by: Marta Lofstedt <[email protected]>
Diffstat (limited to 'src/glsl')
-rw-r--r-- | src/glsl/lower_packed_varyings.cpp | 16 |
1 files changed, 12 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 |